{"version":3,"file":"main.8f74c60c045e25dc3ccb.js","mappings":"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","sources":["webpack://portainer/./app|sync|/^(.*\\.(js$))[^.]*$/im","webpack://portainer/./app/azure/services/resource-groups.service.ts","webpack://portainer/./app/azure/services/subscription.service.ts","webpack://portainer/./app/azure/services/utils.ts","webpack://portainer/./app/docker/containers/containers.service.ts","webpack://portainer/./app/i18n.ts","webpack://portainer/./app/portainer/components/BEFeatureIndicator/utils.ts","webpack://portainer/./app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.controller.ts","webpack://portainer/./app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.tsx","webpack://portainer/./app/portainer/components/BEFeatureIndicator/index.ts","webpack://portainer/./app/portainer/components/BoxSelector/BoxSelectorItem.tsx","webpack://portainer/./app/portainer/components/BoxSelector/BoxSelector.tsx","webpack://portainer/./app/portainer/components/BoxSelector/BoxSelector.module.css?03bf","webpack://portainer/./app/portainer/components/BoxSelector/BoxSelectorAngular.tsx","webpack://portainer/./app/portainer/components/BoxSelector/index.ts","webpack://portainer/./app/portainer/components/Button/Button.tsx","webpack://portainer/./app/portainer/components/Button/ButtonGroup.tsx","webpack://portainer/./app/portainer/components/Button/LoadingButton.tsx","webpack://portainer/./app/portainer/components/Button/AddButton.tsx","webpack://portainer/./app/portainer/components/Button/AddButton.module.css?d8da","webpack://portainer/./app/portainer/components/Link.tsx","webpack://portainer/./app/portainer/components/PageHeader/Breadcrumbs/Breadcrumbs.tsx","webpack://portainer/./app/portainer/components/PageHeader/LicenseExpirationPanel.tsx","webpack://portainer/./app/portainer/license-management/use-license.service.ts","webpack://portainer/./app/portainer/components/PageHeader/LicenseExpirationPanel.module.css?2cf1","webpack://portainer/./app/portainer/components/PageHeader/HeaderContainer.tsx","webpack://portainer/./app/portainer/components/PageHeader/HeaderContent.module.css?dd9c","webpack://portainer/./app/portainer/components/PageHeader/HeaderContent.tsx","webpack://portainer/./app/portainer/components/PageHeader/HeaderTitle.tsx","webpack://portainer/./app/portainer/components/PageHeader/PageHeader.tsx","webpack://portainer/./app/portainer/components/PageHeader/index.ts","webpack://portainer/./app/portainer/components/Tip/TextTip/TextTip.tsx","webpack://portainer/./app/portainer/components/Tip/TextTip/TextTip.module.css?ba23","webpack://portainer/./app/portainer/components/Tip/Tooltip/Tooltip.tsx","webpack://portainer/./app/portainer/components/Tip/Tooltip/Tooltip.module.css?ef08","webpack://portainer/./app/portainer/components/Tip/Tooltip/TooltipAngular.ts","webpack://portainer/./app/portainer/components/UsersSelector/UsersSelector.tsx","webpack://portainer/./app/portainer/components/datatables/components/ColumnVisibilityMenu.tsx","webpack://portainer/./app/portainer/components/datatables/components/Filter.tsx","webpack://portainer/./app/portainer/components/datatables/components/SearchBar.tsx","webpack://portainer/./app/portainer/components/datatables/components/SelectedRowsCount.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableContainer.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableFooter.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableSettingsMenuAutoRefresh.module.css?cad9","webpack://portainer/./app/portainer/components/datatables/components/TableSettingsMenuAutoRefresh.tsx","webpack://portainer/./app/portainer/components/datatables/components/filter-types.ts","webpack://portainer/./app/portainer/components/datatables/components/Table.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableActions.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableTitleActions.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableHeaderCell.module.css?ef4d","webpack://portainer/./app/portainer/components/datatables/components/TableHeaderCell.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableSettingsMenu.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableTitle.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableHeaderRow.tsx","webpack://portainer/./app/portainer/components/datatables/components/TableRow.tsx","webpack://portainer/./app/portainer/components/datatables/components/useRepeater.ts","webpack://portainer/./app/portainer/components/datatables/components/useRowSelect.ts","webpack://portainer/./app/portainer/components/datatables/components/useTableSettings.tsx","webpack://portainer/./app/portainer/components/form-components/Checkbox.tsx","webpack://portainer/./app/portainer/components/form-components/FileUpload/FileUploadField.tsx","webpack://portainer/./app/portainer/components/form-components/FileUpload/FileUploadField.module.css?780b","webpack://portainer/./app/portainer/components/form-components/FormControl/FormControl.tsx","webpack://portainer/./app/portainer/components/form-components/FormControl/FormControl.module.css?e3a4","webpack://portainer/./app/portainer/components/form-components/FormError.tsx","webpack://portainer/./app/portainer/components/form-components/FormSectionTitle/FormSectionTitle.tsx","webpack://portainer/./app/portainer/components/form-components/Input/Select.tsx","webpack://portainer/./app/portainer/components/form-components/Input/Input.tsx","webpack://portainer/./app/portainer/components/form-components/SwitchField/Switch.tsx","webpack://portainer/./app/portainer/components/form-components/SwitchField/Switch.module.css?0936","webpack://portainer/./app/portainer/components/form-components/SwitchField/SwitchField.tsx","webpack://portainer/./app/portainer/components/form-components/SwitchField/SwitchField.module.css?8d87","webpack://portainer/./app/portainer/components/pagination-controls/ItemsPerPageSelector.tsx","webpack://portainer/./app/portainer/components/pagination-controls/calculatePageNumber.ts","webpack://portainer/./app/portainer/components/pagination-controls/PageButton.tsx","webpack://portainer/./app/portainer/components/pagination-controls/PageSelector.tsx","webpack://portainer/./app/portainer/components/pagination-controls/generatePagesArray.ts","webpack://portainer/./app/portainer/components/pagination-controls/PaginationControls.tsx","webpack://portainer/./app/portainer/components/widget/Loading.tsx","webpack://portainer/./app/portainer/components/widget/Widget.tsx","webpack://portainer/./app/portainer/components/widget/WidgetBody.tsx","webpack://portainer/./app/portainer/components/widget/WidgetTitle.tsx","webpack://portainer/./app/portainer/components/widget/index.ts","webpack://portainer/./app/portainer/components/widget/WidgetCustomHeader.tsx","webpack://portainer/./app/portainer/components/widget/WidgetFooter.tsx","webpack://portainer/./app/portainer/components/widget/WidgetTaskbar.tsx","webpack://portainer/./app/portainer/environments/environment.service/utils.ts","webpack://portainer/./app/portainer/environments/environment.service/index.ts","webpack://portainer/./app/portainer/environments/types.ts","webpack://portainer/./app/portainer/error.ts","webpack://portainer/./app/portainer/feature-flags/enums.ts","webpack://portainer/./app/portainer/feature-flags/feature-flags.service.ts","webpack://portainer/./app/portainer/hooks/useDebounce.ts","webpack://portainer/./app/portainer/hooks/useLocalStorage.ts","webpack://portainer/./app/portainer/hooks/useUser.tsx","webpack://portainer/./app/portainer/hostmanagement/fdo/fdo.service.ts","webpack://portainer/./app/portainer/hostmanagement/open-amt/open-amt.service.ts","webpack://portainer/./app/portainer/license-management/license.service.ts","webpack://portainer/./app/portainer/models/resourceControl/resourceControl.ts","webpack://portainer/./app/portainer/models/resourceControl/resourceControlOwnership.ts","webpack://portainer/./app/portainer/services/axios.ts","webpack://portainer/./app/portainer/services/http-request.helper.ts","webpack://portainer/./app/portainer/services/modal.service/confirm.ts","webpack://portainer/./app/portainer/services/modal.service/prompt.ts","webpack://portainer/./app/portainer/services/modal.service/utils.ts","webpack://portainer/./app/portainer/services/notifications.ts","webpack://portainer/./app/react-tools/RootProvider.tsx","webpack://portainer/./app/react-tools/react2angular.tsx","webpack://portainer/./app/__mocks__/fileMock.js","webpack://portainer/./app/__mocks__/styleMock.js","webpack://portainer/./app/agent/components/file-uploader/fileUploaderController.js","webpack://portainer/./app/agent/components/file-uploader/index.js","webpack://portainer/./app/agent/components/files-datatable/index.js","webpack://portainer/./app/agent/components/host-browser/hostBrowserController.js","webpack://portainer/./app/agent/components/host-browser/index.js","webpack://portainer/./app/agent/components/node-selector/index.js","webpack://portainer/./app/agent/components/node-selector/nodeSelectorController.js","webpack://portainer/./app/agent/components/volume-browser/index.js","webpack://portainer/./app/agent/components/volume-browser/volumeBrowserController.js","webpack://portainer/./app/agent/index.js","webpack://portainer/./app/agent/models/agent.js","webpack://portainer/./app/agent/rest/agent.js","webpack://portainer/./app/agent/rest/browse.js","webpack://portainer/./app/agent/rest/dockerhub.js","webpack://portainer/./app/agent/rest/host.js","webpack://portainer/./app/agent/rest/ping.js","webpack://portainer/./app/agent/rest/response/browse.js","webpack://portainer/./app/agent/rest/v1/agent.js","webpack://portainer/./app/agent/rest/v1/browse.js","webpack://portainer/./app/agent/services/agentService.js","webpack://portainer/./app/agent/services/hostBrowserService.js","webpack://portainer/./app/agent/services/pingService.js","webpack://portainer/./app/agent/services/volumeBrowserService.js","webpack://portainer/./app/angulartics.matomo/analytics-services.ts","webpack://portainer/./app/angulartics.matomo/index.js","webpack://portainer/./app/app.js","webpack://portainer/./app/portainer/components/accessControlForm/UsersField.tsx","webpack://portainer/./app/portainer/components/TeamsSelector/TeamsSelector.tsx","webpack://portainer/./app/portainer/components/accessControlForm/TeamsField.tsx","webpack://portainer/./app/portainer/teams/teams.service.ts","webpack://portainer/./app/portainer/components/accessControlForm/AccessControlForm.tsx","webpack://portainer/./app/portainer/components/accessControlForm/useLoadState.ts","webpack://portainer/./app/portainer/components/accessControlForm/AccessControlForm.validation.ts","webpack://portainer/./app/portainer/components/form-components/ButtonSelector/ButtonSelector.tsx","webpack://portainer/./app/portainer/components/form-components/ButtonSelector/ButtonSelector.module.css?667b","webpack://portainer/./app/portainer/components/form-components/InputGroup/InputGroup.tsx","webpack://portainer/./app/portainer/components/form-components/InputGroup/index.ts","webpack://portainer/./app/portainer/components/form-components/InputGroup/InputGroupAddon.tsx","webpack://portainer/./app/portainer/components/form-components/InputGroup/InputGroupButtonWrapper.tsx","webpack://portainer/./app/portainer/components/form-components/InputList/InputList.module.css?d68f","webpack://portainer/./app/portainer/components/form-components/InputList/InputList.tsx","webpack://portainer/./app/portainer/components/form-components/InputList/utils.ts","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/PortsMappingField.module.css?d995","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/PortsMappingField.tsx","webpack://portainer/./app/azure/models/provider.ts","webpack://portainer/./app/azure/services/provider.service.ts","webpack://portainer/./app/portainer/components/accessControlForm/model.ts","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/utils.ts","webpack://portainer/./app/azure/services/container-groups.service.ts","webpack://portainer/./app/portainer/resource-control/helper.ts","webpack://portainer/./app/portainer/resource-control/resource-control.service.ts","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/CreateContainerInstanceForm.tsx","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/useLoadFormState.ts","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/useCreateInstanceMutation.tsx","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/CreateContainerInstanceForm.validation.ts","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceForm/PortsMappingField.validation.ts","webpack://portainer/./app/azure/ContainerInstances/CreateContainerInstanceView.tsx","webpack://portainer/./app/azure/ContainerInstances/index.ts","webpack://portainer/./app/azure/_module.js","webpack://portainer/./app/azure/components/azure-endpoint-config/azure-endpoint-config.js","webpack://portainer/./app/azure/components/azure-sidebar/index.js","webpack://portainer/./app/azure/components/datatables/containergroups-datatable/containerGroupsDatatable.js","webpack://portainer/./app/azure/models/container_group.js","webpack://portainer/./app/azure/models/location.js","webpack://portainer/./app/azure/models/resource_group.js","webpack://portainer/./app/azure/models/subscription.js","webpack://portainer/./app/azure/rest/azure.js","webpack://portainer/./app/azure/rest/container_group.js","webpack://portainer/./app/azure/rest/location.js","webpack://portainer/./app/azure/rest/provider.js","webpack://portainer/./app/azure/rest/resource_group.js","webpack://portainer/./app/azure/rest/subscription.js","webpack://portainer/./app/azure/services/azureService.js","webpack://portainer/./app/azure/services/containerGroupService.js","webpack://portainer/./app/azure/services/locationService.js","webpack://portainer/./app/azure/services/resourceGroupService.js","webpack://portainer/./app/azure/services/subscriptionService.js","webpack://portainer/./app/azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js","webpack://portainer/./app/azure/views/containerinstances/container-instance-details/index.js","webpack://portainer/./app/azure/views/containerinstances/containerInstancesController.js","webpack://portainer/./app/azure/views/dashboard/dashboardController.js","webpack://portainer/./app/config.js","webpack://portainer/./app/constants.js","webpack://portainer/./app/portainer/environments/useEnvironment.tsx","webpack://portainer/./app/portainer/components/datatables/components/QuickActionsSettings.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/ContainersDatatableActions.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/ContainersDatatableSettings.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/created.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/host.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/image.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/ip.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/name.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/ownership.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/ports.tsx","webpack://portainer/./app/docker/components/container-quick-actions/ContainerQuickActions.module.css?1fa6","webpack://portainer/./app/docker/components/container-quick-actions/ContainerQuickActions.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/quick-actions.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/stack.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/state.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/ContainersDatatable.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/columns/index.tsx","webpack://portainer/./app/docker/containers/components/ContainersDatatable/ContainersDatatableContainer.tsx","webpack://portainer/./app/docker/containers/index.ts","webpack://portainer/./app/docker/components/index.ts","webpack://portainer/./app/docker/__module.js","webpack://portainer/./app/docker/components/container-capabilities/container-capabilities.js","webpack://portainer/./app/docker/components/container-restart-policy/container-restart-policy-controller.js","webpack://portainer/./app/docker/components/container-restart-policy/container-restart-policy.js","webpack://portainer/./app/docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js","webpack://portainer/./app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfoController.js","webpack://portainer/./app/docker/components/datatables/configs-datatable/configsDatatable.js","webpack://portainer/./app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js","webpack://portainer/./app/docker/components/datatables/container-networks-datatable/containerNetworksDatatableController.js","webpack://portainer/./app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js","webpack://portainer/./app/docker/components/datatables/events-datatable/eventsDatatable.js","webpack://portainer/./app/docker/components/datatables/images-datatable/imagesDatatable.js","webpack://portainer/./app/docker/components/datatables/images-datatable/imagesDatatableController.js","webpack://portainer/./app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js","webpack://portainer/./app/docker/components/datatables/networks-datatable/network-row-content/networkRowContent.js","webpack://portainer/./app/docker/components/datatables/networks-datatable/networksDatatable.js","webpack://portainer/./app/docker/components/datatables/networks-datatable/networksDatatableController.js","webpack://portainer/./app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js","webpack://portainer/./app/docker/components/datatables/nodes-datatable/nodesDatatable.js","webpack://portainer/./app/docker/components/datatables/secrets-datatable/secretsDatatable.js","webpack://portainer/./app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js","webpack://portainer/./app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js","webpack://portainer/./app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.js","webpack://portainer/./app/docker/components/datatables/services-datatable/actions/servicesDatatableActionsController.js","webpack://portainer/./app/docker/components/datatables/services-datatable/servicesDatatable.js","webpack://portainer/./app/docker/components/datatables/services-datatable/servicesDatatableController.js","webpack://portainer/./app/docker/components/datatables/tasks-datatable/tasksDatatable.js","webpack://portainer/./app/docker/components/datatables/tasks-datatable/tasksDatatableController.js","webpack://portainer/./app/docker/components/datatables/volumes-datatable/volumesDatatable.js","webpack://portainer/./app/docker/components/datatables/volumes-datatable/volumesDatatableController.js","webpack://portainer/./app/docker/components/docker-sidebar/docker-sidebar.js","webpack://portainer/./app/docker/components/host-overview/host-overview.js","webpack://portainer/./app/docker/components/host-view-panels/devices-panel/devices-panel.js","webpack://portainer/./app/docker/components/host-view-panels/disks-panel/disks-panel.js","webpack://portainer/./app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js","webpack://portainer/./app/docker/components/host-view-panels/host-details-panel/host-details-panel.js","webpack://portainer/./app/docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js","webpack://portainer/./app/docker/components/host-view-panels/node-availability-select/node-availability-select.js","webpack://portainer/./app/docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js","webpack://portainer/./app/docker/components/host-view-panels/node-labels-table/node-labels-table.js","webpack://portainer/./app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js","webpack://portainer/./app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js","webpack://portainer/./app/docker/components/imageRegistry/por-image-registry-rate-limits.controller.js","webpack://portainer/./app/docker/components/imageRegistry/por-image-registry-rate-limits.js","webpack://portainer/./app/docker/components/imageRegistry/por-image-registry.controller.js","webpack://portainer/./app/docker/components/imageRegistry/por-image-registry.js","webpack://portainer/./app/docker/components/log-viewer/log-viewer.js","webpack://portainer/./app/docker/components/log-viewer/logViewerController.js","webpack://portainer/./app/docker/components/network-macvlan-form/network-macvlan-form.js","webpack://portainer/./app/docker/components/network-macvlan-form/networkMacvlanFormController.js","webpack://portainer/./app/docker/components/network-macvlan-form/networkMacvlanFormModel.js","webpack://portainer/./app/docker/components/volumesCIFSForm/volumesCifsForm.js","webpack://portainer/./app/docker/components/volumesCIFSForm/volumesCifsFormModel.js","webpack://portainer/./app/docker/components/volumesNFSForm/volumes-nfs-form.js","webpack://portainer/./app/docker/components/volumesNFSForm/volumesNFSFormModel.js","webpack://portainer/./app/docker/filters/filters.js","webpack://portainer/./app/docker/helpers/configHelper.js","webpack://portainer/./app/docker/helpers/constraintsHelper.js","webpack://portainer/./app/docker/helpers/containerHelper.js","webpack://portainer/./app/docker/helpers/imageHelper.js","webpack://portainer/./app/docker/helpers/infoHelper.js","webpack://portainer/./app/docker/helpers/labelHelper.js","webpack://portainer/./app/docker/helpers/logHelper.js","webpack://portainer/./app/docker/helpers/networkHelper.js","webpack://portainer/./app/docker/helpers/nodeHelper.js","webpack://portainer/./app/docker/helpers/secretHelper.js","webpack://portainer/./app/docker/helpers/serviceHelper.js","webpack://portainer/./app/docker/helpers/taskHelper.js","webpack://portainer/./app/docker/helpers/volumeHelper.js","webpack://portainer/./app/docker/interceptors/containersInterceptor.js","webpack://portainer/./app/docker/interceptors/imagesInterceptor.js","webpack://portainer/./app/docker/interceptors/infoInterceptor.js","webpack://portainer/./app/docker/interceptors/networksInterceptor.js","webpack://portainer/./app/docker/interceptors/versionInterceptor.js","webpack://portainer/./app/docker/interceptors/volumesInterceptor.js","webpack://portainer/./app/docker/models/config.js","webpack://portainer/./app/docker/models/container.js","webpack://portainer/./app/docker/models/containerCapabilities.js","webpack://portainer/./app/docker/models/event.js","webpack://portainer/./app/docker/models/image.js","webpack://portainer/./app/docker/models/imageDetails.js","webpack://portainer/./app/docker/models/imageLayer.js","webpack://portainer/./app/docker/models/network.js","webpack://portainer/./app/docker/models/node.js","webpack://portainer/./app/docker/models/plugin.js","webpack://portainer/./app/docker/models/porImageRegistry.js","webpack://portainer/./app/docker/models/secret.js","webpack://portainer/./app/docker/models/service.js","webpack://portainer/./app/docker/models/swarm.js","webpack://portainer/./app/docker/models/task.js","webpack://portainer/./app/docker/models/volume.js","webpack://portainer/./app/docker/rest/build.js","webpack://portainer/./app/docker/rest/commit.js","webpack://portainer/./app/docker/rest/config.js","webpack://portainer/./app/docker/rest/container.js","webpack://portainer/./app/docker/rest/exec.js","webpack://portainer/./app/docker/rest/image.js","webpack://portainer/./app/docker/rest/network.js","webpack://portainer/./app/docker/rest/node.js","webpack://portainer/./app/docker/rest/plugin.js","webpack://portainer/./app/docker/rest/response/handlers.js","webpack://portainer/./app/docker/rest/response/image.js","webpack://portainer/./app/docker/rest/secret.js","webpack://portainer/./app/docker/rest/service.js","webpack://portainer/./app/docker/rest/swarm.js","webpack://portainer/./app/docker/rest/system.js","webpack://portainer/./app/docker/rest/systemEndpoint.js","webpack://portainer/./app/docker/rest/task.js","webpack://portainer/./app/docker/rest/volume.js","webpack://portainer/./app/docker/services/buildService.js","webpack://portainer/./app/docker/services/configService.js","webpack://portainer/./app/docker/services/containerService.js","webpack://portainer/./app/docker/services/execService.js","webpack://portainer/./app/docker/services/imageService.js","webpack://portainer/./app/docker/services/networkService.js","webpack://portainer/./app/docker/services/nodeService.js","webpack://portainer/./app/docker/services/pluginService.js","webpack://portainer/./app/docker/services/secretService.js","webpack://portainer/./app/docker/services/serviceService.js","webpack://portainer/./app/docker/services/swarmService.js","webpack://portainer/./app/docker/services/systemService.js","webpack://portainer/./app/docker/services/taskService.js","webpack://portainer/./app/docker/services/volumeService.js","webpack://portainer/./app/docker/views/configs/configsController.js","webpack://portainer/./app/docker/views/configs/create/createConfigController.js","webpack://portainer/./app/docker/views/configs/edit/configController.js","webpack://portainer/./app/docker/views/containers/console/containerConsoleController.js","webpack://portainer/./app/docker/views/containers/containersController.js","webpack://portainer/./app/docker/views/containers/create/createContainerController.js","webpack://portainer/./app/docker/views/containers/edit/containerController.js","webpack://portainer/./app/docker/views/containers/inspect/containerInspectController.js","webpack://portainer/./app/docker/views/containers/logs/containerLogsController.js","webpack://portainer/./app/docker/views/containers/stats/containerStatsController.js","webpack://portainer/./app/docker/views/dashboard/dashboardController.js","webpack://portainer/./app/docker/views/docker-features-configuration/docker-features-configuration.controller.js","webpack://portainer/./app/docker/views/docker-features-configuration/index.js","webpack://portainer/./app/docker/views/events/eventsController.js","webpack://portainer/./app/docker/views/host/host-browser-view/host-browser-view-controller.js","webpack://portainer/./app/docker/views/host/host-browser-view/host-browser-view.js","webpack://portainer/./app/docker/views/host/host-view-controller.js","webpack://portainer/./app/docker/views/host/host-view.js","webpack://portainer/./app/docker/views/images/build/buildImageController.js","webpack://portainer/./app/docker/views/images/edit/imageController.js","webpack://portainer/./app/docker/views/images/imagesController.js","webpack://portainer/./app/docker/views/images/import/importImageController.js","webpack://portainer/./app/docker/views/networks/create/createNetworkController.js","webpack://portainer/./app/docker/views/networks/edit/networkController.js","webpack://portainer/./app/docker/views/networks/networksController.js","webpack://portainer/./app/docker/views/nodes/node-browser/node-browser-controller.js","webpack://portainer/./app/docker/views/nodes/node-browser/node-browser.js","webpack://portainer/./app/docker/views/nodes/node-details/node-details-view-controller.js","webpack://portainer/./app/docker/views/nodes/node-details/node-details-view.js","webpack://portainer/./app/docker/views/registries/access/registryAccess.js","webpack://portainer/./app/docker/views/registries/access/registryAccessController.js","webpack://portainer/./app/docker/views/secrets/create/createSecretController.js","webpack://portainer/./app/docker/views/secrets/edit/secretController.js","webpack://portainer/./app/docker/views/secrets/secretsController.js","webpack://portainer/./app/docker/views/services/create/createServiceController.js","webpack://portainer/./app/docker/views/services/edit/serviceController.js","webpack://portainer/./app/docker/views/services/logs/serviceLogsController.js","webpack://portainer/./app/docker/views/services/servicesController.js","webpack://portainer/./app/docker/views/swarm/swarmController.js","webpack://portainer/./app/docker/views/swarm/visualizer/swarmVisualizerController.js","webpack://portainer/./app/docker/views/tasks/edit/taskController.js","webpack://portainer/./app/docker/views/tasks/logs/taskLogsController.js","webpack://portainer/./app/docker/views/volumes/browse/browseVolumeController.js","webpack://portainer/./app/docker/views/volumes/create/createVolumeController.js","webpack://portainer/./app/docker/views/volumes/edit/volumeController.js","webpack://portainer/./app/docker/views/volumes/volumesController.js","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatableSettings.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatableActions.tsx","webpack://portainer/./app/portainer/components/datatables/components/InnerDatatable.tsx","webpack://portainer/./app/portainer/components/datatables/components/InnerDatatable.module.css?d195","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/columns/RowContext.tsx","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/columns/hostname.tsx","webpack://portainer/./app/edge/devices/types.ts","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/columns/status.tsx","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/columns/power-state.tsx","webpack://portainer/./app/portainer/components/datatables/components/ActionsMenu.tsx","webpack://portainer/./app/portainer/components/datatables/components/ActionsMenu.module.css?2781","webpack://portainer/./app/portainer/components/datatables/components/ActionsMenuTitle.tsx","webpack://portainer/./app/portainer/components/datatables/components/ActionsMenuTitle.module.css?28f6","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/columns/actions.tsx","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/AMTDevicesDatatable.tsx","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/columns/index.tsx","webpack://portainer/./app/edge/devices/components/AMTDevicesDatatable/useAMTDevices.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/columns/RowContext.tsx","webpack://portainer/./app/portainer/components/datatables/components/ExpandingCell.tsx","webpack://portainer/./app/portainer/components/datatables/components/ExpandingCell.module.css?dea4","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/columns/name.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/columns/heartbeat.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/columns/group.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/columns/actions.tsx","webpack://portainer/./app/portainer/environments/utils.ts","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatable.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/columns/index.tsx","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatable.module.css?f7b7","webpack://portainer/./app/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatableContainer.tsx","webpack://portainer/./app/edge/devices/index.ts","webpack://portainer/./app/edge/__module.js","webpack://portainer/./app/edge/components/associated-endpoints-datatable/associatedEndpointsDatatableController.js","webpack://portainer/./app/edge/components/associated-endpoints-datatable/index.js","webpack://portainer/./app/edge/components/edge-groups-selector/index.js","webpack://portainer/./app/edge/components/edge-job-form/edgeJobFormController.js","webpack://portainer/./app/edge/components/edge-job-form/index.js","webpack://portainer/./app/edge/components/edge-job-results-datatable/edgeJobResultsDatatableController.js","webpack://portainer/./app/edge/components/edge-job-results-datatable/index.js","webpack://portainer/./app/edge/components/edge-jobs-datatable/index.js","webpack://portainer/./app/edge/components/edge-stack-deployment-type-selector/edge-stack-deployment-type-selector.controller.js","webpack://portainer/./app/edge/components/edge-stack-deployment-type-selector/index.js","webpack://portainer/./app/edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatableController.js","webpack://portainer/./app/edge/components/edge-stack-endpoints-datatable/index.js","webpack://portainer/./app/edge/components/edge-stack-status/edgeStackStatusController.js","webpack://portainer/./app/edge/components/edge-stack-status/index.js","webpack://portainer/./app/edge/components/edge-stacks-datatable/index.js","webpack://portainer/./app/edge/components/edit-edge-stack-form/editEdgeStackFormController.js","webpack://portainer/./app/edge/components/edit-edge-stack-form/index.js","webpack://portainer/./app/edge/components/group-form/groupFormController.js","webpack://portainer/./app/edge/components/group-form/index.js","webpack://portainer/./app/edge/components/groups-datatable/groupsDatatableController.js","webpack://portainer/./app/edge/components/groups-datatable/index.js","webpack://portainer/./app/edge/rest/edge-groups.js","webpack://portainer/./app/edge/rest/edge-job-results.js","webpack://portainer/./app/edge/rest/edge-jobs.js","webpack://portainer/./app/edge/rest/edge-stacks.js","webpack://portainer/./app/edge/rest/edge-templates.js","webpack://portainer/./app/edge/services/edge-group.js","webpack://portainer/./app/edge/services/edge-job.js","webpack://portainer/./app/edge/services/edge-stack.js","webpack://portainer/./app/edge/services/edge-template.js","webpack://portainer/./app/edge/views/edge-devices/edgeDevicesView/edgeDevicesViewController.js","webpack://portainer/./app/edge/views/edge-devices/edgeDevicesView/index.js","webpack://portainer/./app/edge/views/edge-groups/createEdgeGroupView/createEdgeGroupViewController.js","webpack://portainer/./app/edge/views/edge-groups/createEdgeGroupView/index.js","webpack://portainer/./app/edge/views/edge-groups/edgeGroupsView/edgeGroupsViewController.js","webpack://portainer/./app/edge/views/edge-groups/edgeGroupsView/index.js","webpack://portainer/./app/edge/views/edge-groups/editEdgeGroupView/editEdgeGroupViewController.js","webpack://portainer/./app/edge/views/edge-groups/editEdgeGroupView/index.js","webpack://portainer/./app/edge/views/edge-jobs/createEdgeJobView/createEdgeJobViewController.js","webpack://portainer/./app/edge/views/edge-jobs/createEdgeJobView/index.js","webpack://portainer/./app/edge/views/edge-jobs/edgeJob/edgeJobController.js","webpack://portainer/./app/edge/views/edge-jobs/edgeJob/index.js","webpack://portainer/./app/edge/views/edge-jobs/edgeJobsView/edgeJobsViewController.js","webpack://portainer/./app/edge/views/edge-jobs/edgeJobsView/index.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/create-edge-stack-view.controller.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/create-edge-stack-view.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/docker-compose-form/docker-compose-form.controller.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/docker-compose-form/index.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/index.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/kube-deploy-description/index.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/kube-manifest-form/index.js","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/kube-manifest-form/kube-manifest-form.controller.js","webpack://portainer/./app/edge/views/edge-stacks/edgeStacksView/edgeStacksViewController.js","webpack://portainer/./app/edge/views/edge-stacks/edgeStacksView/index.js","webpack://portainer/./app/edge/views/edge-stacks/editEdgeStackView/editEdgeStackViewController.js","webpack://portainer/./app/edge/views/edge-stacks/editEdgeStackView/index.js","webpack://portainer/./app/edge/views/edge-stacks/index.js","webpack://portainer/./app/index.js","webpack://portainer/./app/kubernetes/__module.js","webpack://portainer/./app/kubernetes/components/datatables/application/containers-datatable/containersDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable-details/applications-datatable-details.controller.js","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable-details/applications-datatable-details.js","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable-url/applications-datatable-url.js","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable/applicationsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable/applicationsDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/configurations-datatable/configurationsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/configurations-datatable/configurationsDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/events-datatable/eventsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/nodes-datatable/nodesDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatableController.js","webpack://portainer/./app/kubernetes/components/datatables/volumes-datatable/volumesDatatable.js","webpack://portainer/./app/kubernetes/components/datatables/volumes-datatable/volumesDatatableController.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-add-repository/helm-add-repository.controller.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-add-repository/helm-add-repository.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list-item/helm-templates-list-item.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list.controller.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates.controller.js","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates.js","webpack://portainer/./app/kubernetes/components/kube-services/kube-services-item/kube-services-item.controller.js","webpack://portainer/./app/kubernetes/components/kube-services/kube-services-item/kube-services-item.js","webpack://portainer/./app/kubernetes/components/kube-services/kube-services.controller.js","webpack://portainer/./app/kubernetes/components/kube-services/kube-services.js","webpack://portainer/./app/kubernetes/components/kubectl-shell/kubectl-shell.controller.js","webpack://portainer/./app/kubernetes/components/kubectl-shell/kubectl-shell.js","webpack://portainer/./app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.js","webpack://portainer/./app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationDataController.js","webpack://portainer/./app/kubernetes/components/kubernetes-sidebar/index.js","webpack://portainer/./app/kubernetes/components/resource-reservation/resourceReservation.js","webpack://portainer/./app/kubernetes/components/resource-reservation/resourceReservationController.js","webpack://portainer/./app/kubernetes/components/view-header/viewHeader.js","webpack://portainer/./app/kubernetes/components/view-loading/viewLoading.js","webpack://portainer/./app/kubernetes/components/yaml-inspector/yamlInspector.js","webpack://portainer/./app/kubernetes/components/yaml-inspector/yamlInspectorController.js","webpack://portainer/./app/kubernetes/converters/application.js","webpack://portainer/./app/kubernetes/converters/configMap.js","webpack://portainer/./app/kubernetes/converters/configuration.js","webpack://portainer/./app/kubernetes/converters/daemonSet.js","webpack://portainer/./app/kubernetes/converters/deployment.js","webpack://portainer/./app/kubernetes/converters/event.js","webpack://portainer/./app/kubernetes/converters/namespace.js","webpack://portainer/./app/kubernetes/converters/persistentVolumeClaim.js","webpack://portainer/./app/kubernetes/converters/resourcePool.js","webpack://portainer/./app/kubernetes/converters/resourceQuota.js","webpack://portainer/./app/kubernetes/converters/secret.js","webpack://portainer/./app/kubernetes/converters/service.js","webpack://portainer/./app/kubernetes/converters/statefulSet.js","webpack://portainer/./app/kubernetes/converters/storageClass.js","webpack://portainer/./app/kubernetes/converters/volume.js","webpack://portainer/./app/kubernetes/custom-templates/index.js","webpack://portainer/./app/kubernetes/custom-templates/kube-create-custom-template-view/index.js","webpack://portainer/./app/kubernetes/custom-templates/kube-create-custom-template-view/kube-create-custom-template-view.controller.js","webpack://portainer/./app/kubernetes/custom-templates/kube-custom-templates-view/index.js","webpack://portainer/./app/kubernetes/custom-templates/kube-custom-templates-view/kube-custom-templates-view.controller.js","webpack://portainer/./app/kubernetes/custom-templates/kube-edit-custom-template-view/index.js","webpack://portainer/./app/kubernetes/custom-templates/kube-edit-custom-template-view/kube-edit-custom-template-view.controller.js","webpack://portainer/./app/kubernetes/endpoint/converter.js","webpack://portainer/./app/kubernetes/endpoint/models.js","webpack://portainer/./app/kubernetes/endpoint/rest.js","webpack://portainer/./app/kubernetes/endpoint/service.js","webpack://portainer/./app/kubernetes/filters/applicationFilters.js","webpack://portainer/./app/kubernetes/filters/configurationFilters.js","webpack://portainer/./app/kubernetes/filters/eventFilters.js","webpack://portainer/./app/kubernetes/filters/filters.js","webpack://portainer/./app/kubernetes/helm/rest.js","webpack://portainer/./app/kubernetes/helm/service.js","webpack://portainer/./app/kubernetes/helpers/application/index.js","webpack://portainer/./app/kubernetes/helpers/application/rollback.js","webpack://portainer/./app/kubernetes/helpers/commonHelper.js","webpack://portainer/./app/kubernetes/helpers/configMapHelper.js","webpack://portainer/./app/kubernetes/helpers/configurationHelper.js","webpack://portainer/./app/kubernetes/helpers/eventHelper.js","webpack://portainer/./app/kubernetes/helpers/formValidationHelper.js","webpack://portainer/./app/kubernetes/helpers/history/daemonset.js","webpack://portainer/./app/kubernetes/helpers/history/deployment.js","webpack://portainer/./app/kubernetes/helpers/history/index.js","webpack://portainer/./app/kubernetes/helpers/history/statefulset.js","webpack://portainer/./app/kubernetes/helpers/namespaceHelper.js","webpack://portainer/./app/kubernetes/helpers/resourceQuotaHelper.js","webpack://portainer/./app/kubernetes/helpers/resourceReservationHelper.js","webpack://portainer/./app/kubernetes/helpers/serviceHelper.js","webpack://portainer/./app/kubernetes/helpers/stackHelper.js","webpack://portainer/./app/kubernetes/helpers/stackHelper.test.js","webpack://portainer/./app/kubernetes/helpers/volumeHelper.js","webpack://portainer/./app/kubernetes/horizontal-pod-auto-scaler/converter.js","webpack://portainer/./app/kubernetes/horizontal-pod-auto-scaler/helper.js","webpack://portainer/./app/kubernetes/horizontal-pod-auto-scaler/models.js","webpack://portainer/./app/kubernetes/horizontal-pod-auto-scaler/payload.js","webpack://portainer/./app/kubernetes/horizontal-pod-auto-scaler/rest.js","webpack://portainer/./app/kubernetes/horizontal-pod-auto-scaler/service.js","webpack://portainer/./app/kubernetes/ingress/constants.js","webpack://portainer/./app/kubernetes/ingress/converter.js","webpack://portainer/./app/kubernetes/ingress/helper.js","webpack://portainer/./app/kubernetes/ingress/models.js","webpack://portainer/./app/kubernetes/ingress/payloads.js","webpack://portainer/./app/kubernetes/ingress/rest.js","webpack://portainer/./app/kubernetes/ingress/service.js","webpack://portainer/./app/kubernetes/metrics/metrics.js","webpack://portainer/./app/kubernetes/metrics/rest.js","webpack://portainer/./app/kubernetes/models/application/formValues.js","webpack://portainer/./app/kubernetes/models/application/models/constants.js","webpack://portainer/./app/kubernetes/models/application/models/index.js","webpack://portainer/./app/kubernetes/models/application/payloads.js","webpack://portainer/./app/kubernetes/models/common/params.js","webpack://portainer/./app/kubernetes/models/common/payloads.js","webpack://portainer/./app/kubernetes/models/config-map/models.js","webpack://portainer/./app/kubernetes/models/config-map/payloads.js","webpack://portainer/./app/kubernetes/models/configuration/formvalues.js","webpack://portainer/./app/kubernetes/models/configuration/models.js","webpack://portainer/./app/kubernetes/models/daemon-set/models.js","webpack://portainer/./app/kubernetes/models/daemon-set/payloads.js","webpack://portainer/./app/kubernetes/models/deploy.js","webpack://portainer/./app/kubernetes/models/deployment/models.js","webpack://portainer/./app/kubernetes/models/deployment/payloads.js","webpack://portainer/./app/kubernetes/models/event/models.js","webpack://portainer/./app/kubernetes/models/history/models.js","webpack://portainer/./app/kubernetes/models/namespace/models.js","webpack://portainer/./app/kubernetes/models/namespace/payloads.js","webpack://portainer/./app/kubernetes/models/nodes-limits/models.js","webpack://portainer/./app/kubernetes/models/port/models.js","webpack://portainer/./app/kubernetes/models/resource-pool/formValues.js","webpack://portainer/./app/kubernetes/models/resource-pool/models.js","webpack://portainer/./app/kubernetes/models/resource-quota/models.js","webpack://portainer/./app/kubernetes/models/resource-quota/payloads.js","webpack://portainer/./app/kubernetes/models/resource-reservation/models.js","webpack://portainer/./app/kubernetes/models/resource-types/models.js","webpack://portainer/./app/kubernetes/models/secret/models.js","webpack://portainer/./app/kubernetes/models/secret/payloads.js","webpack://portainer/./app/kubernetes/models/service/models.js","webpack://portainer/./app/kubernetes/models/service/payloads.js","webpack://portainer/./app/kubernetes/models/stack/models.js","webpack://portainer/./app/kubernetes/models/stateful-set/models.js","webpack://portainer/./app/kubernetes/models/stateful-set/payloads.js","webpack://portainer/./app/kubernetes/models/storage-class/models.js","webpack://portainer/./app/kubernetes/models/storage-class/payload.js","webpack://portainer/./app/kubernetes/models/volume/models.js","webpack://portainer/./app/kubernetes/models/volume/payloads.js","webpack://portainer/./app/kubernetes/node/converter.js","webpack://portainer/./app/kubernetes/node/filters.js","webpack://portainer/./app/kubernetes/node/formValues.js","webpack://portainer/./app/kubernetes/node/helper.js","webpack://portainer/./app/kubernetes/node/models.js","webpack://portainer/./app/kubernetes/node/payload.js","webpack://portainer/./app/kubernetes/node/rest.js","webpack://portainer/./app/kubernetes/node/service.js","webpack://portainer/./app/kubernetes/pod/converter.js","webpack://portainer/./app/kubernetes/pod/filters.js","webpack://portainer/./app/kubernetes/pod/models/affinities.js","webpack://portainer/./app/kubernetes/pod/models/index.js","webpack://portainer/./app/kubernetes/pod/payloads/affinities.js","webpack://portainer/./app/kubernetes/pod/payloads/create.js","webpack://portainer/./app/kubernetes/pod/service.js","webpack://portainer/./app/kubernetes/registries/index.js","webpack://portainer/./app/kubernetes/registries/kube-registry-access-view/index.js","webpack://portainer/./app/kubernetes/registries/kube-registry-access-view/kube-registry-access-view.controller.js","webpack://portainer/./app/kubernetes/rest/configMap.js","webpack://portainer/./app/kubernetes/rest/controllerRevision.js","webpack://portainer/./app/kubernetes/rest/daemonSet.js","webpack://portainer/./app/kubernetes/rest/deployment.js","webpack://portainer/./app/kubernetes/rest/endpoint.js","webpack://portainer/./app/kubernetes/rest/event.js","webpack://portainer/./app/kubernetes/rest/health.js","webpack://portainer/./app/kubernetes/rest/kubeconfig.js","webpack://portainer/./app/kubernetes/rest/namespace.js","webpack://portainer/./app/kubernetes/rest/nodesLimits.js","webpack://portainer/./app/kubernetes/rest/persistentVolumeClaim.js","webpack://portainer/./app/kubernetes/rest/pod.js","webpack://portainer/./app/kubernetes/rest/portainer-namespace.js","webpack://portainer/./app/kubernetes/rest/replicaSet.js","webpack://portainer/./app/kubernetes/rest/resourceQuota.js","webpack://portainer/./app/kubernetes/rest/response/transform.js","webpack://portainer/./app/kubernetes/rest/secret.js","webpack://portainer/./app/kubernetes/rest/service.js","webpack://portainer/./app/kubernetes/rest/statefulSet.js","webpack://portainer/./app/kubernetes/rest/storage.js","webpack://portainer/./app/kubernetes/services/applicationService.js","webpack://portainer/./app/kubernetes/services/configMapService.js","webpack://portainer/./app/kubernetes/services/configurationService.js","webpack://portainer/./app/kubernetes/services/controllerRevisionService.js","webpack://portainer/./app/kubernetes/services/daemonSetService.js","webpack://portainer/./app/kubernetes/services/deploymentService.js","webpack://portainer/./app/kubernetes/services/eventService.js","webpack://portainer/./app/kubernetes/services/healthService.js","webpack://portainer/./app/kubernetes/services/historyService.js","webpack://portainer/./app/kubernetes/services/kubeconfigService.js","webpack://portainer/./app/kubernetes/services/namespaceService.js","webpack://portainer/./app/kubernetes/services/nodesLimitsService.js","webpack://portainer/./app/kubernetes/services/persistentVolumeClaimService.js","webpack://portainer/./app/kubernetes/services/replicaSetService.js","webpack://portainer/./app/kubernetes/services/resourcePoolService.js","webpack://portainer/./app/kubernetes/services/resourceQuotaService.js","webpack://portainer/./app/kubernetes/services/secretService.js","webpack://portainer/./app/kubernetes/services/serviceService.js","webpack://portainer/./app/kubernetes/services/stackService.js","webpack://portainer/./app/kubernetes/services/statefulSetService.js","webpack://portainer/./app/kubernetes/services/storageService.js","webpack://portainer/./app/kubernetes/services/volumeService.js","webpack://portainer/./app/kubernetes/store/namespace.js","webpack://portainer/./app/kubernetes/views/applications/applications.js","webpack://portainer/./app/kubernetes/views/applications/applicationsController.js","webpack://portainer/./app/kubernetes/views/applications/console/console.js","webpack://portainer/./app/kubernetes/views/applications/console/consoleController.js","webpack://portainer/./app/kubernetes/views/applications/create/createApplication.js","webpack://portainer/./app/kubernetes/views/applications/create/createApplicationController.js","webpack://portainer/./app/kubernetes/views/applications/edit/application.js","webpack://portainer/./app/kubernetes/views/applications/edit/applicationController.js","webpack://portainer/./app/kubernetes/views/applications/edit/components/ingress-table/ingress-table.controller.js","webpack://portainer/./app/kubernetes/views/applications/edit/components/ingress-table/ingress-table.js","webpack://portainer/./app/kubernetes/views/applications/edit/components/placements-datatable/controller.js","webpack://portainer/./app/kubernetes/views/applications/edit/components/placements-datatable/index.js","webpack://portainer/./app/kubernetes/views/applications/edit/components/services-table/services-table.js","webpack://portainer/./app/kubernetes/views/applications/helm/helm.controller.js","webpack://portainer/./app/kubernetes/views/applications/helm/index.js","webpack://portainer/./app/kubernetes/views/applications/logs/logs.js","webpack://portainer/./app/kubernetes/views/applications/logs/logsController.js","webpack://portainer/./app/kubernetes/views/applications/stats/stats.js","webpack://portainer/./app/kubernetes/views/applications/stats/statsController.js","webpack://portainer/./app/kubernetes/views/cluster/cluster.js","webpack://portainer/./app/kubernetes/views/cluster/clusterController.js","webpack://portainer/./app/kubernetes/views/cluster/node/node.js","webpack://portainer/./app/kubernetes/views/cluster/node/nodeController.js","webpack://portainer/./app/kubernetes/views/cluster/node/stats/stats.js","webpack://portainer/./app/kubernetes/views/cluster/node/stats/statsController.js","webpack://portainer/./app/kubernetes/views/configurations/configurations.js","webpack://portainer/./app/kubernetes/views/configurations/configurationsController.js","webpack://portainer/./app/kubernetes/views/configurations/create/createConfiguration.js","webpack://portainer/./app/kubernetes/views/configurations/create/createConfigurationController.js","webpack://portainer/./app/kubernetes/views/configurations/edit/configuration.js","webpack://portainer/./app/kubernetes/views/configurations/edit/configurationController.js","webpack://portainer/./app/kubernetes/views/configure/configureController.js","webpack://portainer/./app/kubernetes/views/dashboard/dashboard.js","webpack://portainer/./app/kubernetes/views/dashboard/dashboardController.js","webpack://portainer/./app/kubernetes/views/deploy/deploy.js","webpack://portainer/./app/kubernetes/views/deploy/deployController.js","webpack://portainer/./app/kubernetes/views/resource-pools/access/resourcePoolAccess.js","webpack://portainer/./app/kubernetes/views/resource-pools/access/resourcePoolAccessController.js","webpack://portainer/./app/kubernetes/views/resource-pools/components/storage-class-switch/index.js","webpack://portainer/./app/kubernetes/views/resource-pools/components/storage-class-switch/storage-class-switch.controller.js","webpack://portainer/./app/kubernetes/views/resource-pools/create/createResourcePool.js","webpack://portainer/./app/kubernetes/views/resource-pools/create/createResourcePoolController.js","webpack://portainer/./app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/controller.js","webpack://portainer/./app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/index.js","webpack://portainer/./app/kubernetes/views/resource-pools/edit/resourcePool.js","webpack://portainer/./app/kubernetes/views/resource-pools/edit/resourcePoolController.js","webpack://portainer/./app/kubernetes/views/resource-pools/resourcePools.js","webpack://portainer/./app/kubernetes/views/resource-pools/resourcePoolsController.js","webpack://portainer/./app/kubernetes/views/stacks/logs/logs.js","webpack://portainer/./app/kubernetes/views/stacks/logs/logsController.js","webpack://portainer/./app/kubernetes/views/summary/resources/applicationResources.js","webpack://portainer/./app/kubernetes/views/summary/resources/configurationResources.js","webpack://portainer/./app/kubernetes/views/summary/resources/helpers.js","webpack://portainer/./app/kubernetes/views/summary/resources/namespaceResources.js","webpack://portainer/./app/kubernetes/views/summary/summary.js","webpack://portainer/./app/kubernetes/views/summary/summaryController.js","webpack://portainer/./app/kubernetes/views/volumes/components/volumes-storages-datatable/controller.js","webpack://portainer/./app/kubernetes/views/volumes/components/volumes-storages-datatable/index.js","webpack://portainer/./app/kubernetes/views/volumes/edit/volume.js","webpack://portainer/./app/kubernetes/views/volumes/edit/volumeController.js","webpack://portainer/./app/kubernetes/views/volumes/volumes.js","webpack://portainer/./app/kubernetes/views/volumes/volumesController.js","webpack://portainer/./app/matomo-setup.js","webpack://portainer/./app/portainer/feature-flags/limited-feature.directive.ts","webpack://portainer/./app/portainer/feature-flags/index.ts","webpack://portainer/./app/portainer/services/api/index.ts","webpack://portainer/./app/portainer/services/modal.service/index.ts","webpack://portainer/./app/portainer/services/index.ts","webpack://portainer/./app/portainer/teams/CreateTeamForm/index.ts","webpack://portainer/./app/portainer/teams/CreateTeamForm/CreateTeamForm.tsx","webpack://portainer/./app/portainer/teams/CreateTeamForm/CreateTeamForm.validation.ts","webpack://portainer/./app/portainer/teams/index.ts","webpack://portainer/./app/portainer/__module.js","webpack://portainer/./app/portainer/components/PageHeader/HeaderContent.controller.js","webpack://portainer/./app/portainer/components/PageHeader/HeaderTitle.controller.js","webpack://portainer/./app/portainer/components/access-datatable/accessDatatable.js","webpack://portainer/./app/portainer/components/access-datatable/accessDatatableController.js","webpack://portainer/./app/portainer/components/access-table/access-table.js","webpack://portainer/./app/portainer/components/accessControlForm/por-access-control-form.js","webpack://portainer/./app/portainer/components/accessControlForm/porAccessControlFormController.js","webpack://portainer/./app/portainer/components/accessControlForm/porAccessControlFormModel.js","webpack://portainer/./app/portainer/components/accessControlPanel/por-access-control-panel.js","webpack://portainer/./app/portainer/components/accessControlPanel/porAccessControlPanelController.js","webpack://portainer/./app/portainer/components/accessControlPanel/porAccessControlPanelModel.js","webpack://portainer/./app/portainer/components/accessManagement/index.js","webpack://portainer/./app/portainer/components/accessManagement/por-access-management-users-selector/index.js","webpack://portainer/./app/portainer/components/accessManagement/por-access-management.js","webpack://portainer/./app/portainer/components/accessManagement/porAccessManagementController.js","webpack://portainer/./app/portainer/components/associated-endpoints-selector/associatedEndpointsSelector.js","webpack://portainer/./app/portainer/components/associated-endpoints-selector/associatedEndpointsSelectorController.js","webpack://portainer/./app/portainer/components/autofocus.js","webpack://portainer/./app/portainer/components/beta-panel/betaPanel.js","webpack://portainer/./app/portainer/components/buttonSpinner.js","webpack://portainer/./app/portainer/components/code-editor/code-editor.js","webpack://portainer/./app/portainer/components/code-editor/codeEditorController.js","webpack://portainer/./app/portainer/components/copy-button/copy-button.controller.js","webpack://portainer/./app/portainer/components/copy-button/copy-button.js","webpack://portainer/./app/portainer/components/cronRule.js","webpack://portainer/./app/portainer/components/custom-template-common-fields/customTemplateCommonFieldsController.js","webpack://portainer/./app/portainer/components/custom-template-common-fields/index.js","webpack://portainer/./app/portainer/components/custom-template-selector/custom-template-selector.controller.js","webpack://portainer/./app/portainer/components/custom-template-selector/index.js","webpack://portainer/./app/portainer/components/custom-templates-list/customTemplatesListController.js","webpack://portainer/./app/portainer/components/custom-templates-list/index.js","webpack://portainer/./app/portainer/components/datatables/access-tokens-datatable/access-tokens-datatable.controller.js","webpack://portainer/./app/portainer/components/datatables/access-tokens-datatable/access-tokens-datatable.js","webpack://portainer/./app/portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.controller.js","webpack://portainer/./app/portainer/components/datatables/datatable-columns-visibility/index.js","webpack://portainer/./app/portainer/components/datatables/endpoints-datatable/endpointsDatatable.js","webpack://portainer/./app/portainer/components/datatables/endpoints-datatable/endpointsDatatableController.js","webpack://portainer/./app/portainer/components/datatables/filter/datatable-filter.controller.js","webpack://portainer/./app/portainer/components/datatables/filter/index.js","webpack://portainer/./app/portainer/components/datatables/genericDatatableController.js","webpack://portainer/./app/portainer/components/datatables/groups-datatable/groupsDatatable.js","webpack://portainer/./app/portainer/components/datatables/index.js","webpack://portainer/./app/portainer/components/datatables/pagination/index.js","webpack://portainer/./app/portainer/components/datatables/registries-datatable/registriesDatatable.js","webpack://portainer/./app/portainer/components/datatables/registries-datatable/registriesDatatableController.js","webpack://portainer/./app/portainer/components/datatables/searchbar/index.js","webpack://portainer/./app/portainer/components/datatables/sort-icon/datatable-sort-icon.controller.js","webpack://portainer/./app/portainer/components/datatables/sort-icon/index.js","webpack://portainer/./app/portainer/components/datatables/stacks-datatable/stacksDatatable.js","webpack://portainer/./app/portainer/components/datatables/stacks-datatable/stacksDatatableController.js","webpack://portainer/./app/portainer/components/datatables/strings-datatable/index.js","webpack://portainer/./app/portainer/components/datatables/tags-datatable/tagsDatatable.js","webpack://portainer/./app/portainer/components/datatables/teams-datatable/teamsDatatable.js","webpack://portainer/./app/portainer/components/datatables/titlebar/index.js","webpack://portainer/./app/portainer/components/datatables/users-datatable/usersDatatable.js","webpack://portainer/./app/portainer/components/datatables/users-datatable/usersDatatableController.js","webpack://portainer/./app/portainer/components/date-range-picker/date-range-picker-api.js","webpack://portainer/./app/portainer/components/date-range-picker/date-range-picker.js","webpack://portainer/./app/portainer/components/date-range-picker/index.js","webpack://portainer/./app/portainer/components/endpoint-list/endpoint-item/endpoint-item-controller.js","webpack://portainer/./app/portainer/components/endpoint-list/endpoint-item/endpointItem.js","webpack://portainer/./app/portainer/components/endpoint-list/endpoint-list-controller.js","webpack://portainer/./app/portainer/components/endpoint-list/endpoint-list.js","webpack://portainer/./app/portainer/components/endpoint-selector/endpoint-selector.js","webpack://portainer/./app/portainer/components/endpoint-selector/endpointSelectorController.js","webpack://portainer/./app/portainer/components/endpointSecurity/por-endpoint-security.js","webpack://portainer/./app/portainer/components/endpointSecurity/porEndpointSecurityController.js","webpack://portainer/./app/portainer/components/endpointSecurity/porEndpointSecurityModel.js","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-panel.controller.js","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js","webpack://portainer/./app/portainer/components/environment-variables-panel/index.js","webpack://portainer/./app/portainer/components/focusIf.js","webpack://portainer/./app/portainer/components/form-components/file-upload-form/index.js","webpack://portainer/./app/portainer/components/form-components/index.js","webpack://portainer/./app/portainer/components/form-components/web-editor-form/index.js","webpack://portainer/./app/portainer/components/form-components/web-editor-form/web-editor-form.controller.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-file-item/git-form-additional-file-item.controller.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-file-item/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-files-panel.controller.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-additional-files-panel/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.controller.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-auth-fieldset/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-auto-update-fieldset/git-form-auto-update-fieldset.controller.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-auto-update-fieldset/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-compose-path-field/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-info-panel/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-ref-field/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form-url-field/index.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form.controller.js","webpack://portainer/./app/portainer/components/forms/git-form/git-form.js","webpack://portainer/./app/portainer/components/forms/git-form/index.js","webpack://portainer/./app/portainer/components/forms/group-form/group-form.js","webpack://portainer/./app/portainer/components/forms/group-form/groupFormController.js","webpack://portainer/./app/portainer/components/forms/kubernetes-app-git-form/kubernetes-app-git-form.controller.js","webpack://portainer/./app/portainer/components/forms/kubernetes-app-git-form/kubernetes-app-git-form.js","webpack://portainer/./app/portainer/components/forms/kubernetes-redeploy-app-git-form/kubernetes-redeploy-app-git-form.controller.js","webpack://portainer/./app/portainer/components/forms/kubernetes-redeploy-app-git-form/kubernetes-redeploy-app-git-form.js","webpack://portainer/./app/portainer/components/forms/registry-form-aws-ecr/registry-form-ecr.js","webpack://portainer/./app/portainer/components/forms/registry-form-azure/registry-form-azure.js","webpack://portainer/./app/portainer/components/forms/registry-form-custom/registry-form-custom.js","webpack://portainer/./app/portainer/components/forms/registry-form-dockerhub/registry-form-dockerhub.js","webpack://portainer/./app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.js","webpack://portainer/./app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatableController.js","webpack://portainer/./app/portainer/components/forms/registry-form-gitlab/registry-form-gitlab.js","webpack://portainer/./app/portainer/components/forms/registry-form-proget/registry-form-proget.js","webpack://portainer/./app/portainer/components/forms/registry-form-quay/registry-form-quay.js","webpack://portainer/./app/portainer/components/forms/stack-from-template-form/index.js","webpack://portainer/./app/portainer/components/forms/stack-redeploy-git-form/index.js","webpack://portainer/./app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.controller.js","webpack://portainer/./app/portainer/components/group-association-table/group-association-table.js","webpack://portainer/./app/portainer/components/Code/Code.tsx","webpack://portainer/./app/portainer/components/Code/Code.module.css?8370","webpack://portainer/./app/portainer/components/Button/CopyButton/CopyButton.tsx","webpack://portainer/./app/portainer/components/Button/CopyButton/CopyButton.module.css?6fd4","webpack://portainer/./app/portainer/views/account/CreateAccessToken/index.ts","webpack://portainer/./app/portainer/views/account/CreateAccessToken/CreateAccessToken.tsx","webpack://portainer/./app/portainer/views/account/CreateAccessToken/CreateAccessToken.module.css?98f2","webpack://portainer/./app/portainer/components/ReactExample.tsx","webpack://portainer/./app/portainer/components/ReactExample.module.css?9397","webpack://portainer/./app/portainer/components/index.js","webpack://portainer/./app/portainer/components/information-panel-offline/informationPanelOffline.js","webpack://portainer/./app/portainer/components/information-panel-offline/informationPanelOfflineController.js","webpack://portainer/./app/portainer/components/information-panel/information-panel.js","webpack://portainer/./app/portainer/components/intervalFormat.js","webpack://portainer/./app/portainer/components/motd-panel/motd-panel.js","webpack://portainer/./app/portainer/components/onEnterKey.js","webpack://portainer/./app/portainer/components/product-list/product-item/product-item.js","webpack://portainer/./app/portainer/components/product-list/product-list.js","webpack://portainer/./app/portainer/components/registry-details/index.js","webpack://portainer/./app/portainer/components/sensitive-details/sensitive-details.js","webpack://portainer/./app/portainer/components/show-hide/show-hide.js","webpack://portainer/./app/portainer/components/sidebar/index.js","webpack://portainer/./app/portainer/components/sidebar/sidebar-menu-item/index.js","webpack://portainer/./app/portainer/components/sidebar/sidebar-menu/index.js","webpack://portainer/./app/portainer/components/sidebar/sidebar-menu/sidebar-menu.controller.js","webpack://portainer/./app/portainer/components/sidebar/sidebar-section/index.js","webpack://portainer/./app/portainer/components/slider/slider.js","webpack://portainer/./app/portainer/components/slider/sliderController.js","webpack://portainer/./app/portainer/components/stack-duplication-form/stack-duplication-form-controller.js","webpack://portainer/./app/portainer/components/stack-duplication-form/stack-duplication-form.js","webpack://portainer/./app/portainer/components/status-indicator/index.js","webpack://portainer/./app/portainer/components/tag-selector/tag-selector.js","webpack://portainer/./app/portainer/components/tag-selector/tagSelectorController.js","webpack://portainer/./app/portainer/components/template-list/template-item/template-item.js","webpack://portainer/./app/portainer/components/template-list/template-list-controller.js","webpack://portainer/./app/portainer/components/template-list/template-list.js","webpack://portainer/./app/portainer/components/template-widget.js","webpack://portainer/./app/portainer/components/theme/theme-settings.controller.js","webpack://portainer/./app/portainer/components/theme/theme-settings.js","webpack://portainer/./app/portainer/components/time-window-display/index.js","webpack://portainer/./app/portainer/components/time-window-display/time-window-display.controller.js","webpack://portainer/./app/portainer/components/time-window-picker/index.js","webpack://portainer/./app/portainer/components/time-window-picker/time-window-picker.controller.js","webpack://portainer/./app/portainer/filters/filters.js","webpack://portainer/./app/portainer/filters/index.js","webpack://portainer/./app/portainer/helpers/endpointHelper.js","webpack://portainer/./app/portainer/helpers/env-vars.js","webpack://portainer/./app/portainer/helpers/formHelper.js","webpack://portainer/./app/portainer/helpers/genericHelper.js","webpack://portainer/./app/portainer/helpers/networkHelper.js","webpack://portainer/./app/portainer/helpers/pathHelper.js","webpack://portainer/./app/portainer/helpers/resourceControlHelper.js","webpack://portainer/./app/portainer/helpers/stackHelper.js","webpack://portainer/./app/portainer/helpers/tagHelper.js","webpack://portainer/./app/portainer/helpers/templateHelper.js","webpack://portainer/./app/portainer/helpers/urlHelper.js","webpack://portainer/./app/portainer/helpers/webhookHelper.js","webpack://portainer/./app/portainer/interceptors/endpointStatusInterceptor.js","webpack://portainer/./app/portainer/license-management/add-license.view/add-license.view.controller.js","webpack://portainer/./app/portainer/license-management/add-license.view/add-license.view.js","webpack://portainer/./app/portainer/license-management/add-license.view/index.js","webpack://portainer/./app/portainer/license-management/add-license.view/licenses-form/index.js","webpack://portainer/./app/portainer/license-management/add-license.view/licenses-form/license-item/index.js","webpack://portainer/./app/portainer/license-management/add-license.view/licenses-form/license-item/license-item.controller.js","webpack://portainer/./app/portainer/license-management/add-license.view/licenses-form/licenses-form.controller.js","webpack://portainer/./app/portainer/license-management/index.js","webpack://portainer/./app/portainer/license-management/license-node-panel.component/index.js","webpack://portainer/./app/portainer/license-management/license-node-panel.component/license-node-panel.controller.js","webpack://portainer/./app/portainer/license-management/licenses.view/index.js","webpack://portainer/./app/portainer/license-management/licenses.view/license-info/index.js","webpack://portainer/./app/portainer/license-management/licenses.view/license-info/license-info.controller.js","webpack://portainer/./app/portainer/license-management/licenses.view/licenses-datatable/index.js","webpack://portainer/./app/portainer/license-management/licenses.view/licenses.view.controller.js","webpack://portainer/./app/portainer/license-management/licenses.view/licenses.view.js","webpack://portainer/./app/portainer/models/access.js","webpack://portainer/./app/portainer/models/dockerhub.js","webpack://portainer/./app/portainer/models/endpoint/formValues.js","webpack://portainer/./app/portainer/models/endpoint/models.js","webpack://portainer/./app/portainer/models/gitlabRegistry.js","webpack://portainer/./app/portainer/models/group.js","webpack://portainer/./app/portainer/models/motd.js","webpack://portainer/./app/portainer/models/registry.js","webpack://portainer/./app/portainer/models/registryRepository.js","webpack://portainer/./app/portainer/models/registryTypes.js","webpack://portainer/./app/portainer/models/resourceControl/resourceControlCreatePayload.js","webpack://portainer/./app/portainer/models/resourceControl/resourceControlOwnershipParameters.js","webpack://portainer/./app/portainer/models/resourceControl/resourceControlTypes.js","webpack://portainer/./app/portainer/models/resourceControl/resourceControlUpdatePayload.js","webpack://portainer/./app/portainer/models/schedule.js","webpack://portainer/./app/portainer/models/settings.js","webpack://portainer/./app/portainer/models/stack.js","webpack://portainer/./app/portainer/models/status.js","webpack://portainer/./app/portainer/models/tag.js","webpack://portainer/./app/portainer/models/team.js","webpack://portainer/./app/portainer/models/teamMembership.js","webpack://portainer/./app/portainer/models/template.js","webpack://portainer/./app/portainer/models/user.js","webpack://portainer/./app/portainer/models/webhook.js","webpack://portainer/./app/portainer/oauth/__module.js","webpack://portainer/./app/portainer/oauth/components/oauth-providers-selector/index.js","webpack://portainer/./app/portainer/oauth/components/oauth-providers-selector/oauth-provider-selector.controller.js","webpack://portainer/./app/portainer/oauth/components/oauth-settings/index.js","webpack://portainer/./app/portainer/oauth/components/oauth-settings/oauth-settings.controller.js","webpack://portainer/./app/portainer/oauth/components/oauth-settings/providers.js","webpack://portainer/./app/portainer/oauth/services/rest/oauth.js","webpack://portainer/./app/portainer/rbac/components/access-viewer/access-viewer-datatable/index.js","webpack://portainer/./app/portainer/rbac/components/access-viewer/access-viewer.controller.js","webpack://portainer/./app/portainer/rbac/components/access-viewer/index.js","webpack://portainer/./app/portainer/rbac/components/roles-datatable/index.js","webpack://portainer/./app/portainer/rbac/components/roles-datatable/roles-datatable.controller.js","webpack://portainer/./app/portainer/rbac/directives/authorization.js","webpack://portainer/./app/portainer/rbac/directives/disable-authorization.js","webpack://portainer/./app/portainer/rbac/directives/excludeAuthorization.js","webpack://portainer/./app/portainer/rbac/index.js","webpack://portainer/./app/portainer/rbac/models/access.js","webpack://portainer/./app/portainer/rbac/models/role.js","webpack://portainer/./app/portainer/rbac/rest/role.js","webpack://portainer/./app/portainer/rbac/services/role.rest.js","webpack://portainer/./app/portainer/rbac/services/role.service.js","webpack://portainer/./app/portainer/rbac/views/roles/index.js","webpack://portainer/./app/portainer/rbac/views/roles/roles.controller.js","webpack://portainer/./app/portainer/rbac/views/roles/rolesController.js","webpack://portainer/./app/portainer/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.js","webpack://portainer/./app/portainer/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatableController.js","webpack://portainer/./app/portainer/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.js","webpack://portainer/./app/portainer/registry-management/components/registries-repository-tags-datatable/registryRepositoriesTagsDatatableController.js","webpack://portainer/./app/portainer/registry-management/helpers/localRegistryHelper.js","webpack://portainer/./app/portainer/registry-management/index.js","webpack://portainer/./app/portainer/registry-management/models/gitlabRegistry.js","webpack://portainer/./app/portainer/registry-management/models/registryImageDetails.js","webpack://portainer/./app/portainer/registry-management/models/registryImageLayer.js","webpack://portainer/./app/portainer/registry-management/models/registryRepository.js","webpack://portainer/./app/portainer/registry-management/models/repositoryTag.js","webpack://portainer/./app/portainer/registry-management/rest/catalog.js","webpack://portainer/./app/portainer/registry-management/rest/manifestJquery.js","webpack://portainer/./app/portainer/registry-management/rest/tags.js","webpack://portainer/./app/portainer/registry-management/rest/transform/gitlabResponseGetLink.js","webpack://portainer/./app/portainer/registry-management/rest/transform/linkGetResponse.js","webpack://portainer/./app/portainer/registry-management/services/genericAsyncGenerator.js","webpack://portainer/./app/portainer/registry-management/services/registryServiceSelector.js","webpack://portainer/./app/portainer/registry-management/services/registryV2Service.js","webpack://portainer/./app/portainer/registry-management/views/configure/controller.js","webpack://portainer/./app/portainer/registry-management/views/configure/index.js","webpack://portainer/./app/portainer/registry-management/views/repositories/controller.js","webpack://portainer/./app/portainer/registry-management/views/repositories/edit/controller.js","webpack://portainer/./app/portainer/registry-management/views/repositories/edit/progression-modal/index.js","webpack://portainer/./app/portainer/registry-management/views/repositories/index.js","webpack://portainer/./app/portainer/registry-management/views/repositories/tag/controller.js","webpack://portainer/./app/portainer/registry-management/views/repositories/tag/index.js","webpack://portainer/./app/portainer/rest/auth.js","webpack://portainer/./app/portainer/rest/backup.js","webpack://portainer/./app/portainer/rest/customTemplate.js","webpack://portainer/./app/portainer/rest/ecr.js","webpack://portainer/./app/portainer/rest/endpoint.js","webpack://portainer/./app/portainer/rest/gitlab.js","webpack://portainer/./app/portainer/rest/group.js","webpack://portainer/./app/portainer/rest/motd.js","webpack://portainer/./app/portainer/rest/registry.js","webpack://portainer/./app/portainer/rest/resourceControl.js","webpack://portainer/./app/portainer/rest/settings.js","webpack://portainer/./app/portainer/rest/ssl.js","webpack://portainer/./app/portainer/rest/stack.js","webpack://portainer/./app/portainer/rest/status.js","webpack://portainer/./app/portainer/rest/support.js","webpack://portainer/./app/portainer/rest/tag.js","webpack://portainer/./app/portainer/rest/team.js","webpack://portainer/./app/portainer/rest/teamMembership.js","webpack://portainer/./app/portainer/rest/template.js","webpack://portainer/./app/portainer/rest/transform/getEndpointsTotalCount.js","webpack://portainer/./app/portainer/rest/transform/gitlabResponseGetLink.js","webpack://portainer/./app/portainer/rest/user.js","webpack://portainer/./app/portainer/rest/webhooks.js","webpack://portainer/./app/portainer/services/allSettled.js","webpack://portainer/./app/portainer/services/api/accessService.js","webpack://portainer/./app/portainer/services/api/backupService.js","webpack://portainer/./app/portainer/services/api/customTemplate.js","webpack://portainer/./app/portainer/services/api/dockerhubService.js","webpack://portainer/./app/portainer/services/api/endpointService.js","webpack://portainer/./app/portainer/services/api/groupService.js","webpack://portainer/./app/portainer/services/api/motdService.js","webpack://portainer/./app/portainer/services/api/registryService.js","webpack://portainer/./app/portainer/services/api/resourceControlService.js","webpack://portainer/./app/portainer/services/api/settingsService.js","webpack://portainer/./app/portainer/services/api/sslService.js","webpack://portainer/./app/portainer/services/api/stackService.js","webpack://portainer/./app/portainer/services/api/statusService.js","webpack://portainer/./app/portainer/services/api/supportService.js","webpack://portainer/./app/portainer/services/api/tagService.js","webpack://portainer/./app/portainer/services/api/teamMembershipService.js","webpack://portainer/./app/portainer/services/api/teamService.js","webpack://portainer/./app/portainer/services/api/templateService.js","webpack://portainer/./app/portainer/services/api/userService.js","webpack://portainer/./app/portainer/helpers/userHelper.ts","webpack://portainer/./app/portainer/services/api/webhookService.js","webpack://portainer/./app/portainer/services/async.js","webpack://portainer/./app/portainer/services/authentication.js","webpack://portainer/./app/portainer/services/chartService.js","webpack://portainer/./app/portainer/services/codeMirror.js","webpack://portainer/./app/portainer/services/datatableService.js","webpack://portainer/./app/portainer/services/endpointProvider.js","webpack://portainer/./app/portainer/services/fileUpload.js","webpack://portainer/./app/portainer/services/formValidator.js","webpack://portainer/./app/portainer/services/localStorage.js","webpack://portainer/./app/portainer/services/nameValidator.js","webpack://portainer/./app/portainer/services/pagination.js","webpack://portainer/./app/portainer/services/registryEcrService.js","webpack://portainer/./app/portainer/services/registryGitlabService.js","webpack://portainer/./app/portainer/services/registryModalService.js","webpack://portainer/./app/portainer/services/session-storage.js","webpack://portainer/./app/portainer/services/stateManager.js","webpack://portainer/./app/portainer/services/terminal-window.js","webpack://portainer/./app/portainer/services/themeManager.js","webpack://portainer/./app/portainer/settings/authentication/auth-method-constants.js","webpack://portainer/./app/portainer/settings/authentication/auth-type-constants.js","webpack://portainer/./app/portainer/settings/authentication/auto-user-provision-toggle/index.js","webpack://portainer/./app/portainer/settings/authentication/index.js","webpack://portainer/./app/portainer/settings/authentication/internal-auth/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ad-settings/ad-settings.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ad-settings/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-connectivity-check/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-admin-group/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-admin-group/ldap-custom-admin-group.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-group-search/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-group-search/ldap-custom-group-search.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-user-search/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-user-search/ldap-custom-user-search.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-group-search-item/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-group-search-item/ldap-group-search-item.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-group-search/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-group-search/ldap-group-search.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-groups-datatable/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-custom/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-custom/ldap-settings-custom.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-dn-builder/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-dn-builder/ldap-settings-dn-builder.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-group-dn-builder/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-group-dn-builder/ldap-settings-group-dn-builder.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-openldap/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-openldap/ldap-settings-openldap.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-security/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-test-login/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-test-login/ldap-settings-test-login.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings.model.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings/ldap-settings.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-user-search-item/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-user-search-item/ldap-user-search-item.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-user-search/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-user-search/ldap-user-search.controller.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-users-datatable/index.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap.rest.js","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap.service.js","webpack://portainer/./app/portainer/settings/authentication/save-auth-settings-button/index.js","webpack://portainer/./app/portainer/settings/general/index.js","webpack://portainer/./app/portainer/settings/general/ssl-certificate/index.js","webpack://portainer/./app/portainer/settings/general/ssl-certificate/ssl-certificate.controller.js","webpack://portainer/./app/portainer/settings/edge-compute/SettingsEdgeCompute/SettingsEdgeCompute.tsx","webpack://portainer/./app/portainer/settings/edge-compute/SettingsEdgeCompute/index.ts","webpack://portainer/./app/portainer/settings/edge-compute/SettingsEdgeCompute/SettingsEdgeCompute.validation.ts","webpack://portainer/./app/portainer/settings/edge-compute/SettingsEdgeCompute/SettingsEdgeCompute.module.css?595e","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/FDOProfilesDatatableActions.tsx","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/columns/created.tsx","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/columns/name.tsx","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/FDOProfilesDatatable.tsx","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/columns/index.tsx","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/useFDOProfiles.tsx","webpack://portainer/./app/portainer/settings/edge-compute/FDOProfilesDatatable/FDOProfilesDatatableContainer.tsx","webpack://portainer/./app/portainer/settings/edge-compute/SettingsFDO/index.ts","webpack://portainer/./app/portainer/settings/edge-compute/SettingsFDO/SettingsFDO.tsx","webpack://portainer/./app/portainer/settings/edge-compute/SettingsFDO/SettingsFDO.validation.ts","webpack://portainer/./app/portainer/settings/edge-compute/SettingsFDO/SettingsFDO.module.css?9ca2","webpack://portainer/./app/portainer/settings/edge-compute/SettingsOpenAMT/index.ts","webpack://portainer/./app/portainer/settings/edge-compute/SettingsOpenAMT/SettingsOpenAMT.tsx","webpack://portainer/./app/portainer/settings/edge-compute/SettingsOpenAMT/SettingsOpenAMT.validation.ts","webpack://portainer/./app/portainer/settings/edge-compute/SettingsOpenAMT/SettingsOpenAMT.module.css?ea7e","webpack://portainer/./app/portainer/settings/index.js","webpack://portainer/./app/portainer/user-activity/activity-logs-view/activity-logs-datatable/activity-logs-datatable.controller.js","webpack://portainer/./app/portainer/user-activity/activity-logs-view/activity-logs-datatable/index.js","webpack://portainer/./app/portainer/user-activity/activity-logs-view/activity-logs-view.controller.js","webpack://portainer/./app/portainer/user-activity/activity-logs-view/activity-logs-view.js","webpack://portainer/./app/portainer/user-activity/activity-logs-view/index.js","webpack://portainer/./app/portainer/user-activity/auth-logs-view/auth-logs-datatable/auth-logs-datatable.controller.js","webpack://portainer/./app/portainer/user-activity/auth-logs-view/auth-logs-datatable/index.js","webpack://portainer/./app/portainer/user-activity/auth-logs-view/auth-logs-view.controller.js","webpack://portainer/./app/portainer/user-activity/auth-logs-view/auth-logs-view.js","webpack://portainer/./app/portainer/user-activity/auth-logs-view/index.js","webpack://portainer/./app/portainer/user-activity/index.js","webpack://portainer/./app/portainer/user-activity/user-activity.rest.js","webpack://portainer/./app/portainer/user-activity/user-activity.service.js","webpack://portainer/./app/portainer/views/account/accountController.js","webpack://portainer/./app/portainer/views/account/create-user-access-token/create-user-access-token.controller.js","webpack://portainer/./app/portainer/views/account/create-user-access-token/index.js","webpack://portainer/./app/portainer/views/auth/authController.js","webpack://portainer/./app/portainer/views/custom-templates/create-custom-template-view/createCustomTemplateViewController.js","webpack://portainer/./app/portainer/views/custom-templates/create-custom-template-view/index.js","webpack://portainer/./app/portainer/views/custom-templates/custom-templates-view/customTemplatesViewController.js","webpack://portainer/./app/portainer/views/custom-templates/custom-templates-view/index.js","webpack://portainer/./app/portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateViewController.js","webpack://portainer/./app/portainer/views/custom-templates/edit-custom-template-view/index.js","webpack://portainer/./app/portainer/views/devices/import/importDeviceController.js","webpack://portainer/./app/portainer/views/devices/profiles/add/addProfileController.js","webpack://portainer/./app/portainer/views/devices/profiles/add/index.js","webpack://portainer/./app/portainer/views/devices/profiles/edit/editProfileController.js","webpack://portainer/./app/portainer/views/devices/profiles/edit/index.js","webpack://portainer/./app/portainer/views/endpoint-registries/registries.js","webpack://portainer/./app/portainer/views/endpoint-registries/registriesController.js","webpack://portainer/./app/portainer/views/endpoints/access/endpointAccessController.js","webpack://portainer/./app/portainer/views/endpoints/create/createEndpointController.js","webpack://portainer/./app/portainer/views/endpoints/edit/endpointController.js","webpack://portainer/./app/portainer/views/endpoints/endpointsController.js","webpack://portainer/./app/portainer/views/endpoints/helpers.js","webpack://portainer/./app/portainer/views/endpoints/kvm/endpointKVMController.js","webpack://portainer/./app/portainer/views/endpoints/kvm/KVMControl.tsx","webpack://portainer/./app/portainer/views/endpoints/kvm/index.js","webpack://portainer/./app/portainer/views/groups/access/groupAccessController.js","webpack://portainer/./app/portainer/views/groups/create/createGroupController.js","webpack://portainer/./app/portainer/views/groups/edit/groupController.js","webpack://portainer/./app/portainer/views/groups/groupsController.js","webpack://portainer/./app/portainer/views/home/homeController.js","webpack://portainer/./app/portainer/views/init/admin/initAdminController.js","webpack://portainer/./app/portainer/views/init/endpoint/initEndpointController.js","webpack://portainer/./app/portainer/views/init/init-license.view/index.js","webpack://portainer/./app/portainer/views/init/init-license.view/init-license.view.controller.js","webpack://portainer/./app/portainer/views/internal-auth/internalAuthController.js","webpack://portainer/./app/portainer/views/logout/logoutController.js","webpack://portainer/./app/portainer/views/main/mainController.js","webpack://portainer/./app/portainer/views/registries/create/createRegistry.js","webpack://portainer/./app/portainer/views/registries/create/createRegistryController.js","webpack://portainer/./app/portainer/views/registries/edit/registryController.js","webpack://portainer/./app/portainer/views/registries/registriesController.js","webpack://portainer/./app/portainer/views/settings/authentication/settingsAuthenticationController.js","webpack://portainer/./app/portainer/views/settings/edge-compute/index.js","webpack://portainer/./app/portainer/views/settings/edge-compute/settingsEdgeComputeController.js","webpack://portainer/./app/portainer/views/settings/settingsController.js","webpack://portainer/./app/portainer/views/sidebar/sidebarController.js","webpack://portainer/./app/portainer/views/stacks/create/createStackController.js","webpack://portainer/./app/portainer/views/stacks/edit/stackController.js","webpack://portainer/./app/portainer/views/stacks/stacksController.js","webpack://portainer/./app/portainer/views/tags/tagsController.js","webpack://portainer/./app/portainer/views/teams/edit/teamController.js","webpack://portainer/./app/portainer/views/teams/teamsController.js","webpack://portainer/./app/portainer/views/templates/templatesController.js","webpack://portainer/./app/portainer/views/users/edit/userController.js","webpack://portainer/./app/portainer/views/users/usersController.js","webpack://portainer/./app/portainer/views/wizard/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-aci/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-aci/wizard-aci.controller.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-docker/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-docker/wizard-docker.controller.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-kubernetes/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-kubernetes/wizard-kubernetes.controller.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-list/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoints.controller.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-stepper/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-stepper/wizard-endpoint-type/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-link/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-tls/index.js","webpack://portainer/./app/portainer/views/wizard/wizard-view.controller.js","webpack://portainer/./app/setup-tests/global-setup.js","webpack://portainer/./app/vendors.js","webpack://portainer/./app/agent/components/file-uploader/fileUploader.html","webpack://portainer/./app/agent/components/files-datatable/filesDatatable.html","webpack://portainer/./app/agent/components/host-browser/hostBrowser.html","webpack://portainer/./app/agent/components/node-selector/nodeSelector.html","webpack://portainer/./app/agent/components/volume-browser/volumeBrowser.html","webpack://portainer/./app/azure/components/azure-endpoint-config/azureEndpointConfig.html","webpack://portainer/./app/azure/components/azure-sidebar/azure-sidebar.html","webpack://portainer/./app/azure/components/datatables/containergroups-datatable/containerGroupsDatatable.html","webpack://portainer/./app/azure/views/containerinstances/container-instance-details/containerInstanceDetails.html","webpack://portainer/./app/azure/views/containerinstances/containerinstances.html","webpack://portainer/./app/azure/views/dashboard/dashboard.html","webpack://portainer/./app/docker/components/container-capabilities/containerCapabilities.html","webpack://portainer/./app/docker/components/container-restart-policy/container-restart-policy.html","webpack://portainer/./app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfo.html","webpack://portainer/./app/docker/components/datatables/configs-datatable/configsDatatable.html","webpack://portainer/./app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.html","webpack://portainer/./app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.html","webpack://portainer/./app/docker/components/datatables/events-datatable/eventsDatatable.html","webpack://portainer/./app/docker/components/datatables/images-datatable/imagesDatatable.html","webpack://portainer/./app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.html","webpack://portainer/./app/docker/components/datatables/networks-datatable/network-row-content/networkRowContent.html","webpack://portainer/./app/docker/components/datatables/networks-datatable/networksDatatable.html","webpack://portainer/./app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.html","webpack://portainer/./app/docker/components/datatables/nodes-datatable/nodesDatatable.html","webpack://portainer/./app/docker/components/datatables/secrets-datatable/secretsDatatable.html","webpack://portainer/./app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html","webpack://portainer/./app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.html","webpack://portainer/./app/docker/components/datatables/services-datatable/servicesDatatable.html","webpack://portainer/./app/docker/components/datatables/tasks-datatable/tasksDatatable.html","webpack://portainer/./app/docker/components/datatables/volumes-datatable/volumesDatatable.html","webpack://portainer/./app/docker/components/docker-sidebar/docker-sidebar.html","webpack://portainer/./app/docker/components/host-overview/host-overview.html","webpack://portainer/./app/docker/components/host-view-panels/devices-panel/devices-panel.html","webpack://portainer/./app/docker/components/host-view-panels/disks-panel/disks-panel.html","webpack://portainer/./app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html","webpack://portainer/./app/docker/components/host-view-panels/host-details-panel/host-details-panel.html","webpack://portainer/./app/docker/components/host-view-panels/node-availability-select/node-availability-select.html","webpack://portainer/./app/docker/components/host-view-panels/node-labels-table/node-labels-table.html","webpack://portainer/./app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html","webpack://portainer/./app/docker/components/imageRegistry/por-image-registry-rate-limits.html","webpack://portainer/./app/docker/components/imageRegistry/por-image-registry.html","webpack://portainer/./app/docker/components/log-viewer/logViewer.html","webpack://portainer/./app/docker/components/network-macvlan-form/networkMacvlanForm.html","webpack://portainer/./app/docker/components/volumesCIFSForm/volumesCifsForm.html","webpack://portainer/./app/docker/components/volumesNFSForm/volumesnfsForm.html","webpack://portainer/./app/docker/views/configs/configs.html","webpack://portainer/./app/docker/views/configs/create/createconfig.html","webpack://portainer/./app/docker/views/configs/edit/config.html","webpack://portainer/./app/docker/views/containers/console/attach.html","webpack://portainer/./app/docker/views/containers/console/exec.html","webpack://portainer/./app/docker/views/containers/containers.html","webpack://portainer/./app/docker/views/containers/create/createcontainer.html","webpack://portainer/./app/docker/views/containers/edit/container.html","webpack://portainer/./app/docker/views/containers/inspect/containerinspect.html","webpack://portainer/./app/docker/views/containers/logs/containerlogs.html","webpack://portainer/./app/docker/views/containers/stats/containerstats.html","webpack://portainer/./app/docker/views/dashboard/dashboard.html","webpack://portainer/./app/docker/views/docker-features-configuration/docker-features-configuration.html","webpack://portainer/./app/docker/views/events/events.html","webpack://portainer/./app/docker/views/host/host-browser-view/host-browser-view.html","webpack://portainer/./app/docker/views/host/host-view.html","webpack://portainer/./app/docker/views/images/build/buildimage.html","webpack://portainer/./app/docker/views/images/edit/image.html","webpack://portainer/./app/docker/views/images/images.html","webpack://portainer/./app/docker/views/images/import/importimage.html","webpack://portainer/./app/docker/views/networks/create/createnetwork.html","webpack://portainer/./app/docker/views/networks/edit/network.html","webpack://portainer/./app/docker/views/networks/networks.html","webpack://portainer/./app/docker/views/nodes/node-browser/node-browser.html","webpack://portainer/./app/docker/views/nodes/node-details/node-details-view.html","webpack://portainer/./app/docker/views/registries/access/registryAccess.html","webpack://portainer/./app/docker/views/secrets/create/createsecret.html","webpack://portainer/./app/docker/views/secrets/edit/secret.html","webpack://portainer/./app/docker/views/secrets/secrets.html","webpack://portainer/./app/docker/views/services/create/createservice.html","webpack://portainer/./app/docker/views/services/create/includes/config.html","webpack://portainer/./app/docker/views/services/create/includes/resources-placement.html","webpack://portainer/./app/docker/views/services/create/includes/secret.html","webpack://portainer/./app/docker/views/services/create/includes/update-restart.html","webpack://portainer/./app/docker/views/services/edit/includes/configs.html","webpack://portainer/./app/docker/views/services/edit/includes/constraints.html","webpack://portainer/./app/docker/views/services/edit/includes/container-specs.html","webpack://portainer/./app/docker/views/services/edit/includes/containerlabels.html","webpack://portainer/./app/docker/views/services/edit/includes/environmentvariables.html","webpack://portainer/./app/docker/views/services/edit/includes/hosts.html","webpack://portainer/./app/docker/views/services/edit/includes/image.html","webpack://portainer/./app/docker/views/services/edit/includes/logging.html","webpack://portainer/./app/docker/views/services/edit/includes/mounts.html","webpack://portainer/./app/docker/views/services/edit/includes/networks.html","webpack://portainer/./app/docker/views/services/edit/includes/placementPreferences.html","webpack://portainer/./app/docker/views/services/edit/includes/ports.html","webpack://portainer/./app/docker/views/services/edit/includes/resources.html","webpack://portainer/./app/docker/views/services/edit/includes/restart.html","webpack://portainer/./app/docker/views/services/edit/includes/secrets.html","webpack://portainer/./app/docker/views/services/edit/includes/servicelabels.html","webpack://portainer/./app/docker/views/services/edit/includes/tasks.html","webpack://portainer/./app/docker/views/services/edit/includes/updateconfig.html","webpack://portainer/./app/docker/views/services/edit/service.html","webpack://portainer/./app/docker/views/services/logs/servicelogs.html","webpack://portainer/./app/docker/views/services/services.html","webpack://portainer/./app/docker/views/swarm/swarm.html","webpack://portainer/./app/docker/views/swarm/visualizer/swarmvisualizer.html","webpack://portainer/./app/docker/views/tasks/edit/task.html","webpack://portainer/./app/docker/views/tasks/logs/tasklogs.html","webpack://portainer/./app/docker/views/volumes/browse/browsevolume.html","webpack://portainer/./app/docker/views/volumes/create/createvolume.html","webpack://portainer/./app/docker/views/volumes/edit/volume.html","webpack://portainer/./app/docker/views/volumes/volumes.html","webpack://portainer/./app/edge/components/associated-endpoints-datatable/associatedEndpointsDatatable.html","webpack://portainer/./app/edge/components/edge-groups-selector/edgeGroupsSelector.html","webpack://portainer/./app/edge/components/edge-job-form/edgeJobForm.html","webpack://portainer/./app/edge/components/edge-job-results-datatable/edgeJobResultsDatatable.html","webpack://portainer/./app/edge/components/edge-jobs-datatable/edgeJobsDatatable.html","webpack://portainer/./app/edge/components/edge-stack-deployment-type-selector/edge-stack-deployment-type-selector.html","webpack://portainer/./app/edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatable.html","webpack://portainer/./app/edge/components/edge-stack-status/edgeStackStatus.html","webpack://portainer/./app/edge/components/edge-stacks-datatable/edgeStacksDatatable.html","webpack://portainer/./app/edge/components/edit-edge-stack-form/editEdgeStackForm.html","webpack://portainer/./app/edge/components/group-form/groupForm.html","webpack://portainer/./app/edge/components/groups-datatable/groupsDatatable.html","webpack://portainer/./app/edge/views/edge-devices/edgeDevicesView/edgeDevicesView.html","webpack://portainer/./app/edge/views/edge-groups/createEdgeGroupView/createEdgeGroupView.html","webpack://portainer/./app/edge/views/edge-groups/edgeGroupsView/edgeGroupsView.html","webpack://portainer/./app/edge/views/edge-groups/editEdgeGroupView/editEdgeGroupView.html","webpack://portainer/./app/edge/views/edge-jobs/createEdgeJobView/createEdgeJobView.html","webpack://portainer/./app/edge/views/edge-jobs/edgeJob/edgeJob.html","webpack://portainer/./app/edge/views/edge-jobs/edgeJobsView/edgeJobsView.html","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/create-edge-stack-view.html","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/docker-compose-form/docker-compose-form.html","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/kube-deploy-description/kube-deploy-description.html","webpack://portainer/./app/edge/views/edge-stacks/createEdgeStackView/kube-manifest-form/kube-manifest-form.html","webpack://portainer/./app/edge/views/edge-stacks/edgeStacksView/edgeStacksView.html","webpack://portainer/./app/edge/views/edge-stacks/editEdgeStackView/editEdgeStackView.html","webpack://portainer/./app/kubernetes/components/datatables/application/containers-datatable/containersDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable-details/applications-datatable-details.html","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable-url/applications-datatable-url.html","webpack://portainer/./app/kubernetes/components/datatables/applications-datatable/applicationsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/configurations-datatable/configurationsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/events-datatable/eventsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/nodes-datatable/nodesDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.html","webpack://portainer/./app/kubernetes/components/datatables/volumes-datatable/volumesDatatable.html","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-add-repository/helm-add-repository.html","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list-item/helm-templates-list-item.html","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list.html","webpack://portainer/./app/kubernetes/components/helm/helm-templates/helm-templates.html","webpack://portainer/./app/kubernetes/components/kube-services/kube-services-item/kube-services-item.html","webpack://portainer/./app/kubernetes/components/kube-services/kube-services.html","webpack://portainer/./app/kubernetes/components/kubectl-shell/kubectl-shell.html","webpack://portainer/./app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.html","webpack://portainer/./app/kubernetes/components/kubernetes-sidebar/kubernetes-sidebar.html","webpack://portainer/./app/kubernetes/components/resource-reservation/resourceReservation.html","webpack://portainer/./app/kubernetes/components/view-header/viewHeader.html","webpack://portainer/./app/kubernetes/components/view-loading/viewLoading.html","webpack://portainer/./app/kubernetes/components/yaml-inspector/yamlInspector.html","webpack://portainer/./app/kubernetes/custom-templates/kube-create-custom-template-view/kube-create-custom-template-view.html","webpack://portainer/./app/kubernetes/custom-templates/kube-custom-templates-view/kube-custom-templates-view.html","webpack://portainer/./app/kubernetes/custom-templates/kube-edit-custom-template-view/kube-edit-custom-template-view.html","webpack://portainer/./app/kubernetes/registries/kube-registry-access-view/kube-registry-access-view.html","webpack://portainer/./app/kubernetes/views/applications/applications.html","webpack://portainer/./app/kubernetes/views/applications/console/console.html","webpack://portainer/./app/kubernetes/views/applications/create/createApplication.html","webpack://portainer/./app/kubernetes/views/applications/edit/application.html","webpack://portainer/./app/kubernetes/views/applications/edit/components/ingress-table/ingress-table.html","webpack://portainer/./app/kubernetes/views/applications/edit/components/placements-datatable/template.html","webpack://portainer/./app/kubernetes/views/applications/edit/components/services-table/services-table.html","webpack://portainer/./app/kubernetes/views/applications/helm/helm.html","webpack://portainer/./app/kubernetes/views/applications/logs/logs.html","webpack://portainer/./app/kubernetes/views/applications/stats/stats.html","webpack://portainer/./app/kubernetes/views/cluster/cluster.html","webpack://portainer/./app/kubernetes/views/cluster/node/node.html","webpack://portainer/./app/kubernetes/views/cluster/node/stats/stats.html","webpack://portainer/./app/kubernetes/views/configurations/configurations.html","webpack://portainer/./app/kubernetes/views/configurations/create/createConfiguration.html","webpack://portainer/./app/kubernetes/views/configurations/edit/configuration.html","webpack://portainer/./app/kubernetes/views/configure/configure.html","webpack://portainer/./app/kubernetes/views/dashboard/dashboard.html","webpack://portainer/./app/kubernetes/views/deploy/deploy.html","webpack://portainer/./app/kubernetes/views/resource-pools/access/resourcePoolAccess.html","webpack://portainer/./app/kubernetes/views/resource-pools/components/storage-class-switch/storage-class-switch.html","webpack://portainer/./app/kubernetes/views/resource-pools/create/createResourcePool.html","webpack://portainer/./app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/template.html","webpack://portainer/./app/kubernetes/views/resource-pools/edit/resourcePool.html","webpack://portainer/./app/kubernetes/views/resource-pools/resourcePools.html","webpack://portainer/./app/kubernetes/views/stacks/logs/logs.html","webpack://portainer/./app/kubernetes/views/summary/summary.html","webpack://portainer/./app/kubernetes/views/volumes/components/volumes-storages-datatable/template.html","webpack://portainer/./app/kubernetes/views/volumes/edit/volume.html","webpack://portainer/./app/kubernetes/views/volumes/volumes.html","webpack://portainer/./app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.html","webpack://portainer/./app/portainer/components/PageHeader/HeaderContainer.html","webpack://portainer/./app/portainer/components/PageHeader/HeaderContent.html","webpack://portainer/./app/portainer/components/PageHeader/HeaderTitle.html","webpack://portainer/./app/portainer/components/access-datatable/accessDatatable.html","webpack://portainer/./app/portainer/components/access-table/accessTable.html","webpack://portainer/./app/portainer/components/accessControlForm/porAccessControlForm.html","webpack://portainer/./app/portainer/components/accessControlPanel/porAccessControlPanel.html","webpack://portainer/./app/portainer/components/accessManagement/por-access-management-users-selector/por-access-management-users-selector.html","webpack://portainer/./app/portainer/components/accessManagement/porAccessManagement.html","webpack://portainer/./app/portainer/components/associated-endpoints-selector/associatedEndpointsSelector.html","webpack://portainer/./app/portainer/components/beta-panel/betaPanel.html","webpack://portainer/./app/portainer/components/code-editor/codeEditor.html","webpack://portainer/./app/portainer/components/copy-button/copy-button.html","webpack://portainer/./app/portainer/components/custom-template-common-fields/customTemplateCommonFields.html","webpack://portainer/./app/portainer/components/custom-template-selector/custom-template-selector.html","webpack://portainer/./app/portainer/components/custom-templates-list/customTemplatesList.html","webpack://portainer/./app/portainer/components/datatables/access-tokens-datatable/access-tokens-datatable.html","webpack://portainer/./app/portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.html","webpack://portainer/./app/portainer/components/datatables/endpoints-datatable/endpointsDatatable.html","webpack://portainer/./app/portainer/components/datatables/filter/datatable-filter.html","webpack://portainer/./app/portainer/components/datatables/groups-datatable/groupsDatatable.html","webpack://portainer/./app/portainer/components/datatables/pagination/pagination.html","webpack://portainer/./app/portainer/components/datatables/registries-datatable/registriesDatatable.html","webpack://portainer/./app/portainer/components/datatables/searchbar/datatable-searchbar.html","webpack://portainer/./app/portainer/components/datatables/sort-icon/datatable-sort-icon.html","webpack://portainer/./app/portainer/components/datatables/stacks-datatable/stacksDatatable.html","webpack://portainer/./app/portainer/components/datatables/strings-datatable/strings-datatable.html","webpack://portainer/./app/portainer/components/datatables/tags-datatable/tagsDatatable.html","webpack://portainer/./app/portainer/components/datatables/teams-datatable/teamsDatatable.html","webpack://portainer/./app/portainer/components/datatables/titlebar/datatable-titlebar.html","webpack://portainer/./app/portainer/components/datatables/users-datatable/usersDatatable.html","webpack://portainer/./app/portainer/components/date-range-picker/date-range-picker.html","webpack://portainer/./app/portainer/components/endpoint-list/endpoint-item/endpointItem.html","webpack://portainer/./app/portainer/components/endpoint-list/endpointList.html","webpack://portainer/./app/portainer/components/endpoint-selector/endpointSelector.html","webpack://portainer/./app/portainer/components/endpointSecurity/porEndpointSecurity.html","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-panel.html","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html","webpack://portainer/./app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html","webpack://portainer/./app/portainer/components/form-components/file-upload-form/file-upload-form.html","webpack://portainer/./app/portainer/components/form-components/web-editor-form/web-editor-form.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-file-item/git-form-additional-file-item.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-files-panel.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-auto-update-fieldset/git-form-auto-update-fieldset.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-compose-path-field/git-form-compose-path-field.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-info-panel/git-form-info-panel.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-ref-field/git-form-ref-field.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form-url-field/git-form-url-field.html","webpack://portainer/./app/portainer/components/forms/git-form/git-form.html","webpack://portainer/./app/portainer/components/forms/group-form/groupForm.html","webpack://portainer/./app/portainer/components/forms/kubernetes-app-git-form/kubernetes-app-git-form.html","webpack://portainer/./app/portainer/components/forms/kubernetes-redeploy-app-git-form/kubernetes-redeploy-app-git-form.html","webpack://portainer/./app/portainer/components/forms/registry-form-aws-ecr/registry-form-ecr.html","webpack://portainer/./app/portainer/components/forms/registry-form-azure/registry-form-azure.html","webpack://portainer/./app/portainer/components/forms/registry-form-custom/registry-form-custom.html","webpack://portainer/./app/portainer/components/forms/registry-form-dockerhub/registry-form-dockerhub.html","webpack://portainer/./app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.html","webpack://portainer/./app/portainer/components/forms/registry-form-gitlab/registry-form-gitlab.html","webpack://portainer/./app/portainer/components/forms/registry-form-proget/registry-form-proget.html","webpack://portainer/./app/portainer/components/forms/registry-form-quay/registry-form-quay.html","webpack://portainer/./app/portainer/components/forms/stack-from-template-form/stackFromTemplateForm.html","webpack://portainer/./app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html","webpack://portainer/./app/portainer/components/group-association-table/groupAssociationTable.html","webpack://portainer/./app/portainer/components/information-panel-offline/informationPanelOffline.html","webpack://portainer/./app/portainer/components/information-panel/informationPanel.html","webpack://portainer/./app/portainer/components/motd-panel/motdPanel.html","webpack://portainer/./app/portainer/components/product-list/product-item/productItem.html","webpack://portainer/./app/portainer/components/product-list/productList.html","webpack://portainer/./app/portainer/components/registry-details/registry-details.html","webpack://portainer/./app/portainer/components/sensitive-details/sensitive-details.html","webpack://portainer/./app/portainer/components/show-hide/show-hide.html","webpack://portainer/./app/portainer/components/sidebar/sidebar-menu-item/sidebar-menu-item.html","webpack://portainer/./app/portainer/components/sidebar/sidebar-menu/sidebar-menu.html","webpack://portainer/./app/portainer/components/sidebar/sidebar-section/sidebar-section.html","webpack://portainer/./app/portainer/components/slider/slider.html","webpack://portainer/./app/portainer/components/stack-duplication-form/stack-duplication-form.html","webpack://portainer/./app/portainer/components/status-indicator/status-indicator.html","webpack://portainer/./app/portainer/components/tag-selector/tagSelector.html","webpack://portainer/./app/portainer/components/template-list/template-item/templateItem.html","webpack://portainer/./app/portainer/components/template-list/templateList.html","webpack://portainer/./app/portainer/components/theme/theme-settings.html","webpack://portainer/./app/portainer/components/time-window-display/time-window-display.html","webpack://portainer/./app/portainer/components/time-window-picker/time-window-picker.html","webpack://portainer/./app/portainer/license-management/add-license.view/add-license.view.html","webpack://portainer/./app/portainer/license-management/add-license.view/licenses-form/license-item/license-item.html","webpack://portainer/./app/portainer/license-management/add-license.view/licenses-form/licenses-form.html","webpack://portainer/./app/portainer/license-management/license-node-panel.component/license-node-panel.html","webpack://portainer/./app/portainer/license-management/licenses.view/license-info/license-info.html","webpack://portainer/./app/portainer/license-management/licenses.view/licenses-datatable/licenses-datatable.html","webpack://portainer/./app/portainer/license-management/licenses.view/licenses.view.html","webpack://portainer/./app/portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.html","webpack://portainer/./app/portainer/oauth/components/oauth-settings/oauth-settings.html","webpack://portainer/./app/portainer/rbac/components/access-viewer/access-viewer-datatable/access-viewer-datatable.html","webpack://portainer/./app/portainer/rbac/components/access-viewer/access-viewer.html","webpack://portainer/./app/portainer/rbac/components/roles-datatable/roles-datatable.html","webpack://portainer/./app/portainer/rbac/views/roles/roles.html","webpack://portainer/./app/portainer/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.html","webpack://portainer/./app/portainer/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.html","webpack://portainer/./app/portainer/registry-management/views/configure/template.html","webpack://portainer/./app/portainer/registry-management/views/repositories/edit/progression-modal/template.html","webpack://portainer/./app/portainer/registry-management/views/repositories/edit/template.html","webpack://portainer/./app/portainer/registry-management/views/repositories/tag/template.html","webpack://portainer/./app/portainer/registry-management/views/repositories/template.html","webpack://portainer/./app/portainer/settings/authentication/auto-user-provision-toggle/auto-user-provision-toggle.html","webpack://portainer/./app/portainer/settings/authentication/internal-auth/internal-auth.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ad-settings/ad-settings.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-connectivity-check/ldap-connectivity-check.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-admin-group/ldap-custom-admin-group.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-group-search/ldap-custom-group-search.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-custom-user-search/ldap-custom-user-search.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-group-search-item/ldap-group-search-item.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-group-search/ldap-group-search.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-groups-datatable/ldap-groups-datatable.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-custom/ldap-settings-custom.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-dn-builder/ldap-settings-dn-builder.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-group-dn-builder/ldap-settings-group-dn-builder.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-openldap/ldap-settings-openldap.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-security/ldap-settings-security.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings-test-login/ldap-settings-test-login.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-settings/ldap-settings.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-user-search-item/ldap-user-search-item.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-user-search/ldap-user-search.html","webpack://portainer/./app/portainer/settings/authentication/ldap/ldap-users-datatable/ldap-users-datatable.html","webpack://portainer/./app/portainer/settings/authentication/save-auth-settings-button/save-auth-settings-button.html","webpack://portainer/./app/portainer/settings/general/ssl-certificate/ssl-certificate.html","webpack://portainer/./app/portainer/user-activity/activity-logs-view/activity-logs-datatable/activity-logs-datatable.html","webpack://portainer/./app/portainer/user-activity/activity-logs-view/activity-logs-view.html","webpack://portainer/./app/portainer/user-activity/auth-logs-view/auth-logs-datatable/auth-logs-datatable.html","webpack://portainer/./app/portainer/user-activity/auth-logs-view/auth-logs-view.html","webpack://portainer/./app/portainer/views/account/account.html","webpack://portainer/./app/portainer/views/account/create-user-access-token/create-user-access-token.html","webpack://portainer/./app/portainer/views/auth/auth.html","webpack://portainer/./app/portainer/views/custom-templates/create-custom-template-view/createCustomTemplateView.html","webpack://portainer/./app/portainer/views/custom-templates/custom-templates-view/customTemplatesView.html","webpack://portainer/./app/portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateView.html","webpack://portainer/./app/portainer/views/devices/import/importDevice.html","webpack://portainer/./app/portainer/views/devices/profiles/add/addProfile.html","webpack://portainer/./app/portainer/views/devices/profiles/edit/editProfile.html","webpack://portainer/./app/portainer/views/endpoint-registries/registries.html","webpack://portainer/./app/portainer/views/endpoints/access/endpointAccess.html","webpack://portainer/./app/portainer/views/endpoints/create/createendpoint.html","webpack://portainer/./app/portainer/views/endpoints/edit/endpoint.html","webpack://portainer/./app/portainer/views/endpoints/endpoints.html","webpack://portainer/./app/portainer/views/endpoints/kvm/endpointKVM.html","webpack://portainer/./app/portainer/views/groups/access/groupAccess.html","webpack://portainer/./app/portainer/views/groups/create/creategroup.html","webpack://portainer/./app/portainer/views/groups/edit/group.html","webpack://portainer/./app/portainer/views/groups/groups.html","webpack://portainer/./app/portainer/views/home/home.html","webpack://portainer/./app/portainer/views/init/admin/initAdmin.html","webpack://portainer/./app/portainer/views/init/endpoint/includes/agent.html","webpack://portainer/./app/portainer/views/init/endpoint/includes/localDocker.html","webpack://portainer/./app/portainer/views/init/endpoint/includes/localKubernetes.html","webpack://portainer/./app/portainer/views/init/endpoint/initEndpoint.html","webpack://portainer/./app/portainer/views/init/init-license.view/init-license.view.html","webpack://portainer/./app/portainer/views/internal-auth/internal-auth.html","webpack://portainer/./app/portainer/views/logout/logout.html","webpack://portainer/./app/portainer/views/registries/create/createRegistry.html","webpack://portainer/./app/portainer/views/registries/edit/registry.html","webpack://portainer/./app/portainer/views/registries/registries.html","webpack://portainer/./app/portainer/views/settings/authentication/settingsAuthentication.html","webpack://portainer/./app/portainer/views/settings/edge-compute/settingsEdgeCompute.html","webpack://portainer/./app/portainer/views/settings/settings.html","webpack://portainer/./app/portainer/views/sidebar/sidebar.html","webpack://portainer/./app/portainer/views/stacks/create/createstack.html","webpack://portainer/./app/portainer/views/stacks/edit/stack.html","webpack://portainer/./app/portainer/views/stacks/stacks.html","webpack://portainer/./app/portainer/views/tags/tags.html","webpack://portainer/./app/portainer/views/teams/edit/team.html","webpack://portainer/./app/portainer/views/teams/teams.html","webpack://portainer/./app/portainer/views/templates/templates.html","webpack://portainer/./app/portainer/views/users/edit/user.html","webpack://portainer/./app/portainer/views/users/users.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-aci/wizard-aci.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-docker/wizard-docker.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-kubernetes/wizard-kubernetes.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-list/wizard-endpoint-list.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-endpoints.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-stepper/wizard-endpoint-type/wizard-endpoint-type.html","webpack://portainer/./app/portainer/views/wizard/wizard-endpoints/wizard-stepper/wizard-stepper.html","webpack://portainer/./app/portainer/views/wizard/wizard-link/wizard-link.html","webpack://portainer/./app/portainer/views/wizard/wizard-tls/wizard-tls.html","webpack://portainer/./app/portainer/views/wizard/wizard-view.html"],"sourcesContent":["var map = {\n\t\"./__mocks__/fileMock.js\": 14691,\n\t\"./__mocks__/styleMock.js\": 12534,\n\t\"./agent/components/file-uploader/fileUploaderController.js\": 75947,\n\t\"./agent/components/file-uploader/index.js\": 38123,\n\t\"./agent/components/files-datatable/index.js\": 46161,\n\t\"./agent/components/host-browser/hostBrowserController.js\": 10822,\n\t\"./agent/components/host-browser/index.js\": 70627,\n\t\"./agent/components/node-selector/index.js\": 60744,\n\t\"./agent/components/node-selector/nodeSelectorController.js\": 42102,\n\t\"./agent/components/volume-browser/index.js\": 41775,\n\t\"./agent/components/volume-browser/volumeBrowserController.js\": 14087,\n\t\"./agent/index.js\": 26317,\n\t\"./agent/models/agent.js\": 99662,\n\t\"./agent/rest/agent.js\": 13481,\n\t\"./agent/rest/browse.js\": 56192,\n\t\"./agent/rest/dockerhub.js\": 26084,\n\t\"./agent/rest/host.js\": 74298,\n\t\"./agent/rest/ping.js\": 79688,\n\t\"./agent/rest/response/browse.js\": 94477,\n\t\"./agent/rest/v1/agent.js\": 40941,\n\t\"./agent/rest/v1/browse.js\": 91130,\n\t\"./agent/services/agentService.js\": 78548,\n\t\"./agent/services/hostBrowserService.js\": 77884,\n\t\"./agent/services/pingService.js\": 38918,\n\t\"./agent/services/volumeBrowserService.js\": 45824,\n\t\"./angulartics.matomo/index.js\": 48385,\n\t\"./app.js\": 54905,\n\t\"./assets/css/index.js\": 42311,\n\t\"./azure/_module.js\": 61094,\n\t\"./azure/components/azure-endpoint-config/azure-endpoint-config.js\": 74370,\n\t\"./azure/components/azure-sidebar/index.js\": 68037,\n\t\"./azure/components/datatables/containergroups-datatable/containerGroupsDatatable.js\": 79380,\n\t\"./azure/models/container_group.js\": 73216,\n\t\"./azure/models/location.js\": 76606,\n\t\"./azure/models/resource_group.js\": 18779,\n\t\"./azure/models/subscription.js\": 79350,\n\t\"./azure/rest/azure.js\": 1944,\n\t\"./azure/rest/container_group.js\": 29382,\n\t\"./azure/rest/location.js\": 59630,\n\t\"./azure/rest/provider.js\": 55489,\n\t\"./azure/rest/resource_group.js\": 88609,\n\t\"./azure/rest/subscription.js\": 33086,\n\t\"./azure/services/azureService.js\": 8961,\n\t\"./azure/services/containerGroupService.js\": 58825,\n\t\"./azure/services/locationService.js\": 49153,\n\t\"./azure/services/resourceGroupService.js\": 62964,\n\t\"./azure/services/subscriptionService.js\": 96564,\n\t\"./azure/views/containerinstances/container-instance-details/containerInstanceDetailsController.js\": 50309,\n\t\"./azure/views/containerinstances/container-instance-details/index.js\": 9877,\n\t\"./azure/views/containerinstances/containerInstancesController.js\": 56701,\n\t\"./azure/views/dashboard/dashboardController.js\": 54236,\n\t\"./config.js\": 98767,\n\t\"./constants.js\": 71541,\n\t\"./docker/__module.js\": 8522,\n\t\"./docker/components/container-capabilities/container-capabilities.js\": 83088,\n\t\"./docker/components/container-restart-policy/container-restart-policy-controller.js\": 17592,\n\t\"./docker/components/container-restart-policy/container-restart-policy.js\": 8270,\n\t\"./docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js\": 15772,\n\t\"./docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfoController.js\": 26419,\n\t\"./docker/components/datatables/configs-datatable/configsDatatable.js\": 62135,\n\t\"./docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js\": 65532,\n\t\"./docker/components/datatables/container-networks-datatable/containerNetworksDatatableController.js\": 50015,\n\t\"./docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js\": 67723,\n\t\"./docker/components/datatables/events-datatable/eventsDatatable.js\": 3716,\n\t\"./docker/components/datatables/images-datatable/imagesDatatable.js\": 61389,\n\t\"./docker/components/datatables/images-datatable/imagesDatatableController.js\": 40650,\n\t\"./docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js\": 78570,\n\t\"./docker/components/datatables/networks-datatable/network-row-content/networkRowContent.js\": 24342,\n\t\"./docker/components/datatables/networks-datatable/networksDatatable.js\": 21035,\n\t\"./docker/components/datatables/networks-datatable/networksDatatableController.js\": 22821,\n\t\"./docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js\": 90712,\n\t\"./docker/components/datatables/nodes-datatable/nodesDatatable.js\": 66951,\n\t\"./docker/components/datatables/secrets-datatable/secretsDatatable.js\": 1087,\n\t\"./docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js\": 30700,\n\t\"./docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js\": 83076,\n\t\"./docker/components/datatables/services-datatable/actions/servicesDatatableActions.js\": 88840,\n\t\"./docker/components/datatables/services-datatable/actions/servicesDatatableActionsController.js\": 3474,\n\t\"./docker/components/datatables/services-datatable/servicesDatatable.js\": 22601,\n\t\"./docker/components/datatables/services-datatable/servicesDatatableController.js\": 46311,\n\t\"./docker/components/datatables/tasks-datatable/tasksDatatable.js\": 77886,\n\t\"./docker/components/datatables/tasks-datatable/tasksDatatableController.js\": 33740,\n\t\"./docker/components/datatables/volumes-datatable/volumesDatatable.js\": 75198,\n\t\"./docker/components/datatables/volumes-datatable/volumesDatatableController.js\": 72091,\n\t\"./docker/components/docker-sidebar/docker-sidebar.js\": 56784,\n\t\"./docker/components/host-overview/host-overview.js\": 37610,\n\t\"./docker/components/host-view-panels/devices-panel/devices-panel.js\": 85943,\n\t\"./docker/components/host-view-panels/disks-panel/disks-panel.js\": 40210,\n\t\"./docker/components/host-view-panels/engine-details-panel/engine-details-panel.js\": 25203,\n\t\"./docker/components/host-view-panels/host-details-panel/host-details-panel.js\": 68181,\n\t\"./docker/components/host-view-panels/node-availability-select/node-availability-select-controller.js\": 44162,\n\t\"./docker/components/host-view-panels/node-availability-select/node-availability-select.js\": 28031,\n\t\"./docker/components/host-view-panels/node-labels-table/node-labels-table-controller.js\": 55024,\n\t\"./docker/components/host-view-panels/node-labels-table/node-labels-table.js\": 96399,\n\t\"./docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel-controller.js\": 70395,\n\t\"./docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js\": 98186,\n\t\"./docker/components/imageRegistry/por-image-registry-rate-limits.controller.js\": 72749,\n\t\"./docker/components/imageRegistry/por-image-registry-rate-limits.js\": 64906,\n\t\"./docker/components/imageRegistry/por-image-registry.controller.js\": 22429,\n\t\"./docker/components/imageRegistry/por-image-registry.js\": 91653,\n\t\"./docker/components/log-viewer/log-viewer.js\": 69760,\n\t\"./docker/components/log-viewer/logViewerController.js\": 89410,\n\t\"./docker/components/network-macvlan-form/network-macvlan-form.js\": 22852,\n\t\"./docker/components/network-macvlan-form/networkMacvlanFormController.js\": 3476,\n\t\"./docker/components/network-macvlan-form/networkMacvlanFormModel.js\": 50373,\n\t\"./docker/components/volumesCIFSForm/volumesCifsForm.js\": 8470,\n\t\"./docker/components/volumesCIFSForm/volumesCifsFormModel.js\": 86668,\n\t\"./docker/components/volumesNFSForm/volumes-nfs-form.js\": 87959,\n\t\"./docker/components/volumesNFSForm/volumesNFSFormModel.js\": 4819,\n\t\"./docker/filters/filters.js\": 50352,\n\t\"./docker/helpers/configHelper.js\": 52161,\n\t\"./docker/helpers/constraintsHelper.js\": 82556,\n\t\"./docker/helpers/containerHelper.js\": 5204,\n\t\"./docker/helpers/imageHelper.js\": 20886,\n\t\"./docker/helpers/infoHelper.js\": 46313,\n\t\"./docker/helpers/labelHelper.js\": 6264,\n\t\"./docker/helpers/logHelper.js\": 9954,\n\t\"./docker/helpers/networkHelper.js\": 69452,\n\t\"./docker/helpers/nodeHelper.js\": 80677,\n\t\"./docker/helpers/secretHelper.js\": 45665,\n\t\"./docker/helpers/serviceHelper.js\": 18743,\n\t\"./docker/helpers/taskHelper.js\": 22588,\n\t\"./docker/helpers/volumeHelper.js\": 60069,\n\t\"./docker/interceptors/containersInterceptor.js\": 8691,\n\t\"./docker/interceptors/imagesInterceptor.js\": 18872,\n\t\"./docker/interceptors/infoInterceptor.js\": 84395,\n\t\"./docker/interceptors/networksInterceptor.js\": 2630,\n\t\"./docker/interceptors/versionInterceptor.js\": 73166,\n\t\"./docker/interceptors/volumesInterceptor.js\": 33022,\n\t\"./docker/models/config.js\": 66807,\n\t\"./docker/models/container.js\": 12064,\n\t\"./docker/models/containerCapabilities.js\": 66328,\n\t\"./docker/models/event.js\": 44333,\n\t\"./docker/models/image.js\": 84647,\n\t\"./docker/models/imageDetails.js\": 56946,\n\t\"./docker/models/imageLayer.js\": 75208,\n\t\"./docker/models/network.js\": 70983,\n\t\"./docker/models/node.js\": 11339,\n\t\"./docker/models/plugin.js\": 34161,\n\t\"./docker/models/porImageRegistry.js\": 76939,\n\t\"./docker/models/secret.js\": 89638,\n\t\"./docker/models/service.js\": 7456,\n\t\"./docker/models/swarm.js\": 90906,\n\t\"./docker/models/task.js\": 59146,\n\t\"./docker/models/volume.js\": 80682,\n\t\"./docker/rest/build.js\": 27401,\n\t\"./docker/rest/commit.js\": 66055,\n\t\"./docker/rest/config.js\": 12477,\n\t\"./docker/rest/container.js\": 82791,\n\t\"./docker/rest/exec.js\": 6396,\n\t\"./docker/rest/image.js\": 10679,\n\t\"./docker/rest/network.js\": 96452,\n\t\"./docker/rest/node.js\": 71989,\n\t\"./docker/rest/plugin.js\": 357,\n\t\"./docker/rest/response/handlers.js\": 12944,\n\t\"./docker/rest/response/image.js\": 89615,\n\t\"./docker/rest/secret.js\": 64522,\n\t\"./docker/rest/service.js\": 49449,\n\t\"./docker/rest/swarm.js\": 52358,\n\t\"./docker/rest/system.js\": 61489,\n\t\"./docker/rest/systemEndpoint.js\": 86666,\n\t\"./docker/rest/task.js\": 3446,\n\t\"./docker/rest/volume.js\": 28192,\n\t\"./docker/services/buildService.js\": 90544,\n\t\"./docker/services/configService.js\": 81287,\n\t\"./docker/services/containerService.js\": 40725,\n\t\"./docker/services/execService.js\": 9401,\n\t\"./docker/services/imageService.js\": 45203,\n\t\"./docker/services/networkService.js\": 23116,\n\t\"./docker/services/nodeService.js\": 39272,\n\t\"./docker/services/pluginService.js\": 52589,\n\t\"./docker/services/secretService.js\": 50225,\n\t\"./docker/services/serviceService.js\": 52550,\n\t\"./docker/services/swarmService.js\": 15268,\n\t\"./docker/services/systemService.js\": 39983,\n\t\"./docker/services/taskService.js\": 98585,\n\t\"./docker/services/volumeService.js\": 31746,\n\t\"./docker/views/configs/configsController.js\": 42177,\n\t\"./docker/views/configs/create/createConfigController.js\": 96068,\n\t\"./docker/views/configs/edit/configController.js\": 63301,\n\t\"./docker/views/containers/console/containerConsoleController.js\": 85196,\n\t\"./docker/views/containers/containersController.js\": 89610,\n\t\"./docker/views/containers/create/createContainerController.js\": 51079,\n\t\"./docker/views/containers/edit/containerController.js\": 94518,\n\t\"./docker/views/containers/inspect/containerInspectController.js\": 62897,\n\t\"./docker/views/containers/logs/containerLogsController.js\": 47381,\n\t\"./docker/views/containers/stats/containerStatsController.js\": 19393,\n\t\"./docker/views/dashboard/dashboardController.js\": 88444,\n\t\"./docker/views/docker-features-configuration/docker-features-configuration.controller.js\": 25006,\n\t\"./docker/views/docker-features-configuration/index.js\": 68958,\n\t\"./docker/views/events/eventsController.js\": 63181,\n\t\"./docker/views/host/host-browser-view/host-browser-view-controller.js\": 34776,\n\t\"./docker/views/host/host-browser-view/host-browser-view.js\": 24233,\n\t\"./docker/views/host/host-view-controller.js\": 43279,\n\t\"./docker/views/host/host-view.js\": 15906,\n\t\"./docker/views/images/build/buildImageController.js\": 88741,\n\t\"./docker/views/images/edit/imageController.js\": 37391,\n\t\"./docker/views/images/imagesController.js\": 12107,\n\t\"./docker/views/images/import/importImageController.js\": 14521,\n\t\"./docker/views/networks/create/createNetworkController.js\": 543,\n\t\"./docker/views/networks/edit/networkController.js\": 2669,\n\t\"./docker/views/networks/networksController.js\": 74225,\n\t\"./docker/views/nodes/node-browser/node-browser-controller.js\": 50451,\n\t\"./docker/views/nodes/node-browser/node-browser.js\": 83602,\n\t\"./docker/views/nodes/node-details/node-details-view-controller.js\": 29978,\n\t\"./docker/views/nodes/node-details/node-details-view.js\": 74275,\n\t\"./docker/views/registries/access/registryAccess.js\": 77152,\n\t\"./docker/views/registries/access/registryAccessController.js\": 40106,\n\t\"./docker/views/secrets/create/createSecretController.js\": 65968,\n\t\"./docker/views/secrets/edit/secretController.js\": 20842,\n\t\"./docker/views/secrets/secretsController.js\": 69654,\n\t\"./docker/views/services/create/createServiceController.js\": 91188,\n\t\"./docker/views/services/edit/serviceController.js\": 1816,\n\t\"./docker/views/services/logs/serviceLogsController.js\": 59139,\n\t\"./docker/views/services/servicesController.js\": 48566,\n\t\"./docker/views/swarm/swarmController.js\": 9104,\n\t\"./docker/views/swarm/visualizer/swarmVisualizerController.js\": 83456,\n\t\"./docker/views/tasks/edit/taskController.js\": 75349,\n\t\"./docker/views/tasks/logs/taskLogsController.js\": 93356,\n\t\"./docker/views/volumes/browse/browseVolumeController.js\": 63137,\n\t\"./docker/views/volumes/create/createVolumeController.js\": 61362,\n\t\"./docker/views/volumes/edit/volumeController.js\": 28862,\n\t\"./docker/views/volumes/volumesController.js\": 6002,\n\t\"./edge/__module.js\": 66250,\n\t\"./edge/components/associated-endpoints-datatable/associatedEndpointsDatatableController.js\": 24381,\n\t\"./edge/components/associated-endpoints-datatable/index.js\": 34139,\n\t\"./edge/components/edge-groups-selector/index.js\": 72155,\n\t\"./edge/components/edge-job-form/edgeJobFormController.js\": 267,\n\t\"./edge/components/edge-job-form/index.js\": 59788,\n\t\"./edge/components/edge-job-results-datatable/edgeJobResultsDatatableController.js\": 11314,\n\t\"./edge/components/edge-job-results-datatable/index.js\": 46642,\n\t\"./edge/components/edge-jobs-datatable/index.js\": 25758,\n\t\"./edge/components/edge-stack-deployment-type-selector/edge-stack-deployment-type-selector.controller.js\": 70830,\n\t\"./edge/components/edge-stack-deployment-type-selector/index.js\": 60559,\n\t\"./edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatableController.js\": 67383,\n\t\"./edge/components/edge-stack-endpoints-datatable/index.js\": 91505,\n\t\"./edge/components/edge-stack-status/edgeStackStatusController.js\": 794,\n\t\"./edge/components/edge-stack-status/index.js\": 26342,\n\t\"./edge/components/edge-stacks-datatable/index.js\": 70018,\n\t\"./edge/components/edit-edge-stack-form/editEdgeStackFormController.js\": 83205,\n\t\"./edge/components/edit-edge-stack-form/index.js\": 56037,\n\t\"./edge/components/group-form/groupFormController.js\": 88633,\n\t\"./edge/components/group-form/index.js\": 36906,\n\t\"./edge/components/groups-datatable/groupsDatatableController.js\": 9868,\n\t\"./edge/components/groups-datatable/index.js\": 36267,\n\t\"./edge/rest/edge-groups.js\": 65658,\n\t\"./edge/rest/edge-job-results.js\": 96791,\n\t\"./edge/rest/edge-jobs.js\": 2056,\n\t\"./edge/rest/edge-stacks.js\": 86796,\n\t\"./edge/rest/edge-templates.js\": 42163,\n\t\"./edge/services/edge-group.js\": 800,\n\t\"./edge/services/edge-job.js\": 30221,\n\t\"./edge/services/edge-stack.js\": 27527,\n\t\"./edge/services/edge-template.js\": 10993,\n\t\"./edge/views/edge-devices/edgeDevicesView/edgeDevicesViewController.js\": 96753,\n\t\"./edge/views/edge-devices/edgeDevicesView/index.js\": 51088,\n\t\"./edge/views/edge-groups/createEdgeGroupView/createEdgeGroupViewController.js\": 44932,\n\t\"./edge/views/edge-groups/createEdgeGroupView/index.js\": 35146,\n\t\"./edge/views/edge-groups/edgeGroupsView/edgeGroupsViewController.js\": 62044,\n\t\"./edge/views/edge-groups/edgeGroupsView/index.js\": 45359,\n\t\"./edge/views/edge-groups/editEdgeGroupView/editEdgeGroupViewController.js\": 23794,\n\t\"./edge/views/edge-groups/editEdgeGroupView/index.js\": 58188,\n\t\"./edge/views/edge-jobs/createEdgeJobView/createEdgeJobViewController.js\": 8039,\n\t\"./edge/views/edge-jobs/createEdgeJobView/index.js\": 47994,\n\t\"./edge/views/edge-jobs/edgeJob/edgeJobController.js\": 87609,\n\t\"./edge/views/edge-jobs/edgeJob/index.js\": 6300,\n\t\"./edge/views/edge-jobs/edgeJobsView/edgeJobsViewController.js\": 54223,\n\t\"./edge/views/edge-jobs/edgeJobsView/index.js\": 30190,\n\t\"./edge/views/edge-stacks/createEdgeStackView/create-edge-stack-view.controller.js\": 32884,\n\t\"./edge/views/edge-stacks/createEdgeStackView/create-edge-stack-view.js\": 96478,\n\t\"./edge/views/edge-stacks/createEdgeStackView/docker-compose-form/docker-compose-form.controller.js\": 83615,\n\t\"./edge/views/edge-stacks/createEdgeStackView/docker-compose-form/index.js\": 32878,\n\t\"./edge/views/edge-stacks/createEdgeStackView/index.js\": 24125,\n\t\"./edge/views/edge-stacks/createEdgeStackView/kube-deploy-description/index.js\": 75038,\n\t\"./edge/views/edge-stacks/createEdgeStackView/kube-manifest-form/index.js\": 56799,\n\t\"./edge/views/edge-stacks/createEdgeStackView/kube-manifest-form/kube-manifest-form.controller.js\": 23836,\n\t\"./edge/views/edge-stacks/edgeStacksView/edgeStacksViewController.js\": 33661,\n\t\"./edge/views/edge-stacks/edgeStacksView/index.js\": 82138,\n\t\"./edge/views/edge-stacks/editEdgeStackView/editEdgeStackViewController.js\": 66514,\n\t\"./edge/views/edge-stacks/editEdgeStackView/index.js\": 36237,\n\t\"./edge/views/edge-stacks/index.js\": 6142,\n\t\"./index.js\": 21570,\n\t\"./kubernetes/__module.js\": 26604,\n\t\"./kubernetes/components/datatables/application/containers-datatable/containersDatatable.js\": 28953,\n\t\"./kubernetes/components/datatables/applications-datatable-details/applications-datatable-details.controller.js\": 41727,\n\t\"./kubernetes/components/datatables/applications-datatable-details/applications-datatable-details.js\": 3962,\n\t\"./kubernetes/components/datatables/applications-datatable-url/applications-datatable-url.js\": 87082,\n\t\"./kubernetes/components/datatables/applications-datatable/applicationsDatatable.js\": 42270,\n\t\"./kubernetes/components/datatables/applications-datatable/applicationsDatatableController.js\": 45941,\n\t\"./kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.js\": 50195,\n\t\"./kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatableController.js\": 77106,\n\t\"./kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.js\": 21266,\n\t\"./kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatableController.js\": 89107,\n\t\"./kubernetes/components/datatables/configurations-datatable/configurationsDatatable.js\": 95240,\n\t\"./kubernetes/components/datatables/configurations-datatable/configurationsDatatableController.js\": 63507,\n\t\"./kubernetes/components/datatables/events-datatable/eventsDatatable.js\": 39564,\n\t\"./kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.js\": 78458,\n\t\"./kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.js\": 56531,\n\t\"./kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatableController.js\": 8122,\n\t\"./kubernetes/components/datatables/nodes-datatable/nodesDatatable.js\": 60810,\n\t\"./kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.js\": 56975,\n\t\"./kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatableController.js\": 94817,\n\t\"./kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.js\": 22158,\n\t\"./kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatableController.js\": 51329,\n\t\"./kubernetes/components/datatables/volumes-datatable/volumesDatatable.js\": 62925,\n\t\"./kubernetes/components/datatables/volumes-datatable/volumesDatatableController.js\": 63651,\n\t\"./kubernetes/components/helm/helm-templates/helm-add-repository/helm-add-repository.controller.js\": 41399,\n\t\"./kubernetes/components/helm/helm-templates/helm-add-repository/helm-add-repository.js\": 79553,\n\t\"./kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list-item/helm-templates-list-item.js\": 43579,\n\t\"./kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list.controller.js\": 88416,\n\t\"./kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list.js\": 15778,\n\t\"./kubernetes/components/helm/helm-templates/helm-templates.controller.js\": 67316,\n\t\"./kubernetes/components/helm/helm-templates/helm-templates.js\": 71228,\n\t\"./kubernetes/components/kube-services/kube-services-item/kube-services-item.controller.js\": 65473,\n\t\"./kubernetes/components/kube-services/kube-services-item/kube-services-item.js\": 1542,\n\t\"./kubernetes/components/kube-services/kube-services.controller.js\": 54466,\n\t\"./kubernetes/components/kube-services/kube-services.js\": 14957,\n\t\"./kubernetes/components/kubectl-shell/kubectl-shell.controller.js\": 30761,\n\t\"./kubernetes/components/kubectl-shell/kubectl-shell.js\": 92590,\n\t\"./kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.js\": 4546,\n\t\"./kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationDataController.js\": 16591,\n\t\"./kubernetes/components/kubernetes-sidebar/index.js\": 51713,\n\t\"./kubernetes/components/resource-reservation/resourceReservation.js\": 42718,\n\t\"./kubernetes/components/resource-reservation/resourceReservationController.js\": 44579,\n\t\"./kubernetes/components/view-header/viewHeader.js\": 43281,\n\t\"./kubernetes/components/view-loading/viewLoading.js\": 15572,\n\t\"./kubernetes/components/yaml-inspector/yamlInspector.js\": 31938,\n\t\"./kubernetes/components/yaml-inspector/yamlInspectorController.js\": 50346,\n\t\"./kubernetes/converters/application.js\": 10293,\n\t\"./kubernetes/converters/configMap.js\": 40654,\n\t\"./kubernetes/converters/configuration.js\": 10241,\n\t\"./kubernetes/converters/daemonSet.js\": 12512,\n\t\"./kubernetes/converters/deployment.js\": 95929,\n\t\"./kubernetes/converters/event.js\": 43083,\n\t\"./kubernetes/converters/namespace.js\": 2544,\n\t\"./kubernetes/converters/persistentVolumeClaim.js\": 56636,\n\t\"./kubernetes/converters/resourcePool.js\": 57911,\n\t\"./kubernetes/converters/resourceQuota.js\": 57456,\n\t\"./kubernetes/converters/secret.js\": 52341,\n\t\"./kubernetes/converters/service.js\": 86998,\n\t\"./kubernetes/converters/statefulSet.js\": 15986,\n\t\"./kubernetes/converters/storageClass.js\": 17981,\n\t\"./kubernetes/converters/volume.js\": 92192,\n\t\"./kubernetes/custom-templates/index.js\": 79023,\n\t\"./kubernetes/custom-templates/kube-create-custom-template-view/index.js\": 6793,\n\t\"./kubernetes/custom-templates/kube-create-custom-template-view/kube-create-custom-template-view.controller.js\": 2267,\n\t\"./kubernetes/custom-templates/kube-custom-templates-view/index.js\": 79403,\n\t\"./kubernetes/custom-templates/kube-custom-templates-view/kube-custom-templates-view.controller.js\": 11916,\n\t\"./kubernetes/custom-templates/kube-edit-custom-template-view/index.js\": 52657,\n\t\"./kubernetes/custom-templates/kube-edit-custom-template-view/kube-edit-custom-template-view.controller.js\": 69199,\n\t\"./kubernetes/endpoint/converter.js\": 59041,\n\t\"./kubernetes/endpoint/models.js\": 5264,\n\t\"./kubernetes/endpoint/rest.js\": 42964,\n\t\"./kubernetes/endpoint/service.js\": 5427,\n\t\"./kubernetes/filters/applicationFilters.js\": 11518,\n\t\"./kubernetes/filters/configurationFilters.js\": 63642,\n\t\"./kubernetes/filters/eventFilters.js\": 58311,\n\t\"./kubernetes/filters/filters.js\": 11634,\n\t\"./kubernetes/helm/rest.js\": 65744,\n\t\"./kubernetes/helm/service.js\": 40846,\n\t\"./kubernetes/helpers/application/index.js\": 57947,\n\t\"./kubernetes/helpers/application/rollback.js\": 65011,\n\t\"./kubernetes/helpers/commonHelper.js\": 12925,\n\t\"./kubernetes/helpers/configMapHelper.js\": 58007,\n\t\"./kubernetes/helpers/configurationHelper.js\": 51780,\n\t\"./kubernetes/helpers/eventHelper.js\": 52929,\n\t\"./kubernetes/helpers/formValidationHelper.js\": 54241,\n\t\"./kubernetes/helpers/history/daemonset.js\": 48367,\n\t\"./kubernetes/helpers/history/deployment.js\": 38215,\n\t\"./kubernetes/helpers/history/index.js\": 70224,\n\t\"./kubernetes/helpers/history/statefulset.js\": 47220,\n\t\"./kubernetes/helpers/namespaceHelper.js\": 7506,\n\t\"./kubernetes/helpers/resourceQuotaHelper.js\": 21458,\n\t\"./kubernetes/helpers/resourceReservationHelper.js\": 22229,\n\t\"./kubernetes/helpers/serviceHelper.js\": 57637,\n\t\"./kubernetes/helpers/stackHelper.js\": 41208,\n\t\"./kubernetes/helpers/stackHelper.test.js\": 69461,\n\t\"./kubernetes/helpers/volumeHelper.js\": 11507,\n\t\"./kubernetes/horizontal-pod-auto-scaler/converter.js\": 41247,\n\t\"./kubernetes/horizontal-pod-auto-scaler/helper.js\": 1239,\n\t\"./kubernetes/horizontal-pod-auto-scaler/models.js\": 90914,\n\t\"./kubernetes/horizontal-pod-auto-scaler/payload.js\": 85597,\n\t\"./kubernetes/horizontal-pod-auto-scaler/rest.js\": 61160,\n\t\"./kubernetes/horizontal-pod-auto-scaler/service.js\": 51866,\n\t\"./kubernetes/ingress/constants.js\": 62072,\n\t\"./kubernetes/ingress/converter.js\": 47086,\n\t\"./kubernetes/ingress/helper.js\": 7587,\n\t\"./kubernetes/ingress/models.js\": 27155,\n\t\"./kubernetes/ingress/payloads.js\": 17362,\n\t\"./kubernetes/ingress/rest.js\": 45678,\n\t\"./kubernetes/ingress/service.js\": 76706,\n\t\"./kubernetes/metrics/metrics.js\": 60299,\n\t\"./kubernetes/metrics/rest.js\": 26835,\n\t\"./kubernetes/models/application/formValues.js\": 14917,\n\t\"./kubernetes/models/application/models/constants.js\": 20783,\n\t\"./kubernetes/models/application/models/index.js\": 7172,\n\t\"./kubernetes/models/application/payloads.js\": 11505,\n\t\"./kubernetes/models/common/params.js\": 82469,\n\t\"./kubernetes/models/common/payloads.js\": 27367,\n\t\"./kubernetes/models/config-map/models.js\": 13978,\n\t\"./kubernetes/models/config-map/payloads.js\": 40879,\n\t\"./kubernetes/models/configuration/formvalues.js\": 30578,\n\t\"./kubernetes/models/configuration/models.js\": 82434,\n\t\"./kubernetes/models/daemon-set/models.js\": 12745,\n\t\"./kubernetes/models/daemon-set/payloads.js\": 82935,\n\t\"./kubernetes/models/deploy.js\": 6253,\n\t\"./kubernetes/models/deployment/models.js\": 59238,\n\t\"./kubernetes/models/deployment/payloads.js\": 95008,\n\t\"./kubernetes/models/event/models.js\": 82239,\n\t\"./kubernetes/models/history/models.js\": 24601,\n\t\"./kubernetes/models/namespace/models.js\": 35076,\n\t\"./kubernetes/models/namespace/payloads.js\": 63829,\n\t\"./kubernetes/models/nodes-limits/models.js\": 74335,\n\t\"./kubernetes/models/port/models.js\": 83270,\n\t\"./kubernetes/models/resource-pool/formValues.js\": 16496,\n\t\"./kubernetes/models/resource-pool/models.js\": 72210,\n\t\"./kubernetes/models/resource-quota/models.js\": 47685,\n\t\"./kubernetes/models/resource-quota/payloads.js\": 75976,\n\t\"./kubernetes/models/resource-reservation/models.js\": 46685,\n\t\"./kubernetes/models/resource-types/models.js\": 39212,\n\t\"./kubernetes/models/secret/models.js\": 69730,\n\t\"./kubernetes/models/secret/payloads.js\": 60622,\n\t\"./kubernetes/models/service/models.js\": 79990,\n\t\"./kubernetes/models/service/payloads.js\": 31249,\n\t\"./kubernetes/models/stack/models.js\": 31084,\n\t\"./kubernetes/models/stateful-set/models.js\": 91920,\n\t\"./kubernetes/models/stateful-set/payloads.js\": 13871,\n\t\"./kubernetes/models/storage-class/models.js\": 86871,\n\t\"./kubernetes/models/storage-class/payload.js\": 79824,\n\t\"./kubernetes/models/volume/models.js\": 72913,\n\t\"./kubernetes/models/volume/payloads.js\": 88296,\n\t\"./kubernetes/node/converter.js\": 76676,\n\t\"./kubernetes/node/filters.js\": 57067,\n\t\"./kubernetes/node/formValues.js\": 2949,\n\t\"./kubernetes/node/helper.js\": 14780,\n\t\"./kubernetes/node/models.js\": 48942,\n\t\"./kubernetes/node/payload.js\": 11801,\n\t\"./kubernetes/node/rest.js\": 9790,\n\t\"./kubernetes/node/service.js\": 6795,\n\t\"./kubernetes/pod/converter.js\": 22050,\n\t\"./kubernetes/pod/filters.js\": 15826,\n\t\"./kubernetes/pod/models/affinities.js\": 73689,\n\t\"./kubernetes/pod/models/index.js\": 31275,\n\t\"./kubernetes/pod/payloads/affinities.js\": 78398,\n\t\"./kubernetes/pod/payloads/create.js\": 61005,\n\t\"./kubernetes/pod/service.js\": 30754,\n\t\"./kubernetes/registries/index.js\": 87658,\n\t\"./kubernetes/registries/kube-registry-access-view/index.js\": 51482,\n\t\"./kubernetes/registries/kube-registry-access-view/kube-registry-access-view.controller.js\": 60124,\n\t\"./kubernetes/rest/configMap.js\": 83972,\n\t\"./kubernetes/rest/controllerRevision.js\": 20017,\n\t\"./kubernetes/rest/daemonSet.js\": 38345,\n\t\"./kubernetes/rest/deployment.js\": 36566,\n\t\"./kubernetes/rest/endpoint.js\": 85333,\n\t\"./kubernetes/rest/event.js\": 69673,\n\t\"./kubernetes/rest/health.js\": 71461,\n\t\"./kubernetes/rest/kubeconfig.js\": 66890,\n\t\"./kubernetes/rest/namespace.js\": 82475,\n\t\"./kubernetes/rest/nodesLimits.js\": 40912,\n\t\"./kubernetes/rest/persistentVolumeClaim.js\": 58732,\n\t\"./kubernetes/rest/pod.js\": 83699,\n\t\"./kubernetes/rest/portainer-namespace.js\": 93449,\n\t\"./kubernetes/rest/replicaSet.js\": 81056,\n\t\"./kubernetes/rest/resourceQuota.js\": 10129,\n\t\"./kubernetes/rest/response/transform.js\": 25658,\n\t\"./kubernetes/rest/secret.js\": 61588,\n\t\"./kubernetes/rest/service.js\": 68376,\n\t\"./kubernetes/rest/statefulSet.js\": 55594,\n\t\"./kubernetes/rest/storage.js\": 33415,\n\t\"./kubernetes/services/applicationService.js\": 94358,\n\t\"./kubernetes/services/configMapService.js\": 45819,\n\t\"./kubernetes/services/configurationService.js\": 81567,\n\t\"./kubernetes/services/controllerRevisionService.js\": 40917,\n\t\"./kubernetes/services/daemonSetService.js\": 42183,\n\t\"./kubernetes/services/deploymentService.js\": 18354,\n\t\"./kubernetes/services/eventService.js\": 3855,\n\t\"./kubernetes/services/healthService.js\": 24717,\n\t\"./kubernetes/services/historyService.js\": 18842,\n\t\"./kubernetes/services/kubeconfigService.js\": 32494,\n\t\"./kubernetes/services/namespaceService.js\": 44987,\n\t\"./kubernetes/services/nodesLimitsService.js\": 73774,\n\t\"./kubernetes/services/persistentVolumeClaimService.js\": 79362,\n\t\"./kubernetes/services/replicaSetService.js\": 59010,\n\t\"./kubernetes/services/resourcePoolService.js\": 22539,\n\t\"./kubernetes/services/resourceQuotaService.js\": 85927,\n\t\"./kubernetes/services/secretService.js\": 76354,\n\t\"./kubernetes/services/serviceService.js\": 7055,\n\t\"./kubernetes/services/stackService.js\": 4063,\n\t\"./kubernetes/services/statefulSetService.js\": 4165,\n\t\"./kubernetes/services/storageService.js\": 36552,\n\t\"./kubernetes/services/volumeService.js\": 78085,\n\t\"./kubernetes/store/namespace.js\": 22823,\n\t\"./kubernetes/views/applications/applications.js\": 86393,\n\t\"./kubernetes/views/applications/applicationsController.js\": 55495,\n\t\"./kubernetes/views/applications/console/console.js\": 51819,\n\t\"./kubernetes/views/applications/console/consoleController.js\": 33243,\n\t\"./kubernetes/views/applications/create/createApplication.js\": 58791,\n\t\"./kubernetes/views/applications/create/createApplicationController.js\": 8924,\n\t\"./kubernetes/views/applications/edit/application.js\": 56378,\n\t\"./kubernetes/views/applications/edit/applicationController.js\": 66485,\n\t\"./kubernetes/views/applications/edit/components/ingress-table/ingress-table.controller.js\": 20630,\n\t\"./kubernetes/views/applications/edit/components/ingress-table/ingress-table.js\": 63060,\n\t\"./kubernetes/views/applications/edit/components/placements-datatable/controller.js\": 29272,\n\t\"./kubernetes/views/applications/edit/components/placements-datatable/index.js\": 50156,\n\t\"./kubernetes/views/applications/edit/components/services-table/services-table.js\": 18137,\n\t\"./kubernetes/views/applications/helm/helm.controller.js\": 85392,\n\t\"./kubernetes/views/applications/helm/index.js\": 8180,\n\t\"./kubernetes/views/applications/logs/logs.js\": 81297,\n\t\"./kubernetes/views/applications/logs/logsController.js\": 94649,\n\t\"./kubernetes/views/applications/stats/stats.js\": 61260,\n\t\"./kubernetes/views/applications/stats/statsController.js\": 13754,\n\t\"./kubernetes/views/cluster/cluster.js\": 24924,\n\t\"./kubernetes/views/cluster/clusterController.js\": 99641,\n\t\"./kubernetes/views/cluster/node/node.js\": 64696,\n\t\"./kubernetes/views/cluster/node/nodeController.js\": 79308,\n\t\"./kubernetes/views/cluster/node/stats/stats.js\": 83490,\n\t\"./kubernetes/views/cluster/node/stats/statsController.js\": 2997,\n\t\"./kubernetes/views/configurations/configurations.js\": 56286,\n\t\"./kubernetes/views/configurations/configurationsController.js\": 35752,\n\t\"./kubernetes/views/configurations/create/createConfiguration.js\": 9022,\n\t\"./kubernetes/views/configurations/create/createConfigurationController.js\": 38646,\n\t\"./kubernetes/views/configurations/edit/configuration.js\": 78025,\n\t\"./kubernetes/views/configurations/edit/configurationController.js\": 55682,\n\t\"./kubernetes/views/configure/configureController.js\": 71244,\n\t\"./kubernetes/views/dashboard/dashboard.js\": 15219,\n\t\"./kubernetes/views/dashboard/dashboardController.js\": 79581,\n\t\"./kubernetes/views/deploy/deploy.js\": 36661,\n\t\"./kubernetes/views/deploy/deployController.js\": 23322,\n\t\"./kubernetes/views/resource-pools/access/resourcePoolAccess.js\": 28311,\n\t\"./kubernetes/views/resource-pools/access/resourcePoolAccessController.js\": 38513,\n\t\"./kubernetes/views/resource-pools/components/storage-class-switch/index.js\": 74474,\n\t\"./kubernetes/views/resource-pools/components/storage-class-switch/storage-class-switch.controller.js\": 10405,\n\t\"./kubernetes/views/resource-pools/create/createResourcePool.js\": 19777,\n\t\"./kubernetes/views/resource-pools/create/createResourcePoolController.js\": 83908,\n\t\"./kubernetes/views/resource-pools/edit/components/ingresses-datatable/controller.js\": 63009,\n\t\"./kubernetes/views/resource-pools/edit/components/ingresses-datatable/index.js\": 88952,\n\t\"./kubernetes/views/resource-pools/edit/resourcePool.js\": 85146,\n\t\"./kubernetes/views/resource-pools/edit/resourcePoolController.js\": 42310,\n\t\"./kubernetes/views/resource-pools/resourcePools.js\": 7134,\n\t\"./kubernetes/views/resource-pools/resourcePoolsController.js\": 39502,\n\t\"./kubernetes/views/stacks/logs/logs.js\": 9981,\n\t\"./kubernetes/views/stacks/logs/logsController.js\": 39554,\n\t\"./kubernetes/views/summary/resources/applicationResources.js\": 45233,\n\t\"./kubernetes/views/summary/resources/configurationResources.js\": 3310,\n\t\"./kubernetes/views/summary/resources/helpers.js\": 60953,\n\t\"./kubernetes/views/summary/resources/namespaceResources.js\": 49113,\n\t\"./kubernetes/views/summary/summary.js\": 21099,\n\t\"./kubernetes/views/summary/summaryController.js\": 69861,\n\t\"./kubernetes/views/volumes/components/volumes-storages-datatable/controller.js\": 70302,\n\t\"./kubernetes/views/volumes/components/volumes-storages-datatable/index.js\": 1502,\n\t\"./kubernetes/views/volumes/edit/volume.js\": 61158,\n\t\"./kubernetes/views/volumes/edit/volumeController.js\": 52962,\n\t\"./kubernetes/views/volumes/volumes.js\": 49633,\n\t\"./kubernetes/views/volumes/volumesController.js\": 64539,\n\t\"./matomo-setup.js\": 63924,\n\t\"./portainer/__module.js\": 86929,\n\t\"./portainer/components/PageHeader/HeaderContent.controller.js\": 7255,\n\t\"./portainer/components/PageHeader/HeaderTitle.controller.js\": 21578,\n\t\"./portainer/components/access-datatable/accessDatatable.js\": 21366,\n\t\"./portainer/components/access-datatable/accessDatatableController.js\": 92681,\n\t\"./portainer/components/access-table/access-table.js\": 56609,\n\t\"./portainer/components/accessControlForm/por-access-control-form.js\": 3735,\n\t\"./portainer/components/accessControlForm/porAccessControlFormController.js\": 86656,\n\t\"./portainer/components/accessControlForm/porAccessControlFormModel.js\": 19898,\n\t\"./portainer/components/accessControlPanel/por-access-control-panel.js\": 31421,\n\t\"./portainer/components/accessControlPanel/porAccessControlPanelController.js\": 23550,\n\t\"./portainer/components/accessControlPanel/porAccessControlPanelModel.js\": 70993,\n\t\"./portainer/components/accessManagement/index.js\": 39372,\n\t\"./portainer/components/accessManagement/por-access-management-users-selector/index.js\": 76744,\n\t\"./portainer/components/accessManagement/por-access-management.js\": 26001,\n\t\"./portainer/components/accessManagement/porAccessManagementController.js\": 22421,\n\t\"./portainer/components/associated-endpoints-selector/associatedEndpointsSelector.js\": 439,\n\t\"./portainer/components/associated-endpoints-selector/associatedEndpointsSelectorController.js\": 98293,\n\t\"./portainer/components/autofocus.js\": 64054,\n\t\"./portainer/components/beta-panel/betaPanel.js\": 28428,\n\t\"./portainer/components/buttonSpinner.js\": 66864,\n\t\"./portainer/components/code-editor/code-editor.js\": 58945,\n\t\"./portainer/components/code-editor/codeEditorController.js\": 85150,\n\t\"./portainer/components/copy-button/copy-button.controller.js\": 28944,\n\t\"./portainer/components/copy-button/copy-button.js\": 27816,\n\t\"./portainer/components/cronRule.js\": 88401,\n\t\"./portainer/components/custom-template-common-fields/customTemplateCommonFieldsController.js\": 99614,\n\t\"./portainer/components/custom-template-common-fields/index.js\": 26453,\n\t\"./portainer/components/custom-template-selector/custom-template-selector.controller.js\": 45165,\n\t\"./portainer/components/custom-template-selector/index.js\": 16970,\n\t\"./portainer/components/custom-templates-list/customTemplatesListController.js\": 85452,\n\t\"./portainer/components/custom-templates-list/index.js\": 9578,\n\t\"./portainer/components/datatables/access-tokens-datatable/access-tokens-datatable.controller.js\": 43926,\n\t\"./portainer/components/datatables/access-tokens-datatable/access-tokens-datatable.js\": 64142,\n\t\"./portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.controller.js\": 76752,\n\t\"./portainer/components/datatables/datatable-columns-visibility/index.js\": 13877,\n\t\"./portainer/components/datatables/endpoints-datatable/endpointsDatatable.js\": 56210,\n\t\"./portainer/components/datatables/endpoints-datatable/endpointsDatatableController.js\": 805,\n\t\"./portainer/components/datatables/filter/datatable-filter.controller.js\": 38058,\n\t\"./portainer/components/datatables/filter/index.js\": 59001,\n\t\"./portainer/components/datatables/genericDatatableController.js\": 11471,\n\t\"./portainer/components/datatables/groups-datatable/groupsDatatable.js\": 36864,\n\t\"./portainer/components/datatables/index.js\": 41101,\n\t\"./portainer/components/datatables/pagination/index.js\": 21757,\n\t\"./portainer/components/datatables/registries-datatable/registriesDatatable.js\": 44145,\n\t\"./portainer/components/datatables/registries-datatable/registriesDatatableController.js\": 63188,\n\t\"./portainer/components/datatables/searchbar/index.js\": 76224,\n\t\"./portainer/components/datatables/sort-icon/datatable-sort-icon.controller.js\": 81749,\n\t\"./portainer/components/datatables/sort-icon/index.js\": 62040,\n\t\"./portainer/components/datatables/stacks-datatable/stacksDatatable.js\": 97203,\n\t\"./portainer/components/datatables/stacks-datatable/stacksDatatableController.js\": 97433,\n\t\"./portainer/components/datatables/strings-datatable/index.js\": 59198,\n\t\"./portainer/components/datatables/tags-datatable/tagsDatatable.js\": 96447,\n\t\"./portainer/components/datatables/teams-datatable/teamsDatatable.js\": 85514,\n\t\"./portainer/components/datatables/titlebar/index.js\": 58973,\n\t\"./portainer/components/datatables/users-datatable/usersDatatable.js\": 59322,\n\t\"./portainer/components/datatables/users-datatable/usersDatatableController.js\": 92040,\n\t\"./portainer/components/date-range-picker/date-range-picker-api.js\": 58042,\n\t\"./portainer/components/date-range-picker/date-range-picker.js\": 53834,\n\t\"./portainer/components/date-range-picker/index.js\": 40345,\n\t\"./portainer/components/endpoint-list/endpoint-item/endpoint-item-controller.js\": 96155,\n\t\"./portainer/components/endpoint-list/endpoint-item/endpointItem.js\": 88736,\n\t\"./portainer/components/endpoint-list/endpoint-list-controller.js\": 51452,\n\t\"./portainer/components/endpoint-list/endpoint-list.js\": 63917,\n\t\"./portainer/components/endpoint-selector/endpoint-selector.js\": 32005,\n\t\"./portainer/components/endpoint-selector/endpointSelectorController.js\": 84330,\n\t\"./portainer/components/endpointSecurity/por-endpoint-security.js\": 39590,\n\t\"./portainer/components/endpointSecurity/porEndpointSecurityController.js\": 59810,\n\t\"./portainer/components/endpointSecurity/porEndpointSecurityModel.js\": 25229,\n\t\"./portainer/components/environment-variables-panel/environment-variables-panel.controller.js\": 72532,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.controller.js\": 19695,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/index.js\": 47254,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.controller.js\": 17272,\n\t\"./portainer/components/environment-variables-panel/environment-variables-simple-mode/index.js\": 61311,\n\t\"./portainer/components/environment-variables-panel/index.js\": 5633,\n\t\"./portainer/components/focusIf.js\": 87508,\n\t\"./portainer/components/form-components/file-upload-form/index.js\": 74075,\n\t\"./portainer/components/form-components/index.js\": 39068,\n\t\"./portainer/components/form-components/web-editor-form/index.js\": 67653,\n\t\"./portainer/components/form-components/web-editor-form/web-editor-form.controller.js\": 32340,\n\t\"./portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-file-item/git-form-additional-file-item.controller.js\": 27190,\n\t\"./portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-file-item/index.js\": 83208,\n\t\"./portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-files-panel.controller.js\": 17968,\n\t\"./portainer/components/forms/git-form/git-form-additional-files-panel/index.js\": 7274,\n\t\"./portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.controller.js\": 10789,\n\t\"./portainer/components/forms/git-form/git-form-auth-fieldset/index.js\": 48980,\n\t\"./portainer/components/forms/git-form/git-form-auto-update-fieldset/git-form-auto-update-fieldset.controller.js\": 12847,\n\t\"./portainer/components/forms/git-form/git-form-auto-update-fieldset/index.js\": 34385,\n\t\"./portainer/components/forms/git-form/git-form-compose-path-field/index.js\": 39926,\n\t\"./portainer/components/forms/git-form/git-form-info-panel/index.js\": 78356,\n\t\"./portainer/components/forms/git-form/git-form-ref-field/index.js\": 65830,\n\t\"./portainer/components/forms/git-form/git-form-url-field/index.js\": 4680,\n\t\"./portainer/components/forms/git-form/git-form.controller.js\": 93632,\n\t\"./portainer/components/forms/git-form/git-form.js\": 97525,\n\t\"./portainer/components/forms/git-form/index.js\": 8540,\n\t\"./portainer/components/forms/group-form/group-form.js\": 95189,\n\t\"./portainer/components/forms/group-form/groupFormController.js\": 37134,\n\t\"./portainer/components/forms/kubernetes-app-git-form/kubernetes-app-git-form.controller.js\": 29037,\n\t\"./portainer/components/forms/kubernetes-app-git-form/kubernetes-app-git-form.js\": 34323,\n\t\"./portainer/components/forms/kubernetes-redeploy-app-git-form/kubernetes-redeploy-app-git-form.controller.js\": 55658,\n\t\"./portainer/components/forms/kubernetes-redeploy-app-git-form/kubernetes-redeploy-app-git-form.js\": 9509,\n\t\"./portainer/components/forms/registry-form-aws-ecr/registry-form-ecr.js\": 48637,\n\t\"./portainer/components/forms/registry-form-azure/registry-form-azure.js\": 90018,\n\t\"./portainer/components/forms/registry-form-custom/registry-form-custom.js\": 8746,\n\t\"./portainer/components/forms/registry-form-dockerhub/registry-form-dockerhub.js\": 7744,\n\t\"./portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.js\": 84375,\n\t\"./portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatableController.js\": 56110,\n\t\"./portainer/components/forms/registry-form-gitlab/registry-form-gitlab.js\": 54470,\n\t\"./portainer/components/forms/registry-form-proget/registry-form-proget.js\": 25318,\n\t\"./portainer/components/forms/registry-form-quay/registry-form-quay.js\": 18218,\n\t\"./portainer/components/forms/stack-from-template-form/index.js\": 12281,\n\t\"./portainer/components/forms/stack-redeploy-git-form/index.js\": 7008,\n\t\"./portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.controller.js\": 20472,\n\t\"./portainer/components/group-association-table/group-association-table.js\": 87637,\n\t\"./portainer/components/index.js\": 59020,\n\t\"./portainer/components/information-panel-offline/informationPanelOffline.js\": 64654,\n\t\"./portainer/components/information-panel-offline/informationPanelOfflineController.js\": 2454,\n\t\"./portainer/components/information-panel/information-panel.js\": 76602,\n\t\"./portainer/components/intervalFormat.js\": 44516,\n\t\"./portainer/components/motd-panel/motd-panel.js\": 45668,\n\t\"./portainer/components/onEnterKey.js\": 45679,\n\t\"./portainer/components/product-list/product-item/product-item.js\": 46621,\n\t\"./portainer/components/product-list/product-list.js\": 38222,\n\t\"./portainer/components/registry-details/index.js\": 97554,\n\t\"./portainer/components/sensitive-details/sensitive-details.js\": 90434,\n\t\"./portainer/components/show-hide/show-hide.js\": 53712,\n\t\"./portainer/components/sidebar/index.js\": 7883,\n\t\"./portainer/components/sidebar/sidebar-menu-item/index.js\": 38832,\n\t\"./portainer/components/sidebar/sidebar-menu/index.js\": 86853,\n\t\"./portainer/components/sidebar/sidebar-menu/sidebar-menu.controller.js\": 93340,\n\t\"./portainer/components/sidebar/sidebar-section/index.js\": 82736,\n\t\"./portainer/components/slider/slider.js\": 77337,\n\t\"./portainer/components/slider/sliderController.js\": 58944,\n\t\"./portainer/components/stack-duplication-form/stack-duplication-form-controller.js\": 10018,\n\t\"./portainer/components/stack-duplication-form/stack-duplication-form.js\": 37848,\n\t\"./portainer/components/status-indicator/index.js\": 91709,\n\t\"./portainer/components/tag-selector/tag-selector.js\": 68449,\n\t\"./portainer/components/tag-selector/tagSelectorController.js\": 85065,\n\t\"./portainer/components/template-list/template-item/template-item.js\": 44677,\n\t\"./portainer/components/template-list/template-list-controller.js\": 70296,\n\t\"./portainer/components/template-list/template-list.js\": 47177,\n\t\"./portainer/components/template-widget.js\": 38119,\n\t\"./portainer/components/theme/theme-settings.controller.js\": 30839,\n\t\"./portainer/components/theme/theme-settings.js\": 30749,\n\t\"./portainer/components/time-window-display/index.js\": 60334,\n\t\"./portainer/components/time-window-display/time-window-display.controller.js\": 12307,\n\t\"./portainer/components/time-window-picker/index.js\": 93824,\n\t\"./portainer/components/time-window-picker/time-window-picker.controller.js\": 8537,\n\t\"./portainer/filters/filters.js\": 41066,\n\t\"./portainer/filters/index.js\": 1740,\n\t\"./portainer/helpers/endpointHelper.js\": 70589,\n\t\"./portainer/helpers/env-vars.js\": 93994,\n\t\"./portainer/helpers/formHelper.js\": 30398,\n\t\"./portainer/helpers/genericHelper.js\": 24003,\n\t\"./portainer/helpers/networkHelper.js\": 30556,\n\t\"./portainer/helpers/pathHelper.js\": 50433,\n\t\"./portainer/helpers/resourceControlHelper.js\": 43622,\n\t\"./portainer/helpers/stackHelper.js\": 13118,\n\t\"./portainer/helpers/tagHelper.js\": 91619,\n\t\"./portainer/helpers/templateHelper.js\": 69424,\n\t\"./portainer/helpers/urlHelper.js\": 79190,\n\t\"./portainer/helpers/webhookHelper.js\": 7341,\n\t\"./portainer/interceptors/endpointStatusInterceptor.js\": 89940,\n\t\"./portainer/license-management/add-license.view/add-license.view.controller.js\": 10011,\n\t\"./portainer/license-management/add-license.view/add-license.view.js\": 74467,\n\t\"./portainer/license-management/add-license.view/index.js\": 73970,\n\t\"./portainer/license-management/add-license.view/licenses-form/index.js\": 38067,\n\t\"./portainer/license-management/add-license.view/licenses-form/license-item/index.js\": 31153,\n\t\"./portainer/license-management/add-license.view/licenses-form/license-item/license-item.controller.js\": 45041,\n\t\"./portainer/license-management/add-license.view/licenses-form/licenses-form.controller.js\": 5950,\n\t\"./portainer/license-management/index.js\": 5628,\n\t\"./portainer/license-management/license-node-panel.component/index.js\": 13888,\n\t\"./portainer/license-management/license-node-panel.component/license-node-panel.controller.js\": 83600,\n\t\"./portainer/license-management/licenses.view/index.js\": 60914,\n\t\"./portainer/license-management/licenses.view/license-info/index.js\": 95029,\n\t\"./portainer/license-management/licenses.view/license-info/license-info.controller.js\": 96274,\n\t\"./portainer/license-management/licenses.view/licenses-datatable/index.js\": 34998,\n\t\"./portainer/license-management/licenses.view/licenses.view.controller.js\": 78730,\n\t\"./portainer/license-management/licenses.view/licenses.view.js\": 62747,\n\t\"./portainer/models/access.js\": 93133,\n\t\"./portainer/models/dockerhub.js\": 74962,\n\t\"./portainer/models/endpoint/formValues.js\": 690,\n\t\"./portainer/models/endpoint/models.js\": 74808,\n\t\"./portainer/models/gitlabRegistry.js\": 62365,\n\t\"./portainer/models/group.js\": 79607,\n\t\"./portainer/models/motd.js\": 15263,\n\t\"./portainer/models/registry.js\": 33180,\n\t\"./portainer/models/registryRepository.js\": 64088,\n\t\"./portainer/models/registryTypes.js\": 56414,\n\t\"./portainer/models/resourceControl/resourceControlCreatePayload.js\": 74392,\n\t\"./portainer/models/resourceControl/resourceControlOwnershipParameters.js\": 1870,\n\t\"./portainer/models/resourceControl/resourceControlTypes.js\": 45263,\n\t\"./portainer/models/resourceControl/resourceControlUpdatePayload.js\": 15905,\n\t\"./portainer/models/schedule.js\": 82653,\n\t\"./portainer/models/settings.js\": 55287,\n\t\"./portainer/models/stack.js\": 49036,\n\t\"./portainer/models/status.js\": 95154,\n\t\"./portainer/models/tag.js\": 26410,\n\t\"./portainer/models/team.js\": 58552,\n\t\"./portainer/models/teamMembership.js\": 3010,\n\t\"./portainer/models/template.js\": 76185,\n\t\"./portainer/models/user.js\": 90327,\n\t\"./portainer/models/webhook.js\": 74708,\n\t\"./portainer/oauth/__module.js\": 77274,\n\t\"./portainer/oauth/components/oauth-providers-selector/index.js\": 21869,\n\t\"./portainer/oauth/components/oauth-providers-selector/oauth-provider-selector.controller.js\": 14537,\n\t\"./portainer/oauth/components/oauth-settings/index.js\": 10453,\n\t\"./portainer/oauth/components/oauth-settings/oauth-settings.controller.js\": 30152,\n\t\"./portainer/oauth/components/oauth-settings/providers.js\": 67879,\n\t\"./portainer/oauth/services/rest/oauth.js\": 18152,\n\t\"./portainer/rbac/components/access-viewer/access-viewer-datatable/index.js\": 3589,\n\t\"./portainer/rbac/components/access-viewer/access-viewer.controller.js\": 79657,\n\t\"./portainer/rbac/components/access-viewer/index.js\": 87208,\n\t\"./portainer/rbac/components/roles-datatable/index.js\": 77181,\n\t\"./portainer/rbac/components/roles-datatable/roles-datatable.controller.js\": 15560,\n\t\"./portainer/rbac/directives/authorization.js\": 92453,\n\t\"./portainer/rbac/directives/disable-authorization.js\": 19118,\n\t\"./portainer/rbac/directives/excludeAuthorization.js\": 58338,\n\t\"./portainer/rbac/index.js\": 35552,\n\t\"./portainer/rbac/models/access.js\": 82853,\n\t\"./portainer/rbac/models/role.js\": 61969,\n\t\"./portainer/rbac/rest/role.js\": 41974,\n\t\"./portainer/rbac/services/role.rest.js\": 37838,\n\t\"./portainer/rbac/services/role.service.js\": 70055,\n\t\"./portainer/rbac/views/roles/index.js\": 93239,\n\t\"./portainer/rbac/views/roles/roles.controller.js\": 60090,\n\t\"./portainer/rbac/views/roles/rolesController.js\": 89644,\n\t\"./portainer/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.js\": 28695,\n\t\"./portainer/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatableController.js\": 13692,\n\t\"./portainer/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.js\": 57690,\n\t\"./portainer/registry-management/components/registries-repository-tags-datatable/registryRepositoriesTagsDatatableController.js\": 86000,\n\t\"./portainer/registry-management/helpers/localRegistryHelper.js\": 3369,\n\t\"./portainer/registry-management/index.js\": 69890,\n\t\"./portainer/registry-management/models/gitlabRegistry.js\": 76315,\n\t\"./portainer/registry-management/models/registryImageDetails.js\": 77287,\n\t\"./portainer/registry-management/models/registryImageLayer.js\": 52804,\n\t\"./portainer/registry-management/models/registryRepository.js\": 47407,\n\t\"./portainer/registry-management/models/repositoryTag.js\": 92478,\n\t\"./portainer/registry-management/rest/catalog.js\": 22381,\n\t\"./portainer/registry-management/rest/manifestJquery.js\": 13811,\n\t\"./portainer/registry-management/rest/tags.js\": 81733,\n\t\"./portainer/registry-management/rest/transform/gitlabResponseGetLink.js\": 36332,\n\t\"./portainer/registry-management/rest/transform/linkGetResponse.js\": 66222,\n\t\"./portainer/registry-management/services/genericAsyncGenerator.js\": 46673,\n\t\"./portainer/registry-management/services/registryServiceSelector.js\": 1383,\n\t\"./portainer/registry-management/services/registryV2Service.js\": 47624,\n\t\"./portainer/registry-management/views/configure/controller.js\": 56795,\n\t\"./portainer/registry-management/views/configure/index.js\": 22869,\n\t\"./portainer/registry-management/views/repositories/controller.js\": 92715,\n\t\"./portainer/registry-management/views/repositories/edit/controller.js\": 79079,\n\t\"./portainer/registry-management/views/repositories/edit/progression-modal/index.js\": 97644,\n\t\"./portainer/registry-management/views/repositories/index.js\": 64645,\n\t\"./portainer/registry-management/views/repositories/tag/controller.js\": 97756,\n\t\"./portainer/registry-management/views/repositories/tag/index.js\": 31211,\n\t\"./portainer/rest/auth.js\": 95599,\n\t\"./portainer/rest/backup.js\": 59987,\n\t\"./portainer/rest/customTemplate.js\": 92179,\n\t\"./portainer/rest/ecr.js\": 65485,\n\t\"./portainer/rest/endpoint.js\": 50947,\n\t\"./portainer/rest/gitlab.js\": 48664,\n\t\"./portainer/rest/group.js\": 41019,\n\t\"./portainer/rest/motd.js\": 34780,\n\t\"./portainer/rest/registry.js\": 26911,\n\t\"./portainer/rest/resourceControl.js\": 9095,\n\t\"./portainer/rest/settings.js\": 26862,\n\t\"./portainer/rest/ssl.js\": 33729,\n\t\"./portainer/rest/stack.js\": 84006,\n\t\"./portainer/rest/status.js\": 1962,\n\t\"./portainer/rest/support.js\": 3985,\n\t\"./portainer/rest/tag.js\": 69586,\n\t\"./portainer/rest/team.js\": 51406,\n\t\"./portainer/rest/teamMembership.js\": 63027,\n\t\"./portainer/rest/template.js\": 35627,\n\t\"./portainer/rest/transform/getEndpointsTotalCount.js\": 28098,\n\t\"./portainer/rest/transform/gitlabResponseGetLink.js\": 40432,\n\t\"./portainer/rest/user.js\": 88211,\n\t\"./portainer/rest/webhooks.js\": 1587,\n\t\"./portainer/services/allSettled.js\": 67808,\n\t\"./portainer/services/api/accessService.js\": 84522,\n\t\"./portainer/services/api/backupService.js\": 10273,\n\t\"./portainer/services/api/customTemplate.js\": 85903,\n\t\"./portainer/services/api/dockerhubService.js\": 91520,\n\t\"./portainer/services/api/endpointService.js\": 53249,\n\t\"./portainer/services/api/groupService.js\": 50828,\n\t\"./portainer/services/api/motdService.js\": 28111,\n\t\"./portainer/services/api/registryService.js\": 94094,\n\t\"./portainer/services/api/resourceControlService.js\": 17293,\n\t\"./portainer/services/api/settingsService.js\": 91532,\n\t\"./portainer/services/api/sslService.js\": 39243,\n\t\"./portainer/services/api/stackService.js\": 54332,\n\t\"./portainer/services/api/statusService.js\": 97128,\n\t\"./portainer/services/api/supportService.js\": 10754,\n\t\"./portainer/services/api/tagService.js\": 44904,\n\t\"./portainer/services/api/teamMembershipService.js\": 87643,\n\t\"./portainer/services/api/teamService.js\": 75495,\n\t\"./portainer/services/api/templateService.js\": 66656,\n\t\"./portainer/services/api/userService.js\": 37494,\n\t\"./portainer/services/api/webhookService.js\": 16856,\n\t\"./portainer/services/async.js\": 52726,\n\t\"./portainer/services/authentication.js\": 38890,\n\t\"./portainer/services/chartService.js\": 49519,\n\t\"./portainer/services/codeMirror.js\": 91112,\n\t\"./portainer/services/datatableService.js\": 52943,\n\t\"./portainer/services/endpointProvider.js\": 65187,\n\t\"./portainer/services/fileUpload.js\": 21262,\n\t\"./portainer/services/formValidator.js\": 59197,\n\t\"./portainer/services/localStorage.js\": 11189,\n\t\"./portainer/services/nameValidator.js\": 16624,\n\t\"./portainer/services/pagination.js\": 40073,\n\t\"./portainer/services/registryEcrService.js\": 91291,\n\t\"./portainer/services/registryGitlabService.js\": 76211,\n\t\"./portainer/services/registryModalService.js\": 56858,\n\t\"./portainer/services/session-storage.js\": 85280,\n\t\"./portainer/services/stateManager.js\": 37431,\n\t\"./portainer/services/terminal-window.js\": 56518,\n\t\"./portainer/services/themeManager.js\": 98869,\n\t\"./portainer/settings/authentication/auth-method-constants.js\": 52855,\n\t\"./portainer/settings/authentication/auth-type-constants.js\": 98376,\n\t\"./portainer/settings/authentication/auto-user-provision-toggle/index.js\": 50552,\n\t\"./portainer/settings/authentication/index.js\": 85847,\n\t\"./portainer/settings/authentication/internal-auth/index.js\": 34864,\n\t\"./portainer/settings/authentication/ldap/ad-settings/ad-settings.controller.js\": 80612,\n\t\"./portainer/settings/authentication/ldap/ad-settings/index.js\": 66509,\n\t\"./portainer/settings/authentication/ldap/index.js\": 36320,\n\t\"./portainer/settings/authentication/ldap/ldap-connectivity-check/index.js\": 18436,\n\t\"./portainer/settings/authentication/ldap/ldap-custom-admin-group/index.js\": 88996,\n\t\"./portainer/settings/authentication/ldap/ldap-custom-admin-group/ldap-custom-admin-group.controller.js\": 53864,\n\t\"./portainer/settings/authentication/ldap/ldap-custom-group-search/index.js\": 8282,\n\t\"./portainer/settings/authentication/ldap/ldap-custom-group-search/ldap-custom-group-search.controller.js\": 30950,\n\t\"./portainer/settings/authentication/ldap/ldap-custom-user-search/index.js\": 1093,\n\t\"./portainer/settings/authentication/ldap/ldap-custom-user-search/ldap-custom-user-search.controller.js\": 39525,\n\t\"./portainer/settings/authentication/ldap/ldap-group-search-item/index.js\": 82592,\n\t\"./portainer/settings/authentication/ldap/ldap-group-search-item/ldap-group-search-item.controller.js\": 55028,\n\t\"./portainer/settings/authentication/ldap/ldap-group-search/index.js\": 24791,\n\t\"./portainer/settings/authentication/ldap/ldap-group-search/ldap-group-search.controller.js\": 92459,\n\t\"./portainer/settings/authentication/ldap/ldap-groups-datatable/index.js\": 59086,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-custom/index.js\": 72928,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-custom/ldap-settings-custom.controller.js\": 96551,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-dn-builder/index.js\": 60000,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-dn-builder/ldap-settings-dn-builder.controller.js\": 62680,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-group-dn-builder/index.js\": 36235,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-group-dn-builder/ldap-settings-group-dn-builder.controller.js\": 91117,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-openldap/index.js\": 25702,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-openldap/ldap-settings-openldap.controller.js\": 37008,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-security/index.js\": 31939,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-test-login/index.js\": 75714,\n\t\"./portainer/settings/authentication/ldap/ldap-settings-test-login/ldap-settings-test-login.controller.js\": 90829,\n\t\"./portainer/settings/authentication/ldap/ldap-settings.model.js\": 54512,\n\t\"./portainer/settings/authentication/ldap/ldap-settings/index.js\": 39947,\n\t\"./portainer/settings/authentication/ldap/ldap-settings/ldap-settings.controller.js\": 37556,\n\t\"./portainer/settings/authentication/ldap/ldap-user-search-item/index.js\": 16811,\n\t\"./portainer/settings/authentication/ldap/ldap-user-search-item/ldap-user-search-item.controller.js\": 93669,\n\t\"./portainer/settings/authentication/ldap/ldap-user-search/index.js\": 97299,\n\t\"./portainer/settings/authentication/ldap/ldap-user-search/ldap-user-search.controller.js\": 34188,\n\t\"./portainer/settings/authentication/ldap/ldap-users-datatable/index.js\": 84259,\n\t\"./portainer/settings/authentication/ldap/ldap.rest.js\": 39314,\n\t\"./portainer/settings/authentication/ldap/ldap.service.js\": 46951,\n\t\"./portainer/settings/authentication/save-auth-settings-button/index.js\": 93467,\n\t\"./portainer/settings/general/index.js\": 6972,\n\t\"./portainer/settings/general/ssl-certificate/index.js\": 13655,\n\t\"./portainer/settings/general/ssl-certificate/ssl-certificate.controller.js\": 12617,\n\t\"./portainer/settings/index.js\": 25356,\n\t\"./portainer/user-activity/activity-logs-view/activity-logs-datatable/activity-logs-datatable.controller.js\": 48557,\n\t\"./portainer/user-activity/activity-logs-view/activity-logs-datatable/index.js\": 32654,\n\t\"./portainer/user-activity/activity-logs-view/activity-logs-view.controller.js\": 38427,\n\t\"./portainer/user-activity/activity-logs-view/activity-logs-view.js\": 85331,\n\t\"./portainer/user-activity/activity-logs-view/index.js\": 9800,\n\t\"./portainer/user-activity/auth-logs-view/auth-logs-datatable/auth-logs-datatable.controller.js\": 91651,\n\t\"./portainer/user-activity/auth-logs-view/auth-logs-datatable/index.js\": 66823,\n\t\"./portainer/user-activity/auth-logs-view/auth-logs-view.controller.js\": 93873,\n\t\"./portainer/user-activity/auth-logs-view/auth-logs-view.js\": 8364,\n\t\"./portainer/user-activity/auth-logs-view/index.js\": 45303,\n\t\"./portainer/user-activity/index.js\": 45347,\n\t\"./portainer/user-activity/user-activity.rest.js\": 8733,\n\t\"./portainer/user-activity/user-activity.service.js\": 73537,\n\t\"./portainer/views/account/accountController.js\": 68325,\n\t\"./portainer/views/account/create-user-access-token/create-user-access-token.controller.js\": 5012,\n\t\"./portainer/views/account/create-user-access-token/index.js\": 33219,\n\t\"./portainer/views/auth/authController.js\": 87374,\n\t\"./portainer/views/custom-templates/create-custom-template-view/createCustomTemplateViewController.js\": 46581,\n\t\"./portainer/views/custom-templates/create-custom-template-view/index.js\": 31268,\n\t\"./portainer/views/custom-templates/custom-templates-view/customTemplatesViewController.js\": 77999,\n\t\"./portainer/views/custom-templates/custom-templates-view/index.js\": 17598,\n\t\"./portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateViewController.js\": 31097,\n\t\"./portainer/views/custom-templates/edit-custom-template-view/index.js\": 69659,\n\t\"./portainer/views/devices/import/importDeviceController.js\": 11937,\n\t\"./portainer/views/devices/profiles/add/addProfileController.js\": 35696,\n\t\"./portainer/views/devices/profiles/add/index.js\": 91067,\n\t\"./portainer/views/devices/profiles/edit/editProfileController.js\": 21199,\n\t\"./portainer/views/devices/profiles/edit/index.js\": 42041,\n\t\"./portainer/views/endpoint-registries/registries.js\": 36582,\n\t\"./portainer/views/endpoint-registries/registriesController.js\": 54886,\n\t\"./portainer/views/endpoints/access/endpointAccessController.js\": 16962,\n\t\"./portainer/views/endpoints/create/createEndpointController.js\": 21448,\n\t\"./portainer/views/endpoints/edit/endpointController.js\": 80418,\n\t\"./portainer/views/endpoints/endpointsController.js\": 81881,\n\t\"./portainer/views/endpoints/helpers.js\": 13853,\n\t\"./portainer/views/endpoints/kvm/endpointKVMController.js\": 58118,\n\t\"./portainer/views/endpoints/kvm/index.js\": 63824,\n\t\"./portainer/views/groups/access/groupAccessController.js\": 79405,\n\t\"./portainer/views/groups/create/createGroupController.js\": 7249,\n\t\"./portainer/views/groups/edit/groupController.js\": 9149,\n\t\"./portainer/views/groups/groupsController.js\": 60160,\n\t\"./portainer/views/home/homeController.js\": 72507,\n\t\"./portainer/views/init/admin/initAdminController.js\": 66246,\n\t\"./portainer/views/init/endpoint/initEndpointController.js\": 88611,\n\t\"./portainer/views/init/init-license.view/index.js\": 66026,\n\t\"./portainer/views/init/init-license.view/init-license.view.controller.js\": 63346,\n\t\"./portainer/views/internal-auth/internalAuthController.js\": 88946,\n\t\"./portainer/views/logout/logoutController.js\": 95580,\n\t\"./portainer/views/main/mainController.js\": 85274,\n\t\"./portainer/views/registries/create/createRegistry.js\": 38910,\n\t\"./portainer/views/registries/create/createRegistryController.js\": 83137,\n\t\"./portainer/views/registries/edit/registryController.js\": 66146,\n\t\"./portainer/views/registries/registriesController.js\": 6009,\n\t\"./portainer/views/settings/authentication/settingsAuthenticationController.js\": 39066,\n\t\"./portainer/views/settings/edge-compute/index.js\": 43404,\n\t\"./portainer/views/settings/edge-compute/settingsEdgeComputeController.js\": 51861,\n\t\"./portainer/views/settings/settingsController.js\": 45459,\n\t\"./portainer/views/sidebar/sidebarController.js\": 64936,\n\t\"./portainer/views/stacks/create/createStackController.js\": 58000,\n\t\"./portainer/views/stacks/edit/stackController.js\": 84671,\n\t\"./portainer/views/stacks/stacksController.js\": 78566,\n\t\"./portainer/views/tags/tagsController.js\": 20125,\n\t\"./portainer/views/teams/edit/teamController.js\": 31713,\n\t\"./portainer/views/teams/teamsController.js\": 58206,\n\t\"./portainer/views/templates/templatesController.js\": 76058,\n\t\"./portainer/views/users/edit/userController.js\": 21436,\n\t\"./portainer/views/users/usersController.js\": 79614,\n\t\"./portainer/views/wizard/index.js\": 58600,\n\t\"./portainer/views/wizard/wizard-endpoints/index.js\": 90930,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-aci/index.js\": 97049,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-aci/wizard-aci.controller.js\": 30685,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-docker/index.js\": 20398,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-docker/wizard-docker.controller.js\": 77375,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-kubernetes/index.js\": 48190,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-kubernetes/wizard-kubernetes.controller.js\": 59857,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoint-list/index.js\": 71308,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-endpoints.controller.js\": 80864,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-stepper/index.js\": 34294,\n\t\"./portainer/views/wizard/wizard-endpoints/wizard-stepper/wizard-endpoint-type/index.js\": 54112,\n\t\"./portainer/views/wizard/wizard-link/index.js\": 90432,\n\t\"./portainer/views/wizard/wizard-tls/index.js\": 42294,\n\t\"./portainer/views/wizard/wizard-view.controller.js\": 79906,\n\t\"./setup-tests/global-setup.js\": 68724,\n\t\"./vendors.js\": 25518\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 19338;","import { EnvironmentId } from '@/portainer/environments/types';\nimport axios, { parseAxiosError } from '@/portainer/services/axios';\n\nimport { ResourceGroup } from '../types';\n\nimport { azureErrorParser } from './utils';\n\nexport async function getResourceGroups(\n environmentId: EnvironmentId,\n subscriptionId: string\n) {\n try {\n const {\n data: { value },\n } = await axios.get<{ value: ResourceGroup[] }>(\n buildUrl(environmentId, subscriptionId),\n { params: { 'api-version': '2018-02-01' } }\n );\n\n return value;\n } catch (err) {\n throw parseAxiosError(\n err as Error,\n 'Unable to retrieve resource groups',\n azureErrorParser\n );\n }\n}\n\nfunction buildUrl(\n environmentId: EnvironmentId,\n subscriptionId: string,\n resourceGroupName?: string\n) {\n let url = `/endpoints/${environmentId}/azure/subscriptions/${subscriptionId}/resourcegroups`;\n\n if (resourceGroupName) {\n url += `/${resourceGroupName}`;\n }\n\n return url;\n}\n","import { EnvironmentId } from '@/portainer/environments/types';\nimport axios, { parseAxiosError } from '@/portainer/services/axios';\n\nimport { Subscription } from '../types';\n\nimport { azureErrorParser } from './utils';\n\nexport async function getSubscriptions(environmentId: EnvironmentId) {\n try {\n const { data } = await axios.get<{ value: Subscription[] }>(\n buildUrl(environmentId)\n );\n return data.value;\n } catch (e) {\n throw parseAxiosError(\n e as Error,\n 'Unable to retrieve subscriptions',\n azureErrorParser\n );\n }\n}\n\nfunction buildUrl(environmentId: EnvironmentId, id?: string) {\n let url = `/endpoints/${environmentId}/azure/subscriptions?api-version=2016-06-01`;\n if (id) {\n url += `/${id}`;\n }\n\n return url;\n}\n","import { AxiosError } from 'axios';\n\nexport function azureErrorParser(axiosError: AxiosError) {\n const message =\n (axiosError.response?.data?.error?.message as string) ||\n 'Failed azure request';\n\n return {\n error: new Error(message),\n details: message,\n };\n}\n","import { EnvironmentId } from '@/portainer/environments/types';\nimport PortainerError from '@/portainer/error';\nimport axios from '@/portainer/services/axios';\n\nimport { genericHandler } from '../rest/response/handlers';\n\nimport { ContainerId, DockerContainer } from './types';\n\nexport async function startContainer(\n endpointId: EnvironmentId,\n id: ContainerId\n) {\n await axios.post(\n urlBuilder(endpointId, id, 'start'),\n {},\n { transformResponse: genericHandler }\n );\n}\n\nexport async function stopContainer(\n endpointId: EnvironmentId,\n id: ContainerId\n) {\n await axios.post(urlBuilder(endpointId, id, 'stop'), {});\n}\n\nexport async function restartContainer(\n endpointId: EnvironmentId,\n id: ContainerId\n) {\n await axios.post(urlBuilder(endpointId, id, 'restart'), {});\n}\n\nexport async function killContainer(\n endpointId: EnvironmentId,\n id: ContainerId\n) {\n await axios.post(urlBuilder(endpointId, id, 'kill'), {});\n}\n\nexport async function pauseContainer(\n endpointId: EnvironmentId,\n id: ContainerId\n) {\n await axios.post(urlBuilder(endpointId, id, 'pause'), {});\n}\n\nexport async function resumeContainer(\n endpointId: EnvironmentId,\n id: ContainerId\n) {\n await axios.post(urlBuilder(endpointId, id, 'unpause'), {});\n}\n\nexport async function renameContainer(\n endpointId: EnvironmentId,\n id: ContainerId,\n name: string\n) {\n await axios.post(\n urlBuilder(endpointId, id, 'rename'),\n {},\n { params: { name }, transformResponse: genericHandler }\n );\n}\n\nexport async function removeContainer(\n endpointId: EnvironmentId,\n container: DockerContainer,\n removeVolumes: boolean\n) {\n try {\n const { data } = await axios.delete(\n urlBuilder(endpointId, container.Id),\n {\n params: { v: removeVolumes ? 1 : 0, force: true },\n transformResponse: genericHandler,\n }\n );\n\n if (data && data.message) {\n throw new PortainerError(data.message);\n }\n } catch (e) {\n throw new PortainerError('Unable to remove container', e as Error);\n }\n}\n\nfunction urlBuilder(\n endpointId: EnvironmentId,\n id: ContainerId,\n action?: string\n) {\n const url = `/endpoints/${endpointId}/docker/containers/${id}`;\n\n if (action) {\n return `${url}/${action}`;\n }\n\n return url;\n}\n","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport Backend from 'i18next-http-backend';\n\ni18n\n .use(Backend)\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({\n debug: true,\n fallbackLng: 'en',\n interpolation: {\n escapeValue: false,\n },\n });\n\nexport default i18n;\n","import { FeatureId } from '@/portainer/feature-flags/enums';\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\n\nconst BE_URL = 'https://www.portainer.io/business-upsell?from=';\n\nexport function getFeatureDetails(featureId?: FeatureId) {\n if (!featureId) {\n return {};\n }\n const url = `${BE_URL}${featureId}`;\n\n const limitedToBE = isLimitedToBE(featureId);\n\n return { url, limitedToBE };\n}\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nimport { getFeatureDetails } from './utils';\n\nexport default class BeIndicatorController {\n limitedToBE?: boolean;\n\n url?: string;\n\n feature?: FeatureId;\n\n /* @ngInject */\n constructor() {\n this.limitedToBE = false;\n this.url = '';\n }\n\n $onInit() {\n const { url, limitedToBE } = getFeatureDetails(this.feature);\n\n this.limitedToBE = limitedToBE;\n this.url = url;\n }\n}\n","import { PropsWithChildren } from 'react';\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nimport { getFeatureDetails } from './utils';\n\nexport interface Props {\n featureId?: FeatureId;\n}\n\nexport function BEFeatureIndicator({\n featureId,\n children,\n}: PropsWithChildren) {\n const { url, limitedToBE } = getFeatureDetails(featureId);\n\n if (!limitedToBE) {\n return null;\n }\n\n return (\n \n {children}\n \n Business Edition Feature\n \n );\n}\n","const autoNgTemplateLoaderTemplate1 = require('./BEFeatureIndicator.html');\n\nimport controller from './BEFeatureIndicator.controller';\n\nimport './BEFeatureIndicator.css';\n\nexport const beFeatureIndicatorAngular = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n feature: '<',\n },\n transclude: true,\n};\n\nexport { BEFeatureIndicator } from './BEFeatureIndicator';\n","import clsx from 'clsx';\nimport ReactTooltip from 'react-tooltip';\n\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\n\nimport './BoxSelectorItem.css';\n\nimport { BoxSelectorOption } from './types';\n\ninterface Props {\n radioName: string;\n option: BoxSelectorOption;\n onChange(value: T, limitedToBE: boolean): void;\n selectedValue: T;\n disabled?: boolean;\n tooltip?: string;\n}\n\nexport function BoxSelectorItem({\n radioName,\n option,\n onChange,\n selectedValue,\n disabled,\n tooltip,\n}: Props) {\n const limitedToBE = isLimitedToBE(option.feature);\n\n const tooltipId = `box-selector-item-${radioName}-${option.id}`;\n return (\n \n onChange(option.value, limitedToBE)}\n />\n \n {tooltip && (\n \n {tooltip}\n \n )}\n \n );\n}\n","import clsx from 'clsx';\n\nimport type { FeatureId } from '@/portainer/feature-flags/enums';\n\nimport './BoxSelector.css';\nimport styles from './BoxSelector.module.css';\nimport { BoxSelectorItem } from './BoxSelectorItem';\nimport { BoxSelectorOption } from './types';\n\nexport interface Props {\n radioName: string;\n value: T;\n onChange(value: T, limitedToBE: boolean): void;\n options: BoxSelectorOption[];\n}\n\nexport function BoxSelector({\n radioName,\n value,\n options,\n onChange,\n}: Props) {\n return (\n
\n {options.map((option) => (\n \n ))}\n
\n );\n}\n\nexport function buildOption(\n id: string,\n icon: string,\n label: string,\n description: string,\n value: T,\n feature?: FeatureId\n): BoxSelectorOption {\n return { id, icon, label, description, value, feature };\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"app-portainer-components-BoxSelector-BoxSelector-module__root\"};","import {\n IComponentOptions,\n IComponentController,\n IFormController,\n IScope,\n} from 'angular';\n\nclass BoxSelectorController implements IComponentController {\n formCtrl!: IFormController;\n\n onChange!: (value: string | number) => void;\n\n radioName!: string;\n\n $scope: IScope;\n\n /* @ngInject */\n constructor($scope: IScope) {\n this.handleChange = this.handleChange.bind(this);\n\n this.$scope = $scope;\n }\n\n handleChange(value: string | number, limitedToBE: boolean) {\n this.$scope.$evalAsync(() => {\n this.formCtrl.$setValidity(this.radioName, !limitedToBE, this.formCtrl);\n this.onChange(value);\n });\n }\n}\n\nexport const BoxSelectorAngular: IComponentOptions = {\n template: ``,\n bindings: {\n value: '<',\n onChange: '<',\n options: '<',\n radioName: '<',\n },\n require: {\n formCtrl: '^form',\n },\n controller: BoxSelectorController,\n};\n","import angular from 'angular';\n\nimport { react2angular } from '@/react-tools/react2angular';\n\nimport { BoxSelector, buildOption } from './BoxSelector';\nimport { BoxSelectorAngular } from './BoxSelectorAngular';\n\nexport { BoxSelector, buildOption };\nconst BoxSelectorReact = react2angular(BoxSelector, [\n 'value',\n 'onChange',\n 'options',\n 'radioName',\n]);\n\nexport default angular\n .module('app.portainer.component.box-selector', [])\n .component('boxSelectorReact', BoxSelectorReact)\n .component('boxSelector', BoxSelectorAngular).name;\n","import { PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\ntype Type = 'submit' | 'button' | 'reset';\ntype Color = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'link';\ntype Size = 'xsmall' | 'small' | 'medium' | 'large';\n\nexport interface Props {\n color?: Color;\n size?: Size;\n disabled?: boolean;\n title?: string;\n className?: string;\n dataCy?: string;\n type?: Type;\n onClick?: () => void;\n}\n\nexport function Button({\n type = 'button',\n color = 'primary',\n size = 'small',\n disabled = false,\n className,\n dataCy,\n onClick,\n title,\n children,\n}: PropsWithChildren) {\n return (\n \n {children}\n \n );\n}\n\nfunction sizeClass(size?: Size) {\n switch (size) {\n case 'large':\n return 'btn-lg';\n case 'medium':\n return 'btn-md';\n case 'xsmall':\n return 'btn-xs';\n default:\n return 'btn-sm';\n }\n}\n","import { PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nexport type Size = 'xsmall' | 'small' | 'large';\nexport interface Props {\n size?: Size;\n className?: string;\n}\n\nexport function ButtonGroup({\n size = 'small',\n children,\n className,\n}: PropsWithChildren) {\n return (\n
\n {children}\n
\n );\n}\n\nfunction sizeClass(size: Size | undefined) {\n switch (size) {\n case 'xsmall':\n return 'btn-group-xs';\n case 'large':\n return 'btn-group-lg';\n default:\n return '';\n }\n}\n","import { PropsWithChildren } from 'react';\n\nimport { type Props as ButtonProps, Button } from './Button';\n\ninterface Props extends ButtonProps {\n loadingText: string;\n isLoading: boolean;\n}\n\nexport function LoadingButton({\n loadingText,\n isLoading,\n disabled,\n type = 'submit',\n children,\n ...buttonProps\n}: PropsWithChildren) {\n return (\n \n {isLoading ? (\n <>\n \n {loadingText}\n \n ) : (\n children\n )}\n \n );\n}\n","import clsx from 'clsx';\n\nimport styles from './AddButton.module.css';\n\nexport interface Props {\n className?: string;\n label: string;\n onClick: () => void;\n}\n\nexport function AddButton({ label, onClick, className }: Props) {\n return (\n \n {label}\n \n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"addButton\":\"app-portainer-components-Button-AddButton-module__add-button\"};","import { PropsWithChildren } from 'react';\nimport { UISref, UISrefProps } from '@uirouter/react';\n\ninterface Props {\n title?: string;\n}\n\nexport function Link({\n title = '',\n children,\n ...props\n}: PropsWithChildren & UISrefProps) {\n return (\n // eslint-disable-next-line react/jsx-props-no-spreading\n \n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n {children}\n \n );\n}\n","import { Fragment } from 'react';\n\nimport { Link } from '@/portainer/components/Link';\n\nimport './Breadcrumbs.css';\n\nexport interface Crumb {\n label: string;\n link?: string;\n linkParams?: Record;\n}\ninterface Props {\n breadcrumbs: Crumb[];\n}\n\nexport function Breadcrumbs({ breadcrumbs }: Props) {\n return (\n
\n {breadcrumbs.map((crumb, index) => (\n \n {renderCrumb(crumb)}\n {index !== breadcrumbs.length - 1 ? ' > ' : ''}\n \n ))}\n
\n );\n}\n\nfunction renderCrumb(crumb: Crumb) {\n if (crumb.link) {\n return (\n \n {crumb.label}\n \n );\n }\n\n return crumb.label;\n}\n","import { useEffect, useState } from 'react';\nimport moment from 'moment';\nimport clsx from 'clsx';\n\nimport { r2a } from '@/react-tools/react2angular';\nimport { LicenseInfo } from '@/portainer/license-management/types';\nimport { useLicenseInfo } from '@/portainer/license-management/use-license.service';\nimport { error as notifyError } from '@/portainer/services/notifications';\n\nimport styles from './LicenseExpirationPanel.module.css';\n\nexport function LicenseExpirationPanelContainer() {\n const { remainingDays, isLoading } = useRemainingDays();\n\n return (\n \n );\n}\n\ninterface Props {\n remainingDays: number;\n isLoading?: boolean;\n}\n\nexport function LicenseExpirationPanel({ remainingDays, isLoading }: Props) {\n if (isLoading || remainingDays >= 30) {\n return null;\n }\n\n const expirationMessage = buildMessage(remainingDays);\n\n return (\n
\n \n \n {expirationMessage}\n Please contact your administrator to renew your license.\n \n
\n );\n}\n\nfunction buildMessage(days: number) {\n return `One or more of your licenses ${expiringText(days)}.`;\n\n function expiringText(days: number) {\n if (days < 0) {\n return 'has expired';\n }\n\n if (days === 0) {\n return 'expires TODAY';\n }\n\n return `will expire in ${days === 1 ? '1 day' : `${days} days`}`;\n }\n}\n\nfunction useRemainingDays() {\n const { error, info, isLoading } = useLicenseInfo();\n\n useEffect(() => {\n if (error) {\n notifyError('Failure', error, 'Failed to get license info');\n }\n }, [error]);\n\n const [remainingDays, setRemainingDays] = useState(0);\n\n useEffect(() => {\n if (info) {\n parseInfo(info);\n }\n }, [info]);\n\n return { remainingDays, isLoading, error };\n\n function parseInfo(info: LicenseInfo) {\n const expiresAt = moment.unix(info.expiresAt);\n setRemainingDays(expiresAt.diff(moment().startOf('day'), 'days'));\n }\n}\n\nexport const LicenseExpirationPanelAngular = r2a(\n LicenseExpirationPanelContainer,\n []\n);\n","import { useQuery } from 'react-query';\n\nimport { getLicenseInfo } from './license.service';\nimport { LicenseInfo } from './types';\n\nexport function useLicenseInfo() {\n const {\n isLoading,\n error,\n data: info,\n } = useQuery('licenseInfo', () => getLicenseInfo());\n\n return { isLoading, error, info };\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"app-portainer-components-PageHeader-LicenseExpirationPanel-module__root\",\"message\":\"app-portainer-components-PageHeader-LicenseExpirationPanel-module__message\"};","const autoNgTemplateLoaderTemplate1 = require('./HeaderContainer.html');\n\nimport { PropsWithChildren, createContext, useContext } from 'react';\n\nimport { LicenseExpirationPanelContainer } from './LicenseExpirationPanel';\n\nimport './HeaderContainer.css';\n\nconst Context = createContext(null);\n\nexport function useHeaderContext() {\n const context = useContext(Context);\n\n if (context == null) {\n throw new Error('Should be nested inside a HeaderContainer component');\n }\n}\n\nexport function HeaderContainer({ children }: PropsWithChildren) {\n return (\n \n
\n
\n
\n
{children}
\n \n
\n
\n \n );\n}\n\nexport const HeaderAngular = {\n transclude: true,\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"userLinks\":\"app-portainer-components-PageHeader-HeaderContent-module__user-links\",\"link\":\"app-portainer-components-PageHeader-HeaderContent-module__link\",\"linkText\":\"app-portainer-components-PageHeader-HeaderContent-module__link-text\",\"linkIcon\":\"app-portainer-components-PageHeader-HeaderContent-module__link-icon\"};","const autoNgTemplateLoaderTemplate1 = require('./HeaderContent.html');\n\nimport { PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nimport { Link } from '@/portainer/components/Link';\nimport { useUser } from '@/portainer/hooks/useUser';\n\nimport controller from './HeaderContent.controller';\nimport styles from './HeaderContent.module.css';\nimport { useHeaderContext } from './HeaderContainer';\n\nexport function HeaderContent({ children }: PropsWithChildren) {\n useHeaderContext();\n const { user } = useUser();\n\n return (\n
\n
{children}
\n {user && (\n
\n \n \n my account\n \n \n \n log out\n \n
\n )}\n
\n );\n}\n\nexport const HeaderContentAngular = {\n requires: '^rdHeader',\n transclude: true,\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./HeaderTitle.html');\n\nimport { PropsWithChildren } from 'react';\n\nimport { useUser } from '@/portainer/hooks/useUser';\n\nimport { useHeaderContext } from './HeaderContainer';\nimport controller from './HeaderTitle.controller';\n\ninterface Props {\n title: string;\n}\n\nexport function HeaderTitle({ title, children }: PropsWithChildren) {\n useHeaderContext();\n const { user } = useUser();\n\n return (\n
\n {title}\n {children}\n {user && (\n \n {user.Username}\n \n )}\n
\n );\n}\n\nexport const HeaderTitleAngular = {\n requires: '^rdHeader',\n bindings: {\n titleText: '@',\n },\n transclude: true,\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import { useRouter } from '@uirouter/react';\n\nimport { Button } from '../Button';\n\nimport { Breadcrumbs } from './Breadcrumbs';\nimport { Crumb } from './Breadcrumbs/Breadcrumbs';\nimport { HeaderContainer } from './HeaderContainer';\nimport { HeaderContent } from './HeaderContent';\nimport { HeaderTitle } from './HeaderTitle';\n\ninterface Props {\n reload?: boolean;\n breadcrumbs?: Crumb[];\n title: string;\n}\n\nexport function PageHeader({ title, breadcrumbs = [], reload }: Props) {\n const router = useRouter();\n return (\n \n \n {reload && (\n \n )}\n \n \n \n \n \n );\n}\n","import angular from 'angular';\n\nimport { Breadcrumbs } from './Breadcrumbs';\nimport { PageHeader } from './PageHeader';\nimport { HeaderContainer, HeaderAngular } from './HeaderContainer';\nimport { HeaderContent, HeaderContentAngular } from './HeaderContent';\nimport { HeaderTitle, HeaderTitleAngular } from './HeaderTitle';\nimport { LicenseExpirationPanelAngular } from './LicenseExpirationPanel';\n\nexport { PageHeader, Breadcrumbs, HeaderContainer, HeaderContent, HeaderTitle };\n\nexport default angular\n .module('portainer.app.components.header', [])\n\n .component('licenseExpirationPanel', LicenseExpirationPanelAngular)\n .component('rdHeader', HeaderAngular)\n .component('rdHeaderContent', HeaderContentAngular)\n .component('rdHeaderTitle', HeaderTitleAngular).name;\n","import { PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nimport styles from './TextTip.module.css';\n\ntype Color = 'orange' | 'blue';\n\nexport interface Props {\n color?: Color;\n}\n\nexport function TextTip({\n color = 'orange',\n children,\n}: PropsWithChildren) {\n return (\n

\n \n {children}\n

\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"textMargin\":\"app-portainer-components-Tip-TextTip-TextTip-module__text-margin\"};","import ReactTooltip from 'react-tooltip';\nimport clsx from 'clsx';\n\nimport styles from './Tooltip.module.css';\n\ntype Place = 'top' | 'right' | 'bottom' | 'left';\n\nexport interface Props {\n position?: Place;\n message: string;\n}\n\nexport function Tooltip({ message, position = 'bottom' }: Props) {\n return (\n \n \n \n \n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tooltipWrapper\":\"app-portainer-components-Tip-Tooltip-Tooltip-module__tooltip-wrapper\",\"tooltip\":\"app-portainer-components-Tip-Tooltip-Tooltip-module__tooltip\",\"icon\":\"app-portainer-components-Tip-Tooltip-Tooltip-module__icon\"};","import { IComponentOptions } from 'angular';\nimport './Tooltip.css';\n\nexport const TooltipAngular: IComponentOptions = {\n bindings: {\n message: '@',\n position: '@',\n },\n template: `\n
\n `,\n};\n","import Select from 'react-select';\n\nimport { UserViewModel } from '@/portainer/models/user';\nimport { UserId } from '@/portainer/users/types';\nimport './UsersSelector.css';\n\ninterface Props {\n name?: string;\n value: UserId[];\n onChange(value: UserId[]): void;\n users: UserViewModel[];\n dataCy?: string;\n inputId?: string;\n placeholder?: string;\n}\n\nexport function UsersSelector({\n name,\n value,\n onChange,\n users,\n dataCy,\n inputId,\n placeholder,\n}: Props) {\n return (\n user.Username}\n getOptionValue={(user) => user.Id}\n options={users}\n classNamePrefix=\"selector\"\n value={users.filter((user) => value.includes(user.Id))}\n closeMenuOnSelect={false}\n onChange={(selectedUsers) =>\n onChange(selectedUsers.map((user) => user.Id))\n }\n data-cy={dataCy}\n inputId={inputId}\n placeholder={placeholder}\n />\n );\n}\n","import clsx from 'clsx';\nimport { Menu, MenuButton, MenuList } from '@reach/menu-button';\nimport { ColumnInstance } from 'react-table';\n\nimport { Checkbox } from '@/portainer/components/form-components/Checkbox';\n\nimport { useTableContext } from './TableContainer';\n\ninterface Props {\n columns: ColumnInstance[];\n onChange: (value: string[]) => void;\n value: string[];\n}\n\nexport function ColumnVisibilityMenu({\n columns,\n onChange,\n value,\n}: Props) {\n useTableContext();\n\n return (\n \n {({ isExpanded }) => (\n <>\n \n Columns\n \n \n
\n
Show / Hide Columns
\n
\n {columns.map((column) => (\n
\n \n handleChangeColumnVisibility(\n column.id,\n e.target.checked\n )\n }\n />\n
\n ))}\n
\n
\n
\n \n )}\n
\n );\n\n function handleChangeColumnVisibility(colId: string, visible: boolean) {\n if (visible) {\n onChange(value.filter((id) => id !== colId));\n return;\n }\n\n onChange([...value, colId]);\n }\n}\n","import clsx from 'clsx';\nimport { useMemo } from 'react';\nimport { Menu, MenuButton, MenuPopover } from '@reach/menu-button';\nimport { ColumnInstance } from 'react-table';\n\nexport function DefaultFilter({\n column: { filterValue, setFilter, preFilteredRows, id },\n}: {\n column: ColumnInstance;\n}) {\n const options = useMemo(() => {\n const options = new Set();\n preFilteredRows.forEach((row) => {\n options.add(row.values[id]);\n });\n\n return Array.from(options);\n }, [id, preFilteredRows]);\n\n return (\n \n );\n}\n\ninterface MultipleSelectionFilterProps {\n options: string[];\n value: string[];\n filterKey: string;\n onChange: (value: string[]) => void;\n}\n\nfunction MultipleSelectionFilter({\n options,\n value = [],\n filterKey,\n onChange,\n}: MultipleSelectionFilterProps) {\n const enabled = value.length > 0;\n return (\n
\n \n \n Filter\n \n \n \n
\n
Filter by state
\n
\n {options.map((option, index) => (\n
\n handleChange(option)}\n />\n \n
\n ))}\n
\n
\n
\n
\n
\n );\n\n function handleChange(option: string) {\n if (value.includes(option)) {\n onChange(value.filter((o) => o !== option));\n\n return;\n }\n\n onChange([...value, option]);\n }\n}\n","import { useContext, createContext, PropsWithChildren } from 'react';\n\nimport { useLocalStorage } from '@/portainer/hooks/useLocalStorage';\n\ninterface Props {\n value: string;\n onChange(value: string): void;\n}\n\nexport function SearchBar({ value, onChange }: Props) {\n return (\n
\n \n onChange(e.target.value)}\n placeholder=\"Search...\"\n />\n
\n );\n}\n\nconst SearchBarContext = createContext<\n [string, (value: string) => void] | null\n>(null);\n\ninterface SearchBarProviderProps {\n defaultValue?: string;\n storageKey: string;\n}\n\nexport function SearchBarProvider({\n children,\n storageKey,\n defaultValue = '',\n}: PropsWithChildren) {\n const state = useLocalStorage(\n `datatable_text_filter_${storageKey}`,\n defaultValue,\n sessionStorage\n );\n\n return (\n \n {children}\n \n );\n}\n\nexport function useSearchBarContext() {\n const context = useContext(SearchBarContext);\n if (context === null) {\n throw new Error('should be used under SearchBarProvider');\n }\n\n return context;\n}\n","interface SelectedRowsCountProps {\n value: number;\n}\n\nexport function SelectedRowsCount({ value }: SelectedRowsCountProps) {\n return value !== 0 ? (\n
{value} item(s) selected
\n ) : null;\n}\n","import { createContext, PropsWithChildren, useContext } from 'react';\n\nimport { Widget, WidgetBody } from '@/portainer/components/widget';\n\nconst Context = createContext(null);\n\nexport function useTableContext() {\n const context = useContext(Context);\n\n if (context == null) {\n throw new Error('Should be nested inside a TableContainer component');\n }\n}\n\nexport function TableContainer({ children }: PropsWithChildren) {\n return (\n \n
\n \n {children}\n \n
\n
\n );\n}\n","import { PropsWithChildren } from 'react';\n\nimport { useTableContext } from './TableContainer';\n\nexport function TableFooter({ children }: PropsWithChildren) {\n useTableContext();\n\n return
{children}
;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"alertVisible\":\"app-portainer-components-datatables-components-TableSettingsMenuAutoRefresh-module__alert-visible\",\"alertHidden\":\"app-portainer-components-datatables-components-TableSettingsMenuAutoRefresh-module__alert-hidden\"};","import clsx from 'clsx';\nimport { useState } from 'react';\n\nimport { Checkbox } from '@/portainer/components/form-components/Checkbox';\n\nimport styles from './TableSettingsMenuAutoRefresh.module.css';\n\ninterface Props {\n onChange(value: number): void;\n value: number;\n}\n\nexport function TableSettingsMenuAutoRefresh({ onChange, value }: Props) {\n const [isCheckVisible, setIsCheckVisible] = useState(false);\n\n const isEnabled = value > 0;\n\n return (\n <>\n onChange(e.target.checked ? 10 : 0)}\n />\n\n {isEnabled && (\n
\n \n handleChange(e.target.value)}\n >\n \n \n \n \n \n \n setIsCheckVisible(false)}\n >\n \n \n
\n )}\n \n );\n\n function handleChange(value: string) {\n onChange(Number(value));\n setIsCheckVisible(true);\n }\n}\n","import { Row } from 'react-table';\n\nexport function multiple<\n D extends Record = Record\n>(rows: Row[], columnIds: string[], filterValue: string[] = []) {\n if (filterValue.length === 0 || columnIds.length === 0) {\n return rows;\n }\n\n return rows.filter((row) => {\n const value = row.values[columnIds[0]];\n return filterValue.includes(value);\n });\n}\n","import clsx from 'clsx';\nimport { PropsWithChildren } from 'react';\nimport { TableProps } from 'react-table';\n\nimport { useTableContext } from './TableContainer';\n\nexport function Table({\n children,\n className,\n role,\n style,\n}: PropsWithChildren) {\n useTableContext();\n\n return (\n
\n \n {children}\n \n
\n );\n}\n","import { PropsWithChildren } from 'react';\n\nimport { useTableContext } from './TableContainer';\n\nexport function TableActions({ children }: PropsWithChildren) {\n useTableContext();\n\n return
{children}
;\n}\n","import { PropsWithChildren } from 'react';\n\nimport { useTableContext } from './TableContainer';\n\nexport function TableTitleActions({ children }: PropsWithChildren) {\n useTableContext();\n\n return
{children}
;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"sortIcon\":\"app-portainer-components-datatables-components-TableHeaderCell-module__sort-icon\"};","import clsx from 'clsx';\nimport { PropsWithChildren, ReactNode } from 'react';\nimport { TableHeaderProps } from 'react-table';\n\nimport { Button } from '@/portainer/components/Button';\n\nimport { useTableContext } from './TableContainer';\nimport styles from './TableHeaderCell.module.css';\n\ninterface Props {\n canFilter: boolean;\n canSort: boolean;\n headerProps: TableHeaderProps;\n isSorted: boolean;\n isSortedDesc?: boolean;\n onSortClick: (desc: boolean) => void;\n render: () => ReactNode;\n renderFilter: () => ReactNode;\n}\n\nexport function TableHeaderCell({\n headerProps: { className, role, style },\n canSort,\n render,\n onSortClick,\n isSorted,\n isSortedDesc,\n canFilter,\n renderFilter,\n}: Props) {\n useTableContext();\n\n return (\n \n \n {render()}\n \n {canFilter ? renderFilter() : null}\n \n );\n}\n\ninterface SortWrapperProps {\n canSort: boolean;\n isSorted: boolean;\n isSortedDesc?: boolean;\n onClick: (desc: boolean) => void;\n}\n\nfunction SortWrapper({\n canSort,\n children,\n onClick,\n isSorted,\n isSortedDesc,\n}: PropsWithChildren) {\n if (!canSort) {\n return <>{children};\n }\n\n return (\n onClick(!isSortedDesc)}\n className=\"sortable\"\n >\n {children}\n\n {isSorted ? (\n \n ) : (\n
\n )}\n \n );\n}\n","import clsx from 'clsx';\nimport { Menu, MenuButton, MenuList } from '@reach/menu-button';\nimport { PropsWithChildren, ReactNode } from 'react';\n\nimport { useTableContext } from './TableContainer';\n\ninterface Props {\n quickActions?: ReactNode;\n}\n\nexport function TableSettingsMenu({\n quickActions,\n children,\n}: PropsWithChildren) {\n useTableContext();\n\n return (\n \n {({ isExpanded }) => (\n <>\n \n Settings\n \n \n
\n
Table settings
\n
{children}
\n {quickActions && (\n
\n
Quick actions
\n
{quickActions}
\n
\n )}\n
\n
\n \n )}\n
\n );\n}\n","import clsx from 'clsx';\nimport { PropsWithChildren } from 'react';\n\nimport { useTableContext } from './TableContainer';\n\ninterface Props {\n icon: string;\n label: string;\n}\n\nexport function TableTitle({\n icon,\n label,\n children,\n}: PropsWithChildren) {\n useTableContext();\n\n return (\n
\n
\n \n {label}\n
\n {children}\n
\n );\n}\n","import { HeaderGroup, TableHeaderProps } from 'react-table';\n\nimport { useTableContext } from './TableContainer';\nimport { TableHeaderCell } from './TableHeaderCell';\n\ninterface Props = Record> {\n headers: HeaderGroup[];\n onSortChange?(colId: string, desc: boolean): void;\n}\n\nexport function TableHeaderRow<\n D extends Record = Record\n>({\n headers,\n onSortChange,\n className,\n role,\n style,\n}: Props & TableHeaderProps) {\n useTableContext();\n\n return (\n \n {headers.map((column) => (\n {\n column.toggleSortBy(desc);\n if (onSortChange) {\n onSortChange(column.id, desc);\n }\n }}\n isSorted={column.isSorted}\n isSortedDesc={column.isSortedDesc}\n render={() => column.render('Header')}\n canFilter={!column.disableFilters}\n renderFilter={() => column.render('Filter')}\n />\n ))}\n \n );\n}\n","import { Cell, TableRowProps } from 'react-table';\n\nimport { useTableContext } from './TableContainer';\n\ninterface Props = Record>\n extends TableRowProps {\n cells: Cell[];\n}\n\nexport function TableRow<\n D extends Record = Record\n>({ cells, className, role, style }: Props) {\n useTableContext();\n\n return (\n \n {cells.map((cell) => {\n const cellProps = cell.getCellProps({\n className: cell.className,\n });\n\n return (\n \n {cell.render('Cell')}\n \n );\n })}\n \n );\n}\n","import { useEffect, useCallback, useState } from 'react';\n\nexport function useRepeater(\n refreshRate: number,\n onRefresh?: () => Promise\n) {\n const [intervalId, setIntervalId] = useState(null);\n\n const stopRepeater = useCallback(() => {\n if (!intervalId) {\n return;\n }\n\n clearInterval(intervalId);\n setIntervalId(null);\n }, [intervalId]);\n\n const startRepeater = useCallback(\n (refreshRate) => {\n if (intervalId || !onRefresh) {\n return;\n }\n\n setIntervalId(\n setInterval(async () => {\n await onRefresh();\n }, refreshRate * 1000)\n );\n },\n [intervalId, onRefresh]\n );\n\n useEffect(() => {\n if (!refreshRate || !onRefresh) {\n stopRepeater();\n } else {\n startRepeater(refreshRate);\n }\n\n return stopRepeater;\n }, [refreshRate, startRepeater, stopRepeater, intervalId, onRefresh]);\n}\n","/* eslint no-param-reassign: [\"error\", { \"props\": false }] */\nimport { ChangeEvent, useCallback, useMemo } from 'react';\nimport {\n actions,\n makePropGetter,\n ensurePluginOrder,\n useGetLatest,\n useMountedLayoutEffect,\n Hooks,\n TableInstance,\n TableState,\n ActionType,\n ReducerTableState,\n IdType,\n Row,\n PropGetter,\n TableToggleRowsSelectedProps,\n TableToggleAllRowsSelectedProps,\n} from 'react-table';\n\ntype DefaultType = Record;\n\ninterface UseRowSelectTableInstance\n extends TableInstance {\n isAllRowSelected: boolean;\n selectSubRows: boolean;\n getSubRows(row: Row): Row[];\n isRowSelectable(row: Row): boolean;\n}\n\nconst pluginName = 'useRowSelect';\n\n// Actions\nactions.resetSelectedRows = 'resetSelectedRows';\nactions.toggleAllRowsSelected = 'toggleAllRowsSelected';\nactions.toggleRowSelected = 'toggleRowSelected';\nactions.toggleAllPageRowsSelected = 'toggleAllPageRowsSelected';\n\nexport function useRowSelect(hooks: Hooks) {\n hooks.getToggleRowSelectedProps = [\n defaultGetToggleRowSelectedProps as PropGetter<\n D,\n TableToggleRowsSelectedProps\n >,\n ];\n hooks.getToggleAllRowsSelectedProps = [\n defaultGetToggleAllRowsSelectedProps as PropGetter<\n D,\n TableToggleAllRowsSelectedProps\n >,\n ];\n hooks.getToggleAllPageRowsSelectedProps = [\n defaultGetToggleAllPageRowsSelectedProps as PropGetter<\n D,\n TableToggleAllRowsSelectedProps\n >,\n ];\n hooks.stateReducers.push(\n reducer as (\n newState: TableState,\n action: ActionType,\n previousState?: TableState,\n instance?: TableInstance\n ) => ReducerTableState | undefined\n );\n hooks.useInstance.push(useInstance as (instance: TableInstance) => void);\n hooks.prepareRow.push(prepareRow);\n}\n\nuseRowSelect.pluginName = pluginName;\n\nfunction defaultGetToggleRowSelectedProps(\n props: D,\n { instance, row }: { instance: UseRowSelectTableInstance; row: Row }\n) {\n const { manualRowSelectedKey = 'isSelected' } = instance;\n let checked = false;\n\n if (row.original && row.original[manualRowSelectedKey]) {\n checked = true;\n } else {\n checked = row.isSelected;\n }\n\n return [\n props,\n {\n onChange: (e: ChangeEvent) => {\n row.toggleRowSelected(e.target.checked);\n },\n style: {\n cursor: 'pointer',\n },\n checked,\n title: 'Toggle Row Selected',\n indeterminate: row.isSomeSelected,\n disabled: !instance.isRowSelectable(row),\n },\n ];\n}\n\nfunction defaultGetToggleAllRowsSelectedProps(\n props: D,\n { instance }: { instance: UseRowSelectTableInstance }\n) {\n return [\n props,\n {\n onChange: (e: ChangeEvent) => {\n instance.toggleAllRowsSelected(e.target.checked);\n },\n style: {\n cursor: 'pointer',\n },\n checked: instance.isAllRowsSelected,\n title: 'Toggle All Rows Selected',\n indeterminate: Boolean(\n !instance.isAllRowsSelected &&\n Object.keys(instance.state.selectedRowIds).length\n ),\n },\n ];\n}\n\nfunction defaultGetToggleAllPageRowsSelectedProps(\n props: D,\n { instance }: { instance: UseRowSelectTableInstance }\n) {\n return [\n props,\n {\n onChange(e: ChangeEvent) {\n instance.toggleAllPageRowsSelected(e.target.checked);\n },\n style: {\n cursor: 'pointer',\n },\n checked: instance.isAllPageRowsSelected,\n title: 'Toggle All Current Page Rows Selected',\n indeterminate: Boolean(\n !instance.isAllPageRowsSelected &&\n instance.page.some(({ id }) => instance.state.selectedRowIds[id])\n ),\n },\n ];\n}\n\nfunction reducer>(\n state: TableState,\n action: ActionType,\n _previousState?: TableState,\n instance?: UseRowSelectTableInstance\n) {\n if (action.type === actions.init) {\n return {\n ...state,\n selectedRowIds: , boolean>>{},\n };\n }\n\n if (action.type === actions.resetSelectedRows) {\n return {\n ...state,\n selectedRowIds: instance?.initialState.selectedRowIds || {},\n };\n }\n\n if (action.type === actions.toggleAllRowsSelected) {\n const { value: setSelected } = action;\n\n if (!instance) {\n return state;\n }\n\n const {\n isAllRowsSelected,\n rowsById,\n nonGroupedRowsById = rowsById,\n isRowSelectable = defaultIsRowSelectable,\n } = instance;\n\n const selectAll =\n typeof setSelected !== 'undefined' ? setSelected : !isAllRowsSelected;\n\n // Only remove/add the rows that are visible on the screen\n // Leave all the other rows that are selected alone.\n const selectedRowIds = { ...state.selectedRowIds };\n\n Object.keys(nonGroupedRowsById).forEach((rowId: IdType) => {\n if (selectAll) {\n const row = rowsById[rowId];\n if (isRowSelectable(row)) {\n selectedRowIds[rowId] = true;\n }\n } else {\n delete selectedRowIds[rowId];\n }\n });\n\n return {\n ...state,\n selectedRowIds,\n };\n }\n\n if (action.type === actions.toggleRowSelected) {\n if (!instance) {\n return state;\n }\n\n const { id, value: setSelected } = action;\n const {\n rowsById,\n selectSubRows = true,\n getSubRows,\n isRowSelectable = defaultIsRowSelectable,\n } = instance;\n\n const isSelected = state.selectedRowIds[id];\n const shouldExist =\n typeof setSelected !== 'undefined' ? setSelected : !isSelected;\n\n if (isSelected === shouldExist) {\n return state;\n }\n\n const newSelectedRowIds = { ...state.selectedRowIds };\n\n // eslint-disable-next-line no-inner-declarations\n function handleRowById(id: IdType) {\n const row = rowsById[id];\n\n if (!isRowSelectable(row)) {\n return;\n }\n\n if (!row.isGrouped) {\n if (shouldExist) {\n newSelectedRowIds[id] = true;\n } else {\n delete newSelectedRowIds[id];\n }\n }\n\n if (selectSubRows && getSubRows(row)) {\n getSubRows(row).forEach((row) => handleRowById(row.id));\n }\n }\n\n handleRowById(id);\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds,\n };\n }\n\n if (action.type === actions.toggleAllPageRowsSelected) {\n if (!instance) {\n return state;\n }\n\n const { value: setSelected } = action;\n const {\n page,\n rowsById,\n selectSubRows = true,\n isAllPageRowsSelected,\n getSubRows,\n } = instance;\n\n const selectAll =\n typeof setSelected !== 'undefined' ? setSelected : !isAllPageRowsSelected;\n\n const newSelectedRowIds = { ...state.selectedRowIds };\n\n // eslint-disable-next-line no-inner-declarations\n function handleRowById(id: IdType) {\n const row = rowsById[id];\n\n if (!row.isGrouped) {\n if (selectAll) {\n newSelectedRowIds[id] = true;\n } else {\n delete newSelectedRowIds[id];\n }\n }\n\n if (selectSubRows && getSubRows(row)) {\n getSubRows(row).forEach((row) => handleRowById(row.id));\n }\n }\n\n page.forEach((row) => handleRowById(row.id));\n\n return {\n ...state,\n selectedRowIds: newSelectedRowIds,\n };\n }\n return state;\n}\n\nfunction useInstance>(\n instance: UseRowSelectTableInstance\n) {\n const {\n data,\n rows,\n getHooks,\n plugins,\n rowsById,\n nonGroupedRowsById = rowsById,\n autoResetSelectedRows = true,\n state: { selectedRowIds },\n selectSubRows = true,\n dispatch,\n page,\n getSubRows,\n isRowSelectable,\n } = instance;\n\n ensurePluginOrder(\n plugins,\n ['useFilters', 'useGroupBy', 'useSortBy', 'useExpanded', 'usePagination'],\n 'useRowSelect'\n );\n\n const selectedFlatRows = useMemo(() => {\n const selectedFlatRows = >>[];\n\n rows.forEach((row) => {\n const isSelected = selectSubRows\n ? getRowIsSelected(row, selectedRowIds, getSubRows)\n : !!selectedRowIds[row.id];\n row.isSelected = !!isSelected;\n row.isSomeSelected = isSelected === null;\n\n if (isSelected) {\n selectedFlatRows.push(row);\n }\n });\n\n return selectedFlatRows;\n }, [rows, selectSubRows, selectedRowIds, getSubRows]);\n\n let isAllRowsSelected = Boolean(\n Object.keys(nonGroupedRowsById).length && Object.keys(selectedRowIds).length\n );\n\n let isAllPageRowsSelected = isAllRowsSelected;\n\n if (isAllRowsSelected) {\n if (\n Object.keys(nonGroupedRowsById).some((id) => {\n const row = rowsById[id];\n\n return !selectedRowIds[id] && isRowSelectable(row);\n })\n ) {\n isAllRowsSelected = false;\n }\n }\n\n if (!isAllRowsSelected) {\n if (\n page &&\n page.length &&\n page.some(({ id }) => {\n const row = rowsById[id];\n\n return !selectedRowIds[id] && isRowSelectable(row);\n })\n ) {\n isAllPageRowsSelected = false;\n }\n }\n\n const getAutoResetSelectedRows = useGetLatest(autoResetSelectedRows);\n\n useMountedLayoutEffect(() => {\n if (getAutoResetSelectedRows()) {\n dispatch({ type: actions.resetSelectedRows });\n }\n }, [dispatch, data]);\n\n const toggleAllRowsSelected = useCallback(\n (value) => dispatch({ type: actions.toggleAllRowsSelected, value }),\n [dispatch]\n );\n\n const toggleAllPageRowsSelected = useCallback(\n (value) => dispatch({ type: actions.toggleAllPageRowsSelected, value }),\n [dispatch]\n );\n\n const toggleRowSelected = useCallback(\n (id, value) => dispatch({ type: actions.toggleRowSelected, id, value }),\n [dispatch]\n );\n\n const getInstance = useGetLatest(instance);\n\n const getToggleAllRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllRowsSelectedProps,\n { instance: getInstance() }\n );\n\n const getToggleAllPageRowsSelectedProps = makePropGetter(\n getHooks().getToggleAllPageRowsSelectedProps,\n { instance: getInstance() }\n );\n\n Object.assign(instance, {\n selectedFlatRows,\n isAllRowsSelected,\n isAllPageRowsSelected,\n toggleRowSelected,\n toggleAllRowsSelected,\n getToggleAllRowsSelectedProps,\n getToggleAllPageRowsSelectedProps,\n toggleAllPageRowsSelected,\n });\n}\n\nfunction prepareRow>(\n row: Row,\n { instance }: { instance: TableInstance }\n) {\n row.toggleRowSelected = (set) => instance.toggleRowSelected(row.id, set);\n\n row.getToggleRowSelectedProps = makePropGetter(\n instance.getHooks().getToggleRowSelectedProps,\n { instance, row }\n );\n}\n\nfunction getRowIsSelected>(\n row: Row,\n selectedRowIds: Record, boolean>,\n getSubRows: (row: Row) => Array>\n) {\n if (selectedRowIds[row.id]) {\n return true;\n }\n\n const subRows = getSubRows(row);\n\n if (subRows && subRows.length) {\n let allChildrenSelected = true;\n let someSelected = false;\n\n subRows.forEach((subRow) => {\n // Bail out early if we know both of these\n if (someSelected && !allChildrenSelected) {\n return;\n }\n\n if (getRowIsSelected(subRow, selectedRowIds, getSubRows)) {\n someSelected = true;\n } else {\n allChildrenSelected = false;\n }\n });\n\n if (allChildrenSelected) {\n return true;\n }\n\n return someSelected ? null : false;\n }\n\n return false;\n}\n\nfunction defaultIsRowSelectable(row: Row) {\n return !!row.original.disabled;\n}\n","import {\n Context,\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n useState,\n} from 'react';\n\nimport { useLocalStorage } from '@/portainer/hooks/useLocalStorage';\n\nexport interface TableSettingsContextInterface {\n settings: T;\n setTableSettings(partialSettings: Partial): void;\n setTableSettings(mutation: (settings: T) => T): void;\n}\n\nconst TableSettingsContext = createContext\n> | null>(null);\n\nexport function useTableSettings() {\n const Context = getContextType();\n\n const context = useContext(Context);\n\n if (context === null) {\n throw new Error('must be nested under TableSettingsProvider');\n }\n\n return context;\n}\n\ninterface ProviderProps {\n children: ReactNode;\n defaults?: T;\n storageKey: string;\n}\n\nexport function TableSettingsProvider({\n children,\n defaults,\n storageKey,\n}: ProviderProps) {\n const Context = getContextType();\n\n const [storage, setStorage] = useLocalStorage(\n keyBuilder(storageKey),\n defaults as T\n );\n\n const [settings, setTableSettings] = useState(storage);\n\n const handleChange = useCallback(\n (mutation: Partial | ((settings: T) => T)): void => {\n setTableSettings((settings) => {\n const newTableSettings =\n mutation instanceof Function\n ? mutation(settings)\n : { ...settings, ...mutation };\n\n setStorage(newTableSettings);\n\n return newTableSettings;\n });\n },\n [setStorage]\n );\n\n const contextValue = useMemo(\n () => ({\n settings,\n setTableSettings: handleChange,\n }),\n [settings, handleChange]\n );\n\n return {children};\n\n function keyBuilder(key: string) {\n return `datatable_TableSettings_${key}`;\n }\n}\n\nfunction getContextType() {\n return TableSettingsContext as unknown as Context<\n TableSettingsContextInterface\n >;\n}\n","import {\n forwardRef,\n useRef,\n useEffect,\n MutableRefObject,\n ChangeEventHandler,\n HTMLProps,\n} from 'react';\n\ninterface Props extends HTMLProps {\n checked?: boolean;\n indeterminate?: boolean;\n title?: string;\n label?: string;\n id: string;\n className?: string;\n role?: string;\n onChange?: ChangeEventHandler;\n}\n\nexport const Checkbox = forwardRef(\n (\n { indeterminate, title, label, id, checked, onChange, ...props }: Props,\n ref\n ) => {\n const defaultRef = useRef(null);\n let resolvedRef = ref as MutableRefObject;\n if (!ref) {\n resolvedRef = defaultRef;\n }\n\n useEffect(() => {\n if (resolvedRef === null || resolvedRef.current === null) {\n return;\n }\n\n if (typeof indeterminate !== 'undefined') {\n resolvedRef.current.indeterminate = indeterminate;\n }\n }, [resolvedRef, indeterminate]);\n\n return (\n
\n \n \n
\n );\n }\n);\n","import { ChangeEvent, createRef } from 'react';\n\nimport { r2a } from '@/react-tools/react2angular';\nimport { Button } from '@/portainer/components/Button';\n\nimport styles from './FileUploadField.module.css';\n\nexport interface Props {\n onChange(value: File): void;\n value?: File;\n accept?: string;\n title?: string;\n required?: boolean;\n}\n\nexport function FileUploadField({\n onChange,\n value,\n accept,\n title = 'Select a file',\n required = false,\n}: Props) {\n const fileRef = createRef();\n\n return (\n
\n \n \n {title}\n \n\n \n {value ? (\n value.name\n ) : (\n \n )}\n \n
\n );\n\n function handleButtonClick() {\n if (fileRef && fileRef.current) {\n fileRef.current.click();\n }\n }\n\n function changeHandler(event: ChangeEvent) {\n if (event.target && event.target.files && event.target.files.length > 0) {\n onChange(event.target.files[0]);\n }\n }\n}\n\nexport const FileUploadFieldAngular = r2a(FileUploadField, [\n 'onChange',\n 'value',\n 'title',\n 'required',\n]);\n","// extracted by mini-css-extract-plugin\nexport default {\"fileInput\":\"app-portainer-components-form-components-FileUpload-FileUploadField-module__file-input\",\"fileButton\":\"app-portainer-components-form-components-FileUpload-FileUploadField-module__file-button\"};","import { PropsWithChildren, ReactNode } from 'react';\nimport clsx from 'clsx';\n\nimport { Tooltip } from '@/portainer/components/Tip/Tooltip';\n\nimport { FormError } from '../FormError';\n\nimport styles from './FormControl.module.css';\n\ntype Size = 'small' | 'medium' | 'large';\n\nexport interface Props {\n inputId: string;\n label: string | ReactNode;\n size?: Size;\n tooltip?: string;\n children: ReactNode;\n errors?: string | ReactNode;\n}\n\nexport function FormControl({\n inputId,\n label,\n size = 'small',\n tooltip = '',\n children,\n errors,\n}: PropsWithChildren) {\n return (\n
\n
\n \n {label}\n {tooltip && }\n \n\n
{children}
\n
\n\n {errors && (\n
\n {errors}\n
\n )}\n
\n );\n}\n\nfunction sizeClassLabel(size?: Size) {\n switch (size) {\n case 'large':\n return 'col-sm-5 col-lg-4';\n case 'medium':\n return 'col-sm-4 col-lg-3';\n default:\n return 'col-sm-3 col-lg-2';\n }\n}\n\nfunction sizeClassChildren(size?: Size) {\n switch (size) {\n case 'large':\n return 'col-sm-7 col-lg-8';\n case 'medium':\n return 'col-sm-8 col-lg-9';\n default:\n return 'col-sm-9 col-lg-10';\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"app-portainer-components-form-components-FormControl-FormControl-module__container\"};","import { PropsWithChildren } from 'react';\n\nexport function FormError({ children }: PropsWithChildren) {\n return (\n
\n \n {children}\n
\n );\n}\n","import { PropsWithChildren } from 'react';\n\nexport function FormSectionTitle({ children }: PropsWithChildren) {\n return
{children}
;\n}\n","import clsx from 'clsx';\nimport { SelectHTMLAttributes } from 'react';\n\nexport interface Option {\n value: T;\n label: string;\n}\n\ninterface Props {\n options: Option[];\n}\n\nexport function Select({\n options,\n className,\n ...props\n}: Props & SelectHTMLAttributes) {\n return (\n \n {options.map((item) => (\n \n ))}\n \n );\n}\n","import clsx from 'clsx';\nimport { InputHTMLAttributes } from 'react';\n\nexport function Input({\n className,\n ...props\n}: InputHTMLAttributes) {\n return (\n \n );\n}\n","import clsx from 'clsx';\n\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\nimport { BEFeatureIndicator } from '@/portainer/components/BEFeatureIndicator';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nimport { r2a } from '@/react-tools/react2angular';\n\nimport './Switch.css';\n\nimport styles from './Switch.module.css';\n\nexport interface Props {\n checked: boolean;\n id: string;\n name: string;\n onChange(checked: boolean): void;\n\n className?: string;\n dataCy?: string;\n disabled?: boolean;\n featureId?: FeatureId;\n}\n\nexport function Switch({\n name,\n checked,\n id,\n disabled,\n dataCy,\n onChange,\n featureId,\n className,\n}: Props) {\n const limitedToBE = isLimitedToBE(featureId);\n\n return (\n <>\n \n onChange(checked)}\n />\n \n \n {limitedToBE && }\n \n );\n}\n\nexport const SwitchAngular = r2a(Switch, [\n 'name',\n 'checked',\n 'id',\n 'disabled',\n 'dataCy',\n 'onChange',\n 'feature',\n 'className',\n]);\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"app-portainer-components-form-components-SwitchField-Switch-module__root\"};","import clsx from 'clsx';\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nimport { Tooltip } from '@/portainer/components/Tip/Tooltip';\nimport { r2a } from '@/react-tools/react2angular';\n\nimport styles from './SwitchField.module.css';\nimport { Switch } from './Switch';\n\nexport interface Props {\n label: string;\n checked: boolean;\n onChange(value: boolean): void;\n\n name?: string;\n tooltip?: string;\n labelClass?: string;\n dataCy?: string;\n disabled?: boolean;\n featureId?: FeatureId;\n}\n\nexport function SwitchField({\n tooltip,\n checked,\n label,\n name,\n labelClass,\n dataCy,\n disabled,\n onChange,\n featureId,\n}: Props) {\n const toggleName = name ? `toggle_${name}` : '';\n\n return (\n \n );\n}\n\nexport const SwitchFieldAngular = r2a(SwitchField, [\n 'tooltip',\n 'checked',\n 'label',\n 'name',\n 'labelClass',\n 'dataCy',\n 'disabled',\n 'onChange',\n 'featureId',\n]);\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"app-portainer-components-form-components-SwitchField-SwitchField-module__root\",\"label\":\"app-portainer-components-form-components-SwitchField-SwitchField-module__label\"};","interface Props {\n value: number;\n onChange(value: number): void;\n showAll: boolean;\n}\n\nexport function ItemsPerPageSelector({ value, onChange, showAll }: Props) {\n return (\n \n Items per page\n onChange(Number(e.target.value))}\n data-cy=\"paginationSelect\"\n >\n {showAll ? : null}\n {[10, 25, 50, 100].map((v) => (\n \n ))}\n \n \n );\n}\n","/**\n * Given the position in the sequence of pagination links, figure out what page number corresponds to that position.\n *\n * @param position\n * @param currentPage\n * @param paginationRange\n * @param totalPages\n */\nexport function calculatePageNumber(\n position: number,\n currentPage: number,\n paginationRange: number,\n totalPages: number\n) {\n const halfWay = Math.ceil(paginationRange / 2);\n if (position === paginationRange) {\n return totalPages;\n }\n\n if (position === 1) {\n return position;\n }\n\n if (paginationRange < totalPages) {\n if (totalPages - halfWay < currentPage) {\n return totalPages - paginationRange + position;\n }\n\n if (halfWay < currentPage) {\n return currentPage - halfWay + position;\n }\n\n return position;\n }\n\n return position;\n}\n","import clsx from 'clsx';\nimport { ReactNode } from 'react';\n\ninterface Props {\n active?: boolean;\n children: ReactNode;\n disabled?: boolean;\n onPageChange(page: number): void;\n page: number | '...';\n}\n\nexport function PageButton({\n children,\n page,\n disabled,\n active,\n onPageChange,\n}: Props) {\n return (\n
  • \n typeof page === 'number' && onPageChange(page)}\n >\n {children}\n \n
  • \n );\n}\n","import { generatePagesArray } from './generatePagesArray';\nimport { PageButton } from './PageButton';\n\ninterface Props {\n boundaryLinks?: boolean;\n currentPage: number;\n directionLinks?: boolean;\n itemsPerPage: number;\n onPageChange(page: number): void;\n totalCount: number;\n maxSize: number;\n}\n\nexport function PageSelector({\n currentPage,\n totalCount,\n itemsPerPage,\n onPageChange,\n maxSize = 5,\n directionLinks = true,\n boundaryLinks = false,\n}: Props) {\n const pages = generatePagesArray(\n currentPage,\n totalCount,\n itemsPerPage,\n maxSize\n );\n const last = pages[pages.length - 1];\n\n if (pages.length <= 1) {\n return null;\n }\n\n return (\n
      \n {boundaryLinks ? (\n \n «\n \n ) : null}\n {directionLinks ? (\n \n ‹\n \n ) : null}\n {pages.map((pageNumber, index) => (\n \n {pageNumber}\n \n ))}\n\n {directionLinks ? (\n \n ›\n \n ) : null}\n {boundaryLinks ? (\n \n »\n \n ) : null}\n
    \n );\n}\n","import { calculatePageNumber } from './calculatePageNumber';\n\nexport /**\n * Generate an array of page numbers (or the '...' string) which is used in an ng-repeat to generate the\n * links used in pagination\n *\n * @param currentPage\n * @param rowsPerPage\n * @param paginationRange\n * @param collectionLength\n * @returns {Array}\n */\nfunction generatePagesArray(\n currentPage: number,\n collectionLength: number,\n rowsPerPage: number,\n paginationRange: number\n): (number | '...')[] {\n const pages: (number | '...')[] = [];\n const totalPages = Math.ceil(collectionLength / rowsPerPage);\n const halfWay = Math.ceil(paginationRange / 2);\n\n let position;\n if (currentPage <= halfWay) {\n position = 'start';\n } else if (totalPages - halfWay < currentPage) {\n position = 'end';\n } else {\n position = 'middle';\n }\n\n const ellipsesNeeded = paginationRange < totalPages;\n\n for (let i = 1; i <= totalPages && i <= paginationRange; i += 1) {\n const pageNumber = calculatePageNumber(\n i,\n currentPage,\n paginationRange,\n totalPages\n );\n\n const openingEllipsesNeeded =\n i === 2 && (position === 'middle' || position === 'end');\n const closingEllipsesNeeded =\n i === paginationRange - 1 &&\n (position === 'middle' || position === 'start');\n if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {\n pages.push('...');\n } else {\n pages.push(pageNumber);\n }\n }\n\n return pages;\n}\n","import { ItemsPerPageSelector } from './ItemsPerPageSelector';\nimport { PageSelector } from './PageSelector';\n\ninterface Props {\n onPageChange(page: number): void;\n onPageLimitChange(value: number): void;\n page: number;\n pageLimit: number;\n showAll: boolean;\n totalCount: number;\n}\n\nexport function PaginationControls({\n pageLimit,\n page,\n onPageLimitChange,\n showAll,\n onPageChange,\n totalCount,\n}: Props) {\n return (\n
    \n
    \n \n {pageLimit !== 0 && (\n \n )}\n \n
    \n );\n\n function handlePageLimitChange(value: number) {\n onPageLimitChange(value);\n onPageChange(1);\n }\n}\n","import { react2angular } from '@/react-tools/react2angular';\n\nexport function Loading() {\n return (\n
    \n
    \n
    \n
    \n );\n}\n\nexport const LoadingAngular = react2angular(Loading, []);\n","import { createContext, PropsWithChildren, useContext } from 'react';\n\nconst Context = createContext(null);\n\nexport function useWidgetContext() {\n const context = useContext(Context);\n\n if (context == null) {\n throw new Error('Should be inside a Widget component');\n }\n}\n\nexport const rdWidget = {\n transclude: true,\n template: `
    `,\n};\n\nexport function Widget({ children }: PropsWithChildren) {\n return (\n \n
    {children}
    \n
    \n );\n}\n","import clsx from 'clsx';\nimport { PropsWithChildren } from 'react';\n\nimport { useWidgetContext } from './Widget';\nimport { Loading } from './Loading';\n\nexport const rdWidgetBody = {\n requires: '^rdWidget',\n bindings: {\n loading: '@?',\n classes: '@?',\n },\n transclude: true,\n template: `\n
    \n \n
    \n
    \n `,\n};\n\ninterface Props {\n loading?: boolean;\n className?: string;\n}\n\nexport function WidgetBody({\n loading,\n className,\n children,\n}: PropsWithChildren) {\n useWidgetContext();\n\n return (\n
    \n {loading ? :
    {children}
    }\n
    \n );\n}\n","import clsx from 'clsx';\nimport { PropsWithChildren, ReactNode } from 'react';\n\nimport { useWidgetContext } from './Widget';\n\nexport const rdWidgetTitle = {\n requires: '^rdWidget',\n bindings: {\n titleText: '@',\n icon: '@',\n classes: '@?',\n },\n transclude: {\n title: '?headerTitle',\n },\n template: `\n
    \n
    \n \n \n {{ $ctrl.titleText }}\n \n \n
    \n
    \n`,\n};\n\ninterface Props {\n title: ReactNode;\n icon: ReactNode;\n className?: string;\n}\n\nexport function WidgetTitle({\n title,\n icon,\n className,\n children,\n}: PropsWithChildren) {\n useWidgetContext();\n\n return (\n
    \n
    \n \n {typeof icon === 'string' ? : icon}\n {title}\n \n {children}\n
    \n
    \n );\n}\n","import angular from 'angular';\n\nimport { LoadingAngular } from './Loading';\nimport { rdWidget, Widget } from './Widget';\nimport { rdWidgetBody, WidgetBody } from './WidgetBody';\nimport { rdWidgetCustomHeader } from './WidgetCustomHeader';\nimport { rdWidgetFooter, WidgetFooter } from './WidgetFooter';\nimport { rdWidgetTitle, WidgetTitle } from './WidgetTitle';\nimport { rdWidgetTaskbar, WidgetTaskbar } from './WidgetTaskbar';\n\nexport { Widget, WidgetBody, WidgetFooter, WidgetTitle, WidgetTaskbar };\n\nexport default angular\n .module('portainer.shared.components.widget', [])\n .component('rdLoading', LoadingAngular)\n .component('rdWidget', rdWidget)\n .component('rdWidgetBody', rdWidgetBody)\n .component('rdWidgetCustomHeader', rdWidgetCustomHeader)\n .component('rdWidgetFooter', rdWidgetFooter)\n .component('rdWidgetHeader', rdWidgetTitle)\n .component('rdWidgetTaskbar', rdWidgetTaskbar).name;\n","export const rdWidgetCustomHeader = {\n requires: '^rdWidget',\n bindings: {\n titleText: '=',\n icon: '=',\n },\n transclude: true,\n template: `\n
    \n
    \n \n \"header-icon\"\n \n {{$ctrl.titleText}} \n \n \n
    \n
    \n `,\n};\n\n// a react component wasn't created because WidgetTitle were adjusted to support a custom image\n","import { PropsWithChildren } from 'react';\n\nimport { useWidgetContext } from './Widget';\n\nexport const rdWidgetFooter = {\n requires: '^rdWidget',\n transclude: true,\n template: `\n
    \n `,\n};\n\nexport function WidgetFooter({ children }: PropsWithChildren) {\n useWidgetContext();\n\n return
    {children}
    ;\n}\n","import { PropsWithChildren } from 'react';\n\nimport { useWidgetContext } from './Widget';\n\nexport const rdWidgetTaskbar = {\n requires: '^rdWidget',\n bindings: {\n classes: '@?',\n },\n transclude: true,\n template: `\n
    \n
    \n
    \n
    \n
    \n `,\n};\n\ninterface Props {\n className?: string;\n}\n\nexport function WidgetTaskbar({\n children,\n className,\n}: PropsWithChildren) {\n useWidgetContext();\n\n return (\n
    \n
    \n
    {children}
    \n
    \n
    \n );\n}\n","import { EnvironmentId } from '../types';\n\nexport function buildUrl(id?: EnvironmentId, action?: string) {\n let baseUrl = 'endpoints';\n if (id) {\n baseUrl += `/${id}`;\n }\n\n if (action) {\n baseUrl += `/${action}`;\n }\n\n return baseUrl;\n}\n\nexport function arrayToJson(arr?: Array) {\n if (!arr) {\n return '';\n }\n\n return JSON.stringify(arr);\n}\n\nexport function json2formData(json: Record) {\n const formData = new FormData();\n\n Object.entries(json).forEach(([key, value]) => {\n if (typeof value === 'undefined' || value === null) {\n return;\n }\n\n formData.append(key, value as string);\n });\n\n return formData;\n}\n","import axios, { parseAxiosError } from '@/portainer/services/axios';\n\nimport {\n Environment,\n EnvironmentGroupId,\n EnvironmentId,\n EnvironmentType,\n EnvironmentSettings,\n TagId,\n TeamId,\n UserId,\n} from '../types';\n\nimport { arrayToJson, buildUrl } from './utils';\n\ninterface EndpointsQuery {\n search?: string;\n types?: EnvironmentType[];\n tagIds?: TagId[];\n endpointIds?: EnvironmentId[];\n tagsPartialMatch?: boolean;\n groupId?: EnvironmentGroupId;\n edgeDeviceFilter?: boolean;\n}\n\nexport async function getEndpoints(\n start: number,\n limit: number,\n { types, tagIds, endpointIds, ...query }: EndpointsQuery = {}\n) {\n if (tagIds && tagIds.length === 0) {\n return { totalCount: 0, value: [] };\n }\n\n const url = buildUrl();\n\n const params: Record = { start, limit, ...query };\n\n if (types) {\n params.types = arrayToJson(types);\n }\n\n if (tagIds) {\n params.tagIds = arrayToJson(tagIds);\n }\n\n if (endpointIds) {\n params.endpointIds = arrayToJson(endpointIds);\n }\n\n try {\n const response = await axios.get(url, { params });\n\n const totalCount = response.headers['X-Total-Count'];\n\n return { totalCount: parseInt(totalCount, 10), value: response.data };\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function getEndpoint(id: EnvironmentId) {\n try {\n const { data: endpoint } = await axios.get(buildUrl(id));\n return endpoint;\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function snapshotEndpoints() {\n try {\n await axios.post(buildUrl(undefined, 'snapshot'));\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function snapshotEndpoint(id: EnvironmentId) {\n try {\n await axios.post(buildUrl(id, 'snapshot'));\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function endpointsByGroup(\n start: number,\n limit: number,\n search: string,\n groupId: EnvironmentGroupId\n) {\n return getEndpoints(start, limit, { search, groupId });\n}\n\nexport async function disassociateEndpoint(id: EnvironmentId) {\n try {\n await axios.delete(buildUrl(id, 'association'));\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\ninterface UpdatePayload {\n TLSCACert?: File;\n TLSCert?: File;\n TLSKey?: File;\n\n Name: string;\n PublicURL: string;\n GroupID: EnvironmentGroupId;\n TagIds: TagId[];\n\n EdgeCheckinInterval: number;\n\n TLS: boolean;\n TLSSkipVerify: boolean;\n TLSSkipClientVerify: boolean;\n AzureApplicationID: string;\n AzureTenantID: string;\n AzureAuthenticationKey: string;\n}\n\nasync function uploadTLSFilesForEndpoint(\n id: EnvironmentId,\n tlscaCert?: File,\n tlsCert?: File,\n tlsKey?: File\n) {\n await Promise.all([\n uploadCert('ca', tlscaCert),\n uploadCert('cert', tlsCert),\n uploadCert('key', tlsKey),\n ]);\n\n function uploadCert(type: 'ca' | 'cert' | 'key', cert?: File) {\n if (!cert) {\n return null;\n }\n try {\n return axios.post(`upload/tls/${type}`, cert, {\n params: { folder: id },\n });\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n }\n}\n\nexport async function updateEndpoint(\n id: EnvironmentId,\n payload: UpdatePayload\n) {\n try {\n await uploadTLSFilesForEndpoint(\n id,\n payload.TLSCACert,\n payload.TLSCert,\n payload.TLSKey\n );\n\n const { data: endpoint } = await axios.put(\n buildUrl(id),\n payload\n );\n\n return endpoint;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to update environment');\n }\n}\n\nexport async function deleteEndpoint(id: EnvironmentId) {\n try {\n await axios.delete(buildUrl(id));\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function updatePoolAccess(\n id: EnvironmentId,\n resourcePool: string,\n usersToAdd: UserId[],\n teamsToAdd: TeamId[],\n usersToRemove: UserId[],\n teamsToRemove: TeamId[]\n) {\n try {\n await axios.put(`${buildUrl(id, 'pools')}/${resourcePool}/access`, {\n usersToAdd,\n teamsToAdd,\n usersToRemove,\n teamsToRemove,\n });\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function forceUpdateService(\n id: EnvironmentId,\n serviceID: string,\n pullImage: boolean\n) {\n try {\n await axios.put(buildUrl(id, 'forceupdateservice'), {\n serviceID,\n pullImage,\n });\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function updateSettings(\n id: EnvironmentId,\n settings: EnvironmentSettings\n) {\n try {\n await axios.put(buildUrl(id, 'settings'), settings);\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nexport async function trustEndpoint(id: EnvironmentId) {\n try {\n const { data: endpoint } = await axios.put(buildUrl(id), {\n UserTrusted: true,\n });\n return endpoint;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to update environment');\n }\n}\n","export type EnvironmentId = number;\n\nexport enum EnvironmentType {\n // Docker represents an environment(endpoint) connected to a Docker environment(endpoint)\n Docker = 1,\n // AgentOnDocker represents an environment(endpoint) connected to a Portainer agent deployed on a Docker environment(endpoint)\n AgentOnDocker,\n // Azure represents an environment(endpoint) connected to an Azure environment(endpoint)\n Azure,\n // EdgeAgentOnDocker represents an environment(endpoint) connected to an Edge agent deployed on a Docker environment(endpoint)\n EdgeAgentOnDocker,\n // KubernetesLocal represents an environment(endpoint) connected to a local Kubernetes environment(endpoint)\n KubernetesLocal,\n // AgentOnKubernetes represents an environment(endpoint) connected to a Portainer agent deployed on a Kubernetes environment(endpoint)\n AgentOnKubernetes,\n // EdgeAgentOnKubernetes represents an environment(endpoint) connected to an Edge agent deployed on a Kubernetes environment(endpoint)\n EdgeAgentOnKubernetes,\n}\n\nexport type TagId = number;\n\nexport interface Tag {\n Id: TagId;\n Name: string;\n}\n\nexport enum EnvironmentStatus {\n Up = 1,\n Down,\n}\n\nexport interface DockerSnapshot {\n TotalCPU: number;\n TotalMemory: number;\n NodeCount: number;\n ImageCount: number;\n VolumeCount: number;\n RunningContainerCount: number;\n StoppedContainerCount: number;\n HealthyContainerCount: number;\n UnhealthyContainerCount: number;\n Time: number;\n StackCount: number;\n ServiceCount: number;\n Swarm: boolean;\n DockerVersion: string;\n}\n\nexport interface KubernetesSnapshot {\n KubernetesVersion: string;\n TotalCPU: number;\n TotalMemory: number;\n Time: number;\n NodeCount: number;\n}\n\nexport interface KubernetesSettings {\n Snapshots: KubernetesSnapshot[];\n}\n\nexport type Environment = {\n Id: EnvironmentId;\n Type: EnvironmentType;\n TagIds: TagId[];\n GroupName: string;\n EdgeID?: string;\n EdgeCheckinInterval?: number;\n LastCheckInDate?: number;\n Name: string;\n Status: EnvironmentStatus;\n URL: string;\n Snapshots: DockerSnapshot[];\n Kubernetes: KubernetesSettings;\n PublicURL?: string;\n IsEdgeDevice?: boolean;\n UserTrusted: boolean;\n AMTDeviceGUID?: string;\n};\n\n/**\n * TS reference of endpoint_create.go#EndpointCreationType iota\n */\nexport enum EnvironmentCreationTypes {\n LocalDockerEnvironment = 1,\n AgentEnvironment,\n AzureEnvironment,\n EdgeAgentEnvironment,\n LocalKubernetesEnvironment,\n}\n\nexport type EnvironmentGroupId = number;\n\nexport enum PlatformType {\n Docker,\n Kubernetes,\n Azure,\n}\n\nexport interface EnvironmentSettings {\n // Whether non-administrator should be able to use bind mounts when creating containers\n allowBindMountsForRegularUsers: boolean;\n // Whether non-administrator should be able to use privileged mode when creating containers\n allowPrivilegedModeForRegularUsers: boolean;\n // Whether non-administrator should be able to browse volumes\n allowVolumeBrowserForRegularUsers: boolean;\n // Whether non-administrator should be able to use the host pid\n allowHostNamespaceForRegularUsers: boolean;\n // Whether non-administrator should be able to use device mapping\n allowDeviceMappingForRegularUsers: boolean;\n // Whether non-administrator should be able to manage stacks\n allowStackManagementForRegularUsers: boolean;\n // Whether non-administrator should be able to use container capabilities\n allowContainerCapabilitiesForRegularUsers: boolean;\n // Whether non-administrator should be able to use sysctl settings\n allowSysctlSettingForRegularUsers: boolean;\n // Whether host management features are enabled\n enableHostManagementFeatures: boolean;\n}\n\nexport type UserId = number;\nexport type TeamId = number;\nexport type RoleId = number;\ninterface AccessPolicy {\n RoleId: RoleId;\n}\nexport type UserAccessPolicies = Record; // map[UserID]AccessPolicy\nexport type TeamAccessPolicies = Record;\n","export default class PortainerError extends Error {\n err?: Error;\n\n constructor(msg: string, err?: Error) {\n super(msg);\n this.err = err;\n }\n}\n","export enum Edition {\n CE,\n BE,\n}\n\nexport enum FeatureState {\n HIDDEN,\n VISIBLE,\n LIMITED_BE,\n}\n\nexport enum FeatureId {\n K8S_RESOURCE_POOL_LB_QUOTA = 'k8s-resourcepool-Ibquota',\n K8S_RESOURCE_POOL_STORAGE_QUOTA = 'k8s-resourcepool-storagequota',\n RBAC_ROLES = 'rbac-roles',\n REGISTRY_MANAGEMENT = 'registry-management',\n K8S_SETUP_DEFAULT = 'k8s-setup-default',\n S3_BACKUP_SETTING = 's3-backup-setting',\n HIDE_INTERNAL_AUTHENTICATION_PROMPT = 'hide-internal-authentication-prompt',\n TEAM_MEMBERSHIP = 'team-membership',\n HIDE_INTERNAL_AUTH = 'hide-internal-auth',\n EXTERNAL_AUTH_LDAP = 'external-auth-ldap',\n ACTIVITY_AUDIT = 'activity-audit',\n FORCE_REDEPLOYMENT = 'force-redeployment',\n HIDE_AUTO_UPDATE_WINDOW = 'hide-auto-update-window',\n STACK_PULL_IMAGE = 'stack-pull-image',\n STACK_WEBHOOK = 'stack-webhook',\n CONTAINER_WEBHOOK = 'container-webhook',\n}\n","import { Edition, FeatureId, FeatureState } from './enums';\n\ninterface ServiceState {\n currentEdition: Edition;\n features: Record;\n}\n\nconst state: ServiceState = {\n currentEdition: Edition.CE,\n features: >{},\n};\n\nexport async function init(edition: Edition) {\n // will be loaded on runtime\n const currentEdition = edition;\n const features = {\n [FeatureId.K8S_RESOURCE_POOL_LB_QUOTA]: Edition.BE,\n [FeatureId.K8S_RESOURCE_POOL_STORAGE_QUOTA]: Edition.BE,\n [FeatureId.ACTIVITY_AUDIT]: Edition.BE,\n [FeatureId.EXTERNAL_AUTH_LDAP]: Edition.BE,\n [FeatureId.HIDE_INTERNAL_AUTH]: Edition.BE,\n [FeatureId.HIDE_INTERNAL_AUTHENTICATION_PROMPT]: Edition.BE,\n [FeatureId.K8S_SETUP_DEFAULT]: Edition.BE,\n [FeatureId.RBAC_ROLES]: Edition.BE,\n [FeatureId.REGISTRY_MANAGEMENT]: Edition.BE,\n [FeatureId.S3_BACKUP_SETTING]: Edition.BE,\n [FeatureId.TEAM_MEMBERSHIP]: Edition.BE,\n [FeatureId.FORCE_REDEPLOYMENT]: Edition.BE,\n [FeatureId.HIDE_AUTO_UPDATE_WINDOW]: Edition.BE,\n [FeatureId.STACK_PULL_IMAGE]: Edition.BE,\n [FeatureId.STACK_WEBHOOK]: Edition.BE,\n [FeatureId.CONTAINER_WEBHOOK]: Edition.BE,\n };\n\n state.currentEdition = currentEdition;\n state.features = features;\n}\n\nexport function selectShow(featureId?: FeatureId) {\n if (!featureId) {\n return FeatureState.VISIBLE;\n }\n\n if (!state.features[featureId]) {\n return FeatureState.HIDDEN;\n }\n\n if (state.features[featureId] <= state.currentEdition) {\n return FeatureState.VISIBLE;\n }\n\n if (state.features[featureId] === Edition.BE) {\n return FeatureState.LIMITED_BE;\n }\n\n return FeatureState.HIDDEN;\n}\n\nexport function isLimitedToBE(featureId?: FeatureId) {\n return selectShow(featureId) === FeatureState.LIMITED_BE;\n}\n","import { useEffect, useState } from 'react';\n\nexport function useDebounce(value: T, delay = 500): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n","import { useState, useCallback } from 'react';\n\nconst localStoragePrefix = 'portainer';\n\nfunction keyBuilder(key: string) {\n return `${localStoragePrefix}.${key}`;\n}\n\nexport function useLocalStorage(\n key: string,\n defaultValue: T,\n storage = localStorage\n): [T, (value: T) => void] {\n const [value, setValue] = useState(get(key, defaultValue, storage));\n\n const handleChange = useCallback(\n (value) => {\n setValue(value);\n set(key, value, storage);\n },\n [key, storage]\n );\n\n return [value, handleChange];\n}\n\nexport function get(\n key: string,\n defaultValue: T,\n storage = localStorage\n): T {\n const value = storage.getItem(keyBuilder(key));\n if (!value) {\n return defaultValue;\n }\n\n try {\n return JSON.parse(value);\n } catch (e) {\n return defaultValue;\n }\n}\n\nexport function set(key: string, value: T, storage = localStorage) {\n storage.setItem(keyBuilder(key), JSON.stringify(value));\n}\n","import jwtDecode from 'jwt-decode';\nimport { useCurrentStateAndParams } from '@uirouter/react';\nimport {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useState,\n useMemo,\n} from 'react';\n\nimport { getUser } from '@/portainer/services/api/userService';\n\nimport { UserViewModel } from '../models/user';\n\nimport { useLocalStorage } from './useLocalStorage';\n\ninterface State {\n user?: UserViewModel | null;\n}\n\nexport const UserContext = createContext(null);\n\nexport function useUser() {\n const context = useContext(UserContext);\n\n if (context === null) {\n throw new Error('should be nested under UserProvider');\n }\n\n return context;\n}\n\nexport function useAuthorizations(\n authorizations: string | string[],\n adminOnlyCE = false\n) {\n const authorizationsArray =\n typeof authorizations === 'string' ? [authorizations] : authorizations;\n\n const { user } = useUser();\n const { params } = useCurrentStateAndParams();\n\n if (process.env.PORTAINER_EDITION === 'CE') {\n return !adminOnlyCE || isAdmin(user);\n }\n\n const { endpointId } = params;\n if (!endpointId) {\n return false;\n }\n\n if (!user) {\n return false;\n }\n\n if (isAdmin(user)) {\n return true;\n }\n\n if (\n !user.EndpointAuthorizations ||\n !user.EndpointAuthorizations[endpointId]\n ) {\n return false;\n }\n\n const userEndpointAuthorizations = user.EndpointAuthorizations[endpointId];\n return authorizationsArray.some(\n (authorization) => userEndpointAuthorizations[authorization]\n );\n}\n\ninterface AuthorizedProps {\n authorizations: string | string[];\n children: ReactNode;\n}\n\nexport function Authorized({ authorizations, children }: AuthorizedProps) {\n const isAllowed = useAuthorizations(authorizations);\n\n return isAllowed ? <>{children} : null;\n}\n\ninterface UserProviderProps {\n children: ReactNode;\n}\n\nexport function UserProvider({ children }: UserProviderProps) {\n const [jwt] = useLocalStorage('JWT', '');\n const [user, setUser] = useState(null);\n\n useEffect(() => {\n if (jwt !== '') {\n const tokenPayload = jwtDecode(jwt) as { id: number };\n\n loadUser(tokenPayload.id);\n }\n }, [jwt]);\n\n const providerState = useMemo(() => ({ user }), [user]);\n\n if (jwt === '') {\n return null;\n }\n\n if (providerState.user === null) {\n return null;\n }\n\n return (\n \n {children}\n \n );\n\n async function loadUser(id: number) {\n const user = await getUser(id);\n setUser(user);\n }\n}\n\nexport function isAdmin(user?: UserViewModel | null): boolean {\n return !!user && user.Role === 1;\n}\n","import axios, { parseAxiosError } from 'Portainer/services/axios';\n\nimport { FDOConfiguration, DeviceConfiguration, Profile } from './model';\n\nconst BASE_URL = '/fdo';\n\nexport async function configureFDO(formValues: FDOConfiguration) {\n try {\n await axios.post(`${BASE_URL}/configure`, formValues);\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to configure FDO');\n }\n}\n\nexport async function configureDevice(\n deviceId: string,\n deviceConfig: DeviceConfiguration\n) {\n try {\n await axios.post(`${BASE_URL}/configure/${deviceId}`, deviceConfig);\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to configure device');\n }\n}\n\nexport async function createProfile(\n name: string,\n method: string,\n profileFileContent: string\n) {\n const payload = {\n name,\n profileFileContent,\n };\n try {\n await axios.post(`${BASE_URL}/profiles`, payload, {\n params: { method },\n });\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to create profile');\n }\n}\n\nexport async function getProfiles() {\n try {\n const { data: profiles } = await axios.get(\n `${BASE_URL}/profiles`\n );\n return profiles;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to retrieve the profiles');\n }\n}\n\nexport async function getProfile(profileId: number) {\n try {\n const { data: profile } = await axios.get(\n `${BASE_URL}/profiles/${profileId}`\n );\n return profile;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to retrieve profile');\n }\n}\n\nexport async function deleteProfile(profileId: number) {\n try {\n await axios.delete(`${BASE_URL}/profiles/${profileId}`);\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to delete profile');\n }\n}\n\nexport async function updateProfile(\n id: number,\n name: string,\n profileFileContent: string\n) {\n const payload = {\n name,\n profileFileContent,\n };\n try {\n await axios.put(`${BASE_URL}/profiles/${id}`, payload);\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to update profile');\n }\n}\n\nexport async function duplicateProfile(id: number) {\n try {\n const { data: profile } = await axios.post(\n `${BASE_URL}/profiles/${id}/duplicate`\n );\n return profile;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to duplicate profile');\n }\n}\n","import axios, { parseAxiosError } from 'Portainer/services/axios';\n\nimport { EnvironmentId } from '@/portainer/environments/types';\n\nimport {\n OpenAMTConfiguration,\n AMTInformation,\n AuthorizationResponse,\n Device,\n DeviceFeatures,\n} from './model';\n\nconst BASE_URL = '/open_amt';\n\nexport async function configureAMT(formValues: OpenAMTConfiguration) {\n try {\n await axios.post(`${BASE_URL}/configure`, formValues);\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to configure AMT');\n }\n}\n\nexport async function getAMTInfo(environmentId: EnvironmentId) {\n try {\n const { data: amtInformation } = await axios.get(\n `${BASE_URL}/${environmentId}/info`\n );\n\n return amtInformation;\n } catch (e) {\n throw parseAxiosError(\n e as Error,\n 'Unable to retrieve environment information'\n );\n }\n}\n\nexport async function activateDevice(environmentId: EnvironmentId) {\n try {\n await axios.post(`${BASE_URL}/${environmentId}/activate`);\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to activate device');\n }\n}\n\nexport async function getDevices(environmentId: EnvironmentId) {\n try {\n const { data: devices } = await axios.get(\n `${BASE_URL}/${environmentId}/devices`\n );\n\n return devices;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to retrieve device information');\n }\n}\n\nexport async function executeDeviceAction(\n environmentId: EnvironmentId,\n deviceGUID: string,\n action: string\n) {\n try {\n const actionPayload = { action };\n await axios.post(\n `${BASE_URL}/${environmentId}/devices/${deviceGUID}/action`,\n actionPayload\n );\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to execute device action');\n }\n}\n\nexport async function enableDeviceFeatures(\n environmentId: EnvironmentId,\n deviceGUID: string,\n features: DeviceFeatures\n) {\n try {\n const featuresPayload = { features };\n const { data: authorizationResponse } =\n await axios.post(\n `${BASE_URL}/${environmentId}/devices/${deviceGUID}/features`,\n featuresPayload\n );\n return authorizationResponse;\n } catch (e) {\n throw parseAxiosError(e as Error, 'Unable to enable device features');\n }\n}\n","import _ from 'lodash-es';\nimport { AxiosError } from 'axios';\n\nimport axios from '@/portainer/services/axios';\n\nimport { License, LicenseInfo } from './types';\n\ntype Listener = (info: LicenseInfo) => void;\n\ninterface Store {\n data?: LicenseInfo;\n lastLoaded?: number;\n invalidated: boolean;\n listeners: Listener[];\n}\n\nconst store: Store = {\n listeners: [],\n invalidated: true,\n};\n\nexport async function getLicenses() {\n try {\n const { data } = await axios.get(buildUrl());\n\n return data;\n } catch (e) {\n const axiosError = e as AxiosError;\n throw new Error(axiosError.response?.data.message);\n }\n}\n\ninterface AttachResponse {\n licenses: License[];\n failedKeys: Record;\n}\n\nexport async function attachLicense(licenseKeys: string[]) {\n try {\n const { data } = await axios.post(buildUrl(), {\n licenseKeys,\n });\n\n if (Object.keys(data.failedKeys).length === licenseKeys.length) {\n return data;\n }\n\n store.invalidated = true;\n getLicenseInfo();\n return data;\n } catch (e) {\n const axiosError = e as AxiosError;\n throw new Error(axiosError.response?.data.message);\n }\n}\n\ninterface RemoveResponse {\n failedKeys: Record;\n}\n\nexport async function removeLicense(licenseKeys: string[]) {\n try {\n const { data } = await axios.post(buildUrl('remove'), {\n licenseKeys,\n });\n if (Object.keys(data.failedKeys).length === licenseKeys.length) {\n return data;\n }\n\n store.invalidated = true;\n getLicenseInfo();\n return data;\n } catch (e) {\n const axiosError = e as AxiosError;\n throw new Error(axiosError.response?.data.message);\n }\n}\n\nexport async function getLicenseInfo() {\n try {\n if (\n store.data &&\n !store.invalidated &&\n store.lastLoaded &&\n Math.abs(store.lastLoaded - Date.now()) < 1000 * 30\n ) {\n return store.data;\n }\n\n const { data: info } = await axios.get(buildUrl('info'));\n store.data = info;\n store.lastLoaded = Date.now();\n store.invalidated = false;\n store.listeners.forEach((listener) => listener(info));\n\n return info;\n } catch (e) {\n const axiosError = e as AxiosError;\n throw new Error(axiosError.response?.data.message);\n }\n}\n\nexport function subscribe(listener: Listener) {\n store.listeners.push(listener);\n}\n\nexport function unsubscribe(listener: Listener) {\n _.remove(store.listeners, listener);\n}\n\n/* @ngInject */\nexport function LicenseService() {\n return {\n licenses: getLicenses,\n attach: attachLicense,\n remove: removeLicense,\n info: getLicenseInfo,\n subscribe,\n unsubscribe,\n };\n}\n\nfunction buildUrl(action = '') {\n let url = 'licenses';\n\n if (action) {\n url += `/${action}`;\n }\n return url;\n}\n","import { ResourceControlOwnership as RCO } from './resourceControlOwnership';\n\nexport enum ResourceControlType {\n // Container represents a resource control associated to a Docker container\n Container = 1,\n // Service represents a resource control associated to a Docker service\n Service,\n // Volume represents a resource control associated to a Docker volume\n Volume,\n // Network represents a resource control associated to a Docker network\n Network,\n // Secret represents a resource control associated to a Docker secret\n Secret,\n // Stack represents a resource control associated to a stack composed of Docker services\n Stack,\n // Config represents a resource control associated to a Docker config\n Config,\n // CustomTemplate represents a resource control associated to a custom template\n CustomTemplate,\n // ContainerGroup represents a resource control associated to an Azure container group\n ContainerGroup,\n}\n\nexport interface ResourceControlResponse {\n Id: number;\n Type: ResourceControlType;\n ResourceId: string | number;\n UserAccesses: unknown[];\n TeamAccesses: unknown[];\n Public: boolean;\n AdministratorsOnly: boolean;\n System: boolean;\n}\n\nexport class ResourceControlViewModel {\n Id: number;\n\n Type: ResourceControlType;\n\n ResourceId: string | number;\n\n UserAccesses: unknown[];\n\n TeamAccesses: unknown[];\n\n Public: boolean;\n\n System: boolean;\n\n Ownership: RCO;\n\n constructor(data: ResourceControlResponse) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.ResourceId = data.ResourceId;\n this.UserAccesses = data.UserAccesses;\n this.TeamAccesses = data.TeamAccesses;\n this.Public = data.Public;\n this.System = data.System;\n this.Ownership = determineOwnership(this);\n }\n}\n\nfunction determineOwnership(resourceControl: ResourceControlViewModel) {\n if (resourceControl.Public) {\n return RCO.PUBLIC;\n }\n\n if (\n resourceControl.UserAccesses.length === 1 &&\n resourceControl.TeamAccesses.length === 0\n ) {\n return RCO.PRIVATE;\n }\n\n if (\n resourceControl.UserAccesses.length > 1 ||\n resourceControl.TeamAccesses.length > 0\n ) {\n return RCO.RESTRICTED;\n }\n\n return RCO.ADMINISTRATORS;\n}\n","export enum ResourceControlOwnership {\n PUBLIC = 'public',\n PRIVATE = 'private',\n RESTRICTED = 'restricted',\n ADMINISTRATORS = 'administrators',\n}\n","import axiosOrigin, { AxiosError, AxiosRequestConfig } from 'axios';\nimport { loadProgressBar } from 'axios-progress-bar';\nimport 'axios-progress-bar/dist/nprogress.css';\n\nimport PortainerError from '../error';\nimport { get as localStorageGet } from '../hooks/useLocalStorage';\n\nimport {\n portainerAgentManagerOperation,\n portainerAgentTargetHeader,\n} from './http-request.helper';\n\nconst axios = axiosOrigin.create({ baseURL: 'api' });\n\nexport default axios;\n\nloadProgressBar(undefined, axios);\n\naxios.interceptors.request.use(async (config) => {\n const newConfig = { headers: config.headers || {}, ...config };\n\n const jwt = localStorageGet('JWT', '');\n if (jwt) {\n newConfig.headers.Authorization = `Bearer ${jwt}`;\n }\n\n return newConfig;\n});\n\nexport function agentInterceptor(config: AxiosRequestConfig) {\n if (!config.url || !config.url.includes('/docker/')) {\n return config;\n }\n\n const newConfig = { headers: config.headers || {}, ...config };\n const target = portainerAgentTargetHeader();\n if (target) {\n newConfig.headers['X-PortainerAgent-Target'] = target;\n }\n\n if (portainerAgentManagerOperation()) {\n newConfig.headers['X-PortainerAgent-ManagerOperation'] = '1';\n }\n\n return newConfig;\n}\n\naxios.interceptors.request.use(agentInterceptor);\n\nexport function parseAxiosError(\n err: Error,\n msg = '',\n parseError = defaultErrorParser\n) {\n let resultErr = err;\n let resultMsg = msg;\n\n if ('isAxiosError' in err) {\n const { error, details } = parseError(err as AxiosError);\n resultErr = error;\n resultMsg = msg ? `${msg}: ${details}` : details;\n }\n\n return new PortainerError(resultMsg, resultErr);\n}\n\nfunction defaultErrorParser(axiosError: AxiosError) {\n const message = axiosError.response?.data.message;\n const details = axiosError.response?.data.details || message;\n const error = new Error(message);\n return { error, details };\n}\n","interface Headers {\n agentTargetQueue: string[];\n agentManagerOperation: boolean;\n registryAuthentication?: string;\n agentTargetLastValue: string;\n}\n\nconst headers: Headers = {\n agentTargetQueue: [],\n agentManagerOperation: false,\n agentTargetLastValue: '',\n};\n\nexport function registryAuthenticationHeader() {\n return headers.registryAuthentication;\n}\n\nexport function setRegistryAuthenticationHeader(headerValue: string) {\n headers.registryAuthentication = headerValue;\n}\n\n// Due to the fact that async HTTP requests are decorated using an interceptor\n// we need to store and retrieve the headers using a first-in-first-out (FIFO) data structure.\n// Otherwise, sequential HTTP requests might end up using the same header value (incorrect in the case\n// of starting multiple containers on different nodes for example).\n// To prevent having to use the HttpRequestHelper.setPortainerAgentTargetHeader before EACH request,\n// we re-use the latest available header in the data structure (handy in thee case of multiple requests affecting\n// the same node in the same view).\nexport function portainerAgentTargetHeader() {\n if (headers.agentTargetQueue.length === 0) {\n return headers.agentTargetLastValue;\n }\n\n if (headers.agentTargetQueue.length === 1) {\n const [lastValue] = headers.agentTargetQueue;\n headers.agentTargetLastValue = lastValue;\n }\n\n return headers.agentTargetQueue.shift() || '';\n}\n\nexport function setPortainerAgentTargetHeader(headerValue: string) {\n if (headerValue) {\n headers.agentTargetQueue.push(headerValue);\n }\n}\n\nexport function setPortainerAgentManagerOperation(set: boolean) {\n headers.agentManagerOperation = set;\n}\n\nexport function portainerAgentManagerOperation() {\n return headers.agentManagerOperation;\n}\n\nexport function resetAgentHeaders() {\n headers.agentTargetQueue = [];\n headers.agentTargetLastValue = '';\n headers.agentManagerOperation = false;\n delete headers.registryAuthentication;\n}\n\n/* @ngInject */\nexport function HttpRequestHelperAngular() {\n return {\n registryAuthenticationHeader,\n setRegistryAuthenticationHeader,\n portainerAgentTargetHeader,\n setPortainerAgentTargetHeader,\n setPortainerAgentManagerOperation,\n portainerAgentManagerOperation,\n resetAgentHeaders,\n };\n}\n","import sanitize from 'sanitize-html';\nimport bootbox from 'bootbox';\n\nimport { applyBoxCSS, ButtonsOptions, confirmButtons } from './utils';\n\ntype ConfirmCallback = (confirmed: boolean) => void;\n\ninterface ConfirmAsyncOptions {\n title: string;\n message: string;\n buttons: ButtonsOptions;\n}\n\ninterface ConfirmOptions extends ConfirmAsyncOptions {\n callback: ConfirmCallback;\n}\n\nexport function confirmWebEditorDiscard() {\n const options = {\n title: 'Are you sure?',\n message:\n 'You currently have unsaved changes in the editor. Are you sure you want to leave?',\n buttons: {\n confirm: {\n label: 'Yes',\n className: 'btn-danger',\n },\n },\n };\n return new Promise((resolve) => {\n confirm({\n ...options,\n callback: (confirmed) => resolve(confirmed),\n });\n });\n}\n\nexport function confirmAsync(options: ConfirmAsyncOptions) {\n return new Promise((resolve) => {\n confirm({\n ...options,\n callback: (confirmed) => resolve(confirmed),\n });\n });\n}\n\nexport function confirm(options: ConfirmOptions) {\n const box = bootbox.confirm({\n title: options.title,\n message: options.message,\n buttons: confirmButtons(options.buttons),\n callback: options.callback,\n });\n\n applyBoxCSS(box);\n}\n\nexport function confirmAccessControlUpdate(callback: ConfirmCallback) {\n confirm({\n title: 'Are you sure?',\n message:\n 'Changing the ownership of this resource will potentially restrict its management to some users.',\n buttons: {\n confirm: {\n label: 'Change ownership',\n className: 'btn-primary',\n },\n },\n callback,\n });\n}\n\nexport function confirmImageForceRemoval(callback: ConfirmCallback) {\n confirm({\n title: 'Are you sure?',\n message:\n 'Forcing the removal of the image will remove the image even if it has multiple tags or if it is used by stopped containers.',\n buttons: {\n confirm: {\n label: 'Remove the image',\n className: 'btn-danger',\n },\n },\n callback,\n });\n}\n\nexport function cancelRegistryRepositoryAction(callback: ConfirmCallback) {\n confirm({\n title: 'Are you sure?',\n message:\n 'WARNING: interrupting this operation before it has finished will result in the loss of all tags. Are you sure you want to do this?',\n buttons: {\n confirm: {\n label: 'Stop',\n className: 'btn-danger',\n },\n },\n callback,\n });\n}\n\nexport function confirmDeletion(message: string, callback: ConfirmCallback) {\n const messageSanitized = sanitize(message);\n confirm({\n title: 'Are you sure?',\n message: messageSanitized,\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback,\n });\n}\n\nexport function confirmDetachment(message: string, callback: ConfirmCallback) {\n const messageSanitized = sanitize(message);\n confirm({\n title: 'Are you sure ?',\n message: messageSanitized,\n buttons: {\n confirm: {\n label: 'Detach',\n className: 'btn-danger',\n },\n },\n callback,\n });\n}\n\nexport function confirmDeassociate(callback: ConfirmCallback) {\n const message =\n '

    De-associating this Edge environment will mark it as non associated and will clear the registered Edge ID.

    ' +\n '

    Any agent started with the Edge key associated to this environment will be able to re-associate with this environment.

    ' +\n '

    You can re-use the Edge ID and Edge key that you used to deploy the existing Edge agent to associate a new Edge device to this environment.

    ';\n confirm({\n title: 'About de-associating',\n message: sanitize(message),\n buttons: {\n confirm: {\n label: 'De-associate',\n className: 'btn-primary',\n },\n },\n callback,\n });\n}\n\nexport function confirmUpdate(message: string, callback: ConfirmCallback) {\n const messageSanitized = sanitize(message);\n\n confirm({\n title: 'Are you sure?',\n message: messageSanitized,\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-warning',\n },\n },\n callback,\n });\n}\n\nexport function confirmRedeploy(message: string, callback: ConfirmCallback) {\n const messageSanitized = sanitize(message);\n\n confirm({\n title: '',\n message: messageSanitized,\n buttons: {\n confirm: {\n label: 'Redeploy the applications',\n className: 'btn-primary',\n },\n cancel: {\n label: \"I'll do it later\",\n },\n },\n callback,\n });\n}\n\nexport function confirmDeletionAsync(message: string) {\n return new Promise((resolve) => {\n confirmDeletion(message, (confirmed) => resolve(confirmed));\n });\n}\n\nexport function confirmEndpointSnapshot(callback: ConfirmCallback) {\n confirm({\n title: 'Are you sure?',\n message:\n 'Triggering a manual refresh will poll each environment to retrieve its information, this may take a few moments.',\n buttons: {\n confirm: {\n label: 'Continue',\n className: 'btn-primary',\n },\n },\n callback,\n });\n}\n\nexport function confirmImageExport(callback: ConfirmCallback) {\n confirm({\n title: 'Caution',\n message:\n 'The export may take several minutes, do not navigate away whilst the export is in progress.',\n buttons: {\n confirm: {\n label: 'Continue',\n className: 'btn-primary',\n },\n },\n callback,\n });\n}\n\nexport function confirmChangePassword() {\n return confirmAsync({\n title: 'Are you sure?',\n message:\n 'You will be logged out after the password change. Do you want to change your password?',\n buttons: {\n confirm: {\n label: 'Change',\n className: 'btn-primary',\n },\n },\n });\n}\n","import sanitize from 'sanitize-html';\nimport bootbox from 'bootbox';\n\nimport { applyBoxCSS, ButtonsOptions, confirmButtons } from './utils';\n\ntype PromptCallback = ((value: string) => void) | ((value: string[]) => void);\n\ninterface InputOption {\n text: string;\n value: string;\n}\n\ninterface PromptOptions {\n title: string;\n inputType?:\n | 'text'\n | 'textarea'\n | 'email'\n | 'select'\n | 'checkbox'\n | 'date'\n | 'time'\n | 'number'\n | 'password'\n | 'radio'\n | 'range';\n inputOptions: InputOption[];\n buttons: ButtonsOptions;\n value?: string;\n callback: PromptCallback;\n}\n\nexport async function promptAsync(options: Omit) {\n return new Promise((resolve) => {\n prompt({\n ...options,\n callback: (result: string | string[]) => resolve(result),\n });\n });\n}\n\nexport function prompt(options: PromptOptions) {\n const box = bootbox.prompt({\n title: options.title,\n inputType: options.inputType,\n inputOptions: options.inputOptions,\n buttons: options.buttons ? confirmButtons(options.buttons) : undefined,\n // casting is done because ts definition expects string=>any, but library code can emit different values, based on inputType\n callback: options.callback as (value: string) => void,\n value: options.value,\n });\n\n applyBoxCSS(box);\n\n return box;\n}\n\nexport function confirmContainerDeletion(\n title: string,\n callback: PromptCallback\n) {\n const sanitizedTitle = sanitize(title);\n\n prompt({\n title: sanitizedTitle,\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Automatically remove non-persistent volumes',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n callback,\n });\n}\n\nexport function selectRegistry(options: PromptOptions) {\n prompt(options);\n}\n\nexport function confirmContainerRecreation(callback: PromptCallback) {\n const box = prompt({\n title: 'Are you sure?',\n\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Pull latest image',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Recreate',\n className: 'btn-danger',\n },\n },\n callback,\n });\n\n const message = `You're about to re-create this container, any non-persisted data will be lost. This container will be removed and another one will be created using the same configuration.`;\n\n customizeCheckboxPrompt(box, message);\n}\n\nexport function confirmServiceForceUpdate(\n message: string,\n callback: PromptCallback\n) {\n const sanitizedMessage = sanitize(message);\n\n const box = prompt({\n title: 'Are you sure?',\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Pull latest image version',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-primary',\n },\n },\n callback,\n });\n\n customizeCheckboxPrompt(box, sanitizedMessage);\n}\n\nexport function confirmStackUpdate(\n message: string,\n defaultToggle: boolean,\n confirmButtonClass: string | undefined,\n callback: PromptCallback\n) {\n const sanitizedMessage = sanitize(message);\n\n const box = prompt({\n title: 'Are you sure?',\n inputType: 'checkbox',\n inputOptions: [\n {\n text: 'Pull latest image version',\n value: '1',\n },\n ],\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-primary',\n },\n },\n callback,\n });\n\n customizeCheckboxPrompt(box, sanitizedMessage, defaultToggle);\n}\n\nexport function confirmKubeconfigSelection(\n options: InputOption[],\n expiryMessage: string,\n callback: PromptCallback\n) {\n const message = sanitize(\n `Select the kubernetes environment(s) to add to the kubeconfig file.
    ${expiryMessage}`\n );\n const box = prompt({\n title: 'Download kubeconfig file',\n inputType: 'checkbox',\n inputOptions: options,\n buttons: {\n confirm: {\n label: 'Download file',\n className: 'btn-primary',\n },\n },\n callback,\n });\n\n customizeCheckboxPrompt(box, message, true, true);\n}\n\nfunction customizeCheckboxPrompt(\n box: JQuery,\n message: string,\n toggleCheckbox = false,\n showCheck = false\n) {\n box.find('.bootbox-body').prepend(`

    ${message}

    `);\n const checkbox = box.find('.bootbox-input-checkbox');\n checkbox.prop('checked', toggleCheckbox);\n\n if (showCheck) {\n checkbox.addClass('visible');\n }\n}\n","import sanitize from 'sanitize-html';\n\ninterface Button {\n label: string;\n className?: string;\n}\n\nexport interface ButtonsOptions {\n confirm: Button;\n cancel?: Button;\n}\n\nexport function confirmButtons(options: ButtonsOptions) {\n return {\n confirm: {\n label: sanitize(options.confirm.label),\n className:\n options.confirm.className && sanitize(options.confirm.className),\n },\n cancel: {\n label:\n options.cancel && options.cancel.label\n ? sanitize(options.cancel.label)\n : 'Cancel',\n },\n };\n}\n\nexport function applyBoxCSS(box: JQuery) {\n box.css({\n top: '50%',\n 'margin-top': function marginTop() {\n const height = box.height() || 0;\n return -(height / 2);\n },\n });\n}\n","import _ from 'lodash-es';\nimport toastr from 'toastr';\nimport sanitize from 'sanitize-html';\n\ntoastr.options = {\n timeOut: 3000,\n closeButton: true,\n progressBar: true,\n tapToDismiss: false,\n};\n\nexport function success(title: string, text: string) {\n toastr.success(sanitize(_.escape(text)), sanitize(title));\n}\n\nexport function warning(title: string, text: string) {\n toastr.warning(sanitize(_.escape(text)), sanitize(title), { timeOut: 6000 });\n}\n\nexport function error(title: string, e?: Error, fallbackText = '') {\n const msg = pickErrorMsg(e) || fallbackText;\n\n // eslint-disable-next-line no-console\n console.error(e);\n\n if (msg !== 'Invalid JWT token') {\n toastr.error(sanitize(_.escape(msg)), sanitize(title), { timeOut: 6000 });\n }\n}\n\n/* @ngInject */\nexport function Notifications() {\n return {\n success,\n warning,\n error,\n };\n}\n\nfunction pickErrorMsg(e?: Error) {\n if (!e) {\n return '';\n }\n\n const props = [\n 'err.data.details',\n 'err.data.message',\n 'data.details',\n 'data.message',\n 'data.content',\n 'data.error',\n 'message',\n 'err.data[0].message',\n 'err.data.err',\n 'data.err',\n 'msg',\n ];\n\n let msg = '';\n\n props.forEach((prop) => {\n const val = _.get(e, prop);\n if (typeof val === 'string') {\n msg = msg || val;\n }\n });\n\n return msg;\n}\n","import { ReactQueryDevtools } from 'react-query/devtools';\nimport { QueryClient, QueryClientProvider } from 'react-query';\nimport { UIRouterContextComponent } from '@uirouter/react-hybrid';\nimport { PropsWithChildren, StrictMode, useState, useEffect } from 'react';\n\nimport { UserProvider } from '@/portainer/hooks/useUser';\n\nconst queryClient = new QueryClient();\n\nexport function RootProvider({ children }: PropsWithChildren) {\n const [showReactQueryDevtools, setShowReactQueryDevtools] = useState(false);\n useEffect(() => {\n if (process.env.SHOW_REACT_QUERY_DEV_TOOLS === 'true') {\n setShowReactQueryDevtools(true);\n }\n }, []);\n\n return (\n \n \n \n {children}\n \n {showReactQueryDevtools && }\n \n \n );\n}\n","import ReactDOM from 'react-dom';\nimport { IComponentOptions, IController } from 'angular';\nimport { Suspense } from 'react';\n\nimport { RootProvider } from './RootProvider';\n\nfunction toProps(\n propNames: string[],\n controller: IController,\n $q: ng.IQService\n) {\n return Object.fromEntries(\n propNames.map((key) => {\n const prop = controller[key];\n if (typeof prop !== 'function') {\n return [key, prop];\n }\n\n return [\n key,\n (...args: unknown[]) =>\n $q((resolve) => resolve(controller[key](...args))),\n ];\n })\n );\n}\n\nexport function react2angular(\n Component: React.ComponentType,\n propNames: string[]\n): IComponentOptions {\n const bindings = Object.fromEntries(propNames.map((key) => [key, '<']));\n\n return {\n bindings,\n controller: Controller,\n };\n\n /* @ngInject */\n function Controller(\n this: IController,\n $element: HTMLElement[],\n $q: ng.IQService\n ) {\n const el = $element[0];\n this.$onChanges = () => {\n const props = toProps(propNames, this, $q);\n ReactDOM.render(\n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n ,\n el\n );\n };\n this.$onDestroy = () => ReactDOM.unmountComponentAtNode(el);\n }\n}\n\nexport const r2a = react2angular;\n","module.exports = 'test-file-stub';\n","module.exports = {};\n","export class FileUploaderController {\n /* @ngInject */\n constructor($async) {\n Object.assign(this, { $async });\n\n this.state = {\n uploadInProgress: false,\n };\n\n this.onFileSelected = this.onFileSelected.bind(this);\n this.onFileSelectedAsync = this.onFileSelectedAsync.bind(this);\n }\n\n onFileSelected(file) {\n return this.$async(this.onFileSelectedAsync, file);\n }\n\n async onFileSelectedAsync(file) {\n if (!file) {\n return;\n }\n\n this.state.uploadInProgress = true;\n try {\n await this.uploadFile(file);\n } finally {\n this.state.uploadInProgress = false;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./fileUploader.html');\n\nimport angular from 'angular';\nimport { FileUploaderController } from './fileUploaderController';\n\nangular.module('portainer.agent').component('fileUploader', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: FileUploaderController,\n bindings: {\n uploadFile: ' {\n if (!confirmed) {\n return;\n }\n return this.deleteFile(filePath);\n });\n }\n\n deleteFile(path) {\n this.$async(this.deleteFileAsync, path);\n }\n async deleteFileAsync(path) {\n try {\n await this.HostBrowserService.delete(path);\n this.Notifications.success('File successfully deleted', this.getRelativePath(path));\n const files = await this.HostBrowserService.ls(this.state.path);\n this.files = files;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to delete file');\n }\n }\n\n $onInit() {\n this.getFilesForPath(ROOT_PATH);\n }\n\n parentPath(path) {\n if (path === ROOT_PATH) {\n return ROOT_PATH;\n }\n\n const split = _.split(path, '/');\n return _.join(_.slice(split, 0, split.length - 1), '/');\n }\n\n buildPath(parent, file) {\n if (parent.lastIndexOf('/') === parent.length - 1) {\n return parent + file;\n }\n return parent + '/' + file;\n }\n\n onFileSelectedForUpload(file) {\n return this.$async(this.onFileSelectedForUploadAsync, file);\n }\n async onFileSelectedForUploadAsync(file) {\n if (!this.endpointId) {\n throw new Error('missing endpoint id');\n }\n try {\n await this.HostBrowserService.upload(this.endpointId, this.state.path, file);\n this.onFileUploaded();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to upload file');\n }\n }\n\n onFileUploaded() {\n this.refreshList();\n }\n\n refreshList() {\n this.getFilesForPath(this.state.path);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./hostBrowser.html');\n\nimport angular from 'angular';\nimport { HostBrowserController } from './hostBrowserController';\n\nangular.module('portainer.agent').component('hostBrowser', {\n controller: HostBrowserController,\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointId: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./nodeSelector.html');\n\nimport angular from 'angular';\n\nimport { NodeSelectorController } from './nodeSelectorController';\n\nangular.module('portainer.agent').component('nodeSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: NodeSelectorController,\n bindings: {\n model: '=',\n },\n});\n","export class NodeSelectorController {\n /* @ngInject */\n constructor(AgentService, Notifications) {\n Object.assign(this, { AgentService, Notifications });\n }\n\n async $onInit() {\n try {\n const agents = await this.AgentService.agents();\n this.agents = agents;\n if (!this.model) {\n this.model = agents[0].NodeName;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load agents');\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./volumeBrowser.html');\n\nimport angular from 'angular';\n\nimport { VolumeBrowserController } from './volumeBrowserController';\n\nangular.module('portainer.agent').component('volumeBrowser', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: VolumeBrowserController,\n bindings: {\n volumeId: '<',\n nodeName: '<',\n isUploadEnabled: '<',\n endpointId: '<',\n },\n});\n","import _ from 'lodash-es';\n\nexport class VolumeBrowserController {\n /* @ngInject */\n constructor($async, HttpRequestHelper, VolumeBrowserService, FileSaver, Blob, ModalService, Notifications) {\n Object.assign(this, { $async, HttpRequestHelper, VolumeBrowserService, FileSaver, Blob, ModalService, Notifications });\n this.state = {\n path: '/',\n };\n\n this.rename = this.rename.bind(this);\n this.renameAsync = this.renameAsync.bind(this);\n this.confirmDelete = this.confirmDelete.bind(this);\n this.download = this.download.bind(this);\n this.downloadAsync = this.downloadAsync.bind(this);\n this.up = this.up.bind(this);\n this.browse = this.browse.bind(this);\n this.deleteFile = this.deleteFile.bind(this);\n this.deleteFileAsync = this.deleteFileAsync.bind(this);\n this.getFilesForPath = this.getFilesForPath.bind(this);\n this.getFilesForPathAsync = this.getFilesForPathAsync.bind(this);\n this.onFileSelectedForUpload = this.onFileSelectedForUpload.bind(this);\n this.onFileSelectedForUploadAsync = this.onFileSelectedForUploadAsync.bind(this);\n this.parentPath = this.parentPath.bind(this);\n this.buildPath = this.buildPath.bind(this);\n this.$onInit = this.$onInit.bind(this);\n this.onFileUploaded = this.onFileUploaded.bind(this);\n this.refreshList = this.refreshList.bind(this);\n }\n\n rename(file, newName) {\n return this.$async(this.renameAsync, file, newName);\n }\n async renameAsync(file, newName) {\n const filePath = this.state.path === '/' ? file : `${this.state.path}/${file}`;\n const newFilePath = this.state.path === '/' ? newName : `${this.state.path}/${newName}`;\n\n try {\n await this.VolumeBrowserService.rename(this.volumeId, filePath, newFilePath);\n this.Notifications.success('File successfully renamed', newFilePath);\n this.files = await this.VolumeBrowserService.ls(this.volumeId, this.state.path);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to rename file');\n }\n }\n\n confirmDelete(file) {\n const filePath = this.state.path === '/' ? file : `${this.state.path}/${file}`;\n\n this.ModalService.confirmDeletion(`Are you sure that you want to delete ${filePath} ?`, (confirmed) => {\n if (!confirmed) {\n return;\n }\n this.deleteFile(filePath);\n });\n }\n\n download(file) {\n return this.$async(this.downloadAsync, file);\n }\n async downloadAsync(file) {\n const filePath = this.state.path === '/' ? file : `${this.state.path}/${file}`;\n\n try {\n const data = await this.VolumeBrowserService.get(this.volumeId, filePath);\n const downloadData = new Blob([data.file]);\n this.FileSaver.saveAs(downloadData, file);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to download file');\n }\n }\n\n up() {\n const parentFolder = this.parentPath(this.state.path);\n this.getFilesForPath(parentFolder);\n }\n\n browse(folder) {\n const path = this.buildPath(this.state.path, folder);\n this.getFilesForPath(path);\n }\n\n deleteFile(file) {\n return this.$async(this.deleteFileAsync, file);\n }\n async deleteFileAsync(file) {\n try {\n await this.VolumeBrowserService.delete(this.volumeId, file);\n this.Notifications.success('File successfully deleted', file);\n this.files = await this.VolumeBrowserService.ls(this.volumeId, this.state.path);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to delete file');\n }\n }\n\n getFilesForPath(path) {\n return this.$async(this.getFilesForPathAsync, path);\n }\n async getFilesForPathAsync(path) {\n try {\n const files = await this.VolumeBrowserService.ls(this.volumeId, path);\n this.state.path = path;\n this.files = files;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to browse volume');\n }\n }\n\n onFileSelectedForUpload(file) {\n return this.$async(this.onFileSelectedForUploadAsync, file);\n }\n async onFileSelectedForUploadAsync(file) {\n try {\n await this.VolumeBrowserService.upload(this.endpointId, this.state.path, file, this.volumeId);\n this.onFileUploaded();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to upload file');\n }\n }\n\n parentPath(path) {\n if (path.lastIndexOf('/') === 0) {\n return '/';\n }\n\n const split = _.split(path, '/');\n return _.join(_.slice(split, 0, split.length - 1), '/');\n }\n\n buildPath(parent, file) {\n if (parent === '/') {\n return parent + file;\n }\n return `${parent}/${file}`;\n }\n\n onFileUploaded() {\n this.refreshList();\n }\n\n refreshList() {\n this.getFilesForPath(this.state.path);\n }\n\n async $onInit() {\n this.HttpRequestHelper.setPortainerAgentTargetHeader(this.nodeName);\n try {\n this.files = await this.VolumeBrowserService.ls(this.volumeId, this.state.path);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to browse volume');\n }\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent', []);\n","export class AgentViewModel {\n constructor(data) {\n this.IPAddress = data.IPAddress;\n this.NodeName = data.NodeName;\n this.NodeRole = data.NodeRole;\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('Agent', AgentFactory);\n\nfunction AgentFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/v:version/agents`,\n {\n endpointId: EndpointProvider.endpointID,\n version: StateManager.getAgentApiVersion,\n },\n {\n query: { method: 'GET', isArray: true },\n }\n );\n}\n","import angular from 'angular';\n\nimport { browseGetResponse } from './response/browse';\n\nangular.module('portainer.agent').factory('Browse', BrowseFactory);\n\nfunction BrowseFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/v:version/browse/:action`,\n {\n endpointId: EndpointProvider.endpointID,\n version: StateManager.getAgentApiVersion,\n },\n {\n ls: {\n method: 'GET',\n isArray: true,\n params: { action: 'ls' },\n },\n get: {\n method: 'GET',\n params: { action: 'get' },\n transformResponse: browseGetResponse,\n responseType: 'arraybuffer',\n },\n delete: {\n method: 'DELETE',\n params: { action: 'delete' },\n },\n rename: {\n method: 'PUT',\n params: { action: 'rename' },\n },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('AgentDockerhub', AgentDockerhub);\n\nfunction AgentDockerhub($resource, API_ENDPOINT_ENDPOINTS) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/agent/:endpointType/v2/dockerhub/:registryId`,\n {},\n {\n limits: { method: 'GET' },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('Host', HostFactory);\n\nfunction HostFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, StateManager) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/v:version/host/:action`,\n {\n endpointId: EndpointProvider.endpointID,\n version: StateManager.getAgentApiVersion,\n },\n {\n info: { method: 'GET', params: { action: 'info' } },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('AgentPing', AgentPingFactory);\n\nfunction AgentPingFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, $q) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/ping`,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n ping: {\n method: 'GET',\n interceptor: {\n response: function versionInterceptor(response) {\n const instance = response.resource;\n const version = response.headers('Portainer-Agent-Api-Version') || 1;\n instance.version = Number(version);\n return instance;\n },\n responseError: function versionResponseError(error) {\n // 404 - agent is up - set version to 1\n if (error.status === 404) {\n return { version: 1 };\n }\n return $q.reject(error);\n },\n },\n },\n }\n );\n}\n","// The get action of the Browse service returns a file.\n// ngResource will transform it as an array of chars.\n// This functions simply creates a response object and assign\n// the data to a field.\nexport function browseGetResponse(data) {\n const response = {};\n response.file = data;\n return response;\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('AgentVersion1', AgentFactory);\n\nfunction AgentFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/agents`,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', isArray: true },\n }\n );\n}\n","import angular from 'angular';\n\nimport { browseGetResponse } from '../response/browse';\n\nangular.module('portainer.agent').factory('BrowseVersion1', BrowseFactory);\n\nfunction BrowseFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n return $resource(\n `${API_ENDPOINT_ENDPOINTS}/:endpointId/docker/browse/:volumeID/:action`,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n ls: {\n method: 'GET',\n isArray: true,\n params: { action: 'ls' },\n },\n get: {\n method: 'GET',\n params: { action: 'get' },\n transformResponse: browseGetResponse,\n responseType: 'arraybuffer',\n },\n delete: {\n method: 'DELETE',\n params: { action: 'delete' },\n },\n rename: {\n method: 'PUT',\n params: { action: 'rename' },\n },\n }\n );\n}\n","import angular from 'angular';\n\nimport { AgentViewModel } from '../models/agent';\n\nangular.module('portainer.agent').factory('AgentService', AgentServiceFactory);\n\nfunction AgentServiceFactory(Agent, AgentVersion1, HttpRequestHelper, Host, StateManager) {\n return {\n agents,\n hostInfo,\n };\n\n function getAgentApiVersion() {\n const state = StateManager.getState();\n return state.endpoint.agentApiVersion;\n }\n\n function hostInfo(nodeName) {\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n return Host.info().$promise;\n }\n\n async function agents() {\n const agentVersion = getAgentApiVersion();\n const service = agentVersion > 1 ? Agent : AgentVersion1;\n try {\n const agents = await service.query({ version: agentVersion }).$promise;\n return agents.map(function (item) {\n return new AgentViewModel(item);\n });\n } catch (err) {\n throw { msg: 'Unable to retrieve agents', err };\n }\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('HostBrowserService', HostBrowserServiceFactory);\n\n/* @ngInject */\nfunction HostBrowserServiceFactory(Browse, Upload, API_ENDPOINT_ENDPOINTS, StateManager) {\n return { ls, get, delete: deletePath, rename, upload };\n\n function ls(path) {\n return Browse.ls({ path: path }).$promise;\n }\n\n function get(path) {\n return Browse.get({ path: path }).$promise;\n }\n\n function deletePath(path) {\n return Browse.delete({ path: path }).$promise;\n }\n\n function rename(path, newPath) {\n const payload = {\n CurrentFilePath: path,\n NewFilePath: newPath,\n };\n return Browse.rename({}, payload).$promise;\n }\n\n function upload(endpointId, Path, file, onProgress) {\n const agentVersion = StateManager.getAgentApiVersion();\n const url = `${API_ENDPOINT_ENDPOINTS}/${endpointId}/docker${agentVersion > 1 ? '/v' + agentVersion : ''}/browse/put`;\n\n return new Promise((resolve, reject) => {\n Upload.upload({\n url: url,\n data: { file, Path },\n }).then(resolve, reject, onProgress);\n });\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').service('AgentPingService', AgentPingService);\n\nfunction AgentPingService(AgentPing) {\n return { ping };\n\n function ping() {\n return AgentPing.ping().$promise;\n }\n}\n","import angular from 'angular';\n\nangular.module('portainer.agent').factory('VolumeBrowserService', VolumeBrowserServiceFactory);\n\n/* @ngInject */\nfunction VolumeBrowserServiceFactory(StateManager, Browse, BrowseVersion1, API_ENDPOINT_ENDPOINTS, Upload) {\n return {\n ls,\n get,\n delete: deletePath,\n rename,\n upload,\n };\n\n function getAgentApiVersion() {\n const state = StateManager.getState();\n return state.endpoint.agentApiVersion;\n }\n\n function getBrowseService() {\n const agentVersion = getAgentApiVersion();\n return agentVersion > 1 ? Browse : BrowseVersion1;\n }\n\n function ls(volumeId, path) {\n return getBrowseService().ls({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;\n }\n\n function get(volumeId, path) {\n return getBrowseService().get({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;\n }\n\n function deletePath(volumeId, path) {\n return getBrowseService().delete({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;\n }\n\n function rename(volumeId, path, newPath) {\n const payload = {\n CurrentFilePath: path,\n NewFilePath: newPath,\n };\n return getBrowseService().rename({ volumeID: volumeId, version: getAgentApiVersion() }, payload).$promise;\n }\n\n function upload(endpointId, path, file, volumeId, onProgress) {\n const agentVersion = StateManager.getAgentApiVersion();\n if (agentVersion < 2) {\n throw new Error('upload is not supported on this agent version');\n }\n\n const url = `${API_ENDPOINT_ENDPOINTS}/${endpointId}/docker/v${agentVersion}/browse/put?volumeID=${volumeId}`;\n\n return new Promise((resolve, reject) => {\n Upload.upload({\n url: url,\n data: { file, Path: path },\n }).then(resolve, reject, onProgress);\n });\n }\n}\n","import _ from 'lodash-es';\n\nconst categories = [\n 'docker',\n 'kubernetes',\n 'aci',\n 'portainer',\n 'edge',\n] as const;\ntype Category = typeof categories[number];\n\nenum DimensionConfig {\n PortainerVersion = 1,\n PortainerInstanceID,\n PortainerUserRole,\n PortainerEndpointUserRole,\n}\n\ninterface TrackEventProps {\n category: Category;\n metadata?: Record;\n value?: string | number;\n dimensions?: DimensionConfig;\n}\n\nexport function setPortainerStatus(instanceID: string, version: string) {\n setCustomDimension(DimensionConfig.PortainerInstanceID, instanceID);\n setCustomDimension(DimensionConfig.PortainerVersion, version);\n}\n\nexport function setUserRole(role: string) {\n setCustomDimension(DimensionConfig.PortainerUserRole, role);\n}\n\nexport function clearUserRole() {\n deleteCustomDimension(DimensionConfig.PortainerUserRole);\n}\n\nexport function setUserEndpointRole(role: string) {\n setCustomDimension(DimensionConfig.PortainerEndpointUserRole, role);\n}\n\nexport function clearUserEndpointRole() {\n deleteCustomDimension(DimensionConfig.PortainerEndpointUserRole);\n}\n\nfunction setCustomDimension(dimensionId: number, value: string) {\n push('setCustomDimension', dimensionId, value);\n}\n\nfunction deleteCustomDimension(dimensionId: number) {\n push('deleteCustomDimension', dimensionId.toString());\n}\n\nexport function push(\n name: string,\n ...args: (string | number | DimensionConfig)[]\n) {\n if (typeof window !== 'undefined') {\n window._paq.push([name, ...args]);\n }\n}\n\nexport function trackEvent(action: string, properties: TrackEventProps) {\n /**\n * @description Logs an event with an event category (Videos, Music, Games...), an event\n * action (Play, Pause, Duration, Add Playlist, Downloaded, Clicked...), and an optional\n * event name and optional numeric value.\n *\n * @link https://piwik.org/docs/event-tracking/\n * @link https://developer.piwik.org/api-reference/tracking-javascript#using-the-tracker-object\n *\n */\n\n let { value } = properties;\n const { metadata, dimensions, category } = properties;\n // PAQ requires that eventValue be an integer, see: http://piwik.org/docs/event-tracking\n if (value) {\n const parsed = parseInt(value.toString(), 10);\n value = Number.isNaN(parsed) ? 0 : parsed;\n }\n\n if (!category) {\n throw new Error('missing category');\n }\n\n if (!categories.includes(category)) {\n throw new Error('unsupported category');\n }\n\n let metadataString = '';\n if (metadata) {\n const kebabCasedMetadata = Object.fromEntries(\n Object.entries(metadata).map(([key, value]) => [_.kebabCase(key), value])\n );\n metadataString = JSON.stringify(kebabCasedMetadata).toLowerCase();\n }\n\n push(\n 'trackEvent',\n category,\n action.toLowerCase(),\n metadataString, // Changed in favour of Piwik documentation. Added fallback so it's backwards compatible.\n value || '',\n dimensions || {}\n );\n}\n\ndeclare global {\n interface Window {\n _paq: [string, ...(string | number)[]][];\n }\n}\n","import angular from 'angular';\nimport { setPortainerStatus, setUserRole, clearUserRole, setUserEndpointRole, clearUserEndpointRole, push, trackEvent } from './analytics-services';\nconst basePath = 'http://portainer-ee.app';\n\n// forked from https://github.com/angulartics/angulartics-piwik/blob/master/src/angulartics-piwik.js\n\n/**\n * @ngdoc overview\n * @name angulartics.piwik\n * Enables analytics support for Piwik/Matomo (http://piwik.org/docs/tracking-api/)\n */\nexport default angular.module('angulartics.matomo', ['angulartics']).config(config).name;\n\n/* @ngInject */\nfunction config($analyticsProvider, $windowProvider) {\n const $window = $windowProvider.$get();\n\n $analyticsProvider.settings.pageTracking.trackRelativePath = true;\n\n $analyticsProvider.api.setPortainerStatus = setPortainerStatus;\n\n $analyticsProvider.api.setUserRole = setUserRole;\n $analyticsProvider.api.clearUserRole = clearUserRole;\n\n $analyticsProvider.api.setUserEndpointRole = setUserEndpointRole;\n $analyticsProvider.api.clearUserEndpointRole = clearUserEndpointRole;\n\n // scope: visit or page. Defaults to 'page'\n $analyticsProvider.api.setCustomVariable = function (varIndex, varName, value, scope = 'page') {\n push('setCustomVariable', varIndex, varName, value, scope);\n };\n\n // scope: visit or page. Defaults to 'page'\n $analyticsProvider.api.deleteCustomVariable = function (varIndex, scope = 'page') {\n push('deleteCustomVariable', varIndex, scope);\n };\n\n // trackSiteSearch(keyword, category, [searchCount])\n $analyticsProvider.api.trackSiteSearch = function (keyword, category, searchCount) {\n // keyword is required\n if (keyword) {\n const params = ['trackSiteSearch', keyword, category || false];\n\n // searchCount is optional\n if (angular.isDefined(searchCount)) {\n params.push(searchCount);\n }\n\n push(params);\n }\n };\n\n // logs a conversion for goal 1. revenue is optional\n // trackGoal(goalID, [revenue]);\n $analyticsProvider.api.trackGoal = function (goalID, revenue) {\n push('trackGoal', goalID, revenue || 0);\n };\n\n // track outlink or download\n // linkType is 'link' or 'download', 'link' by default\n // trackLink(url, [linkType]);\n $analyticsProvider.api.trackLink = function (url, linkType) {\n const type = linkType || 'link';\n push('trackLink', url, type);\n };\n\n // Set default angulartics page and event tracking\n\n $analyticsProvider.registerSetUsername(function (username) {\n push('setUserId', username);\n });\n\n // locationObj is the angular $location object\n $analyticsProvider.registerPageTrack(function (path) {\n push('setDocumentTitle', $window.document.title);\n push('setReferrerUrl', '');\n push('setCustomUrl', basePath + path);\n push('trackPageView');\n });\n\n /**\n * @name eventTrack\n * Track a basic event in Piwik, or send an ecommerce event.\n *\n * @param {string} action A string corresponding to the type of event that needs to be tracked.\n * @param {object} properties The properties that need to be logged with the event.\n */\n $analyticsProvider.registerEventTrack(trackEvent);\n\n /**\n * @name exceptionTrack\n * Sugar on top of the eventTrack method for easily handling errors\n *\n * @param {object} error An Error object to track: error.toString() used for event 'action', error.stack used for event 'label'.\n * @param {object} cause The cause of the error given from $exceptionHandler, not used.\n */\n $analyticsProvider.registerExceptionTrack(function (error) {\n push('trackEvent', 'Exceptions', error.toString(), error.stack, 0);\n });\n}\n","import $ from 'jquery';\nimport { PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\n\n/* @ngInject */\nexport function onStartupAngular($rootScope, $state, $interval, LocalStorage, EndpointProvider, SystemService, cfpLoadingBar, $transitions, HttpRequestHelper) {\n EndpointProvider.initialize();\n\n $rootScope.$state = $state;\n $rootScope.defaultTitle = document.title;\n\n // Workaround to prevent the loading bar from going backward\n // https://github.com/chieffancypants/angular-loading-bar/issues/273\n const originalSet = cfpLoadingBar.set;\n cfpLoadingBar.set = function overrideSet(n) {\n if (n > cfpLoadingBar.status()) {\n originalSet.apply(cfpLoadingBar, arguments);\n }\n };\n\n $transitions.onBefore({}, () => {\n HttpRequestHelper.resetAgentHeaders();\n });\n\n // Keep-alive Edge endpoints by sending a ping request every minute\n $interval(() => {\n ping(EndpointProvider, SystemService);\n }, 60 * 1000);\n\n $(document).ajaxSend((event, jqXhr, jqOpts) => {\n const type = jqOpts.type === 'POST' || jqOpts.type === 'PUT' || jqOpts.type === 'PATCH';\n const hasNoContentType = jqOpts.contentType !== 'application/json' && jqOpts.headers && !jqOpts.headers['Content-Type'];\n if (type && hasNoContentType) {\n jqXhr.setRequestHeader('Content-Type', 'application/json');\n }\n jqXhr.setRequestHeader('Authorization', 'Bearer ' + LocalStorage.getJWT());\n });\n}\n\nfunction ping(EndpointProvider, SystemService) {\n const endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined && endpoint.Type == PortainerEndpointTypes.EdgeAgentOnDockerEnvironment) {\n SystemService.ping(endpoint.Id);\n }\n}\n","import { UsersSelector } from '@/portainer/components/UsersSelector';\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { UserViewModel } from '@/portainer/models/user';\nimport { Link } from '@/portainer/components/Link';\n\ninterface Props {\n name: string;\n users: UserViewModel[];\n value: number[];\n onChange(value: number[]): void;\n errors?: string | string[];\n}\n\nexport function UsersField({ name, users, value, onChange, errors }: Props) {\n return (\n 0\n ? 'You can select which user(s) will be able to manage this resource.'\n : undefined\n }\n inputId=\"users-selector\"\n errors={errors}\n >\n {users.length > 0 ? (\n \n ) : (\n \n You have not yet created any users. Head over to the\n Users view to manage users.\n \n )}\n \n );\n}\n","import Select from 'react-select';\n\nimport { Team, TeamId } from '@/portainer/teams/types';\n\ninterface Props {\n name?: string;\n value: TeamId[];\n onChange(value: TeamId[]): void;\n teams: Team[];\n dataCy?: string;\n inputId?: string;\n placeholder?: string;\n}\n\nexport function TeamsSelector({\n name,\n value,\n onChange,\n teams,\n dataCy,\n inputId,\n placeholder,\n}: Props) {\n return (\n team.Name}\n getOptionValue={(team) => String(team.Id)}\n options={teams}\n value={teams.filter((team) => value.includes(team.Id))}\n closeMenuOnSelect={false}\n onChange={(selectedTeams) =>\n onChange(selectedTeams.map((team) => team.Id))\n }\n data-cy={dataCy}\n inputId={inputId}\n placeholder={placeholder}\n />\n );\n}\n","import { TeamsSelector } from '@/portainer/components/TeamsSelector';\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { Link } from '@/portainer/components/Link';\nimport { Team } from '@/portainer/teams/types';\n\ninterface Props {\n name: string;\n teams: Team[];\n value: number[];\n overrideTooltip?: string;\n onChange(value: number[]): void;\n errors?: string | string[];\n}\n\nexport function TeamsField({\n name,\n teams,\n value,\n overrideTooltip,\n onChange,\n errors,\n}: Props) {\n return (\n 0\n ? overrideTooltip ||\n 'You can select which team(s) will be able to manage this resource.'\n : undefined\n }\n inputId=\"teams-selector\"\n errors={errors}\n >\n {teams.length > 0 ? (\n \n ) : (\n \n You have not yet created any teams. Head over to the\n Teams view to manage teams.\n \n )}\n \n );\n}\n","import axios, { parseAxiosError } from '@/portainer/services/axios';\n\nimport { Team, TeamId } from './types';\n\nexport async function getTeams() {\n try {\n const { data } = await axios.get(buildUrl());\n return data;\n } catch (error) {\n throw parseAxiosError(error as Error);\n }\n}\n\nfunction buildUrl(id?: TeamId) {\n let url = '/teams';\n\n if (id) {\n url += `/${id}`;\n }\n\n return url;\n}\n","import _ from 'lodash';\nimport { useEffect, useState, useCallback } from 'react';\nimport { FormikErrors } from 'formik';\n\nimport { ResourceControlOwnership as RCO } from '@/portainer/models/resourceControl/resourceControlOwnership';\nimport { BoxSelector, buildOption } from '@/portainer/components/BoxSelector';\nimport { ownershipIcon } from '@/portainer/filters/filters';\nimport { useUser } from '@/portainer/hooks/useUser';\nimport { Team } from '@/portainer/teams/types';\nimport { BoxSelectorOption } from '@/portainer/components/BoxSelector/types';\nimport { FormSectionTitle } from '@/portainer/components/form-components/FormSectionTitle';\nimport { SwitchField } from '@/portainer/components/form-components/SwitchField';\n\nimport { FormError } from '../form-components/FormError';\n\nimport { AccessControlFormData } from './model';\nimport { UsersField } from './UsersField';\nimport { TeamsField } from './TeamsField';\nimport { useLoadState } from './useLoadState';\n\nexport interface Props {\n values: AccessControlFormData;\n onChange(values: AccessControlFormData): void;\n hideTitle?: boolean;\n errors?: FormikErrors;\n formNamespace?: string;\n}\n\nexport function AccessControlForm({\n values,\n onChange,\n hideTitle,\n errors,\n formNamespace,\n}: Props) {\n const { users, teams, isLoading } = useLoadState();\n\n const { user } = useUser();\n const isAdmin = user?.Role === 1;\n\n const options = useOptions(isAdmin, teams);\n\n const handleChange = useCallback(\n (partialValues: Partial) => {\n onChange({ ...values, ...partialValues });\n },\n\n [values, onChange]\n );\n\n if (isLoading || !teams || !users) {\n return null;\n }\n\n return (\n <>\n {!hideTitle && Access control}\n\n
    \n
    \n \n handleChange({ accessControlEnabled })\n }\n />\n
    \n
    \n\n {values.accessControlEnabled && (\n <>\n
    \n handleChange({ ownership })}\n />\n
    \n {values.ownership === RCO.RESTRICTED && (\n
    \n {isAdmin && (\n \n handleChange({ authorizedUsers })\n }\n value={values.authorizedUsers}\n errors={errors?.authorizedUsers}\n />\n )}\n\n {(isAdmin || teams.length > 1) && (\n 1\n ? 'As you are a member of multiple teams, you can select which teams(s) will be able to manage this resource.'\n : undefined\n }\n onChange={(authorizedTeams) =>\n handleChange({ authorizedTeams })\n }\n value={values.authorizedTeams}\n errors={errors?.authorizedTeams}\n />\n )}\n\n {typeof errors === 'string' && (\n
    \n {errors}\n
    \n )}\n
    \n )}\n \n )}\n \n );\n\n function withNamespace(name: string) {\n return formNamespace ? `${formNamespace}.${name}` : name;\n }\n}\n\nfunction useOptions(isAdmin: boolean, teams?: Team[]) {\n const [options, setOptions] = useState>>([]);\n\n useEffect(() => {\n setOptions(isAdmin ? adminOptions() : nonAdminOptions(teams));\n }, [isAdmin, teams]);\n\n return options;\n}\n\nfunction adminOptions() {\n return [\n buildOption(\n 'access_administrators',\n ownershipIcon('administrators'),\n 'Administrators',\n 'I want to restrict the management of this resource to administrators only',\n RCO.ADMINISTRATORS\n ),\n buildOption(\n 'access_restricted',\n ownershipIcon('restricted'),\n 'Restricted',\n 'I want to restrict the management of this resource to a set of users and/or teams',\n RCO.RESTRICTED\n ),\n ];\n}\nfunction nonAdminOptions(teams?: Team[]) {\n return _.compact([\n buildOption(\n 'access_private',\n ownershipIcon('private'),\n 'Private',\n 'I want to this resource to be manageable by myself only',\n RCO.PRIVATE\n ),\n teams &&\n teams.length > 0 &&\n buildOption(\n 'access_restricted',\n ownershipIcon('restricted'),\n 'Restricted',\n teams.length === 1\n ? `I want any member of my team (${teams[0].Name}) to be able to manage this resource`\n : 'I want to restrict the management of this resource to one or more of my teams',\n RCO.RESTRICTED\n ),\n ]);\n}\n","import { useEffect } from 'react';\nimport { useQuery } from 'react-query';\n\nimport { getTeams } from '@/portainer/teams/teams.service';\nimport * as notifications from '@/portainer/services/notifications';\nimport { getUsers } from '@/portainer/services/api/userService';\nimport { UserViewModel } from '@/portainer/models/user';\n\nexport function useLoadState() {\n const { teams, isLoading: isLoadingTeams } = useTeams();\n\n const { users, isLoading: isLoadingUsers } = useUsers();\n\n return { teams, users, isLoading: isLoadingTeams || isLoadingUsers };\n}\n\nfunction useTeams() {\n const { isError, error, isLoading, data } = useQuery('teams', () =>\n getTeams()\n );\n\n useEffect(() => {\n if (isError) {\n notifications.error('Failure', error as Error, 'Failed retrieving teams');\n }\n }, [isError, error]);\n\n return { isLoading, teams: data };\n}\n\nfunction useUsers() {\n const { isError, error, isLoading, data } = useQuery<\n unknown,\n unknown,\n UserViewModel[]\n >('users', () => getUsers());\n\n useEffect(() => {\n if (isError) {\n notifications.error('Failure', error as Error, 'Failed retrieving users');\n }\n }, [isError, error]);\n\n return { isLoading, users: data };\n}\n","import { object, string, array, number, bool } from 'yup';\n\nimport { ResourceControlOwnership } from '@/portainer/models/resourceControl/resourceControlOwnership';\n\nexport function validationSchema(isAdmin: boolean) {\n return object()\n .shape({\n accessControlEnabled: bool(),\n ownership: string()\n .oneOf(Object.values(ResourceControlOwnership))\n .when('accessControlEnabled', {\n is: true,\n then: (schema) => schema.required(),\n }),\n authorizedUsers: array(number()),\n authorizedTeams: array(number()),\n })\n .test(\n 'user-and-team',\n isAdmin\n ? 'You must specify at least one team or user.'\n : 'You must specify at least one team.',\n ({\n accessControlEnabled,\n ownership,\n authorizedTeams,\n authorizedUsers,\n }) => {\n if (\n !accessControlEnabled ||\n ownership !== ResourceControlOwnership.RESTRICTED\n ) {\n return true;\n }\n\n if (!isAdmin) {\n return !!authorizedTeams && authorizedTeams.length > 0;\n }\n\n return (\n !!authorizedTeams &&\n !!authorizedUsers &&\n (authorizedTeams.length > 0 || authorizedUsers.length > 0)\n );\n }\n );\n}\n","import clsx from 'clsx';\nimport { PropsWithChildren } from 'react';\n\nimport { ButtonGroup, Size } from '../../Button/ButtonGroup';\n\nimport styles from './ButtonSelector.module.css';\n\nexport interface Option {\n value: T;\n label?: string;\n}\n\ninterface Props {\n value: T;\n onChange(value: T): void;\n options: Option[];\n size?: Size;\n}\n\nexport function ButtonSelector({\n value,\n onChange,\n size,\n options,\n}: Props) {\n return (\n \n {options.map((option) => (\n onChange(option.value)}\n >\n {option.label || option.value.toString()}\n \n ))}\n \n );\n}\n\ninterface OptionItemProps {\n selected: boolean;\n onChange(): void;\n}\n\nfunction OptionItem({\n selected,\n children,\n onChange,\n}: PropsWithChildren) {\n return (\n \n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"group\":\"app-portainer-components-form-components-ButtonSelector-ButtonSelector-module__group\"};","import clsx from 'clsx';\nimport { createContext, PropsWithChildren, useContext } from 'react';\n\nconst Context = createContext(null);\n\ntype Size = 'small' | 'large';\n\nexport function useInputGroupContext() {\n const context = useContext(Context);\n\n if (context == null) {\n throw new Error('Should be inside a InputGroup component');\n }\n}\n\ninterface Props {\n size?: Size;\n}\n\nexport function InputGroup({ children, size }: PropsWithChildren) {\n return (\n \n
    {children}
    \n
    \n );\n}\n\nfunction sizeClass(size?: Size) {\n switch (size) {\n case 'large':\n return 'input-group-lg';\n case 'small':\n return 'input-group-sm';\n default:\n return '';\n }\n}\n","import { Input } from '../Input';\n\nimport { InputGroup as MainComponent } from './InputGroup';\nimport { InputGroupAddon } from './InputGroupAddon';\nimport { InputGroupButtonWrapper } from './InputGroupButtonWrapper';\n\ninterface InputGroupSubComponents {\n Addon: typeof InputGroupAddon;\n ButtonWrapper: typeof InputGroupButtonWrapper;\n Input: typeof Input;\n}\n\nconst InputGroup: typeof MainComponent & InputGroupSubComponents =\n MainComponent as typeof MainComponent & InputGroupSubComponents;\n\nInputGroup.Addon = InputGroupAddon;\nInputGroup.ButtonWrapper = InputGroupButtonWrapper;\nInputGroup.Input = Input;\n\nexport { InputGroup };\n","import { PropsWithChildren } from 'react';\n\nimport { useInputGroupContext } from './InputGroup';\n\nexport function InputGroupAddon({ children }: PropsWithChildren) {\n useInputGroupContext();\n\n return {children};\n}\n","import { PropsWithChildren } from 'react';\n\nimport { useInputGroupContext } from './InputGroup';\n\nexport function InputGroupButtonWrapper({\n children,\n}: PropsWithChildren) {\n useInputGroupContext();\n\n return {children};\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"items\":\"app-portainer-components-form-components-InputList-InputList-module__items\",\"label\":\"app-portainer-components-form-components-InputList-InputList-module__label\",\"itemLine\":\"app-portainer-components-form-components-InputList-InputList-module__item-line\",\"hasError\":\"app-portainer-components-form-components-InputList-InputList-module__has-error\",\"itemActions\":\"app-portainer-components-form-components-InputList-InputList-module__item-actions\",\"defaultItem\":\"app-portainer-components-form-components-InputList-InputList-module__default-item\"};","import { ComponentType } from 'react';\nimport clsx from 'clsx';\n\nimport { AddButton, Button } from '@/portainer/components/Button';\nimport { Tooltip } from '@/portainer/components/Tip/Tooltip';\n\nimport { Input } from '../Input';\nimport { FormError } from '../FormError';\n\nimport styles from './InputList.module.css';\nimport { arrayMove } from './utils';\n\nexport type InputListError = Record;\n\nexport interface ItemProps {\n item: T;\n onChange(value: T): void;\n error?: InputListError;\n}\ntype Key = string | number;\ntype ChangeType = 'delete' | 'create' | 'update';\nexport type DefaultType = { value: string };\n\ntype OnChangeEvent =\n | {\n item: T;\n type: ChangeType;\n }\n | {\n type: 'move';\n fromIndex: number;\n to: number;\n };\n\ninterface Props {\n label: string;\n value: T[];\n onChange(value: T[], e: OnChangeEvent): void;\n itemBuilder?(): T;\n item?: ComponentType>;\n tooltip?: string;\n addLabel?: string;\n itemKeyGetter?(item: T, index: number): Key;\n movable?: boolean;\n errors?: InputListError[] | string;\n}\n\nexport function InputList({\n label,\n value,\n onChange,\n itemBuilder = defaultItemBuilder as unknown as () => T,\n item = DefaultItem as unknown as ComponentType>,\n tooltip,\n addLabel = 'Add item',\n itemKeyGetter = (item: T, index: number) => index,\n movable,\n errors,\n}: Props) {\n const Item = item;\n\n return (\n
    \n
    \n
    \n {label}\n {tooltip && }\n
    \n \n
    \n\n
    \n {value.map((item, index) => {\n const key = itemKeyGetter(item, index);\n const error = typeof errors === 'object' ? errors[index] : undefined;\n\n return (\n \n handleChangeItem(key, value)}\n error={error}\n />\n
    \n {movable && (\n <>\n handleMoveUp(index)}\n >\n \n \n handleMoveDown(index)}\n >\n \n \n \n )}\n handleRemoveItem(key, item)}\n >\n \n \n
    \n
    \n );\n })}\n
    \n
    \n );\n\n function handleMoveUp(index: number) {\n if (index <= 0) {\n return;\n }\n handleMove(index, index - 1);\n }\n\n function handleMoveDown(index: number) {\n if (index >= value.length - 1) {\n return;\n }\n handleMove(index, index + 1);\n }\n\n function handleMove(from: number, to: number) {\n if (!movable) {\n return;\n }\n\n onChange(arrayMove(value, from, to), {\n type: 'move',\n fromIndex: from,\n to,\n });\n }\n\n function handleRemoveItem(key: Key, item: T) {\n onChange(\n value.filter((item, index) => {\n const itemKey = itemKeyGetter(item, index);\n return itemKey !== key;\n }),\n { type: 'delete', item }\n );\n }\n\n function handleAdd() {\n const newItem = itemBuilder();\n onChange([...value, newItem], { type: 'create', item: newItem });\n }\n\n function handleChangeItem(key: Key, newItemValue: T) {\n const newItems = value.map((item, index) => {\n const itemKey = itemKeyGetter(item, index);\n if (itemKey !== key) {\n return item;\n }\n return newItemValue;\n });\n onChange(newItems, {\n type: 'update',\n item: newItemValue,\n });\n }\n}\n\nfunction defaultItemBuilder(): DefaultType {\n return { value: '' };\n}\n\nfunction DefaultItem({ item, onChange, error }: ItemProps) {\n return (\n <>\n onChange({ value: e.target.value })}\n className={styles.defaultItem}\n />\n {error}\n \n );\n}\n","export function arrayMove(array: Array, from: number, to: number) {\n if (!checkValidIndex(array, from) || !checkValidIndex(array, to)) {\n throw new Error('index is out of bounds');\n }\n\n const item = array[from];\n const { length } = array;\n\n const diff = from - to;\n\n if (diff > 0) {\n // move left\n return [\n ...array.slice(0, to),\n item,\n ...array.slice(to, from),\n ...array.slice(from + 1, length),\n ];\n }\n\n if (diff < 0) {\n // move right\n const targetIndex = to + 1;\n return [\n ...array.slice(0, from),\n ...array.slice(from + 1, targetIndex),\n item,\n ...array.slice(targetIndex, length),\n ];\n }\n\n return [...array];\n\n function checkValidIndex(array: Array, index: number) {\n return index >= 0 && index <= array.length;\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"item\":\"app-azure-ContainerInstances-CreateContainerInstanceForm-PortsMappingField-module__item\",\"errors\":\"app-azure-ContainerInstances-CreateContainerInstanceForm-PortsMappingField-module__errors\"};","import { ButtonSelector } from '@/portainer/components/form-components/ButtonSelector/ButtonSelector';\nimport { FormError } from '@/portainer/components/form-components/FormError';\nimport { InputGroup } from '@/portainer/components/form-components/InputGroup';\nimport { InputList } from '@/portainer/components/form-components/InputList';\nimport {\n InputListError,\n ItemProps,\n} from '@/portainer/components/form-components/InputList/InputList';\n\nimport styles from './PortsMappingField.module.css';\n\ntype Protocol = 'TCP' | 'UDP';\n\nexport interface PortMapping {\n host: string;\n container: string;\n protocol: Protocol;\n}\n\ninterface Props {\n value: PortMapping[];\n onChange(value: PortMapping[]): void;\n errors?: InputListError[] | string;\n}\n\nexport function PortsMappingField({ value, onChange, errors }: Props) {\n return (\n <>\n \n label=\"Port mapping\"\n value={value}\n onChange={onChange}\n addLabel=\"map additional port\"\n itemBuilder={() => ({ host: '', container: '', protocol: 'TCP' })}\n item={Item}\n errors={errors}\n />\n {typeof errors === 'string' && (\n
    \n {errors}\n
    \n )}\n \n );\n}\n\nfunction Item({ onChange, item, error }: ItemProps) {\n return (\n
    \n
    \n \n host\n handleChange('host', e.target.value)}\n />\n \n\n \n \n \n\n \n container\n handleChange('container', e.target.value)}\n />\n \n\n \n onChange={(value) => handleChange('protocol', value)}\n value={item.protocol}\n options={[{ value: 'TCP' }, { value: 'UDP' }]}\n />\n
    \n {!!error && (\n
    \n {Object.values(error)[0]}\n
    \n )}\n
    \n );\n\n function handleChange(name: string, value: string) {\n onChange({ ...item, [name]: value });\n }\n}\n","import _ from 'lodash-es';\n\nimport { ProviderResponse } from '../types';\n\nexport interface ProviderViewModel {\n id: string;\n namespace: string;\n locations: string[];\n}\n\nexport function parseViewModel({\n id,\n namespace,\n resourceTypes,\n}: ProviderResponse): ProviderViewModel {\n const containerGroupType = _.find(resourceTypes, {\n resourceType: 'containerGroups',\n });\n const { locations = [] } = containerGroupType || {};\n return { id, namespace, locations };\n}\n","// import { ContainerInstanceProviderViewModel } from '../models/provider';\n\nimport { EnvironmentId } from '@/portainer/environments/types';\nimport axios, { parseAxiosError } from '@/portainer/services/axios';\n\nimport { parseViewModel } from '../models/provider';\nimport { ProviderResponse } from '../types';\n\nimport { azureErrorParser } from './utils';\n\nexport async function getContainerInstanceProvider(\n environmentId: EnvironmentId,\n subscriptionId: string\n) {\n try {\n const url = `/endpoints/${environmentId}/azure/subscriptions/${subscriptionId}/providers/Microsoft.ContainerInstance`;\n const { data } = await axios.get(url, {\n params: { 'api-version': '2018-02-01' },\n });\n\n return parseViewModel(data);\n } catch (error) {\n throw parseAxiosError(\n error as Error,\n 'Unable to retrieve provider',\n azureErrorParser\n );\n }\n}\n","import { ResourceControlOwnership } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nimport { TeamId } from '@/portainer/teams/types';\nimport { UserId } from '@/portainer/users/types';\n\nexport class AccessControlFormData {\n accessControlEnabled = true;\n\n ownership = ResourceControlOwnership.PRIVATE;\n\n authorizedUsers: UserId[] = [];\n\n authorizedTeams: TeamId[] = [];\n}\n\nexport function parseFromResourceControl(\n isAdmin: boolean,\n resourceControlOwnership?: ResourceControlOwnership\n): AccessControlFormData {\n const formData = new AccessControlFormData();\n\n if (resourceControlOwnership) {\n let ownership = resourceControlOwnership;\n if (isAdmin && ownership === ResourceControlOwnership.PRIVATE) {\n ownership = ResourceControlOwnership.RESTRICTED;\n }\n\n let accessControl = formData.accessControlEnabled;\n if (ownership === ResourceControlOwnership.PUBLIC) {\n accessControl = false;\n }\n\n formData.ownership = ownership;\n formData.accessControlEnabled = accessControl;\n } else if (isAdmin) {\n formData.ownership = ResourceControlOwnership.ADMINISTRATORS;\n }\n\n return formData;\n}\n","import { ProviderViewModel } from '@/azure/models/provider';\nimport { ResourceGroup } from '@/azure/types';\n\nexport function getSubscriptionResourceGroups(\n subscriptionId?: string,\n resourceGroups?: Record\n) {\n if (!subscriptionId || !resourceGroups || !resourceGroups[subscriptionId]) {\n return [];\n }\n\n return resourceGroups[subscriptionId].map(({ name, id }) => ({\n value: id,\n label: name,\n }));\n}\n\nexport function getSubscriptionLocations(\n subscriptionId?: string,\n containerInstanceProviders?: Record\n) {\n if (!subscriptionId || !containerInstanceProviders) {\n return [];\n }\n\n const provider = containerInstanceProviders[subscriptionId];\n if (!provider) {\n return [];\n }\n\n return provider.locations.map((location) => ({\n value: location,\n label: location,\n }));\n}\n","import { EnvironmentId } from '@/portainer/environments/types';\nimport axios, { parseAxiosError } from '@/portainer/services/axios';\n\nimport { ContainerGroup, ContainerInstanceFormValues } from '../types';\n\nexport async function createContainerGroup(\n model: ContainerInstanceFormValues,\n environmentId: EnvironmentId,\n subscriptionId: string,\n resourceGroupName: string\n) {\n const payload = transformToPayload(model);\n try {\n const { data } = await axios.put(\n buildUrl(environmentId, subscriptionId, resourceGroupName, model.name),\n payload,\n { params: { 'api-version': '2018-04-01' } }\n );\n return data;\n } catch (e) {\n throw parseAxiosError(e as Error);\n }\n}\n\nfunction buildUrl(\n environmentId: EnvironmentId,\n subscriptionId: string,\n resourceGroupName: string,\n containerGroupName: string\n) {\n return `/endpoints/${environmentId}/azure/subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.ContainerInstance/containerGroups/${containerGroupName}`;\n}\n\nfunction transformToPayload(model: ContainerInstanceFormValues) {\n const containerPorts = [];\n const addressPorts = [];\n\n const ports = model.ports.filter((p) => p.container && p.host);\n\n for (let i = 0; i < ports.length; i += 1) {\n const binding = ports[i];\n\n containerPorts.push({\n port: binding.container,\n });\n\n addressPorts.push({\n port: binding.host,\n protocol: binding.protocol,\n });\n }\n\n return {\n location: model.location,\n properties: {\n osType: model.os,\n containers: [\n {\n name: model.name,\n properties: {\n image: model.image,\n ports: containerPorts,\n resources: {\n requests: {\n cpu: model.cpu,\n memoryInGB: model.memory,\n },\n },\n },\n },\n ],\n ipAddress: {\n type: model.allocatePublicIP ? 'Public' : 'Private',\n ports: addressPorts,\n },\n },\n };\n}\n","import { ResourceControlOwnership } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nimport { AccessControlFormData } from '../components/accessControlForm/model';\nimport { TeamId } from '../teams/types';\nimport { UserId } from '../users/types';\n\nimport { OwnershipParameters } from './types';\n\n/**\n * Transform AccessControlFormData to ResourceControlOwnershipParameters\n * @param {int} userId ID of user performing the operation\n * @param {AccessControlFormData} formValues Form data (generated by AccessControlForm)\n * @param {int[]} subResources Sub Resources restricted by the ResourceControl\n */\nexport function parseOwnershipParameters(\n userId: UserId,\n formValues: AccessControlFormData,\n subResources: (number | string)[] = []\n): OwnershipParameters {\n let { ownership } = formValues;\n if (!formValues.accessControlEnabled) {\n ownership = ResourceControlOwnership.PUBLIC;\n }\n\n let adminOnly = false;\n let publicOnly = false;\n let users: UserId[] = [];\n let teams: TeamId[] = [];\n switch (ownership) {\n case ResourceControlOwnership.PUBLIC:\n publicOnly = true;\n break;\n case ResourceControlOwnership.PRIVATE:\n users.push(userId);\n break;\n case ResourceControlOwnership.RESTRICTED:\n users = formValues.authorizedUsers;\n teams = formValues.authorizedTeams;\n break;\n default:\n adminOnly = true;\n break;\n }\n return {\n administratorsOnly: adminOnly,\n public: publicOnly,\n users,\n teams,\n subResources,\n };\n}\n","import { UserId } from '@/portainer/users/types';\nimport { AccessControlFormData } from '@/portainer/components/accessControlForm/model';\nimport { ResourceControlResponse } from '@/portainer/models/resourceControl/resourceControl';\n\nimport axios, { parseAxiosError } from '../services/axios';\n\nimport { parseOwnershipParameters } from './helper';\nimport { OwnershipParameters } from './types';\n\n/**\n * Apply a ResourceControl after Resource creation\n * @param userId ID of User performing the action\n * @param accessControlData ResourceControl to apply\n * @param resourceControl ResourceControl to update\n * @param subResources SubResources managed by the ResourceControl\n */\nexport function applyResourceControl(\n userId: UserId,\n accessControlData: AccessControlFormData,\n resourceControl: ResourceControlResponse,\n subResources: (number | string)[] = []\n) {\n const ownershipParameters = parseOwnershipParameters(\n userId,\n accessControlData,\n subResources\n );\n return updateResourceControl(resourceControl.Id, ownershipParameters);\n}\n\n/**\n * Update a ResourceControl\n * @param resourceControlId ID of involved resource\n * @param ownershipParameters Transient type from view data to payload\n */\nasync function updateResourceControl(\n resourceControlId: string | number,\n ownershipParameters: OwnershipParameters\n) {\n try {\n await axios.put(\n `/resource_controls/${resourceControlId}`,\n ownershipParameters\n );\n } catch (error) {\n throw parseAxiosError(error as Error);\n }\n}\n","import { Field, Form, Formik } from 'formik';\nimport { useCurrentStateAndParams, useRouter } from '@uirouter/react';\n\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { Input, Select } from '@/portainer/components/form-components/Input';\nimport { FormSectionTitle } from '@/portainer/components/form-components/FormSectionTitle';\nimport { LoadingButton } from '@/portainer/components/Button/LoadingButton';\nimport { InputListError } from '@/portainer/components/form-components/InputList/InputList';\nimport { AccessControlForm } from '@/portainer/components/accessControlForm';\nimport { ContainerInstanceFormValues } from '@/azure/types';\nimport * as notifications from '@/portainer/services/notifications';\nimport { isAdmin, useUser } from '@/portainer/hooks/useUser';\n\nimport { validationSchema } from './CreateContainerInstanceForm.validation';\nimport { PortMapping, PortsMappingField } from './PortsMappingField';\nimport { useLoadFormState } from './useLoadFormState';\nimport {\n getSubscriptionLocations,\n getSubscriptionResourceGroups,\n} from './utils';\nimport { useCreateInstance } from './useCreateInstanceMutation';\n\nexport function CreateContainerInstanceForm() {\n const {\n params: { endpointId: environmentId },\n } = useCurrentStateAndParams();\n\n if (!environmentId) {\n throw new Error('endpointId url param is required');\n }\n\n const { user } = useUser();\n const isUserAdmin = isAdmin(user);\n\n const { initialValues, isLoading, providers, subscriptions, resourceGroups } =\n useLoadFormState(environmentId, isUserAdmin);\n\n const router = useRouter();\n\n const { mutateAsync } = useCreateInstance(\n resourceGroups,\n environmentId,\n user?.Id\n );\n\n if (isLoading) {\n return null;\n }\n\n return (\n \n initialValues={initialValues}\n validationSchema={() => validationSchema(isUserAdmin)}\n onSubmit={onSubmit}\n validateOnMount\n validateOnChange\n enableReinitialize\n >\n {({\n errors,\n handleSubmit,\n isSubmitting,\n isValid,\n values,\n setFieldValue,\n }) => (\n
    \n Azure settings\n \n \n \n\n \n \n \n\n \n \n \n\n Container configuration\n\n \n \n \n\n \n \n \n\n \n \n \n\n setFieldValue('ports', value)}\n errors={errors.ports as InputListError[]}\n />\n\n
    \n
    \n This will automatically deploy a container with a public IP\n address\n
    \n
    \n\n Container Resources\n\n \n \n \n\n \n \n \n\n setFieldValue('accessControl', values)}\n values={values.accessControl}\n errors={errors.accessControl}\n />\n\n
    \n
    \n \n \n Deploy the container\n \n
    \n
    \n \n )}\n \n );\n\n async function onSubmit(values: ContainerInstanceFormValues) {\n try {\n await mutateAsync(values);\n notifications.success('Container successfully created', values.name);\n router.stateService.go('azure.containerinstances');\n } catch (e) {\n notifications.error('Failure', e as Error, 'Unable to create container');\n }\n }\n}\n","import { useQueries, useQuery } from 'react-query';\nimport { useEffect } from 'react';\n\nimport * as notifications from '@/portainer/services/notifications';\nimport PortainerError from '@/portainer/error';\nimport { EnvironmentId } from '@/portainer/environments/types';\nimport { Option } from '@/portainer/components/form-components/Input/Select';\nimport { getResourceGroups } from '@/azure/services/resource-groups.service';\nimport { getSubscriptions } from '@/azure/services/subscription.service';\nimport { getContainerInstanceProvider } from '@/azure/services/provider.service';\nimport { ContainerInstanceFormValues, Subscription } from '@/azure/types';\nimport { parseFromResourceControl } from '@/portainer/components/accessControlForm/model';\n\nimport {\n getSubscriptionLocations,\n getSubscriptionResourceGroups,\n} from './utils';\n\nexport function useLoadFormState(\n environmentId: EnvironmentId,\n isUserAdmin: boolean\n) {\n const { subscriptions, isLoading: isLoadingSubscriptions } =\n useSubscriptions(environmentId);\n const { resourceGroups, isLoading: isLoadingResourceGroups } =\n useResourceGroups(environmentId, subscriptions);\n const { providers, isLoading: isLoadingProviders } = useProviders(\n environmentId,\n subscriptions\n );\n\n const subscriptionOptions =\n subscriptions?.map((s) => ({\n value: s.subscriptionId,\n label: s.displayName,\n })) || [];\n\n const initSubscriptionId = getFirstValue(subscriptionOptions);\n\n const subscriptionResourceGroups = getSubscriptionResourceGroups(\n initSubscriptionId,\n resourceGroups\n );\n\n const subscriptionLocations = getSubscriptionLocations(\n initSubscriptionId,\n providers\n );\n\n const initialValues: ContainerInstanceFormValues = {\n name: '',\n location: getFirstValue(subscriptionLocations),\n subscription: initSubscriptionId,\n resourceGroup: getFirstValue(subscriptionResourceGroups),\n image: '',\n os: 'Linux',\n memory: 1,\n cpu: 1,\n ports: [{ container: '80', host: '80', protocol: 'TCP' }],\n allocatePublicIP: true,\n accessControl: parseFromResourceControl(isUserAdmin),\n };\n\n return {\n isUserAdmin,\n initialValues,\n subscriptions: subscriptionOptions,\n resourceGroups,\n providers,\n isLoading:\n isLoadingProviders || isLoadingResourceGroups || isLoadingSubscriptions,\n };\n\n function getFirstValue(arr: Option[]) {\n if (arr.length === 0) {\n return undefined;\n }\n\n return arr[0].value;\n }\n}\n\nfunction useSubscriptions(environmentId: EnvironmentId) {\n const { data, isError, error, isLoading } = useQuery(\n 'azure.subscriptions',\n () => getSubscriptions(environmentId)\n );\n\n useEffect(() => {\n if (isError) {\n notifications.error(\n 'Failure',\n error as PortainerError,\n 'Unable to retrieve Azure resources'\n );\n }\n }, [isError, error]);\n\n return { subscriptions: data || [], isLoading };\n}\n\nfunction useResourceGroups(\n environmentId: EnvironmentId,\n subscriptions: Subscription[]\n) {\n const queries = useQueries(\n subscriptions.map((subscription) => ({\n queryKey: ['azure.resourceGroups', subscription.subscriptionId],\n queryFn: () =>\n getResourceGroups(environmentId, subscription.subscriptionId),\n }))\n );\n\n useEffect(() => {\n const failedQuery = queries.find((q) => q.error);\n if (failedQuery) {\n notifications.error(\n 'Failure',\n failedQuery.error as PortainerError,\n 'Unable to retrieve Azure resources'\n );\n }\n }, [queries]);\n\n return {\n resourceGroups: Object.fromEntries(\n queries.map((q, index) => [\n subscriptions[index].subscriptionId,\n q.data || [],\n ])\n ),\n isLoading: queries.some((q) => q.isLoading),\n };\n}\n\nfunction useProviders(\n environmentId: EnvironmentId,\n subscriptions: Subscription[]\n) {\n const queries = useQueries(\n subscriptions.map((subscription) => ({\n queryKey: [\n 'azure.containerInstanceProvider',\n subscription.subscriptionId,\n ],\n queryFn: () =>\n getContainerInstanceProvider(\n environmentId,\n subscription.subscriptionId\n ),\n }))\n );\n\n useEffect(() => {\n const failedQuery = queries.find((q) => q.error);\n if (failedQuery) {\n notifications.error(\n 'Failure',\n failedQuery.error as PortainerError,\n 'Unable to retrieve Azure resources'\n );\n }\n }, [queries]);\n\n return {\n providers: Object.fromEntries(\n queries.map((q, index) => [subscriptions[index].subscriptionId, q.data])\n ),\n isLoading: queries.some((q) => q.isLoading),\n };\n}\n","import { useMutation, useQueryClient } from 'react-query';\n\nimport { createContainerGroup } from '@/azure/services/container-groups.service';\nimport { EnvironmentId } from '@/portainer/environments/types';\nimport PortainerError from '@/portainer/error';\nimport {\n ContainerGroup,\n ContainerInstanceFormValues,\n ResourceGroup,\n} from '@/azure/types';\nimport { UserId } from '@/portainer/users/types';\nimport { applyResourceControl } from '@/portainer/resource-control/resource-control.service';\n\nimport { getSubscriptionResourceGroups } from './utils';\n\nexport function useCreateInstance(\n resourceGroups: {\n [k: string]: ResourceGroup[];\n },\n environmentId: EnvironmentId,\n userId?: UserId\n) {\n const queryClient = useQueryClient();\n return useMutation(\n (values) => {\n if (!values.subscription) {\n throw new PortainerError('subscription is required');\n }\n\n const subscriptionResourceGroup = getSubscriptionResourceGroups(\n values.subscription,\n resourceGroups\n );\n const resourceGroup = subscriptionResourceGroup.find(\n (r) => r.value === values.resourceGroup\n );\n if (!resourceGroup) {\n throw new PortainerError('resource group not found');\n }\n\n return createContainerGroup(\n values,\n environmentId,\n values.subscription,\n resourceGroup.label\n );\n },\n {\n async onSuccess(containerGroup, values) {\n if (!userId) {\n throw new Error('missing user id');\n }\n\n const resourceControl = containerGroup.Portainer.ResourceControl;\n const accessControlData = values.accessControl;\n await applyResourceControl(userId, accessControlData, resourceControl);\n queryClient.invalidateQueries(['azure', 'container-instances']);\n },\n }\n );\n}\n","import { object, string, number, boolean } from 'yup';\n\nimport { validationSchema as accessControlSchema } from '@/portainer/components/accessControlForm/AccessControlForm.validation';\n\nimport { validationSchema as portsSchema } from './PortsMappingField.validation';\n\nexport function validationSchema(isAdmin: boolean) {\n return object().shape({\n name: string().required('Name is required.'),\n image: string().required('Image is required.'),\n subscription: string().required('Subscription is required.'),\n resourceGroup: string().required('Resource group is required.'),\n location: string().required('Location is required.'),\n os: string().oneOf(['Linux', 'Windows']),\n cpu: number().positive(),\n memory: number().positive(),\n allocatePublicIP: boolean(),\n ports: portsSchema(),\n accessControl: accessControlSchema(isAdmin),\n });\n}\n","import { array, object, string } from 'yup';\n\nexport function validationSchema() {\n return array(\n object().shape({\n host: string().required('host is required'),\n container: string().required('container is required'),\n protocol: string().oneOf(['TCP', 'UDP']),\n })\n ).min(1, 'At least one port binding is required');\n}\n","import { PageHeader } from '@/portainer/components/PageHeader';\nimport { Widget, WidgetBody } from '@/portainer/components/widget';\nimport { r2a } from '@/react-tools/react2angular';\n\nimport { CreateContainerInstanceForm } from './CreateContainerInstanceForm';\n\nexport function CreateContainerInstanceView() {\n return (\n <>\n \n\n
    \n
    \n \n \n \n \n \n
    \n
    \n \n );\n}\n\nexport const CreateContainerInstanceViewAngular = r2a(\n CreateContainerInstanceView,\n []\n);\n","import angular from 'angular';\n\nimport { CreateContainerInstanceViewAngular } from './CreateContainerInstanceView';\n\nexport const containerInstancesModule = angular\n .module('portainer.azure.containerInstances', [])\n\n .component(\n 'createContainerInstanceView',\n CreateContainerInstanceViewAngular\n ).name;\n","const autoNgTemplateLoaderTemplate1 = require('./views/containerinstances/containerinstances.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/dashboard/dashboard.html');\n\nimport angular from 'angular';\n\nimport { containerInstancesModule } from './ContainerInstances';\n\nangular.module('portainer.azure', ['portainer.app', containerInstancesModule]).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var azure = {\n name: 'azure',\n url: '/azure',\n parent: 'endpoint',\n abstract: true,\n onEnter: /* @ngInject */ function onEnter($async, $state, endpoint, EndpointProvider, Notifications, StateManager) {\n return $async(async () => {\n if (endpoint.Type !== 3) {\n $state.go('portainer.home');\n return;\n }\n try {\n EndpointProvider.setEndpointID(endpoint.Id);\n EndpointProvider.setEndpointPublicURL(endpoint.PublicURL);\n EndpointProvider.setOfflineModeFromStatus(endpoint.Status);\n await StateManager.updateEndpointState(endpoint);\n } catch (e) {\n Notifications.error('Failed loading environment', e);\n $state.go('portainer.home', {}, { reload: true });\n }\n });\n },\n };\n\n var containerInstances = {\n name: 'azure.containerinstances',\n url: '/containerinstances',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'AzureContainerInstancesController',\n },\n },\n };\n\n var containerInstance = {\n name: 'azure.containerinstances.container',\n url: '/:id',\n views: {\n 'content@': {\n component: 'containerInstanceDetails',\n },\n },\n };\n\n var containerInstanceCreation = {\n name: 'azure.containerinstances.new',\n url: '/new/',\n views: {\n 'content@': {\n component: 'createContainerInstanceView',\n },\n },\n };\n\n var dashboard = {\n name: 'azure.dashboard',\n url: '/dashboard',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'AzureDashboardController',\n },\n },\n };\n\n $stateRegistryProvider.register(azure);\n $stateRegistryProvider.register(containerInstances);\n $stateRegistryProvider.register(containerInstance);\n $stateRegistryProvider.register(containerInstanceCreation);\n $stateRegistryProvider.register(dashboard);\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./azureEndpointConfig.html');\n\nangular.module('portainer.azure').component('azureEndpointConfig', {\n bindings: {\n applicationId: '=',\n tenantId: '=',\n authenticationKey: '=',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./azure-sidebar.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.azure').component('azureSidebar', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointId: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./containerGroupsDatatable.html');\n\nangular.module('portainer.azure').component('containergroupsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","import { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function ContainerGroupDefaultModel() {\n this.Location = '';\n this.OSType = 'Linux';\n this.Name = '';\n this.Image = '';\n this.AllocatePublicIP = true;\n this.Ports = [\n {\n container: 80,\n host: 80,\n protocol: 'TCP',\n },\n ];\n this.CPU = 1;\n this.Memory = 1;\n this.AccessControlData = new AccessControlFormData();\n}\n\nexport function ContainerGroupViewModel(data) {\n const addressPorts = data.properties.ipAddress ? data.properties.ipAddress.ports : [];\n const container = data.properties.containers.length ? data.properties.containers[0] : {};\n const containerPorts = container ? container.properties.ports : [];\n\n this.Id = data.id;\n this.Name = data.name;\n this.Location = data.location;\n this.IPAddress = data.properties.ipAddress ? data.properties.ipAddress.ip : '';\n this.Ports = addressPorts.length\n ? addressPorts.map((binding, index) => {\n const port = containerPorts[index] ? containerPorts[index].port : undefined;\n return {\n container: port,\n host: binding.port,\n protocol: binding.protocol,\n };\n })\n : [];\n this.Image = container.properties.image || '';\n this.OSType = data.properties.osType;\n this.AllocatePublicIP = data.properties.ipAddress && data.properties.ipAddress.type === 'Public';\n this.CPU = container.properties.resources.requests.cpu;\n this.Memory = container.properties.resources.requests.memoryInGB;\n\n if (data.Portainer && data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n}\n","export function LocationViewModel(data) {\n this.Id = data.id;\n this.SubscriptionId = data.subscriptionId;\n this.DisplayName = data.displayName;\n this.Name = data.name;\n}\n","export function ResourceGroupViewModel(data, subscriptionId) {\n this.Id = data.id;\n this.SubscriptionId = subscriptionId;\n this.Name = data.name;\n this.Location = data.location;\n}\n","export function SubscriptionViewModel(data) {\n this.Id = data.subscriptionId;\n this.Name = data.displayName;\n}\n","angular.module('portainer.azure').factory('Azure', [\n '$http',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function AzureFactory($http, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n\n var service = {};\n\n service.delete = function (id, apiVersion) {\n var url = API_ENDPOINT_ENDPOINTS + '/' + EndpointProvider.endpointID() + '/azure' + id + '?api-version=' + apiVersion;\n return $http({\n method: 'DELETE',\n url: url,\n });\n };\n\n return service;\n },\n]);\n","angular.module('portainer.azure').factory('ContainerGroup', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ContainerGroupFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n\n var resource = {};\n\n var base = $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/providers/Microsoft.ContainerInstance/containerGroups',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-04-01',\n },\n {\n query: { method: 'GET', params: { subscriptionId: '@subscriptionId' } },\n }\n );\n\n var withResourceGroup = $resource(\n API_ENDPOINT_ENDPOINTS +\n '/:endpointId/azure/subscriptions/:subscriptionId/resourceGroups/:resourceGroupName/providers/Microsoft.ContainerInstance/containerGroups/:containerGroupName',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-04-01',\n },\n {\n create: {\n method: 'PUT',\n params: {\n subscriptionId: '@subscriptionId',\n resourceGroupName: '@resourceGroupName',\n containerGroupName: '@containerGroupName',\n },\n },\n get: {\n method: 'GET',\n },\n }\n );\n\n resource.query = base.query;\n resource.create = withResourceGroup.create;\n resource.get = withResourceGroup.get;\n return resource;\n },\n]);\n","angular.module('portainer.azure').factory('Location', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function LocationFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/locations',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2016-06-01',\n },\n {\n query: { method: 'GET', params: { subscriptionId: '@subscriptionId' } },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('Provider', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ProviderFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/providers/:providerNamespace',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-02-01',\n },\n {\n get: { method: 'GET', params: { subscriptionId: '@subscriptionId', providerNamespace: '@providerNamespace' } },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('ResourceGroup', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ResourceGroupFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:subscriptionId/resourcegroups/:resourceGroupName',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2018-02-01',\n },\n {\n query: { method: 'GET', params: { subscriptionId: '@subscriptionId' } },\n get: { method: 'GET' },\n }\n );\n },\n]);\n","angular.module('portainer.azure').factory('Subscription', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function SubscriptionFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/azure/subscriptions/:id',\n {\n endpointId: EndpointProvider.endpointID,\n 'api-version': '2016-06-01',\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n }\n );\n },\n]);\n","import { ResourceGroupViewModel } from '../models/resource_group';\nimport { SubscriptionViewModel } from '../models/subscription';\nimport { getResourceGroups } from './resource-groups.service';\nimport { getSubscriptions } from './subscription.service';\n\nangular.module('portainer.azure').factory('AzureService', AzureService);\n\n/* @ngInject */\nexport function AzureService($q, Azure, $async, EndpointProvider, ContainerGroupService) {\n 'use strict';\n var service = {};\n\n service.deleteContainerGroup = function (id) {\n return Azure.delete(id, '2018-04-01');\n };\n\n service.subscriptions = async function subscriptions() {\n return $async(async () => {\n const environmentId = EndpointProvider.endpointID();\n const subscriptions = await getSubscriptions(environmentId);\n return subscriptions.map((s) => new SubscriptionViewModel(s));\n });\n };\n\n service.resourceGroups = function resourceGroups(subscriptions) {\n return $async(async () => {\n return retrieveResourcesForEachSubscription(subscriptions, async (subscriptionId) => {\n const environmentId = EndpointProvider.endpointID();\n\n const resourceGroups = await getResourceGroups(environmentId, subscriptionId);\n return resourceGroups.map((r) => new ResourceGroupViewModel(r, subscriptionId));\n });\n });\n };\n\n service.containerGroups = function (subscriptions) {\n return retrieveResourcesForEachSubscription(subscriptions, ContainerGroupService.containerGroups);\n };\n\n service.aggregate = function (resourcesBySubscription) {\n var aggregatedResources = [];\n Object.keys(resourcesBySubscription).forEach(function (key) {\n aggregatedResources = aggregatedResources.concat(resourcesBySubscription[key]);\n });\n return aggregatedResources;\n };\n\n function retrieveResourcesForEachSubscription(subscriptions, resourceQuery) {\n var deferred = $q.defer();\n\n var resources = {};\n\n var resourceQueries = [];\n for (var i = 0; i < subscriptions.length; i++) {\n var subscription = subscriptions[i];\n resourceQueries.push(resourceQuery(subscription.Id));\n }\n\n $q.all(resourceQueries)\n .then(function success(data) {\n for (var i = 0; i < data.length; i++) {\n var result = data[i];\n resources[subscriptions[i].Id] = result;\n }\n deferred.resolve(resources);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve resources', err: err });\n });\n\n return deferred.promise;\n }\n\n return service;\n}\n","import { ContainerGroupViewModel } from '../models/container_group';\n\nangular.module('portainer.azure').factory('ContainerGroupService', [\n '$q',\n 'ContainerGroup',\n function ContainerGroupServiceFactory($q, ContainerGroup) {\n 'use strict';\n var service = {};\n\n service.containerGroups = function (subscriptionId) {\n var deferred = $q.defer();\n\n ContainerGroup.query({ subscriptionId: subscriptionId })\n .$promise.then(function success(data) {\n var containerGroups = data.value.map(function (item) {\n return new ContainerGroupViewModel(item);\n });\n deferred.resolve(containerGroups);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve container groups', err: err });\n });\n\n return deferred.promise;\n };\n\n service.containerGroup = containerGroup;\n async function containerGroup(subscriptionId, resourceGroupName, containerGroupName) {\n const containerGroup = await ContainerGroup.get({ subscriptionId, resourceGroupName, containerGroupName }).$promise;\n return new ContainerGroupViewModel(containerGroup);\n }\n\n return service;\n },\n]);\n","import { LocationViewModel } from '../models/location';\n\nangular.module('portainer.azure').factory('LocationService', [\n '$q',\n 'Location',\n function LocationServiceFactory($q, Location) {\n 'use strict';\n var service = {};\n\n service.locations = function (subscriptionId) {\n var deferred = $q.defer();\n\n Location.query({ subscriptionId: subscriptionId })\n .$promise.then(function success(data) {\n var locations = data.value.map(function (item) {\n return new LocationViewModel(item);\n });\n deferred.resolve(locations);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve locations', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { ResourceGroupViewModel } from '../models/resource_group';\n\nangular.module('portainer.azure').factory('ResourceGroupService', [\n '$q',\n 'ResourceGroup',\n function ResourceGroupServiceFactory($q, ResourceGroup) {\n 'use strict';\n var service = {};\n\n service.resourceGroup = resourceGroup;\n async function resourceGroup(subscriptionId, resourceGroupName) {\n const group = await ResourceGroup.get({ subscriptionId, resourceGroupName }).$promise;\n return new ResourceGroupViewModel(group);\n }\n\n return service;\n },\n]);\n","import { SubscriptionViewModel } from '../models/subscription';\n\nangular.module('portainer.azure').factory('SubscriptionService', [\n '$q',\n 'Subscription',\n function SubscriptionServiceFactory($q, Subscription) {\n return { subscription };\n\n async function subscription(id) {\n const subscription = await Subscription.get({ id }).$promise;\n return new SubscriptionViewModel(subscription);\n }\n },\n]);\n","class ContainerInstanceDetailsController {\n /* @ngInject */\n constructor($state, AzureService, ContainerGroupService, Notifications, ResourceGroupService, SubscriptionService) {\n Object.assign(this, { $state, AzureService, ContainerGroupService, Notifications, ResourceGroupService, SubscriptionService });\n\n this.state = {\n loading: false,\n };\n\n this.container = null;\n this.subscription = null;\n this.resourceGroup = null;\n }\n\n async $onInit() {\n this.state.loading = true;\n const { id } = this.$state.params;\n const { subscriptionId, resourceGroupId, containerGroupId } = parseId(id);\n try {\n this.subscription = await this.SubscriptionService.subscription(subscriptionId);\n this.container = await this.ContainerGroupService.containerGroup(subscriptionId, resourceGroupId, containerGroupId);\n this.resourceGroup = await this.ResourceGroupService.resourceGroup(subscriptionId, resourceGroupId);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve container instance details');\n }\n this.state.loading = false;\n }\n}\n\nfunction parseId(id) {\n const [, subscriptionId, resourceGroupId, , containerGroupId] = id.match(/^\\/subscriptions\\/(.+)\\/resourceGroups\\/(.+)\\/providers\\/(.+)\\/containerGroups\\/(.+)$/);\n\n return { subscriptionId, resourceGroupId, containerGroupId };\n}\n\nexport default ContainerInstanceDetailsController;\n","const autoNgTemplateLoaderTemplate1 = require('./containerInstanceDetails.html');\n\nimport ContainerInstanceDetailsController from './containerInstanceDetailsController.js';\n\nangular.module('portainer.azure').component('containerInstanceDetails', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: ContainerInstanceDetailsController,\n});\n","angular.module('portainer.azure').controller('AzureContainerInstancesController', [\n '$scope',\n '$state',\n 'AzureService',\n 'Notifications',\n function ($scope, $state, AzureService, Notifications) {\n function initView() {\n AzureService.subscriptions()\n .then(function success(data) {\n var subscriptions = data;\n return AzureService.containerGroups(subscriptions);\n })\n .then(function success(data) {\n $scope.containerGroups = AzureService.aggregate(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load container groups');\n });\n }\n\n $scope.deleteAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (item) {\n AzureService.deleteContainerGroup(item.Id)\n .then(function success() {\n Notifications.success('Container group successfully removed', item.Name);\n var index = $scope.containerGroups.indexOf(item);\n $scope.containerGroups.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove container group');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n initView();\n },\n]);\n","angular.module('portainer.azure').controller('AzureDashboardController', [\n '$scope',\n 'AzureService',\n 'Notifications',\n function ($scope, AzureService, Notifications) {\n function initView() {\n AzureService.subscriptions()\n .then(function success(data) {\n var subscriptions = data;\n $scope.subscriptions = subscriptions;\n return AzureService.resourceGroups(subscriptions);\n })\n .then(function success(data) {\n $scope.resourceGroups = AzureService.aggregate(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load dashboard data');\n });\n }\n\n initView();\n },\n]);\n","import { Terminal } from 'xterm';\nimport * as fit from 'xterm/lib/addons/fit/fit';\nimport { agentInterceptor } from './portainer/services/axios';\n\n/* @ngInject */\nexport function configApp($urlRouterProvider, $httpProvider, localStorageServiceProvider, jwtOptionsProvider, $uibTooltipProvider, $compileProvider, cfpLoadingBarProvider) {\n if (process.env.NODE_ENV === 'testing') {\n $compileProvider.debugInfoEnabled(false);\n }\n\n localStorageServiceProvider.setPrefix('portainer');\n\n jwtOptionsProvider.config({\n tokenGetter: /* @ngInject */ function tokenGetter(LocalStorage) {\n return LocalStorage.getJWT();\n },\n });\n $httpProvider.interceptors.push('jwtInterceptor');\n $httpProvider.interceptors.push('EndpointStatusInterceptor');\n\n if (!$httpProvider.defaults.headers.get) {\n $httpProvider.defaults.headers.get = {};\n }\n //disable IE ajax request caching\n $httpProvider.defaults.headers.get['If-Modified-Since'] = 'Mon, 26 Jul 1997 05:00:00 GMT';\n // disable cache AB#160\n $httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';\n $httpProvider.defaults.headers.get['Pragma'] = 'no-cache';\n\n $httpProvider.defaults.headers.post['Content-Type'] = 'application/json';\n $httpProvider.defaults.headers.put['Content-Type'] = 'application/json';\n $httpProvider.defaults.headers.patch['Content-Type'] = 'application/json';\n\n $httpProvider.interceptors.push(() => ({\n request: agentInterceptor,\n }));\n\n Terminal.applyAddon(fit);\n\n $uibTooltipProvider.setTriggers({\n mouseenter: 'mouseleave',\n click: 'click',\n focus: 'blur',\n outsideClick: 'outsideClick',\n });\n\n cfpLoadingBarProvider.includeSpinner = false;\n cfpLoadingBarProvider.parentSelector = '#loadingbar-placeholder';\n cfpLoadingBarProvider.latencyThreshold = 600;\n\n $urlRouterProvider.otherwise('/auth');\n}\n","export const API_ENDPOINT_AUTH = 'api/auth';\nexport const API_ENDPOINT_BACKUP = 'api/backup';\nexport const API_ENDPOINT_CUSTOM_TEMPLATES = 'api/custom_templates';\nexport const API_ENDPOINT_EDGE_GROUPS = 'api/edge_groups';\nexport const API_ENDPOINT_EDGE_JOBS = 'api/edge_jobs';\nexport const API_ENDPOINT_EDGE_STACKS = 'api/edge_stacks';\nexport const API_ENDPOINT_EDGE_TEMPLATES = 'api/edge_templates';\nexport const API_ENDPOINT_ENDPOINTS = 'api/endpoints';\nexport const API_ENDPOINT_ENDPOINT_GROUPS = 'api/endpoint_groups';\nexport const API_ENDPOINT_KUBERNETES = 'api/kubernetes';\nexport const API_ENDPOINT_MOTD = 'api/motd';\nexport const API_ENDPOINT_REGISTRIES = 'api/registries';\nexport const API_ENDPOINT_RESOURCE_CONTROLS = 'api/resource_controls';\nexport const API_ENDPOINT_SETTINGS = 'api/settings';\nexport const API_ENDPOINT_STACKS = 'api/stacks';\nexport const API_ENDPOINT_STATUS = 'api/status';\nexport const API_ENDPOINT_SUPPORT = 'api/support';\nexport const API_ENDPOINT_USERS = 'api/users';\nexport const API_ENDPOINT_TAGS = 'api/tags';\nexport const API_ENDPOINT_TEAMS = 'api/teams';\nexport const API_ENDPOINT_TEAM_MEMBERSHIPS = 'api/team_memberships';\nexport const API_ENDPOINT_TEMPLATES = 'api/templates';\nexport const API_ENDPOINT_WEBHOOKS = 'api/webhooks';\nexport const DEFAULT_TEMPLATES_URL = 'https://raw.githubusercontent.com/portainer/templates/master/templates.json';\nexport const PAGINATION_MAX_ITEMS = 10;\nexport const APPLICATION_CACHE_VALIDITY = 3600;\nexport const CONSOLE_COMMANDS_LABEL_PREFIX = 'io.portainer.commands.';\nexport const PREDEFINED_NETWORKS = ['host', 'bridge', 'none'];\nexport const PORTAINER_FADEOUT = 1500;\nexport const STACK_NAME_VALIDATION_REGEX = '^[-_a-z0-9]+$';\nexport const TEMPLATE_NAME_VALIDATION_REGEX = '^[-_a-z0-9]+$';\nconst BROWSER_OS_PLATFORM = navigator.userAgent.indexOf('Windows NT') > -1 ? 'win' : 'lin';\nexport const NEW_LINE_BREAKER = BROWSER_OS_PLATFORM === 'win' ? '\\r\\n' : '\\n';\n\n// don't declare new angular constants, either:\n// - if only used in one file or module, declare in that file or module (as a regular js constant)\n// - if needed across modules, declare like the above constant and use es6 import for that\nangular\n .module('portainer')\n .constant('API_ENDPOINT_AUTH', API_ENDPOINT_AUTH)\n .constant('API_ENDPOINT_BACKUP', API_ENDPOINT_BACKUP)\n .constant('API_ENDPOINT_CUSTOM_TEMPLATES', API_ENDPOINT_CUSTOM_TEMPLATES)\n .constant('API_ENDPOINT_EDGE_GROUPS', API_ENDPOINT_EDGE_GROUPS)\n .constant('API_ENDPOINT_EDGE_JOBS', API_ENDPOINT_EDGE_JOBS)\n .constant('API_ENDPOINT_EDGE_STACKS', API_ENDPOINT_EDGE_STACKS)\n .constant('API_ENDPOINT_EDGE_TEMPLATES', API_ENDPOINT_EDGE_TEMPLATES)\n .constant('API_ENDPOINT_ENDPOINTS', API_ENDPOINT_ENDPOINTS)\n .constant('API_ENDPOINT_ENDPOINT_GROUPS', API_ENDPOINT_ENDPOINT_GROUPS)\n .constant('API_ENDPOINT_KUBERNETES', API_ENDPOINT_KUBERNETES)\n .constant('API_ENDPOINT_MOTD', API_ENDPOINT_MOTD)\n .constant('API_ENDPOINT_REGISTRIES', API_ENDPOINT_REGISTRIES)\n .constant('API_ENDPOINT_RESOURCE_CONTROLS', API_ENDPOINT_RESOURCE_CONTROLS)\n .constant('API_ENDPOINT_SETTINGS', API_ENDPOINT_SETTINGS)\n .constant('API_ENDPOINT_STACKS', API_ENDPOINT_STACKS)\n .constant('API_ENDPOINT_STATUS', API_ENDPOINT_STATUS)\n .constant('API_ENDPOINT_SUPPORT', API_ENDPOINT_SUPPORT)\n .constant('API_ENDPOINT_USERS', API_ENDPOINT_USERS)\n .constant('API_ENDPOINT_TAGS', API_ENDPOINT_TAGS)\n .constant('API_ENDPOINT_TEAMS', API_ENDPOINT_TEAMS)\n .constant('API_ENDPOINT_TEAM_MEMBERSHIPS', API_ENDPOINT_TEAM_MEMBERSHIPS)\n .constant('API_ENDPOINT_TEMPLATES', API_ENDPOINT_TEMPLATES)\n .constant('API_ENDPOINT_WEBHOOKS', API_ENDPOINT_WEBHOOKS)\n .constant('DEFAULT_TEMPLATES_URL', DEFAULT_TEMPLATES_URL)\n .constant('PAGINATION_MAX_ITEMS', PAGINATION_MAX_ITEMS)\n .constant('APPLICATION_CACHE_VALIDITY', APPLICATION_CACHE_VALIDITY)\n .constant('CONSOLE_COMMANDS_LABEL_PREFIX', CONSOLE_COMMANDS_LABEL_PREFIX)\n .constant('PREDEFINED_NETWORKS', PREDEFINED_NETWORKS);\n","import { createContext, ReactNode, useContext } from 'react';\n\nimport type { Environment } from './types';\n\nconst EnvironmentContext = createContext(null);\n\nexport function useEnvironment() {\n const context = useContext(EnvironmentContext);\n if (context === null) {\n throw new Error('must be nested under EnvironmentProvider');\n }\n\n return context;\n}\n\ninterface Props {\n children: ReactNode;\n environment: Environment;\n}\n\nexport function EnvironmentProvider({ children, environment }: Props) {\n return (\n \n {children}\n \n );\n}\n","import { Checkbox } from '@/portainer/components/form-components/Checkbox';\n\nimport { useTableSettings } from './useTableSettings';\n\nexport interface Action {\n id: string;\n label: string;\n}\n\ninterface Props {\n actions: Action[];\n}\n\nexport interface QuickActionsSettingsType {\n hiddenQuickActions: string[];\n}\n\nexport function QuickActionsSettings({ actions }: Props) {\n const { settings, setTableSettings } =\n useTableSettings();\n\n return (\n <>\n {actions.map(({ id, label }) => (\n toggleAction(id, e.target.checked)}\n />\n ))}\n \n );\n\n function toggleAction(key: string, value: boolean) {\n setTableSettings(({ hiddenQuickActions = [], ...settings }) => ({\n ...settings,\n hiddenQuickActions: value\n ? hiddenQuickActions.filter((id) => id !== key)\n : [...hiddenQuickActions, key],\n }));\n }\n}\n\nexport function buildAction(id: string, label: string): Action {\n return { id, label };\n}\n","import { useRouter } from '@uirouter/react';\n\nimport * as notifications from '@/portainer/services/notifications';\nimport { useAuthorizations, Authorized } from '@/portainer/hooks/useUser';\nimport { Link } from '@/portainer/components/Link';\nimport { confirmContainerDeletion } from '@/portainer/services/modal.service/prompt';\nimport { setPortainerAgentTargetHeader } from '@/portainer/services/http-request.helper';\nimport type { ContainerId, DockerContainer } from '@/docker/containers/types';\nimport {\n killContainer,\n pauseContainer,\n removeContainer,\n restartContainer,\n resumeContainer,\n startContainer,\n stopContainer,\n} from '@/docker/containers/containers.service';\nimport type { EnvironmentId } from '@/portainer/environments/types';\nimport { ButtonGroup, Button } from '@/portainer/components/Button';\n\ntype ContainerServiceAction = (\n endpointId: EnvironmentId,\n containerId: ContainerId\n) => Promise;\n\ninterface Props {\n selectedItems: DockerContainer[];\n isAddActionVisible: boolean;\n endpointId: EnvironmentId;\n}\n\nexport function ContainersDatatableActions({\n selectedItems,\n isAddActionVisible,\n endpointId,\n}: Props) {\n const selectedItemCount = selectedItems.length;\n const hasPausedItemsSelected = selectedItems.some(\n (item) => item.Status === 'paused'\n );\n const hasStoppedItemsSelected = selectedItems.some((item) =>\n ['stopped', 'created'].includes(item.Status)\n );\n const hasRunningItemsSelected = selectedItems.some((item) =>\n ['running', 'healthy', 'unhealthy', 'starting'].includes(item.Status)\n );\n\n const isAuthorized = useAuthorizations([\n 'DockerContainerStart',\n 'DockerContainerStop',\n 'DockerContainerKill',\n 'DockerContainerRestart',\n 'DockerContainerPause',\n 'DockerContainerUnpause',\n 'DockerContainerDelete',\n 'DockerContainerCreate',\n ]);\n\n const router = useRouter();\n\n if (!isAuthorized) {\n return null;\n }\n\n return (\n
    \n \n \n onStartClick(selectedItems)}\n disabled={selectedItemCount === 0 || !hasStoppedItemsSelected}\n >\n \n Start\n \n \n\n \n onStopClick(selectedItems)}\n disabled={selectedItemCount === 0 || !hasRunningItemsSelected}\n >\n \n Stop\n \n \n\n \n onKillClick(selectedItems)}\n disabled={selectedItemCount === 0}\n >\n \n Kill\n \n \n\n \n onRestartClick(selectedItems)}\n disabled={selectedItemCount === 0}\n >\n \n Restart\n \n \n\n \n onPauseClick(selectedItems)}\n disabled={selectedItemCount === 0 || !hasRunningItemsSelected}\n >\n \n Pause\n \n \n\n \n onResumeClick(selectedItems)}\n disabled={selectedItemCount === 0 || !hasPausedItemsSelected}\n >\n \n Resume\n \n \n\n \n onRemoveClick(selectedItems)}\n disabled={selectedItemCount === 0}\n >\n \n Remove\n \n \n \n\n {isAddActionVisible && (\n \n \n \n \n \n )}\n
    \n );\n\n function onStartClick(selectedItems: DockerContainer[]) {\n const successMessage = 'Container successfully started';\n const errorMessage = 'Unable to start container';\n executeActionOnContainerList(\n selectedItems,\n startContainer,\n successMessage,\n errorMessage\n );\n }\n\n function onStopClick(selectedItems: DockerContainer[]) {\n const successMessage = 'Container successfully stopped';\n const errorMessage = 'Unable to stop container';\n executeActionOnContainerList(\n selectedItems,\n stopContainer,\n successMessage,\n errorMessage\n );\n }\n\n function onRestartClick(selectedItems: DockerContainer[]) {\n const successMessage = 'Container successfully restarted';\n const errorMessage = 'Unable to restart container';\n executeActionOnContainerList(\n selectedItems,\n restartContainer,\n successMessage,\n errorMessage\n );\n }\n\n function onKillClick(selectedItems: DockerContainer[]) {\n const successMessage = 'Container successfully killed';\n const errorMessage = 'Unable to kill container';\n executeActionOnContainerList(\n selectedItems,\n killContainer,\n successMessage,\n errorMessage\n );\n }\n\n function onPauseClick(selectedItems: DockerContainer[]) {\n const successMessage = 'Container successfully paused';\n const errorMessage = 'Unable to pause container';\n executeActionOnContainerList(\n selectedItems,\n pauseContainer,\n successMessage,\n errorMessage\n );\n }\n\n function onResumeClick(selectedItems: DockerContainer[]) {\n const successMessage = 'Container successfully resumed';\n const errorMessage = 'Unable to resume container';\n executeActionOnContainerList(\n selectedItems,\n resumeContainer,\n successMessage,\n errorMessage\n );\n }\n\n function onRemoveClick(selectedItems: DockerContainer[]) {\n const isOneContainerRunning = selectedItems.some(\n (container) => container.Status === 'running'\n );\n\n const runningTitle = isOneContainerRunning ? 'running' : '';\n const title = `You are about to remove one or more ${runningTitle} containers.`;\n\n confirmContainerDeletion(title, (result: string[]) => {\n if (!result) {\n return;\n }\n const cleanVolumes = !!result[0];\n\n removeSelectedContainers(selectedItems, cleanVolumes);\n });\n }\n\n async function executeActionOnContainerList(\n containers: DockerContainer[],\n action: ContainerServiceAction,\n successMessage: string,\n errorMessage: string\n ) {\n for (let i = 0; i < containers.length; i += 1) {\n const container = containers[i];\n try {\n setPortainerAgentTargetHeader(container.NodeName);\n await action(endpointId, container.Id);\n notifications.success(successMessage, container.Names[0]);\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n `${errorMessage}:${container.Names[0]}`\n );\n }\n }\n\n router.stateService.reload();\n }\n\n async function removeSelectedContainers(\n containers: DockerContainer[],\n cleanVolumes: boolean\n ) {\n for (let i = 0; i < containers.length; i += 1) {\n const container = containers[i];\n try {\n setPortainerAgentTargetHeader(container.NodeName);\n await removeContainer(endpointId, container, cleanVolumes);\n notifications.success(\n 'Container successfully removed',\n container.Names[0]\n );\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'Unable to remove container'\n );\n }\n }\n\n router.stateService.reload();\n }\n}\n","import { TableSettingsMenuAutoRefresh } from '@/portainer/components/datatables/components/TableSettingsMenuAutoRefresh';\nimport { useTableSettings } from '@/portainer/components/datatables/components/useTableSettings';\nimport { Checkbox } from '@/portainer/components/form-components/Checkbox';\nimport type { ContainersTableSettings } from '@/docker/containers/types';\n\ninterface Props {\n isRefreshVisible: boolean;\n}\n\nexport function ContainersDatatableSettings({ isRefreshVisible }: Props) {\n const { settings, setTableSettings } =\n useTableSettings();\n\n return (\n <>\n 0}\n onChange={() =>\n setTableSettings((settings) => ({\n ...settings,\n truncateContainerName: settings.truncateContainerName > 0 ? 0 : 32,\n }))\n }\n />\n\n {isRefreshVisible && (\n \n )}\n \n );\n\n function handleRefreshRateChange(autoRefreshRate: number) {\n setTableSettings({ autoRefreshRate });\n }\n}\n","import { Column } from 'react-table';\n\nimport { isoDateFromTimestamp } from '@/portainer/filters/filters';\nimport type { DockerContainer } from '@/docker/containers/types';\n\nexport const created: Column = {\n Header: 'Created',\n accessor: 'Created',\n id: 'created',\n Cell: ({ value }) => isoDateFromTimestamp(value),\n disableFilters: true,\n canHide: true,\n Filter: () => null,\n};\n","import { Column } from 'react-table';\n\nimport type { DockerContainer } from '@/docker/containers/types';\n\nexport const host: Column = {\n Header: 'Host',\n accessor: (row) => row.NodeName || '-',\n id: 'host',\n disableFilters: true,\n canHide: true,\n sortType: 'string',\n Filter: () => null,\n};\n","import { Column } from 'react-table';\nimport { useSref } from '@uirouter/react';\n\nimport { useEnvironment } from '@/portainer/environments/useEnvironment';\nimport { EnvironmentStatus } from '@/portainer/environments/types';\nimport type { DockerContainer } from '@/docker/containers/types';\n\nexport const image: Column = {\n Header: 'Image',\n accessor: 'Image',\n id: 'image',\n disableFilters: true,\n Cell: ImageCell,\n canHide: true,\n sortType: 'string',\n Filter: () => null,\n};\n\ninterface Props {\n value: string;\n}\n\nfunction ImageCell({ value: imageName }: Props) {\n const endpoint = useEnvironment();\n const offlineMode = endpoint.Status !== EnvironmentStatus.Up;\n\n const shortImageName = trimSHASum(imageName);\n\n const linkProps = useSref('docker.images.image', { id: imageName });\n if (offlineMode) {\n return shortImageName;\n }\n\n return (\n \n {shortImageName}\n \n );\n\n function trimSHASum(imageName: string) {\n if (!imageName) {\n return '';\n }\n\n if (imageName.indexOf('sha256:') === 0) {\n return imageName.substring(7, 19);\n }\n\n return imageName.split('@sha256')[0];\n }\n}\n","import { Column } from 'react-table';\n\nimport type { DockerContainer } from '@/docker/containers/types';\n\nexport const ip: Column = {\n Header: 'IP Address',\n accessor: (row) => row.IP || '-',\n id: 'ip',\n disableFilters: true,\n canHide: true,\n Filter: () => null,\n};\n","import { CellProps, Column, TableInstance } from 'react-table';\nimport _ from 'lodash-es';\nimport { useSref } from '@uirouter/react';\n\nimport { useEnvironment } from '@/portainer/environments/useEnvironment';\nimport { useTableSettings } from '@/portainer/components/datatables/components/useTableSettings';\nimport type {\n ContainersTableSettings,\n DockerContainer,\n} from '@/docker/containers/types';\n\nexport const name: Column = {\n Header: 'Name',\n accessor: (row) => {\n const name = row.Names[0];\n return name.substring(1, name.length);\n },\n id: 'name',\n Cell: NameCell,\n disableFilters: true,\n Filter: () => null,\n canHide: true,\n sortType: 'string',\n};\n\nexport function NameCell({\n value: name,\n row: { original: container },\n}: CellProps) {\n const { settings } = useTableSettings();\n const truncate = settings.truncateContainerName;\n const endpoint = useEnvironment();\n const offlineMode = endpoint.Status !== 1;\n\n const linkProps = useSref('docker.containers.container', {\n id: container.Id,\n nodeName: container.NodeName,\n });\n\n let shortName = name;\n if (truncate > 0) {\n shortName = _.truncate(name, { length: truncate });\n }\n\n if (offlineMode) {\n return {shortName};\n }\n\n return (\n \n {shortName}\n \n );\n}\n","import { Column } from 'react-table';\nimport clsx from 'clsx';\n\nimport { ownershipIcon } from '@/portainer/filters/filters';\nimport { ResourceControlOwnership } from '@/portainer/models/resourceControl/resourceControlOwnership';\nimport type { DockerContainer } from '@/docker/containers/types';\n\nexport const ownership: Column = {\n Header: 'Ownership',\n id: 'ownership',\n accessor: (row) =>\n row.ResourceControl?.Ownership || ResourceControlOwnership.ADMINISTRATORS,\n Cell: OwnershipCell,\n disableFilters: true,\n canHide: true,\n sortType: 'string',\n Filter: () => null,\n};\n\ninterface Props {\n value: 'public' | 'private' | 'restricted' | 'administrators';\n}\n\nfunction OwnershipCell({ value }: Props) {\n return (\n <>\n \n {value || ResourceControlOwnership.ADMINISTRATORS}\n \n );\n}\n","import { Column } from 'react-table';\nimport _ from 'lodash-es';\n\nimport { useEnvironment } from '@/portainer/environments/useEnvironment';\nimport type { DockerContainer, Port } from '@/docker/containers/types';\n\nexport const ports: Column = {\n Header: 'Published Ports',\n accessor: 'Ports',\n id: 'ports',\n Cell: PortsCell,\n disableSortBy: true,\n disableFilters: true,\n canHide: true,\n Filter: () => null,\n};\n\ninterface Props {\n value: Port[];\n}\n\nfunction PortsCell({ value: ports }: Props) {\n const { PublicURL: publicUrl } = useEnvironment();\n\n if (ports.length === 0) {\n return '-';\n }\n\n return _.uniqBy(ports, 'public').map((port) => (\n \n \n {port.public}:{port.private}\n \n ));\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"app-docker-components-container-quick-actions-ContainerQuickActions-module__root\"};","import clsx from 'clsx';\n\nimport { Authorized } from '@/portainer/hooks/useUser';\nimport { Link } from '@/portainer/components/Link';\nimport { react2angular } from '@/react-tools/react2angular';\nimport { DockerContainerStatus } from '@/docker/containers/types';\n\nimport styles from './ContainerQuickActions.module.css';\n\ninterface QuickActionsState {\n showQuickActionAttach: boolean;\n showQuickActionExec: boolean;\n showQuickActionInspect: boolean;\n showQuickActionLogs: boolean;\n showQuickActionStats: boolean;\n}\n\ninterface Props {\n taskId?: string;\n containerId?: string;\n nodeName: string;\n state: QuickActionsState;\n status: DockerContainerStatus;\n}\n\nexport function ContainerQuickActions({\n taskId,\n containerId,\n nodeName,\n state,\n status,\n}: Props) {\n if (taskId) {\n return ;\n }\n\n const isActive = ['starting', 'running', 'healthy', 'unhealthy'].includes(\n status\n );\n\n return (\n
    \n {state.showQuickActionLogs && (\n \n \n \n \n \n )}\n\n {state.showQuickActionInspect && (\n \n \n \n \n \n )}\n\n {state.showQuickActionStats && isActive && (\n \n \n \n \n \n )}\n\n {state.showQuickActionExec && isActive && (\n \n \n \n \n \n )}\n\n {state.showQuickActionAttach && isActive && (\n \n \n \n \n \n )}\n
    \n );\n}\n\ninterface TaskProps {\n taskId: string;\n state: QuickActionsState;\n}\n\nfunction TaskQuickActions({ taskId, state }: TaskProps) {\n return (\n
    \n {state.showQuickActionLogs && (\n \n \n \n \n \n )}\n\n {state.showQuickActionInspect && (\n \n \n \n \n \n )}\n
    \n );\n}\n\nexport const ContainerQuickActionsAngular = react2angular(\n ContainerQuickActions,\n ['taskId', 'containerId', 'nodeName', 'state', 'status']\n);\n","import { CellProps, Column } from 'react-table';\n\nimport { useTableSettings } from '@/portainer/components/datatables/components/useTableSettings';\nimport { useEnvironment } from '@/portainer/environments/useEnvironment';\nimport { useAuthorizations } from '@/portainer/hooks/useUser';\nimport { ContainerQuickActions } from '@/docker/components/container-quick-actions/ContainerQuickActions';\nimport type {\n ContainersTableSettings,\n DockerContainer,\n} from '@/docker/containers/types';\nimport { EnvironmentStatus } from '@/portainer/environments/types';\n\nexport const quickActions: Column = {\n Header: 'Quick Actions',\n id: 'actions',\n Cell: QuickActionsCell,\n disableFilters: true,\n disableSortBy: true,\n canHide: true,\n sortType: 'string',\n Filter: () => null,\n};\n\nfunction QuickActionsCell({\n row: { original: container },\n}: CellProps) {\n const endpoint = useEnvironment();\n const offlineMode = endpoint.Status !== EnvironmentStatus.Up;\n\n const { settings } = useTableSettings();\n\n const { hiddenQuickActions = [] } = settings;\n\n const wrapperState = {\n showQuickActionAttach: !hiddenQuickActions.includes('attach'),\n showQuickActionExec: !hiddenQuickActions.includes('exec'),\n showQuickActionInspect: !hiddenQuickActions.includes('inspect'),\n showQuickActionLogs: !hiddenQuickActions.includes('logs'),\n showQuickActionStats: !hiddenQuickActions.includes('stats'),\n };\n\n const someOn =\n wrapperState.showQuickActionAttach ||\n wrapperState.showQuickActionExec ||\n wrapperState.showQuickActionInspect ||\n wrapperState.showQuickActionLogs ||\n wrapperState.showQuickActionStats;\n\n const isAuthorized = useAuthorizations([\n 'DockerContainerStats',\n 'DockerContainerLogs',\n 'DockerExecStart',\n 'DockerContainerInspect',\n 'DockerTaskInspect',\n 'DockerTaskLogs',\n ]);\n\n if (offlineMode || !someOn || !isAuthorized) {\n return null;\n }\n\n return (\n \n );\n}\n","import { Column } from 'react-table';\n\nimport type { DockerContainer } from '@/docker/containers/types';\n\nexport const stack: Column = {\n Header: 'Stack',\n accessor: (row) => row.StackName || '-',\n id: 'stack',\n sortType: 'string',\n disableFilters: true,\n canHide: true,\n Filter: () => null,\n};\n","import { Column } from 'react-table';\nimport clsx from 'clsx';\nimport _ from 'lodash-es';\n\nimport { DefaultFilter } from '@/portainer/components/datatables/components/Filter';\nimport type {\n DockerContainer,\n DockerContainerStatus,\n} from '@/docker/containers/types';\n\nexport const state: Column = {\n Header: 'State',\n accessor: 'Status',\n id: 'state',\n Cell: StatusCell,\n sortType: 'string',\n filter: 'multiple',\n Filter: DefaultFilter,\n canHide: true,\n};\n\nfunction StatusCell({ value: status }: { value: DockerContainerStatus }) {\n const statusNormalized = _.toLower(status);\n const hasHealthCheck = ['starting', 'healthy', 'unhealthy'].includes(\n statusNormalized\n );\n\n const statusClassName = getClassName();\n\n return (\n \n {status}\n \n );\n\n function getClassName() {\n if (includeString(['paused', 'starting', 'unhealthy'])) {\n return 'warning';\n }\n\n if (includeString(['created'])) {\n return 'info';\n }\n\n if (includeString(['stopped', 'dead', 'exited'])) {\n return 'danger';\n }\n\n return 'success';\n\n function includeString(values: DockerContainerStatus[]) {\n return values.some((val) => statusNormalized.includes(val));\n }\n }\n}\n","import { useEffect } from 'react';\nimport {\n useTable,\n useSortBy,\n useFilters,\n useGlobalFilter,\n usePagination,\n Row,\n} from 'react-table';\nimport { useRowSelectColumn } from '@lineup-lite/hooks';\n\nimport { PaginationControls } from '@/portainer/components/pagination-controls';\nimport {\n QuickActionsSettings,\n buildAction,\n} from '@/portainer/components/datatables/components/QuickActionsSettings';\nimport {\n Table,\n TableActions,\n TableContainer,\n TableHeaderRow,\n TableRow,\n TableSettingsMenu,\n TableTitle,\n TableTitleActions,\n} from '@/portainer/components/datatables/components';\nimport { multiple } from '@/portainer/components/datatables/components/filter-types';\nimport { useTableSettings } from '@/portainer/components/datatables/components/useTableSettings';\nimport { ColumnVisibilityMenu } from '@/portainer/components/datatables/components/ColumnVisibilityMenu';\nimport { useRepeater } from '@/portainer/components/datatables/components/useRepeater';\nimport { useDebounce } from '@/portainer/hooks/useDebounce';\nimport {\n SearchBar,\n useSearchBarContext,\n} from '@/portainer/components/datatables/components/SearchBar';\nimport type {\n ContainersTableSettings,\n DockerContainer,\n} from '@/docker/containers/types';\nimport { useEnvironment } from '@/portainer/environments/useEnvironment';\nimport { useRowSelect } from '@/portainer/components/datatables/components/useRowSelect';\nimport { Checkbox } from '@/portainer/components/form-components/Checkbox';\nimport { TableFooter } from '@/portainer/components/datatables/components/TableFooter';\nimport { SelectedRowsCount } from '@/portainer/components/datatables/components/SelectedRowsCount';\n\nimport { ContainersDatatableActions } from './ContainersDatatableActions';\nimport { ContainersDatatableSettings } from './ContainersDatatableSettings';\nimport { useColumns } from './columns';\n\nexport interface ContainerTableProps {\n isAddActionVisible: boolean;\n dataset: DockerContainer[];\n onRefresh?(): Promise;\n isHostColumnVisible: boolean;\n tableKey?: string;\n}\n\nexport function ContainersDatatable({\n isAddActionVisible,\n dataset,\n onRefresh,\n isHostColumnVisible,\n}: ContainerTableProps) {\n const { settings, setTableSettings } =\n useTableSettings();\n const [searchBarValue, setSearchBarValue] = useSearchBarContext();\n\n const columns = useColumns();\n\n const endpoint = useEnvironment();\n\n useRepeater(settings.autoRefreshRate, onRefresh);\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n page,\n prepareRow,\n selectedFlatRows,\n allColumns,\n gotoPage,\n setPageSize,\n setHiddenColumns,\n toggleHideColumn,\n setGlobalFilter,\n state: { pageIndex, pageSize },\n } = useTable(\n {\n defaultCanFilter: false,\n columns,\n data: dataset,\n filterTypes: { multiple },\n initialState: {\n pageSize: settings.pageSize || 10,\n hiddenColumns: settings.hiddenColumns,\n sortBy: [settings.sortBy],\n globalFilter: searchBarValue,\n },\n isRowSelectable(row: Row) {\n return !row.original.IsPortainer;\n },\n selectCheckboxComponent: Checkbox,\n },\n useFilters,\n useGlobalFilter,\n useSortBy,\n usePagination,\n useRowSelect,\n useRowSelectColumn\n );\n\n const debouncedSearchValue = useDebounce(searchBarValue);\n\n useEffect(() => {\n setGlobalFilter(debouncedSearchValue);\n }, [debouncedSearchValue, setGlobalFilter]);\n\n useEffect(() => {\n toggleHideColumn('host', !isHostColumnVisible);\n }, [toggleHideColumn, isHostColumnVisible]);\n\n const columnsToHide = allColumns.filter((colInstance) => {\n const columnDef = columns.find((c) => c.id === colInstance.id);\n return columnDef?.canHide;\n });\n\n const actions = [\n buildAction('logs', 'Logs'),\n buildAction('inspect', 'Inspect'),\n buildAction('stats', 'Stats'),\n buildAction('exec', 'Console'),\n buildAction('attach', 'Attach'),\n ];\n\n const tableProps = getTableProps();\n const tbodyProps = getTableBodyProps();\n\n return (\n \n \n \n \n columns={columnsToHide}\n onChange={handleChangeColumnsVisibility}\n value={settings.hiddenColumns}\n />\n\n }\n >\n \n \n \n \n\n \n row.original)}\n isAddActionVisible={isAddActionVisible}\n endpointId={endpoint.Id}\n />\n \n\n \n\n \n \n {headerGroups.map((headerGroup) => {\n const { key, className, role, style } =\n headerGroup.getHeaderGroupProps();\n\n return (\n \n key={key}\n className={className}\n role={role}\n style={style}\n headers={headerGroup.headers}\n onSortChange={handleSortChange}\n />\n );\n })}\n \n \n {page.length > 0 ? (\n page.map((row) => {\n prepareRow(row);\n const { key, className, role, style } = row.getRowProps();\n return (\n \n cells={row.cells}\n key={key}\n className={className}\n role={role}\n style={style}\n />\n );\n })\n ) : (\n \n \n No container available.\n \n \n )}\n \n \n\n \n \n gotoPage(p - 1)}\n totalCount={dataset.length}\n onPageLimitChange={handlePageSizeChange}\n />\n \n \n );\n\n function handlePageSizeChange(pageSize: number) {\n setPageSize(pageSize);\n setTableSettings((settings) => ({ ...settings, pageSize }));\n }\n\n function handleChangeColumnsVisibility(hiddenColumns: string[]) {\n setHiddenColumns(hiddenColumns);\n setTableSettings((settings) => ({ ...settings, hiddenColumns }));\n }\n\n function handleSearchBarChange(value: string) {\n setSearchBarValue(value);\n }\n\n function handleSortChange(id: string, desc: boolean) {\n setTableSettings((settings) => ({\n ...settings,\n sortBy: { id, desc },\n }));\n }\n}\n","import { useMemo } from 'react';\n\nimport { created } from './created';\nimport { host } from './host';\nimport { image } from './image';\nimport { ip } from './ip';\nimport { name } from './name';\nimport { ownership } from './ownership';\nimport { ports } from './ports';\nimport { quickActions } from './quick-actions';\nimport { stack } from './stack';\nimport { state } from './state';\n\nexport function useColumns() {\n return useMemo(\n () => [\n name,\n state,\n quickActions,\n stack,\n image,\n created,\n ip,\n host,\n ports,\n ownership,\n ],\n []\n );\n}\n","import { react2angular } from '@/react-tools/react2angular';\nimport { EnvironmentProvider } from '@/portainer/environments/useEnvironment';\nimport { TableSettingsProvider } from '@/portainer/components/datatables/components/useTableSettings';\nimport { SearchBarProvider } from '@/portainer/components/datatables/components/SearchBar';\nimport type { Environment } from '@/portainer/environments/types';\n\nimport {\n ContainersDatatable,\n ContainerTableProps,\n} from './ContainersDatatable';\n\ninterface Props extends ContainerTableProps {\n endpoint: Environment;\n}\n\nexport function ContainersDatatableContainer({\n endpoint,\n tableKey = 'containers',\n ...props\n}: Props) {\n const defaultSettings = {\n autoRefreshRate: 0,\n truncateContainerName: 32,\n hiddenQuickActions: [],\n hiddenColumns: [],\n pageSize: 10,\n sortBy: { id: 'state', desc: false },\n };\n\n return (\n \n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n \n \n );\n}\n\nexport const ContainersDatatableAngular = react2angular(\n ContainersDatatableContainer,\n [\n 'endpoint',\n 'isAddActionVisible',\n 'dataset',\n 'onRefresh',\n 'isHostColumnVisible',\n 'tableKey',\n ]\n);\n","import angular from 'angular';\n\nimport { ContainersDatatableAngular } from './components/ContainersDatatable/ContainersDatatableContainer';\n\nexport default angular\n .module('portainer.docker.containers', [])\n .component('containersDatatable', ContainersDatatableAngular).name;\n","import angular from 'angular';\n\nimport { ContainerQuickActionsAngular } from './container-quick-actions';\n\nexport const componentsModule = angular\n .module('portainer.docker.components', [])\n .component('containerQuickActions', ContainerQuickActionsAngular).name;\n","const autoNgTemplateLoaderTemplate1 = require('./views/configs/configs.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/configs/edit/config.html');\nconst autoNgTemplateLoaderTemplate3 = require('./views/configs/create/createconfig.html');\nconst autoNgTemplateLoaderTemplate4 = require('./views/containers/containers.html');\nconst autoNgTemplateLoaderTemplate5 = require('./views/containers/edit/container.html');\nconst autoNgTemplateLoaderTemplate6 = require('./views/containers/console/attach.html');\nconst autoNgTemplateLoaderTemplate7 = require('./views/containers/console/exec.html');\nconst autoNgTemplateLoaderTemplate8 = require('./views/containers/create/createcontainer.html');\nconst autoNgTemplateLoaderTemplate9 = require('./views/containers/inspect/containerinspect.html');\nconst autoNgTemplateLoaderTemplate10 = require('./views/containers/logs/containerlogs.html');\nconst autoNgTemplateLoaderTemplate11 = require('./views/containers/stats/containerstats.html');\nconst autoNgTemplateLoaderTemplate12 = require('./views/dashboard/dashboard.html');\nconst autoNgTemplateLoaderTemplate13 = require('./views/events/events.html');\nconst autoNgTemplateLoaderTemplate14 = require('./views/images/images.html');\nconst autoNgTemplateLoaderTemplate15 = require('./views/images/edit/image.html');\nconst autoNgTemplateLoaderTemplate16 = require('./views/images/build/buildimage.html');\nconst autoNgTemplateLoaderTemplate17 = require('./views/images/import/importimage.html');\nconst autoNgTemplateLoaderTemplate18 = require('./views/networks/networks.html');\nconst autoNgTemplateLoaderTemplate19 = require('./views/networks/edit/network.html');\nconst autoNgTemplateLoaderTemplate20 = require('./views/networks/create/createnetwork.html');\nconst autoNgTemplateLoaderTemplate21 = require('./views/secrets/secrets.html');\nconst autoNgTemplateLoaderTemplate22 = require('./views/secrets/edit/secret.html');\nconst autoNgTemplateLoaderTemplate23 = require('./views/secrets/create/createsecret.html');\nconst autoNgTemplateLoaderTemplate24 = require('./views/services/services.html');\nconst autoNgTemplateLoaderTemplate25 = require('./views/services/edit/service.html');\nconst autoNgTemplateLoaderTemplate26 = require('./views/services/create/createservice.html');\nconst autoNgTemplateLoaderTemplate27 = require('./views/services/logs/servicelogs.html');\nconst autoNgTemplateLoaderTemplate28 = require('Portainer/views/stacks/stacks.html');\nconst autoNgTemplateLoaderTemplate29 = require('Portainer/views/stacks/edit/stack.html');\nconst autoNgTemplateLoaderTemplate30 = require('Portainer/views/stacks/create/createstack.html');\nconst autoNgTemplateLoaderTemplate31 = require('./views/swarm/swarm.html');\nconst autoNgTemplateLoaderTemplate32 = require('./views/swarm/visualizer/swarmvisualizer.html');\nconst autoNgTemplateLoaderTemplate33 = require('./views/tasks/edit/task.html');\nconst autoNgTemplateLoaderTemplate34 = require('./views/tasks/logs/tasklogs.html');\nconst autoNgTemplateLoaderTemplate35 = require('Portainer/views/templates/templates.html');\nconst autoNgTemplateLoaderTemplate36 = require('./views/volumes/volumes.html');\nconst autoNgTemplateLoaderTemplate37 = require('./views/volumes/edit/volume.html');\nconst autoNgTemplateLoaderTemplate38 = require('./views/volumes/browse/browsevolume.html');\nconst autoNgTemplateLoaderTemplate39 = require('./views/volumes/create/createvolume.html');\n\nimport angular from 'angular';\n\nimport containersModule from './containers';\nimport { componentsModule } from './components';\n\nangular.module('portainer.docker', ['portainer.app', containersModule, componentsModule]).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var docker = {\n name: 'docker',\n parent: 'endpoint',\n url: '/docker',\n abstract: true,\n onEnter: /* @ngInject */ function onEnter(endpoint, $async, $state, EndpointService, EndpointProvider, Notifications, StateManager, SystemService) {\n return $async(async () => {\n if (![1, 2, 4].includes(endpoint.Type)) {\n $state.go('portainer.home');\n return;\n }\n try {\n const status = await checkEndpointStatus(endpoint);\n\n if (endpoint.Type !== 4) {\n await updateEndpointStatus(endpoint, status);\n }\n endpoint.Status = status;\n\n if (status === 2) {\n if (!endpoint.Snapshots[0]) {\n throw new Error('Environment is unreachable and there is no snapshot available for offline browsing.');\n }\n if (endpoint.Snapshots[0].Swarm) {\n throw new Error('Environment is unreachable. Connect to another swarm manager.');\n }\n }\n\n EndpointProvider.setEndpointID(endpoint.Id);\n EndpointProvider.setEndpointPublicURL(endpoint.PublicURL);\n EndpointProvider.setOfflineModeFromStatus(endpoint.Status);\n\n await StateManager.updateEndpointState(endpoint);\n } catch (e) {\n Notifications.error('Failed loading environment', e);\n $state.go('portainer.home', {}, { reload: true });\n }\n\n async function checkEndpointStatus(endpoint) {\n try {\n await SystemService.ping(endpoint.Id);\n return 1;\n } catch (e) {\n return 2;\n }\n }\n\n async function updateEndpointStatus(endpoint, status) {\n if (endpoint.Status === status) {\n return;\n }\n await EndpointService.updateEndpoint(endpoint.Id, { Status: status });\n }\n });\n },\n };\n\n var configs = {\n name: 'docker.configs',\n url: '/configs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ConfigsController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var config = {\n name: 'docker.configs.config',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'ConfigController',\n },\n },\n };\n\n var configCreation = {\n name: 'docker.configs.new',\n url: '/new?id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate3,\n controller: 'CreateConfigController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var containers = {\n name: 'docker.containers',\n url: '/containers',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate4,\n controller: 'ContainersController',\n },\n },\n };\n\n var container = {\n name: 'docker.containers.container',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate5,\n controller: 'ContainerController',\n },\n },\n };\n\n var containerAttachConsole = {\n name: 'docker.containers.container.attach',\n url: '/attach',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate6,\n controller: 'ContainerConsoleController',\n },\n },\n };\n\n var containerExecConsole = {\n name: 'docker.containers.container.exec',\n url: '/exec',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate7,\n controller: 'ContainerConsoleController',\n },\n },\n };\n\n var containerCreation = {\n name: 'docker.containers.new',\n url: '/new?nodeName&from',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate8,\n controller: 'CreateContainerController',\n },\n },\n };\n\n var containerInspect = {\n name: 'docker.containers.container.inspect',\n url: '/inspect',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate9,\n controller: 'ContainerInspectController',\n },\n },\n };\n\n var containerLogs = {\n name: 'docker.containers.container.logs',\n url: '/logs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate10,\n controller: 'ContainerLogsController',\n },\n },\n };\n\n var containerStats = {\n name: 'docker.containers.container.stats',\n url: '/stats',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate11,\n controller: 'ContainerStatsController',\n },\n },\n };\n\n const customTemplates = {\n name: 'docker.templates.custom',\n url: '/custom',\n\n views: {\n 'content@': {\n component: 'customTemplatesView',\n },\n },\n };\n\n const customTemplatesNew = {\n name: 'docker.templates.custom.new',\n url: '/new?fileContent&type',\n\n views: {\n 'content@': {\n component: 'createCustomTemplateView',\n },\n },\n params: {\n fileContent: '',\n type: '',\n },\n };\n\n const customTemplatesEdit = {\n name: 'docker.templates.custom.edit',\n url: '/:id',\n\n views: {\n 'content@': {\n component: 'editCustomTemplateView',\n },\n },\n };\n\n var dashboard = {\n name: 'docker.dashboard',\n url: '/dashboard',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate12,\n controller: 'DashboardController',\n },\n },\n };\n\n var host = {\n name: 'docker.host',\n url: '/host',\n views: {\n 'content@': {\n component: 'hostView',\n },\n },\n };\n\n var hostBrowser = {\n name: 'docker.host.browser',\n url: '/browser',\n views: {\n 'content@': {\n component: 'hostBrowserView',\n },\n },\n };\n\n var events = {\n name: 'docker.events',\n url: '/events',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate13,\n controller: 'EventsController',\n },\n },\n };\n\n var images = {\n name: 'docker.images',\n url: '/images',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate14,\n controller: 'ImagesController',\n },\n },\n };\n\n var image = {\n name: 'docker.images.image',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate15,\n controller: 'ImageController',\n },\n },\n };\n\n var imageBuild = {\n name: 'docker.images.build',\n url: '/build',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate16,\n controller: 'BuildImageController',\n },\n },\n };\n\n var imageImport = {\n name: 'docker.images.import',\n url: '/import',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate17,\n controller: 'ImportImageController',\n },\n },\n };\n\n var networks = {\n name: 'docker.networks',\n url: '/networks',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate18,\n controller: 'NetworksController',\n },\n },\n };\n\n var network = {\n name: 'docker.networks.network',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate19,\n controller: 'NetworkController',\n },\n },\n };\n\n var networkCreation = {\n name: 'docker.networks.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate20,\n controller: 'CreateNetworkController',\n },\n },\n };\n\n var nodes = {\n name: 'docker.nodes',\n url: '/nodes',\n abstract: true,\n };\n\n var node = {\n name: 'docker.nodes.node',\n url: '/:id',\n views: {\n 'content@': {\n component: 'nodeDetailsView',\n },\n },\n };\n\n var nodeBrowser = {\n name: 'docker.nodes.node.browse',\n url: '/browse',\n views: {\n 'content@': {\n component: 'nodeBrowserView',\n },\n },\n };\n\n var secrets = {\n name: 'docker.secrets',\n url: '/secrets',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate21,\n controller: 'SecretsController',\n },\n },\n };\n\n var secret = {\n name: 'docker.secrets.secret',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate22,\n controller: 'SecretController',\n },\n },\n };\n\n var secretCreation = {\n name: 'docker.secrets.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate23,\n controller: 'CreateSecretController',\n },\n },\n };\n\n var services = {\n name: 'docker.services',\n url: '/services',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate24,\n controller: 'ServicesController',\n },\n },\n };\n\n var service = {\n name: 'docker.services.service',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate25,\n controller: 'ServiceController',\n },\n },\n };\n\n var serviceCreation = {\n name: 'docker.services.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate26,\n controller: 'CreateServiceController',\n },\n },\n };\n\n var serviceLogs = {\n name: 'docker.services.service.logs',\n url: '/logs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate27,\n controller: 'ServiceLogsController',\n },\n },\n };\n\n var stacks = {\n name: 'docker.stacks',\n url: '/stacks',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate28,\n controller: 'StacksController',\n },\n },\n };\n\n var stack = {\n name: 'docker.stacks.stack',\n url: '/:name?id&type®ular&external&orphaned&orphanedRunning',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate29,\n controller: 'StackController',\n },\n },\n };\n\n var stackCreation = {\n name: 'docker.stacks.newstack',\n url: '/newstack',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate30,\n controller: 'CreateStackController',\n },\n },\n };\n\n var swarm = {\n name: 'docker.swarm',\n url: '/swarm',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate31,\n controller: 'SwarmController',\n },\n },\n };\n\n var swarmVisualizer = {\n name: 'docker.swarm.visualizer',\n url: '/visualizer',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate32,\n controller: 'SwarmVisualizerController',\n },\n },\n };\n\n var tasks = {\n name: 'docker.tasks',\n url: '/tasks',\n abstract: true,\n };\n\n var task = {\n name: 'docker.tasks.task',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate33,\n controller: 'TaskController',\n },\n },\n };\n\n var taskLogs = {\n name: 'docker.tasks.task.logs',\n url: '/logs',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate34,\n controller: 'TaskLogsController',\n },\n },\n };\n\n var templates = {\n name: 'docker.templates',\n url: '/templates',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate35,\n controller: 'TemplatesController',\n },\n },\n };\n\n var volumes = {\n name: 'docker.volumes',\n url: '/volumes',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate36,\n controller: 'VolumesController',\n },\n },\n };\n\n var volume = {\n name: 'docker.volumes.volume',\n url: '/:id?nodeName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate37,\n controller: 'VolumeController',\n },\n },\n };\n\n var volumeBrowse = {\n name: 'docker.volumes.volume.browse',\n url: '/browse',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate38,\n controller: 'BrowseVolumeController',\n },\n },\n };\n\n var volumeCreation = {\n name: 'docker.volumes.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate39,\n controller: 'CreateVolumeController',\n },\n },\n };\n\n const dockerFeaturesConfiguration = {\n name: 'docker.featuresConfiguration',\n url: '/feat-config',\n views: {\n 'content@': {\n component: 'dockerFeaturesConfigurationView',\n },\n },\n };\n\n const registries = {\n name: 'docker.registries',\n url: '/registries',\n views: {\n 'content@': {\n component: 'endpointRegistriesView',\n },\n },\n };\n\n const registryAccess = {\n name: 'docker.registries.access',\n url: '/:id/access',\n views: {\n 'content@': {\n component: 'dockerRegistryAccessView',\n },\n },\n };\n\n $stateRegistryProvider.register(configs);\n $stateRegistryProvider.register(config);\n $stateRegistryProvider.register(configCreation);\n $stateRegistryProvider.register(containers);\n $stateRegistryProvider.register(container);\n $stateRegistryProvider.register(containerExecConsole);\n $stateRegistryProvider.register(containerAttachConsole);\n $stateRegistryProvider.register(containerCreation);\n $stateRegistryProvider.register(containerInspect);\n $stateRegistryProvider.register(containerLogs);\n $stateRegistryProvider.register(containerStats);\n $stateRegistryProvider.register(customTemplates);\n $stateRegistryProvider.register(customTemplatesNew);\n $stateRegistryProvider.register(customTemplatesEdit);\n $stateRegistryProvider.register(docker);\n $stateRegistryProvider.register(dashboard);\n $stateRegistryProvider.register(host);\n $stateRegistryProvider.register(hostBrowser);\n $stateRegistryProvider.register(events);\n $stateRegistryProvider.register(images);\n $stateRegistryProvider.register(image);\n $stateRegistryProvider.register(imageBuild);\n $stateRegistryProvider.register(imageImport);\n $stateRegistryProvider.register(networks);\n $stateRegistryProvider.register(network);\n $stateRegistryProvider.register(networkCreation);\n $stateRegistryProvider.register(nodes);\n $stateRegistryProvider.register(node);\n $stateRegistryProvider.register(nodeBrowser);\n $stateRegistryProvider.register(secrets);\n $stateRegistryProvider.register(secret);\n $stateRegistryProvider.register(secretCreation);\n $stateRegistryProvider.register(services);\n $stateRegistryProvider.register(service);\n $stateRegistryProvider.register(serviceCreation);\n $stateRegistryProvider.register(serviceLogs);\n $stateRegistryProvider.register(stacks);\n $stateRegistryProvider.register(stack);\n $stateRegistryProvider.register(stackCreation);\n $stateRegistryProvider.register(swarm);\n $stateRegistryProvider.register(swarmVisualizer);\n $stateRegistryProvider.register(tasks);\n $stateRegistryProvider.register(task);\n $stateRegistryProvider.register(taskLogs);\n $stateRegistryProvider.register(templates);\n $stateRegistryProvider.register(volumes);\n $stateRegistryProvider.register(volume);\n $stateRegistryProvider.register(volumeBrowse);\n $stateRegistryProvider.register(volumeCreation);\n $stateRegistryProvider.register(dockerFeaturesConfiguration);\n $stateRegistryProvider.register(registries);\n $stateRegistryProvider.register(registryAccess);\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containerCapabilities.html');\n\nangular.module('portainer.docker').component('containerCapabilities', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n capabilities: '=',\n },\n});\n","angular.module('portainer.docker').controller('ContainerRestartPolicyController', [\n function ContainerRestartPolicyController() {\n var ctrl = this;\n\n this.state = {\n editModel: {},\n };\n\n ctrl.save = save;\n\n function save() {\n if (ctrl.state.editModel.name === ctrl.name && ctrl.state.editModel.maximumRetryCount === ctrl.maximumRetryCount) {\n return;\n }\n ctrl.updateRestartPolicy(ctrl.state.editModel);\n }\n\n this.$onInit = function () {\n ctrl.state.editModel = {\n name: ctrl.name ? ctrl.name : 'no',\n maximumRetryCount: ctrl.maximumRetryCount,\n };\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./container-restart-policy.html');\n\nangular.module('portainer.docker').component('containerRestartPolicy', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ContainerRestartPolicyController',\n bindings: {\n name: '<',\n maximumRetryCount: '<',\n updateRestartPolicy: '&',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./dashboardClusterAgentInfo.html');\n\nangular.module('portainer.docker').component('dashboardClusterAgentInfo', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'DashboardClusterAgentInfoController',\n});\n","angular.module('portainer.docker').controller('DashboardClusterAgentInfoController', [\n 'AgentService',\n 'Notifications',\n function (AgentService, Notifications) {\n var ctrl = this;\n\n this.$onInit = function () {\n AgentService.agents()\n .then(function success(data) {\n ctrl.agentCount = data.length;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve agent information');\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./configsDatatable.html');\n\nangular.module('portainer.docker').component('configsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./containerNetworksDatatable.html');\n\nangular.module('portainer.docker').component('containerNetworksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ContainerNetworksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n container: '<',\n availableNetworks: '<',\n joinNetworkAction: '<',\n joinNetworkActionInProgress: '<',\n leaveNetworkActionInProgress: '<',\n leaveNetworkAction: '<',\n nodeName: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ContainerNetworksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: true,\n });\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n if (!item.Expanded) {\n this.state.expandAll = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.GlobalIPv6Address !== '';\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.dataset, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.dataset, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n\n _.forEach(this.dataset, (item) => {\n item.Expanded = true;\n item.Highlighted = true;\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containerProcessesDatatable.html');\n\nangular.module('portainer.docker').component('containerProcessesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '=',\n headerset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./eventsDatatable.html');\n\nangular.module('portainer.docker').component('eventsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./imagesDatatable.html');\n\nangular.module('portainer.docker').component('imagesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ImagesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n removeAction: '<',\n downloadAction: '<',\n forceRemoveAction: '<',\n exportInProgress: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","angular.module('portainer.docker').controller('ImagesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n showUsedImages: true,\n showUnusedImages: true,\n },\n };\n\n this.applyFilters = function (value) {\n var image = value;\n var filters = ctrl.filters;\n if ((image.ContainerCount === 0 && filters.state.showUnusedImages) || (image.ContainerCount !== 0 && filters.state.showUsedImages)) {\n return true;\n }\n return false;\n };\n\n this.onstateFilterChange = function () {\n var filters = this.filters.state;\n var filtered = false;\n if (!filters.showUsedImages || !filters.showUnusedImages) {\n filtered = true;\n }\n this.filters.state.enabled = filtered;\n DatatableService.setDataTableFilters(this.tableKey, this.filters);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./macvlanNodesDatatable.html');\n\nangular.module('portainer.docker').component('macvlanNodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showIpAddressColumn: '<',\n accessToNodeDetails: '<',\n state: '=',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./networkRowContent.html');\n\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular.module('portainer.docker').directive('networkRowContent', [\n function networkRowContent() {\n var directive = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n restrict: 'A',\n transclude: true,\n scope: {\n item: '<',\n parentCtrl: '<',\n allowCheckbox: '<',\n allowExpand: '<',\n },\n controller: ($scope) => {\n $scope.RCO = RCO;\n },\n };\n return directive;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./networksDatatable.html');\n\nangular.module('portainer.docker').component('networksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NetworksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n removeAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('NetworksDatatableController', [\n '$scope',\n '$controller',\n 'NetworkHelper',\n 'DatatableService',\n function ($scope, $controller, NetworkHelper, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.disableRemove = function (item) {\n return NetworkHelper.isSystemNetwork(item);\n };\n\n this.state = Object.assign(this.state, {\n expandedItems: [],\n });\n\n /**\n * Do not allow system networks to be selected\n */\n this.allowSelection = function (item) {\n return !this.disableRemove(item);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n\n this.expandItem = function (item, expanded) {\n item.Expanded = expanded;\n };\n\n this.itemCanExpand = function (item) {\n return item.Subs.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./nodeTasksDatatable.html');\n\nangular.module('portainer.docker').component('nodeTasksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./nodesDatatable.html');\n\nangular.module('portainer.docker').component('nodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showIpAddressColumn: '<',\n accessToNodeDetails: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./secretsDatatable.html');\n\nangular.module('portainer.docker').component('secretsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./serviceTasksDatatable.html');\n\nangular.module('portainer.docker').component('serviceTasksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ServiceTasksDatatableController',\n bindings: {\n dataset: '<',\n serviceId: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n nodes: '<',\n agentProxy: '<',\n textFilter: '=',\n showTaskLogsButton: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ServiceTasksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.state = Object.assign(this.state, {\n showQuickActionStats: true,\n showQuickActionLogs: true,\n showQuickActionConsole: true,\n showQuickActionInspect: true,\n showQuickActionExec: true,\n showQuickActionAttach: false,\n });\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n values: [],\n },\n };\n\n this.applyFilters = function (item) {\n var filters = ctrl.filters;\n for (var i = 0; i < filters.state.values.length; i++) {\n var filter = filters.state.values[i];\n if (item.Status.State === filter.label && filter.display) {\n return true;\n }\n }\n return false;\n };\n\n this.onStateFilterChange = function () {\n var filters = this.filters.state.values;\n var filtered = false;\n for (var i = 0; i < filters.length; i++) {\n var filter = filters[i];\n if (!filter.display) {\n filtered = true;\n }\n }\n this.filters.state.enabled = filtered;\n };\n\n this.prepareTableFromDataset = function () {\n var availableStateFilters = [];\n for (var i = 0; i < this.dataset.length; i++) {\n var item = this.dataset[i];\n availableStateFilters.push({ label: item.Status.State, display: true });\n }\n this.filters.state.values = _.uniqBy(availableStateFilters, 'label');\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./servicesDatatableActions.html');\n\nangular.module('portainer.docker').component('servicesDatatableActions', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ServicesDatatableActionsController',\n bindings: {\n selectedItems: '=',\n selectedItemCount: '=',\n showUpdateAction: '<',\n showAddAction: '<',\n endpointId: '<',\n },\n});\n","angular.module('portainer.docker').controller('ServicesDatatableActionsController', [\n '$q',\n '$state',\n 'ServiceService',\n 'ServiceHelper',\n 'Notifications',\n 'ModalService',\n 'WebhookService',\n 'EndpointService',\n function ($q, $state, ServiceService, ServiceHelper, Notifications, ModalService, WebhookService, EndpointService) {\n const ctrl = this;\n\n this.scaleAction = function scaleService(service) {\n var config = ServiceHelper.serviceToConfig(service.Model);\n config.Mode.Replicated.Replicas = service.Replicas;\n ServiceService.update(service, config)\n .then(function success() {\n Notifications.success('Service successfully scaled', 'New replica count: ' + service.Replicas);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to scale service');\n service.Scale = false;\n service.Replicas = service.ReplicaCount;\n });\n };\n\n this.removeAction = function (selectedItems) {\n ModalService.confirmDeletion(\n 'Do you want to remove the selected service(s)? All the containers associated to the selected service(s) will be removed too.',\n function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n removeServices(selectedItems);\n }\n );\n };\n\n this.updateAction = function (selectedItems) {\n ModalService.confirmServiceForceUpdate(\n 'Do you want to force an update of the selected service(s)? All the tasks associated to the selected service(s) will be recreated.',\n function (result) {\n if (!result) {\n return;\n }\n var pullImage = false;\n if (result[0]) {\n pullImage = true;\n }\n forceUpdateServices(selectedItems, pullImage);\n }\n );\n };\n\n function forceUpdateServices(services, pullImage) {\n var actionCount = services.length;\n angular.forEach(services, function (service) {\n EndpointService.forceUpdateService(ctrl.endpointId, service.Id, pullImage)\n .then(function success() {\n Notifications.success('Service successfully updated', service.Name);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to force update service' + service.Name);\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function removeServices(services) {\n var actionCount = services.length;\n angular.forEach(services, function (service) {\n ServiceService.remove(service)\n .then(function success() {\n return WebhookService.webhooks(service.Id, ctrl.endpointId);\n })\n .then(function success(data) {\n return $q.when(data.length !== 0 && WebhookService.deleteWebhook(data[0].Id));\n })\n .then(function success() {\n Notifications.success('Service successfully removed', service.Name);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove service');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./servicesDatatable.html');\n\nangular.module('portainer.docker').component('servicesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'ServicesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n nodes: '<',\n agentProxy: '<',\n showUpdateAction: '<',\n showAddAction: '<',\n showStackColumn: '<',\n showTaskLogsButton: '<',\n refreshCallback: '<',\n notAutoFocus: '<',\n endpointPublicUrl: '<',\n endpointId: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('ServicesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.state = Object.assign(this.state, {\n expandAll: false,\n expandedItems: [],\n });\n\n this.columnVisibility = {\n columns: {\n image: {\n label: 'Image',\n display: true,\n },\n ownership: {\n label: 'OwnerShip',\n display: true,\n },\n ports: {\n label: 'Published Ports',\n display: true,\n },\n updated: {\n label: 'Last Update',\n display: true,\n },\n },\n };\n\n this.onColumnVisibilityChange = onColumnVisibilityChange.bind(this);\n function onColumnVisibilityChange(columns) {\n this.columnVisibility.columns = columns;\n DatatableService.setColumnVisibilitySettings(this.tableKey, this.columnVisibility);\n }\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n for (var i = 0; i < this.state.filteredDataSet.length; i++) {\n var item = this.state.filteredDataSet[i];\n this.expandItem(item, this.state.expandAll);\n }\n };\n\n this.expandItem = function (item, expanded) {\n item.Expanded = expanded;\n if (item.Expanded) {\n if (this.state.expandedItems.indexOf(item.Id) === -1) {\n this.state.expandedItems.push(item.Id);\n }\n } else {\n var index = this.state.expandedItems.indexOf(item.Id);\n if (index > -1) {\n this.state.expandedItems.splice(index, 1);\n }\n }\n DatatableService.setDataTableExpandedItems(this.tableKey, this.state.expandedItems);\n };\n\n function expandPreviouslyExpandedItem(item, storedExpandedItems) {\n var expandedItem = _.find(storedExpandedItems, function (storedId) {\n return item.Id === storedId;\n });\n\n if (expandedItem) {\n ctrl.expandItem(item, true);\n }\n }\n\n this.expandItems = function (storedExpandedItems) {\n var expandedItemCount = 0;\n this.state.expandedItems = storedExpandedItems;\n\n for (var i = 0; i < this.dataset.length; i++) {\n var item = this.dataset[i];\n expandPreviouslyExpandedItem(item, storedExpandedItems);\n if (item.Expanded) {\n ++expandedItemCount;\n }\n }\n\n if (expandedItemCount === this.dataset.length) {\n this.state.expandAll = true;\n }\n };\n\n this.onDataRefresh = function () {\n var storedExpandedItems = DatatableService.getDataTableExpandedItems(this.tableKey);\n if (storedExpandedItems !== null) {\n this.expandItems(storedExpandedItems);\n }\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedExpandedItems = DatatableService.getDataTableExpandedItems(this.tableKey);\n if (storedExpandedItems !== null) {\n this.expandItems(storedExpandedItems);\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./tasksDatatable.html');\n\nangular.module('portainer.docker').component('tasksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TasksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n nodes: '<',\n showSlotColumn: '<',\n showLogsButton: '<',\n agentProxy: '<',\n },\n});\n","angular.module('portainer.docker').controller('TasksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.state = Object.assign(this.state, {\n showQuickActionStats: true,\n showQuickActionLogs: true,\n showQuickActionExec: true,\n showQuickActionInspect: true,\n showQuickActionAttach: false,\n });\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./volumesDatatable.html');\n\nangular.module('portainer.docker').component('volumesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'VolumesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n showHostColumn: '<',\n removeAction: '<',\n showBrowseAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n },\n});\n","angular.module('portainer.docker').controller('VolumesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n showUsedVolumes: true,\n showUnusedVolumes: true,\n },\n };\n\n this.applyFilters = function (value) {\n var volume = value;\n var filters = ctrl.filters;\n if ((volume.dangling && filters.state.showUnusedVolumes) || (!volume.dangling && filters.state.showUsedVolumes)) {\n return true;\n }\n return false;\n };\n\n this.onstateFilterChange = function () {\n var filters = this.filters.state;\n var filtered = false;\n if (!filters.showUsedVolumes || !filters.showUnusedVolumes) {\n filtered = true;\n }\n this.filters.state.enabled = filtered;\n DatatableService.setDataTableFilters(this.tableKey, this.filters);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./docker-sidebar.html');\n\nangular.module('portainer.docker').component('dockerSidebar', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n isSidebarOpen: '<',\n\n endpointApiVersion: '<',\n swarmManagement: '<',\n standaloneManagement: '<',\n adminAccess: '<',\n offlineMode: '<',\n currentRouteName: '<',\n endpointId: '<',\n showStacks: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./host-overview.html');\n\nangular.module('portainer.docker').component('hostOverview', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n hostDetails: '<',\n engineDetails: '<',\n devices: '<',\n disks: '<',\n isAgent: '<',\n offlineMode: '<',\n agentApiVersion: '<',\n refreshUrl: '@',\n browseUrl: '@',\n hostFeaturesEnabled: '<',\n },\n transclude: true,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./devices-panel.html');\n\nangular.module('portainer.docker').component('devicesPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n devices: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./disks-panel.html');\n\nangular.module('portainer.docker').component('disksPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n disks: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./engine-details-panel.html');\n\nangular.module('portainer.docker').component('engineDetailsPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n engine: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./host-details-panel.html');\n\nangular.module('portainer.docker').component('hostDetailsPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n host: '<',\n isBrowseEnabled: '<',\n browseUrl: '@',\n },\n});\n","angular.module('portainer.docker').controller('NodeAvailabilitySelectController', [\n function NodeAvailabilitySelectController() {\n this.onChange = onChange;\n\n function onChange() {\n this.onSave({ availability: this.availability });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-availability-select.html');\n\nangular.module('portainer.docker').component('nodeAvailabilitySelect', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeAvailabilitySelectController',\n bindings: {\n availability: '<',\n originalValue: '<',\n onSave: '&',\n },\n});\n","angular.module('portainer.docker').controller('NodeLabelsTableController', [\n function NodeLabelsTableController() {\n var ctrl = this;\n ctrl.removeLabel = removeLabel;\n ctrl.updateLabel = updateLabel;\n\n function removeLabel(index) {\n var label = ctrl.labels.splice(index, 1);\n if (label !== null) {\n ctrl.onChangedLabels({ labels: ctrl.labels });\n }\n }\n\n function updateLabel(label) {\n if (label.value !== label.originalValue || label.key !== label.originalKey) {\n ctrl.onChangedLabels({ labels: ctrl.labels });\n }\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-labels-table.html');\n\nangular.module('portainer.docker').component('nodeLabelsTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeLabelsTableController',\n bindings: {\n labels: '<',\n onChangedLabels: '&',\n },\n});\n","angular.module('portainer.docker').controller('SwarmNodeDetailsPanelController', [\n 'NodeService',\n 'LabelHelper',\n 'Notifications',\n '$state',\n function SwarmNodeDetailsPanelController(NodeService, LabelHelper, Notifications, $state) {\n var ctrl = this;\n ctrl.state = {\n managerAddress: '',\n hasChanges: false,\n };\n ctrl.$onChanges = $onChanges;\n ctrl.addLabel = addLabel;\n ctrl.updateNodeLabels = updateNodeLabels;\n ctrl.updateNodeAvailability = updateNodeAvailability;\n ctrl.saveChanges = saveChanges;\n ctrl.cancelChanges = cancelChanges;\n\n var managerRole = 'manager';\n\n function $onChanges() {\n if (!ctrl.details) {\n return;\n }\n if (ctrl.details.role === managerRole) {\n ctrl.state.managerAddress = '(' + ctrl.details.managerAddress + ')';\n }\n }\n\n function addLabel() {\n ctrl.details.nodeLabels.push({\n key: '',\n value: '',\n originalValue: '',\n originalKey: '',\n });\n }\n\n function updateNodeLabels(labels) {\n ctrl.details.nodeLabels = labels;\n ctrl.state.hasChanges = true;\n }\n\n function updateNodeAvailability(availability) {\n ctrl.details.availability = availability;\n ctrl.state.hasChanges = true;\n }\n\n function saveChanges() {\n var originalNode = ctrl.originalNode;\n var config = {\n Name: originalNode.Name,\n Availability: ctrl.details.availability,\n Role: originalNode.Role,\n Labels: LabelHelper.fromKeyValueToLabelHash(ctrl.details.nodeLabels),\n Id: originalNode.Id,\n Version: originalNode.Version,\n };\n\n NodeService.updateNode(config).then(onUpdateSuccess).catch(notifyOnError);\n\n function onUpdateSuccess() {\n Notifications.success('Node successfully updated', 'Node updated');\n $state.go('docker.nodes.node', { id: originalNode.Id }, { reload: true });\n }\n\n function notifyOnError(error) {\n Notifications.error('Failure', error, 'Failed to update node');\n }\n }\n\n function cancelChanges() {\n cancelLabelChanges();\n ctrl.details.availability = ctrl.originalNode.Availability;\n ctrl.state.hasChanges = false;\n }\n\n function cancelLabelChanges() {\n ctrl.details.nodeLabels = ctrl.details.nodeLabels\n .filter(function (label) {\n return label.originalValue || label.originalKey;\n })\n .map(function (label) {\n return Object.assign(label, {\n value: label.originalValue,\n key: label.originalKey,\n });\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./swarm-node-details-panel.html');\n\nangular.module('portainer.docker').component('swarmNodeDetailsPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'SwarmNodeDetailsPanelController',\n bindings: {\n details: '<',\n originalNode: '<',\n },\n});\n","import EndpointHelper from '@/portainer/helpers/endpointHelper';\n\nexport default class porImageRegistryContainerController {\n /* @ngInject */\n constructor(DockerHubService, Notifications) {\n this.DockerHubService = DockerHubService;\n this.Notifications = Notifications;\n\n this.pullRateLimits = null;\n }\n\n $onChanges({ registryId }) {\n if (registryId) {\n this.fetchRateLimits();\n }\n }\n\n async fetchRateLimits() {\n this.pullRateLimits = null;\n if (!EndpointHelper.isAgentEndpoint(this.endpoint) && !EndpointHelper.isLocalEndpoint(this.endpoint)) {\n this.setValidity(true);\n return;\n }\n\n try {\n this.pullRateLimits = await this.DockerHubService.checkRateLimits(this.endpoint, this.registryId || 0);\n this.setValidity(!this.pullRateLimits.limit || (this.pullRateLimits.limit && this.pullRateLimits.remaining >= 0));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Failed loading DockerHub pull rate limits', e);\n this.setValidity(true);\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./por-image-registry-rate-limits.html');\n\nimport angular from 'angular';\n\nimport controller from './por-image-registry-rate-limits.controller';\n\nangular.module('portainer.docker').component('porImageRegistryRateLimits', {\n bindings: {\n endpoint: '<',\n setValidity: '<',\n isAdmin: '<',\n isDockerHubRegistry: '<',\n isAuthenticated: '<',\n registryId: '<',\n },\n controller,\n transclude: {\n rateLimitExceeded: '?porImageRegistryRateLimitExceeded',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport { DockerHubViewModel } from 'Portainer/models/dockerhub';\nimport { RegistryTypes } from '@/portainer/models/registryTypes';\n\nclass porImageRegistryController {\n /* @ngInject */\n constructor($async, $scope, ImageHelper, RegistryService, EndpointService, ImageService, Notifications) {\n this.$async = $async;\n this.$scope = $scope;\n this.ImageHelper = ImageHelper;\n this.RegistryService = RegistryService;\n this.EndpointService = EndpointService;\n this.ImageService = ImageService;\n this.Notifications = Notifications;\n\n this.onRegistryChange = this.onRegistryChange.bind(this);\n this.onImageChange = this.onImageChange.bind(this);\n\n this.registries = [];\n this.images = [];\n this.defaultRegistry = new DockerHubViewModel();\n\n this.$scope.$watch(() => this.model.Registry, this.onRegistryChange);\n this.$scope.$watch(() => this.model.Image, this.onImageChange);\n }\n\n isKnownRegistry(registry) {\n return !(registry instanceof DockerHubViewModel) && registry.URL;\n }\n\n getRegistryURL(registry) {\n let url = registry.URL;\n if (registry.Type === RegistryTypes.GITLAB) {\n url = registry.URL + '/' + registry.Gitlab.ProjectPath;\n }\n return url;\n }\n\n prepareAutocomplete() {\n let images = [];\n const registry = this.model.Registry;\n if (this.isKnownRegistry(registry)) {\n const url = this.getRegistryURL(registry);\n const registryImages = _.filter(this.images, (image) => _.includes(image, url));\n images = _.map(registryImages, (image) => _.replace(image, new RegExp(url + '/?'), ''));\n } else {\n const registries = _.filter(this.registries, (reg) => this.isKnownRegistry(reg));\n const registryImages = _.flatMap(registries, (registry) => _.filter(this.images, (image) => _.includes(image, registry.URL)));\n const imagesWithoutKnown = _.difference(this.images, registryImages);\n images = _.filter(imagesWithoutKnown, (image) => !this.ImageHelper.imageContainsURL(image));\n }\n this.availableImages = images;\n }\n\n isDockerHubRegistry() {\n return this.model.UseRegistry && (this.model.Registry.Type === RegistryTypes.DOCKERHUB || this.model.Registry.Type === RegistryTypes.ANONYMOUS);\n }\n\n async onRegistryChange() {\n this.prepareAutocomplete();\n if (this.model.Registry.Type === RegistryTypes.GITLAB && this.model.Image) {\n this.model.Image = _.replace(this.model.Image, this.model.Registry.Gitlab.ProjectPath, '');\n }\n }\n\n async onImageChange() {\n if (this.setValidity && !this.isDockerHubRegistry()) {\n this.setValidity(true);\n }\n }\n\n displayedRegistryURL() {\n return this.getRegistryURL(this.model.Registry) || 'docker.io';\n }\n\n async reloadRegistries() {\n return this.$async(async () => {\n try {\n let showDefaultRegistry = false;\n this.registries = await this.EndpointService.registries(this.endpoint.Id, this.namespace);\n\n // Sort the registries by Name\n this.registries.sort((a, b) => a.Name.localeCompare(b.Name));\n\n // hide default(anonymous) dockerhub registry if user has an authenticated one\n if (!this.registries.some((registry) => registry.Type === RegistryTypes.DOCKERHUB)) {\n showDefaultRegistry = true;\n // Add dockerhub on top\n this.registries.splice(0, 0, this.defaultRegistry);\n }\n\n const id = this.model.Registry.Id;\n const registry = _.find(this.registries, { Id: id });\n if (!registry) {\n this.model.Registry = showDefaultRegistry ? this.defaultRegistry : this.registries[0];\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registries');\n }\n });\n }\n\n async loadImages() {\n return this.$async(async () => {\n try {\n if (!this.autoComplete) {\n this.images = [];\n return;\n }\n\n const images = await this.ImageService.images();\n this.images = this.ImageService.getUniqueTagListFromImages(images);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve images');\n }\n });\n }\n\n $onChanges({ namespace, endpoint }) {\n if ((namespace || endpoint) && this.endpoint.Id) {\n this.reloadRegistries();\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n await this.loadImages();\n });\n }\n}\n\nexport default porImageRegistryController;\nangular.module('portainer.docker').controller('porImageRegistryController', porImageRegistryController);\n","const autoNgTemplateLoaderTemplate1 = require('./por-image-registry.html');\n\nangular.module('portainer.docker').component('porImageRegistry', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porImageRegistryController',\n bindings: {\n model: '=', // must be of type PorImageRegistryModel\n pullWarning: '<',\n autoComplete: '<',\n labelClass: '@',\n inputClass: '@',\n endpoint: '<',\n isAdmin: '<',\n namespace: '<',\n\n checkRateLimits: '<',\n onImageChange: '&',\n setValidity: '<',\n },\n require: {\n form: '^form',\n },\n transclude: true,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./logViewer.html');\n\nangular.module('portainer.docker').component('logViewer', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'LogViewerController',\n bindings: {\n data: '=',\n displayTimestamps: '=',\n logCollectionChange: '<',\n sinceTimestamp: '=',\n lineCount: '=',\n resourceName: '<',\n },\n});\n","import moment from 'moment';\nimport _ from 'lodash-es';\nimport { NEW_LINE_BREAKER } from '@/constants';\n\nangular.module('portainer.docker').controller('LogViewerController', [\n 'clipboard',\n 'Blob',\n 'FileSaver',\n function (clipboard, Blob, FileSaver) {\n this.state = {\n availableSinceDatetime: [\n { desc: 'Last day', value: moment().subtract(1, 'days').format() },\n { desc: 'Last 4 hours', value: moment().subtract(4, 'hours').format() },\n { desc: 'Last hour', value: moment().subtract(1, 'hours').format() },\n { desc: 'Last 10 minutes', value: moment().subtract(10, 'minutes').format() },\n ],\n copySupported: clipboard.supported,\n logCollection: true,\n autoScroll: true,\n wrapLines: true,\n search: '',\n filteredLogs: [],\n selectedLines: [],\n };\n\n this.copy = function () {\n clipboard.copyText(this.state.filteredLogs.map((log) => log.line).join(NEW_LINE_BREAKER));\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(2000);\n };\n\n this.copySelection = function () {\n clipboard.copyText(this.state.selectedLines.join(NEW_LINE_BREAKER));\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(2000);\n };\n\n this.clearSelection = function () {\n this.state.selectedLines = [];\n };\n\n this.selectLine = function (line) {\n var idx = this.state.selectedLines.indexOf(line);\n if (idx === -1) {\n this.state.selectedLines.push(line);\n } else {\n this.state.selectedLines.splice(idx, 1);\n }\n };\n\n this.downloadLogs = function () {\n // To make the feature of downloading container logs working both on Windows and Linux,\n // we need to use correct new line breakers on corresponding OS.\n const data = new Blob([_.reduce(this.state.filteredLogs, (acc, log) => acc + log.line + NEW_LINE_BREAKER, '')]);\n FileSaver.saveAs(data, this.resourceName + '_logs.txt');\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./networkMacvlanForm.html');\n\nangular.module('portainer.docker').component('networkMacvlanForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NetworkMacvlanFormController',\n bindings: {\n data: '=',\n applicationState: '<',\n },\n});\n","angular.module('portainer.docker').controller('NetworkMacvlanFormController', [\n '$q',\n 'NodeService',\n 'NetworkService',\n 'Notifications',\n 'StateManager',\n 'Authentication',\n function ($q, NodeService, NetworkService, Notifications, StateManager, Authentication) {\n var ctrl = this;\n\n ctrl.requiredNodeSelection = function () {\n if (ctrl.data.Scope !== 'local' || ctrl.data.DatatableState === undefined) {\n return false;\n }\n return ctrl.data.DatatableState.selectedItemCount === 0;\n };\n\n ctrl.requiredConfigSelection = function () {\n if (ctrl.data.Scope !== 'swarm') {\n return false;\n }\n return !ctrl.data.SelectedNetworkConfig;\n };\n\n this.$onInit = $onInit;\n function $onInit() {\n var isAdmin = Authentication.isAdmin();\n ctrl.isAdmin = isAdmin;\n\n var provider = ctrl.applicationState.endpoint.mode.provider;\n var apiVersion = ctrl.applicationState.endpoint.apiVersion;\n $q.all({\n nodes: provider !== 'DOCKER_SWARM_MODE' || NodeService.nodes(),\n networks: NetworkService.networks(provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', false, provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25),\n })\n .then(function success(data) {\n if (data.nodes !== true) {\n ctrl.nodes = data.nodes;\n }\n ctrl.availableNetworks = data.networks.filter(function (item) {\n return item.ConfigOnly === true;\n });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve informations for macvlan');\n });\n }\n },\n]);\n","export function MacvlanFormData() {\n this.Scope = 'local';\n this.SelectedNetworkConfig = null;\n this.DatatableState = {\n selectedItems: [],\n };\n this.ParentNetworkCard = '';\n}\n","const autoNgTemplateLoaderTemplate1 = require('./volumesCifsForm.html');\n\nangular.module('portainer.docker').component('volumesCifsForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n data: '=',\n },\n});\n","export function VolumesCIFSFormData() {\n this.useCIFS = false;\n this.serverAddress = '';\n this.share = '';\n this.version = 'CIFS v2.0 (Used by Windows Vista / Server 2008)';\n this.versions = [\n 'CIFS v1.0 (Used by Windows XP / Server 2003 and earlier)',\n 'CIFS v2.0 (Used by Windows Vista / Server 2008)',\n 'CIFS v2.1 (Used by Windows 7 / Server 2008 R2)',\n 'CIFS 3.0 (Used by Windows 8 / Server 2012 and newer)',\n ];\n this.versionsNumber = ['1.0', '2.0', '2.1', '3.0'];\n this.username = '';\n this.password = '';\n}\n","const autoNgTemplateLoaderTemplate1 = require('./volumesnfsForm.html');\n\nangular.module('portainer.docker').component('volumesNfsForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n data: '=',\n },\n});\n","export function VolumesNFSFormData() {\n this.useNFS = false;\n this.serverAddress = '';\n this.mountPoint = '';\n this.version = 'NFS4';\n this.options = 'rw,noatime,rsize=8192,wsize=8192,tcp,timeo=14';\n this.versions = ['NFS4', 'NFS'];\n}\n","import _ from 'lodash-es';\n\nfunction includeString(text, values) {\n return values.some(function (val) {\n return text.indexOf(val) !== -1;\n });\n}\n\nfunction strToHash(str) {\n var hash = 0;\n for (var i = 0; i < str.length; i++) {\n hash = str.charCodeAt(i) + ((hash << 5) - hash);\n }\n return hash;\n}\n\nfunction hashToHexColor(hash) {\n var color = '#';\n for (var i = 0; i < 3; ) {\n color += ('00' + ((hash >> (i++ * 8)) & 0xff).toString(16)).slice(-2);\n }\n return color;\n}\n\nangular\n .module('portainer.docker')\n .filter('visualizerTask', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n if (includeString(status, ['new', 'allocated', 'assigned', 'accepted', 'complete', 'preparing'])) {\n return 'info';\n } else if (includeString(status, ['pending'])) {\n return 'warning';\n } else if (includeString(status, ['shutdown', 'failed', 'rejected'])) {\n return 'stopped';\n }\n return 'running';\n };\n })\n .filter('visualizerTaskBorderColor', function () {\n 'use strict';\n return function (str) {\n var hash = strToHash(str);\n var color = hashToHexColor(hash);\n return color;\n };\n })\n .filter('taskstatusbadge', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n var labelStyle = 'default';\n if (includeString(status, ['new', 'allocated', 'assigned', 'accepted', 'preparing', 'ready', 'starting', 'remove'])) {\n labelStyle = 'info';\n } else if (includeString(status, ['pending'])) {\n labelStyle = 'warning';\n } else if (includeString(status, ['shutdown', 'failed', 'rejected', 'orphaned'])) {\n labelStyle = 'danger';\n } else if (includeString(status, ['complete'])) {\n labelStyle = 'primary';\n } else if (includeString(status, ['running'])) {\n labelStyle = 'success';\n }\n return labelStyle;\n };\n })\n .filter('taskhaslogs', function () {\n 'use strict';\n return function (state) {\n var validState = ['running', 'complete', 'failed', 'shutdown'];\n if (validState.indexOf(state) > -1) {\n return true;\n }\n return false;\n };\n })\n .filter('containerstatusbadge', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n if (includeString(status, ['paused', 'starting', 'unhealthy'])) {\n return 'warning';\n } else if (includeString(status, ['created'])) {\n return 'info';\n } else if (includeString(status, ['stopped', 'dead', 'exited'])) {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('nodestatusbadge', function () {\n 'use strict';\n return function (text) {\n if (text === 'down' || text === 'Unhealthy') {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('dockerNodeAvailabilityBadge', function () {\n 'use strict';\n return function (text) {\n if (text === 'pause') {\n return 'warning';\n } else if (text === 'drain') {\n return 'danger';\n }\n return 'success';\n };\n })\n .filter('trimcontainername', function () {\n 'use strict';\n return function (name) {\n if (name) {\n return name.indexOf('/') === 0 ? name.replace('/', '') : name;\n }\n return '';\n };\n })\n .filter('getstatetext', function () {\n 'use strict';\n return function (state) {\n if (state === undefined) {\n return '';\n }\n if (state.Dead) {\n return 'Dead';\n }\n if (state.Ghost && state.Running) {\n return 'Ghost';\n }\n if (state.Running && state.Paused) {\n return 'Running (Paused)';\n }\n if (state.Running) {\n return 'Running';\n }\n if (state.Status === 'created') {\n return 'Created';\n }\n return 'Stopped';\n };\n })\n .filter('getstatelabel', function () {\n 'use strict';\n return function (state) {\n if (state === undefined) {\n return 'label-default';\n }\n if (state.Ghost && state.Running) {\n return 'label-important';\n }\n if (state.Running) {\n return 'label-success';\n }\n return 'label-default';\n };\n })\n .filter('containername', function () {\n 'use strict';\n return function (container) {\n var name = container.Names[0];\n return name.substring(1, name.length);\n };\n })\n .filter('swarmversion', function () {\n 'use strict';\n return function (text) {\n return _.split(text, '/')[1];\n };\n })\n .filter('swarmhostname', function () {\n 'use strict';\n return function (container) {\n return _.split(container.Names[0], '/')[1];\n };\n })\n .filter('repotags', function () {\n 'use strict';\n return function (image) {\n if (image.RepoTags && image.RepoTags.length > 0) {\n var tag = image.RepoTags[0];\n if (tag === ':') {\n return [];\n }\n return image.RepoTags;\n }\n return [];\n };\n })\n .filter('command', function () {\n 'use strict';\n return function (command) {\n if (command) {\n return command.join(' ');\n }\n };\n })\n .filter('hideshasum', function () {\n 'use strict';\n return function (imageName) {\n if (imageName) {\n return imageName.split('@sha')[0];\n }\n return '';\n };\n })\n .filter('availablenodecount', [\n 'ConstraintsHelper',\n function (ConstraintsHelper) {\n 'use strict';\n return function (nodes, service) {\n var availableNodes = 0;\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n if (node.Availability === 'active' && node.Status === 'ready' && ConstraintsHelper.matchesServiceConstraints(service, node)) {\n availableNodes++;\n }\n }\n return availableNodes;\n };\n },\n ])\n .filter('runningtaskscount', function () {\n 'use strict';\n return function (tasks) {\n var runningTasks = 0;\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n if (task.Status.State === 'running' && task.DesiredState === 'running') {\n runningTasks++;\n }\n }\n return runningTasks;\n };\n })\n .filter('runningcontainers', function () {\n 'use strict';\n return function runningContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.State === 'running';\n }).length;\n };\n })\n .filter('stoppedcontainers', function () {\n 'use strict';\n return function stoppedContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.State === 'exited';\n }).length;\n };\n })\n .filter('healthycontainers', function () {\n 'use strict';\n return function healthyContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.Status === 'healthy';\n }).length;\n };\n })\n .filter('unhealthycontainers', function () {\n 'use strict';\n return function unhealthyContainersFilter(containers) {\n return containers.filter(function (container) {\n return container.Status === 'unhealthy';\n }).length;\n };\n })\n .filter('imagestotalsize', function () {\n 'use strict';\n return function (images) {\n var totalImageSize = 0;\n for (var i = 0; i < images.length; i++) {\n var item = images[i];\n totalImageSize += item.VirtualSize;\n }\n return totalImageSize;\n };\n })\n .filter('tasknodename', function () {\n 'use strict';\n return function (nodeId, nodes) {\n var node = _.find(nodes, { Id: nodeId });\n if (node) {\n return node.Hostname;\n }\n return '';\n };\n })\n .filter('imagelayercommand', function () {\n 'use strict';\n return function (createdBy) {\n return createdBy.replace('/bin/sh -c #(nop) ', '').replace('/bin/sh -c ', 'RUN ');\n };\n })\n .filter('trimshasum', function () {\n 'use strict';\n return function (imageName) {\n if (!imageName) {\n return;\n }\n if (imageName.indexOf('sha256:') === 0) {\n return imageName.substring(7, 19);\n }\n return _.split(imageName, '@sha256')[0];\n };\n })\n .filter('trimversiontag', function () {\n 'use strict';\n return function trimversiontag(fullName) {\n if (!fullName) {\n return fullName;\n }\n var versionIdx = fullName.lastIndexOf(':');\n if (versionIdx < 0) {\n return fullName;\n }\n var hostIdx = fullName.indexOf('/');\n if (hostIdx > versionIdx) {\n return fullName;\n }\n return fullName.substring(0, versionIdx);\n };\n })\n .filter('unique', function () {\n return _.uniqBy;\n });\n","angular.module('portainer.docker').factory('ConfigHelper', [\n function ConfigHelperFactory() {\n 'use strict';\n return {\n flattenConfig: function (config) {\n if (config) {\n return {\n Id: config.ConfigID,\n Name: config.ConfigName,\n FileName: config.File.Name,\n Uid: config.File.UID,\n Gid: config.File.GID,\n Mode: config.File.Mode,\n };\n }\n return {};\n },\n configConfig: function (config) {\n if (config) {\n return {\n ConfigID: config.Id,\n ConfigName: config.Name,\n File: {\n Name: config.FileName || config.Name,\n UID: config.Uid || '0',\n GID: config.Gid || '0',\n Mode: config.Mode || 292,\n },\n };\n }\n return {};\n },\n };\n },\n]);\n","import _ from 'lodash-es';\n\nfunction ConstraintModel(op, key, value) {\n this.op = op;\n this.value = value;\n this.key = key;\n}\n\nvar patterns = {\n id: {\n nodeId: 'node.id',\n nodeHostname: 'node.hostname',\n nodeRole: 'node.role',\n nodeLabels: 'node.labels.',\n engineLabels: 'engine.labels.',\n },\n op: {\n eq: '==',\n neq: '!=',\n },\n};\n\nfunction matchesConstraint(value, constraint) {\n if (!constraint || (constraint.op === patterns.op.eq && value === constraint.value) || (constraint.op === patterns.op.neq && value !== constraint.value)) {\n return true;\n }\n return false;\n}\n\nfunction matchesLabel(labels, constraint) {\n if (!constraint) {\n return true;\n }\n var found = _.find(labels, function (label) {\n return label.key === constraint.key && label.value === constraint.value;\n });\n return found !== undefined;\n}\n\nfunction extractValue(constraint, op) {\n return constraint.split(op).pop().trim();\n}\n\nfunction extractCustomLabelKey(constraint, op, baseLabelKey) {\n return constraint.split(op).shift().trim().replace(baseLabelKey, '');\n}\n\nangular.module('portainer.docker').factory('ConstraintsHelper', [\n function ConstraintsHelperFactory() {\n 'use strict';\n return {\n transformConstraints: function (constraints) {\n var transform = {};\n for (var i = 0; i < constraints.length; i++) {\n var constraint = constraints[i];\n\n var op;\n if (constraint.includes(patterns.op.eq)) {\n op = patterns.op.eq;\n } else if (constraint.includes(patterns.op.neq)) {\n op = patterns.op.neq;\n }\n\n var value = extractValue(constraint, op);\n var key = '';\n switch (true) {\n case constraint.includes(patterns.id.nodeId):\n transform.nodeId = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.nodeHostname):\n transform.nodeHostname = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.nodeRole):\n transform.nodeRole = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.nodeLabels):\n key = extractCustomLabelKey(constraint, op, patterns.id.nodeLabels);\n transform.nodeLabels = new ConstraintModel(op, key, value);\n break;\n case constraint.includes(patterns.id.engineLabels):\n key = extractCustomLabelKey(constraint, op, patterns.id.engineLabels);\n transform.engineLabels = new ConstraintModel(op, key, value);\n break;\n default:\n break;\n }\n }\n return transform;\n },\n matchesServiceConstraints: function (service, node) {\n if (service.Constraints === undefined || service.Constraints.length === 0) {\n return true;\n }\n var constraints = this.transformConstraints(angular.copy(service.Constraints));\n if (\n matchesConstraint(node.Id, constraints.nodeId) &&\n matchesConstraint(node.Hostname, constraints.nodeHostname) &&\n matchesConstraint(node.Role, constraints.nodeRole) &&\n matchesLabel(node.Labels, constraints.nodeLabels) &&\n matchesLabel(node.EngineLabels, constraints.engineLabels)\n ) {\n return true;\n }\n return false;\n },\n };\n },\n]);\n","import _ from 'lodash-es';\nimport splitargs from 'splitargs/src/splitargs';\n\nconst portPattern = /^([1-9]|[1-5]?[0-9]{2,4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/m;\n\nfunction parsePort(port) {\n if (portPattern.test(port)) {\n return parseInt(port, 10);\n } else {\n return 0;\n }\n}\n\nfunction parsePortRange(portRange) {\n if (typeof portRange !== 'string') {\n portRange = portRange.toString();\n }\n\n // Split the range and convert to integers\n const stringPorts = _.split(portRange, '-', 2);\n const intPorts = _.map(stringPorts, parsePort);\n\n // If it's not a range, we still make sure that we return two ports (start & end)\n if (intPorts.length == 1) {\n intPorts.push(intPorts[0]);\n }\n\n return intPorts;\n}\n\nfunction isValidPortRange(portRange) {\n if (typeof portRange === 'string') {\n portRange = parsePortRange();\n }\n\n return Array.isArray(portRange) && portRange.length === 2 && portRange[0] > 0 && portRange[1] >= portRange[0];\n}\n\nfunction createPortRange(portRangeText, port) {\n if (typeof portRangeText !== 'string') {\n portRangeText = portRangeText.toString();\n }\n\n let hostIp = null;\n const colonIndex = portRangeText.indexOf(':');\n if (colonIndex >= 0) {\n hostIp = portRangeText.substr(0, colonIndex);\n portRangeText = portRangeText.substr(colonIndex + 1);\n }\n\n port = typeof port === 'number' ? port : parsePort(port);\n const portRange = parsePortRange(portRangeText);\n const startPort = Math.min(portRange[0], port);\n const endPort = Math.max(portRange[1], port);\n\n if (hostIp) {\n return hostIp + ':' + startPort + '-' + endPort;\n } else {\n return startPort + '-' + endPort;\n }\n}\n\nangular.module('portainer.docker').factory('ContainerHelper', [\n function ContainerHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.commandStringToArray = function (command) {\n return splitargs(command);\n };\n\n helper.commandArrayToString = function (array) {\n return array\n .map(function (elem) {\n return \"'\" + elem + \"'\";\n })\n .join(' ');\n };\n\n helper.configFromContainer = function (container) {\n var config = container.Config;\n // HostConfig\n config.HostConfig = container.HostConfig;\n // Name\n config.name = container.Name.replace(/^\\//g, '');\n // Network\n var mode = config.HostConfig.NetworkMode;\n config.NetworkingConfig = {\n EndpointsConfig: {},\n };\n config.NetworkingConfig.EndpointsConfig = container.NetworkSettings.Networks;\n\n if (config.ExposedPorts === undefined) {\n config.ExposedPorts = {};\n }\n\n if (mode.indexOf('container:') !== -1) {\n delete config.Hostname;\n delete config.ExposedPorts;\n }\n // Set volumes\n var binds = [];\n var volumes = {};\n for (var v in container.Mounts) {\n if ({}.hasOwnProperty.call(container.Mounts, v)) {\n var mount = container.Mounts[v];\n var name = mount.Name || mount.Source;\n var containerPath = mount.Destination;\n if (name && containerPath) {\n var bind = name + ':' + containerPath;\n volumes[containerPath] = {};\n if (mount.RW === false) {\n bind += ':ro';\n }\n binds.push(bind);\n }\n }\n }\n config.HostConfig.Binds = binds;\n config.Volumes = volumes;\n return config;\n };\n\n helper.preparePortBindings = function (portBindings) {\n const bindings = {};\n _.forEach(portBindings, (portBinding) => {\n if (!portBinding.containerPort) {\n return;\n }\n\n let hostPort = portBinding.hostPort;\n const containerPortRange = parsePortRange(portBinding.containerPort);\n if (!isValidPortRange(containerPortRange)) {\n throw new Error('Invalid port specification: ' + portBinding.containerPort);\n }\n\n const startPort = containerPortRange[0];\n const endPort = containerPortRange[1];\n let hostIp = undefined;\n let startHostPort = 0;\n let endHostPort = 0;\n if (hostPort) {\n if (hostPort.indexOf('[') > -1) {\n const hostAndPort = _.split(hostPort, ']:');\n\n if (hostAndPort.length < 2) {\n throw new Error('Invalid port specification: ' + portBinding.containerPort);\n }\n\n hostIp = hostAndPort[0].replace('[', '');\n hostPort = hostAndPort[1];\n } else {\n if (hostPort.indexOf(':') > -1) {\n const hostAndPort = _.split(hostPort, ':');\n hostIp = hostAndPort[0];\n hostPort = hostAndPort[1];\n }\n }\n\n const hostPortRange = parsePortRange(hostPort);\n if (!isValidPortRange(hostPortRange)) {\n throw new Error('Invalid port specification: ' + hostPort);\n }\n\n startHostPort = hostPortRange[0];\n endHostPort = hostPortRange[1];\n if (endPort !== startPort && endPort - startPort !== endHostPort - startHostPort) {\n throw new Error('Invalid port specification: ' + hostPort);\n }\n }\n\n for (let i = 0; i <= endPort - startPort; i++) {\n const containerPort = (startPort + i).toString();\n if (startHostPort > 0) {\n hostPort = (startHostPort + i).toString();\n }\n if (startPort === endPort && startHostPort !== endHostPort) {\n hostPort += '-' + endHostPort.toString();\n }\n\n const bindKey = containerPort + '/' + portBinding.protocol;\n if (bindings[bindKey]) {\n bindings[bindKey].push({ HostIp: hostIp, HostPort: hostPort });\n } else {\n bindings[bindKey] = [{ HostIp: hostIp, HostPort: hostPort }];\n }\n }\n });\n return bindings;\n };\n\n helper.sortAndCombinePorts = function (portBindings) {\n const bindings = [];\n const portBindingKeys = _.keys(portBindings);\n\n // Group the port bindings by protocol\n const portBindingKeysByProtocol = _.groupBy(portBindingKeys, (portKey) => {\n return _.split(portKey, '/')[1];\n });\n\n _.forEach(portBindingKeysByProtocol, (portBindingKeys, protocol) => {\n // Group the port bindings by host IP\n const portBindingKeysByHostIp = {};\n for (const portKey of portBindingKeys) {\n for (const portBinding of portBindings[portKey]) {\n portBindingKeysByHostIp[portBinding.HostIp] = portBindingKeysByHostIp[portBinding.HostIp] || [];\n portBindingKeysByHostIp[portBinding.HostIp].push(portKey);\n }\n }\n\n _.forEach(portBindingKeysByHostIp, (portBindingKeys, ip) => {\n // Sort by host port\n const sortedPortBindingKeys = _.orderBy(portBindingKeys, (portKey) => {\n return parseInt(_.split(portKey, '/')[0], 10);\n });\n\n let previousHostPort = -1;\n let previousContainerPort = -1;\n _.forEach(sortedPortBindingKeys, (portKey) => {\n const portKeySplit = _.split(portKey, '/');\n const containerPort = parseInt(portKeySplit[0], 10);\n const portBinding = portBindings[portKey][0];\n portBindings[portKey].shift();\n const hostPort = parsePort(portBinding.HostPort);\n\n // We only combine single ports, and skip the host port ranges on one container port\n if (hostPort > 0) {\n // If we detect consecutive ports, we create a range of them\n if (bindings.length > 0 && previousHostPort === hostPort - 1 && previousContainerPort === containerPort - 1) {\n bindings[bindings.length - 1].hostPort = createPortRange(bindings[bindings.length - 1].hostPort, hostPort);\n bindings[bindings.length - 1].containerPort = createPortRange(bindings[bindings.length - 1].containerPort, containerPort);\n previousHostPort = hostPort;\n previousContainerPort = containerPort;\n return;\n }\n\n previousHostPort = hostPort;\n previousContainerPort = containerPort;\n } else {\n previousHostPort = -1;\n previousContainerPort = -1;\n }\n\n let bindingHostPort = portBinding.HostPort.toString();\n if (ip) {\n bindingHostPort = `${ip}:${bindingHostPort}`;\n }\n\n const binding = {\n hostPort: bindingHostPort,\n containerPort: containerPort,\n protocol: protocol,\n };\n bindings.push(binding);\n });\n });\n });\n\n return bindings;\n };\n\n helper.getContainerNames = function (containers) {\n return _.map(_.flatten(_.map(containers, 'Names')), (name) => _.trimStart(name, '/'));\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\nimport { RegistryTypes } from 'Portainer/models/registryTypes';\n\nangular.module('portainer.docker').factory('ImageHelper', ImageHelperFactory);\n\nfunction ImageHelperFactory() {\n return {\n isValidTag,\n createImageConfigForContainer,\n getImagesNamesForDownload,\n removeDigestFromRepository,\n imageContainsURL,\n };\n\n function isValidTag(tag) {\n return tag.match(/^(?![\\.\\-])([a-zA-Z0-9\\_\\.\\-])+$/g);\n }\n\n function getImagesNamesForDownload(images) {\n var names = images.map(function (image) {\n return image.RepoTags[0] !== ':' ? image.RepoTags[0] : image.Id;\n });\n return {\n names: names,\n };\n }\n\n /**\n *\n * @param {PorImageRegistryModel} registry\n */\n function createImageConfigForContainer(imageModel) {\n return {\n fromImage: buildImageFullURI(imageModel),\n };\n }\n\n function imageContainsURL(image) {\n const split = _.split(image, '/');\n const url = split[0];\n if (split.length > 1) {\n return _.includes(url, '.') || _.includes(url, ':');\n }\n return false;\n }\n\n function removeDigestFromRepository(repository) {\n return repository.split('@sha')[0];\n }\n}\n\n/**\n * builds the complete uri for an image based on its registry\n * @param {PorImageRegistryModel} imageModel\n */\nexport function buildImageFullURI(imageModel) {\n if (!imageModel.UseRegistry) {\n return ensureTag(imageModel.Image);\n }\n\n const imageName = buildImageFullURIWithRegistry(imageModel);\n\n return ensureTag(imageName);\n\n function ensureTag(image, defaultTag = 'latest') {\n return image.includes(':') ? image : `${image}:${defaultTag}`;\n }\n}\n\nfunction buildImageFullURIWithRegistry(imageModel) {\n switch (imageModel.Registry.Type) {\n case RegistryTypes.GITLAB:\n return buildImageURIForGitLab(imageModel);\n case RegistryTypes.QUAY:\n return buildImageURIForQuay(imageModel);\n case RegistryTypes.ANONYMOUS:\n return imageModel.Image;\n default:\n return buildImageURIForOtherRegistry(imageModel);\n }\n\n function buildImageURIForGitLab(imageModel) {\n const slash = imageModel.Image.startsWith(':') ? '' : '/';\n return `${imageModel.Registry.URL}/${imageModel.Registry.Gitlab.ProjectPath}${slash}${imageModel.Image}`;\n }\n\n function buildImageURIForQuay(imageModel) {\n const name = imageModel.Registry.Quay.UseOrganisation ? imageModel.Registry.Quay.OrganisationName : imageModel.Registry.Username;\n const url = imageModel.Registry.URL ? imageModel.Registry.URL + '/' : '';\n return `${url}${name}/${imageModel.Image}`;\n }\n\n function buildImageURIForOtherRegistry(imageModel) {\n const url = imageModel.Registry.URL ? imageModel.Registry.URL + '/' : '';\n return url + imageModel.Image;\n }\n}\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').factory('InfoHelper', [\n function InfoHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.determineEndpointMode = function (info, type) {\n var mode = {\n provider: '',\n role: '',\n agentProxy: false,\n };\n\n if (type === 2 || type === 4) {\n mode.agentProxy = true;\n }\n\n if (!info.Swarm || _.isEmpty(info.Swarm.NodeID)) {\n mode.provider = 'DOCKER_STANDALONE';\n } else {\n mode.provider = 'DOCKER_SWARM_MODE';\n if (info.Swarm.ControlAvailable) {\n mode.role = 'MANAGER';\n } else {\n mode.role = 'WORKER';\n }\n }\n return mode;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('LabelHelper', [\n function LabelHelperFactory() {\n 'use strict';\n return {\n fromLabelHashToKeyValue: function (labels) {\n if (labels) {\n return Object.keys(labels).map(function (key) {\n return { key: key, value: labels[key], originalKey: key, originalValue: labels[key], added: true };\n });\n }\n return [];\n },\n fromKeyValueToLabelHash: function (labelKV) {\n var labels = {};\n if (labelKV) {\n labelKV.forEach(function (label) {\n if (label.key) {\n labels[label.key] = label.value;\n }\n });\n }\n return labels;\n },\n };\n },\n]);\n","import tokenize from '@nxmix/tokenize-ansi';\nimport x256 from 'x256';\n\nconst FOREGROUND_COLORS_BY_ANSI = {\n black: x256.colors[0],\n red: x256.colors[1],\n green: x256.colors[2],\n yellow: x256.colors[3],\n blue: x256.colors[4],\n magenta: x256.colors[5],\n cyan: x256.colors[6],\n white: x256.colors[7],\n brightBlack: x256.colors[8],\n brightRed: x256.colors[9],\n brightGreen: x256.colors[10],\n brightYellow: x256.colors[11],\n brightBlue: x256.colors[12],\n brightMagenta: x256.colors[13],\n brightCyan: x256.colors[14],\n brightWhite: x256.colors[15],\n};\n\nconst BACKGROUND_COLORS_BY_ANSI = {\n bgBlack: x256.colors[0],\n bgRed: x256.colors[1],\n bgGreen: x256.colors[2],\n bgYellow: x256.colors[3],\n bgBlue: x256.colors[4],\n bgMagenta: x256.colors[5],\n bgCyan: x256.colors[6],\n bgWhite: x256.colors[7],\n bgBrightBlack: x256.colors[8],\n bgBrightRed: x256.colors[9],\n bgBrightGreen: x256.colors[10],\n bgBrightYellow: x256.colors[11],\n bgBrightBlue: x256.colors[12],\n bgBrightMagenta: x256.colors[13],\n bgBrightCyan: x256.colors[14],\n bgBrightWhite: x256.colors[15],\n};\n\nangular.module('portainer.docker').factory('LogHelper', [\n function LogHelperFactory() {\n 'use strict';\n var helper = {};\n\n function stripHeaders(logs) {\n logs = logs.substring(8);\n logs = logs.replace(/\\r?\\n(.{8})/g, '\\n');\n\n return logs;\n }\n\n function stripEscapeCodes(logs) {\n return logs.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n }\n\n function cssColorFromRgb(rgb) {\n const [r, g, b] = rgb;\n\n return `rgb(${r}, ${g}, ${b})`;\n }\n\n function extendedColorForToken(token) {\n const colorMode = token[1];\n\n if (colorMode === 2) {\n return cssColorFromRgb(token.slice(2));\n }\n\n if (colorMode === 5 && x256.colors[token[2]]) {\n return cssColorFromRgb(x256.colors[token[2]]);\n }\n\n return '';\n }\n\n // Return an array with each log including a line and styled spans for each entry.\n // If the skipHeaders param is specified, it will strip the 8 first characters of each line.\n helper.formatLogs = function (logs, skipHeaders) {\n if (skipHeaders) {\n logs = stripHeaders(logs);\n }\n\n const tokens = tokenize(logs);\n const formattedLogs = [];\n\n let foregroundColor = null;\n let backgroundColor = null;\n let line = '';\n let spans = [];\n\n for (const token of tokens) {\n const type = token[0];\n\n if (FOREGROUND_COLORS_BY_ANSI[type]) {\n foregroundColor = cssColorFromRgb(FOREGROUND_COLORS_BY_ANSI[type]);\n } else if (type === 'moreColor') {\n foregroundColor = extendedColorForToken(token);\n } else if (type === 'fgDefault') {\n foregroundColor = null;\n } else if (BACKGROUND_COLORS_BY_ANSI[type]) {\n backgroundColor = cssColorFromRgb(BACKGROUND_COLORS_BY_ANSI[type]);\n } else if (type === 'bgMoreColor') {\n backgroundColor = extendedColorForToken(token);\n } else if (type === 'bgDefault') {\n backgroundColor = null;\n } else if (type === 'reset') {\n foregroundColor = null;\n backgroundColor = null;\n } else if (type === 'text') {\n const tokenLines = token[1].split('\\n');\n\n for (let i = 0; i < tokenLines.length; i++) {\n if (i !== 0) {\n formattedLogs.push({ line, spans });\n\n line = '';\n spans = [];\n }\n\n const text = stripEscapeCodes(tokenLines[i]);\n\n line += text;\n spans.push({ foregroundColor, backgroundColor, text });\n }\n }\n }\n if (line) {\n formattedLogs.push({ line, spans });\n }\n return formattedLogs;\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\n\nclass DockerNetworkHelper {\n static getIPV4Configs(configs) {\n return _.filter(configs, (config) => /^([0-9]{1,3}\\.){3}[0-9]{1,3}(\\/([0-9]|[1-2][0-9]|3[0-2]))?$/.test(config.Subnet));\n }\n\n static getIPV6Configs(configs) {\n return _.without(configs, ...DockerNetworkHelper.getIPV4Configs(configs));\n }\n}\n\nexport default DockerNetworkHelper;\n","angular.module('portainer.docker').factory('NodeHelper', [\n function NodeHelperFactory() {\n 'use strict';\n return {\n nodeToConfig: function (node) {\n return {\n Name: node.Spec.Name,\n Role: node.Spec.Role,\n Labels: node.Spec.Labels,\n Availability: node.Spec.Availability,\n };\n },\n };\n },\n]);\n","angular.module('portainer.docker').factory('SecretHelper', [\n function SecretHelperFactory() {\n 'use strict';\n return {\n flattenSecret: function (secret) {\n if (secret) {\n return {\n Id: secret.SecretID,\n Name: secret.SecretName,\n FileName: secret.File.Name,\n Uid: secret.File.UID,\n Gid: secret.File.GID,\n Mode: secret.File.Mode,\n };\n }\n return {};\n },\n secretConfig: function (secret) {\n if (secret) {\n return {\n SecretID: secret.Id,\n SecretName: secret.Name,\n File: {\n Name: secret.FileName,\n UID: secret.Uid || '0',\n GID: secret.Gid || '0',\n Mode: secret.Mode || 444,\n },\n };\n }\n return {};\n },\n };\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').factory('ServiceHelper', [\n function ServiceHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.associateTasksToService = function (service, tasks) {\n service.Tasks = [];\n var otherServicesTasks = [];\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n if (task.ServiceId === service.Id) {\n service.Tasks.push(task);\n task.ServiceName = service.Name;\n } else {\n otherServicesTasks.push(task);\n }\n }\n tasks = otherServicesTasks;\n };\n\n helper.serviceToConfig = function (service) {\n return {\n Name: service.Spec.Name,\n Labels: service.Spec.Labels,\n TaskTemplate: service.Spec.TaskTemplate,\n Mode: service.Spec.Mode,\n UpdateConfig: service.Spec.UpdateConfig,\n Networks: service.Spec.Networks,\n EndpointSpec: service.Spec.EndpointSpec,\n };\n };\n\n helper.translateKeyValueToPlacementPreferences = function (keyValuePreferences) {\n if (keyValuePreferences) {\n var preferences = [];\n keyValuePreferences.forEach(function (preference) {\n if (preference.strategy && preference.strategy !== '' && preference.value && preference.value !== '') {\n switch (preference.strategy.toLowerCase()) {\n case 'spread':\n preferences.push({\n Spread: {\n SpreadDescriptor: preference.value,\n },\n });\n break;\n }\n }\n });\n return preferences;\n }\n return [];\n };\n\n helper.translateKeyValueToPlacementConstraints = function (keyValueConstraints) {\n if (keyValueConstraints) {\n var constraints = [];\n keyValueConstraints.forEach(function (constraint) {\n if (constraint.key && constraint.key !== '' && constraint.value && constraint.value !== '') {\n constraints.push(constraint.key + constraint.operator + constraint.value);\n }\n });\n return constraints;\n }\n return [];\n };\n\n helper.translatePreferencesToKeyValue = function (preferences) {\n if (preferences) {\n var keyValuePreferences = [];\n preferences.forEach(function (preference) {\n if (preference.Spread) {\n keyValuePreferences.push({\n strategy: 'Spread',\n value: preference.Spread.SpreadDescriptor,\n });\n }\n });\n return keyValuePreferences;\n }\n return [];\n };\n\n helper.translateConstraintsToKeyValue = function (constraints) {\n function getOperator(constraint) {\n var indexEquals = constraint.indexOf('==');\n if (indexEquals >= 0) {\n return [indexEquals, '=='];\n }\n return [constraint.indexOf('!='), '!='];\n }\n if (constraints) {\n var keyValueConstraints = [];\n constraints.forEach(function (constraint) {\n var operatorIndices = getOperator(constraint);\n\n var key = constraint.slice(0, operatorIndices[0]);\n var operator = operatorIndices[1];\n var value = constraint.slice(operatorIndices[0] + 2);\n\n keyValueConstraints.push({\n key: key,\n value: value,\n operator: operator,\n originalKey: key,\n originalValue: value,\n });\n });\n return keyValueConstraints;\n }\n };\n\n helper.translateHumanDurationToNanos = function (humanDuration) {\n var nanos;\n var regex = /^([0-9]+)(h|m|s|ms|us|ns)$/i;\n var matches = humanDuration.match(regex);\n\n if (matches !== null && matches.length === 3) {\n var duration = parseInt(matches[1], 10);\n var unit = matches[2];\n // Moment.js cannot use micro or nanoseconds\n switch (unit) {\n case 'ns':\n nanos = duration;\n break;\n case 'us':\n nanos = duration * 1000;\n break;\n default:\n nanos = moment.duration(duration, unit).asMilliseconds() * 1000000;\n }\n }\n return nanos;\n };\n\n // Convert nanoseconds to the higher unit possible\n // e.g 1840 nanoseconds = 1804ns\n // e.g 300000000000 nanoseconds = 5m\n // e.g 3510000000000 nanoseconds = 3510s\n // e.g 3540000000000 nanoseconds = 59m\n // e.g 3600000000000 nanoseconds = 1h\n\n helper.translateNanosToHumanDuration = function (nanos) {\n var humanDuration = '0s';\n var conversionFromNano = {};\n conversionFromNano['ns'] = 1;\n conversionFromNano['us'] = conversionFromNano['ns'] * 1000;\n conversionFromNano['ms'] = conversionFromNano['us'] * 1000;\n conversionFromNano['s'] = conversionFromNano['ms'] * 1000;\n conversionFromNano['m'] = conversionFromNano['s'] * 60;\n conversionFromNano['h'] = conversionFromNano['m'] * 60;\n\n Object.keys(conversionFromNano).forEach(function (unit) {\n if (nanos % conversionFromNano[unit] === 0 && nanos / conversionFromNano[unit] > 0) {\n humanDuration = nanos / conversionFromNano[unit] + unit;\n }\n });\n return humanDuration;\n };\n\n helper.translateLogDriverOptsToKeyValue = function (logOptions) {\n var options = [];\n if (logOptions) {\n Object.keys(logOptions).forEach(function (key) {\n options.push({\n key: key,\n value: logOptions[key],\n originalKey: key,\n originalValue: logOptions[key],\n added: true,\n });\n });\n }\n return options;\n };\n\n helper.translateKeyValueToLogDriverOpts = function (keyValueLogDriverOpts) {\n var options = {};\n if (keyValueLogDriverOpts) {\n keyValueLogDriverOpts.forEach(function (option) {\n if (option.key && option.key !== '' && option.value && option.value !== '') {\n options[option.key] = option.value;\n }\n });\n }\n return options;\n };\n\n helper.translateHostsEntriesToHostnameIP = function (entries) {\n var ipHostEntries = [];\n if (entries) {\n entries.forEach(function (entry) {\n if (entry.indexOf(' ') && entry.split(' ').length === 2) {\n var keyValue = entry.split(' ');\n ipHostEntries.push({ hostname: keyValue[1], ip: keyValue[0] });\n }\n });\n }\n return ipHostEntries;\n };\n\n helper.translateHostnameIPToHostsEntries = function (entries) {\n var ipHostEntries = [];\n if (entries) {\n entries.forEach(function (entry) {\n if (entry.ip && entry.hostname) {\n ipHostEntries.push(entry.ip + ' ' + entry.hostname);\n }\n });\n }\n return ipHostEntries;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('TaskHelper', [\n function TaskHelperFactory() {\n 'use strict';\n\n var helper = {};\n\n helper.associateContainerToTask = function (task, containers) {\n for (var i = 0; i < containers.length; i++) {\n var container = containers[i];\n if (task.ContainerId === container.Id) {\n task.Container = container;\n break;\n }\n }\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.docker').factory('VolumeHelper', [\n function VolumeHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.createDriverOptions = function (optionArray) {\n var options = {};\n optionArray.forEach(function (option) {\n options[option.name] = option.value;\n });\n return options;\n };\n\n helper.isVolumeUsedByAService = function (volume, services) {\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n var mounts = service.Mounts;\n for (var j = 0; j < mounts.length; j++) {\n var mount = mounts[j];\n if (mount.Source === volume.Id) {\n return true;\n }\n }\n }\n\n return false;\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('ContainersInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Containers;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('ImagesInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Images;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('InfoInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined && endpoint.Snapshots.length && endpoint.Snapshots[0].SnapshotRaw) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Info;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('NetworksInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Networks;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('VersionInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined && endpoint.Snapshots.length && endpoint.Snapshots[0].SnapshotRaw) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Version;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","angular.module('portainer.app').factory('VolumesInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.responseError = responseErrorInterceptor;\n\n function responseErrorInterceptor(rejection) {\n if (rejection.status === 502 || rejection.status === 503 || rejection.status === -1) {\n var endpoint = EndpointProvider.currentEndpoint();\n if (endpoint !== undefined) {\n var data = endpoint.Snapshots[0].SnapshotRaw.Volumes;\n if (data !== undefined) {\n return data;\n }\n }\n }\n return $q.reject(rejection);\n }\n return interceptor;\n },\n]);\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nfunction b64DecodeUnicode(str) {\n try {\n return decodeURIComponent(\n atob(str)\n .split('')\n .map(function (c) {\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);\n })\n .join('')\n );\n } catch (err) {\n return atob(str);\n }\n}\n\nexport function ConfigViewModel(data) {\n this.Id = data.ID;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Version = data.Version.Index;\n this.Name = data.Spec.Name;\n this.Labels = data.Spec.Labels;\n this.Data = b64DecodeUnicode(data.Spec.Data);\n\n if (data.Portainer && data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n}\n","import _ from 'lodash-es';\nimport { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function createStatus(statusText) {\n var status = _.toLower(statusText);\n\n if (status.indexOf('paused') > -1) {\n return 'paused';\n } else if (status.indexOf('dead') > -1) {\n return 'dead';\n } else if (status.indexOf('created') > -1) {\n return 'created';\n } else if (status.indexOf('exited') > -1) {\n return 'stopped';\n } else if (status.indexOf('(healthy)') > -1) {\n return 'healthy';\n } else if (status.indexOf('(unhealthy)') > -1) {\n return 'unhealthy';\n } else if (status.indexOf('(health: starting)') > -1) {\n return 'starting';\n }\n return 'running';\n}\n\nexport function ContainerViewModel(data) {\n this.Id = data.Id;\n this.Status = createStatus(data.Status);\n this.State = data.State;\n this.Created = data.Created;\n this.Names = data.Names;\n // Unavailable in Docker < 1.10\n if (data.NetworkSettings && !_.isEmpty(data.NetworkSettings.Networks)) {\n this.IP = data.NetworkSettings.Networks[Object.keys(data.NetworkSettings.Networks)[0]].IPAddress;\n }\n this.NetworkSettings = data.NetworkSettings;\n this.Image = data.Image;\n this.ImageID = data.ImageID;\n this.Command = data.Command;\n this.Checked = false;\n this.Labels = data.Labels;\n if (this.Labels && this.Labels['com.docker.compose.project']) {\n this.StackName = this.Labels['com.docker.compose.project'];\n } else if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n this.Mounts = data.Mounts;\n\n this.IsPortainer = data.IsPortainer;\n this.Ports = [];\n if (data.Ports) {\n for (var i = 0; i < data.Ports.length; ++i) {\n var p = data.Ports[i];\n if (p.PublicPort) {\n this.Ports.push({ host: p.IP, private: p.PrivatePort, public: p.PublicPort });\n }\n }\n }\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n if (data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n }\n}\n\nexport function ContainerStatsViewModel(data) {\n this.read = data.read;\n this.preread = data.preread;\n if (data.memory_stats.privateworkingset !== undefined) {\n // Windows\n this.MemoryUsage = data.memory_stats.privateworkingset;\n this.MemoryCache = 0;\n this.NumProcs = data.num_procs;\n this.isWindows = true;\n } else {\n // Linux\n if (data.memory_stats.stats === undefined || data.memory_stats.usage === undefined) {\n this.MemoryUsage = this.MemoryCache = 0;\n } else {\n this.MemoryCache = 0;\n if (data.memory_stats.stats.cache !== undefined) {\n // cgroups v1\n this.MemoryCache = data.memory_stats.stats.cache;\n }\n this.MemoryUsage = data.memory_stats.usage - this.MemoryCache;\n }\n }\n this.PreviousCPUTotalUsage = data.precpu_stats.cpu_usage.total_usage;\n this.PreviousCPUSystemUsage = data.precpu_stats.system_cpu_usage;\n this.CurrentCPUTotalUsage = data.cpu_stats.cpu_usage.total_usage;\n this.CurrentCPUSystemUsage = data.cpu_stats.system_cpu_usage;\n this.CPUCores = 1;\n if (data.cpu_stats.cpu_usage.percpu_usage) {\n this.CPUCores = data.cpu_stats.cpu_usage.percpu_usage.length;\n } else {\n if (data.cpu_stats.online_cpus !== undefined) {\n this.CPUCores = data.cpu_stats.online_cpus;\n }\n }\n this.Networks = _.values(data.networks);\n if (data.blkio_stats !== undefined && data.blkio_stats.io_service_bytes_recursive !== null) {\n //TODO: take care of multiple block devices\n var readData = data.blkio_stats.io_service_bytes_recursive.find((d) => d.op === 'Read');\n if (readData === undefined) {\n // try the cgroups v2 version\n readData = data.blkio_stats.io_service_bytes_recursive.find((d) => d.op === 'read');\n }\n if (readData !== undefined) {\n this.BytesRead = readData.value;\n }\n var writeData = data.blkio_stats.io_service_bytes_recursive.find((d) => d.op === 'Write');\n if (writeData === undefined) {\n // try the cgroups v2 version\n writeData = data.blkio_stats.io_service_bytes_recursive.find((d) => d.op === 'write');\n }\n if (writeData !== undefined) {\n this.BytesWrite = writeData.value;\n }\n } else {\n //no IO related data is available\n this.noIOdata = true;\n }\n}\n\nexport function ContainerDetailsViewModel(data) {\n this.Model = data;\n this.Id = data.Id;\n this.State = data.State;\n this.Created = data.Created;\n this.Name = data.Name;\n this.NetworkSettings = data.NetworkSettings;\n this.Args = data.Args;\n this.Image = data.Image;\n this.Config = data.Config;\n this.HostConfig = data.HostConfig;\n this.Mounts = data.Mounts;\n if (data.Portainer && data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n this.IsPortainer = data.IsPortainer;\n}\n","var capDesc = {\n SETPCAP: 'Modify process capabilities.',\n MKNOD: 'Create special files using mknod(2).',\n AUDIT_WRITE: 'Write records to kernel auditing log.',\n CHOWN: 'Make arbitrary changes to file UIDs and GIDs (see chown(2)).',\n NET_RAW: 'Use RAW and PACKET sockets.',\n DAC_OVERRIDE: 'Bypass file read, write, and execute permission checks.',\n FOWNER: 'Bypass permission checks on operations that normally require the file system UID of the process to match the UID of the file.',\n FSETID: 'Don’t clear set-user-ID and set-group-ID permission bits when a file is modified.',\n KILL: 'Bypass permission checks for sending signals.',\n SETGID: 'Make arbitrary manipulations of process GIDs and supplementary GID list.',\n SETUID: 'Make arbitrary manipulations of process UIDs.',\n NET_BIND_SERVICE: 'Bind a socket to internet domain privileged ports (port numbers less than 1024).',\n SYS_CHROOT: 'Use chroot(2), change root directory.',\n SETFCAP: 'Set file capabilities.',\n SYS_MODULE: 'Load and unload kernel modules.',\n SYS_RAWIO: 'Perform I/O port operations (iopl(2) and ioperm(2)).',\n SYS_PACCT: 'Use acct(2), switch process accounting on or off.',\n SYS_ADMIN: 'Perform a range of system administration operations.',\n SYS_NICE: 'Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes.',\n SYS_RESOURCE: 'Override resource Limits.',\n SYS_TIME: 'Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock.',\n SYS_TTY_CONFIG: 'Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals.',\n AUDIT_CONTROL: 'Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules.',\n MAC_ADMIN: 'Allow MAC configuration or state changes. Implemented for the Smack LSM.',\n MAC_OVERRIDE: 'Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM).',\n NET_ADMIN: 'Perform various network-related operations.',\n SYSLOG: 'Perform privileged syslog(2) operations.',\n DAC_READ_SEARCH: 'Bypass file read permission checks and directory read and execute permission checks.',\n LINUX_IMMUTABLE: 'Set the FS_APPEND_FL and FS_IMMUTABLE_FL i-node flags.',\n NET_BROADCAST: 'Make socket broadcasts, and listen to multicasts.',\n IPC_LOCK: 'Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)).',\n IPC_OWNER: 'Bypass permission checks for operations on System V IPC objects.',\n SYS_PTRACE: 'Trace arbitrary processes using ptrace(2).',\n SYS_BOOT: 'Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution.',\n LEASE: 'Establish leases on arbitrary files (see fcntl(2)).',\n WAKE_ALARM: 'Trigger something that will wake up the system.',\n BLOCK_SUSPEND: 'Employ features that can block system suspend.',\n};\n\nexport function ContainerCapabilities() {\n // all capabilities can be found at https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities\n return [\n new ContainerCapability('SETPCAP', true),\n new ContainerCapability('MKNOD', true),\n new ContainerCapability('AUDIT_WRITE', true),\n new ContainerCapability('CHOWN', true),\n new ContainerCapability('NET_RAW', true),\n new ContainerCapability('DAC_OVERRIDE', true),\n new ContainerCapability('FOWNER', true),\n new ContainerCapability('FSETID', true),\n new ContainerCapability('KILL', true),\n new ContainerCapability('SETGID', true),\n new ContainerCapability('SETUID', true),\n new ContainerCapability('NET_BIND_SERVICE', true),\n new ContainerCapability('SYS_CHROOT', true),\n new ContainerCapability('SETFCAP', true),\n new ContainerCapability('SYS_MODULE', false),\n new ContainerCapability('SYS_RAWIO', false),\n new ContainerCapability('SYS_PACCT', false),\n new ContainerCapability('SYS_ADMIN', false),\n new ContainerCapability('SYS_NICE', false),\n new ContainerCapability('SYS_RESOURCE', false),\n new ContainerCapability('SYS_TIME', false),\n new ContainerCapability('SYS_TTY_CONFIG', false),\n new ContainerCapability('AUDIT_CONTROL', false),\n new ContainerCapability('MAC_ADMIN', false),\n new ContainerCapability('MAC_OVERRIDE', false),\n new ContainerCapability('NET_ADMIN', false),\n new ContainerCapability('SYSLOG', false),\n new ContainerCapability('DAC_READ_SEARCH', false),\n new ContainerCapability('LINUX_IMMUTABLE', false),\n new ContainerCapability('NET_BROADCAST', false),\n new ContainerCapability('IPC_LOCK', false),\n new ContainerCapability('IPC_OWNER', false),\n new ContainerCapability('SYS_PTRACE', false),\n new ContainerCapability('SYS_BOOT', false),\n new ContainerCapability('LEASE', false),\n new ContainerCapability('WAKE_ALARM', false),\n new ContainerCapability('BLOCK_SUSPEND', false),\n ].sort(function (a, b) {\n return a.capability < b.capability ? -1 : 1;\n });\n}\n\nexport function ContainerCapability(cap, allowed) {\n this.capability = cap;\n this.allowed = allowed;\n this.description = capDesc[cap];\n}\n","function createEventDetails(event) {\n var eventAttr = event.Actor.Attributes;\n var details = '';\n\n var action = event.Action;\n var extra = '';\n var hasColon = action.indexOf(':');\n if (hasColon != -1) {\n extra = action.substring(hasColon);\n action = action.substring(0, hasColon);\n }\n\n switch (event.Type) {\n case 'container':\n switch (action) {\n case 'stop':\n details = 'Container ' + eventAttr.name + ' stopped';\n break;\n case 'destroy':\n details = 'Container ' + eventAttr.name + ' deleted';\n break;\n case 'create':\n details = 'Container ' + eventAttr.name + ' created';\n break;\n case 'start':\n details = 'Container ' + eventAttr.name + ' started';\n break;\n case 'kill':\n details = 'Container ' + eventAttr.name + ' killed';\n break;\n case 'die':\n details = 'Container ' + eventAttr.name + ' exited with status code ' + eventAttr.exitCode;\n break;\n case 'commit':\n details = 'Container ' + eventAttr.name + ' committed';\n break;\n case 'restart':\n details = 'Container ' + eventAttr.name + ' restarted';\n break;\n case 'pause':\n details = 'Container ' + eventAttr.name + ' paused';\n break;\n case 'unpause':\n details = 'Container ' + eventAttr.name + ' unpaused';\n break;\n case 'attach':\n details = 'Container ' + eventAttr.name + ' attached';\n break;\n case 'detach':\n details = 'Container ' + eventAttr.name + ' detached';\n break;\n case 'copy':\n details = 'Container ' + eventAttr.name + ' copied';\n break;\n case 'export':\n details = 'Container ' + eventAttr.name + ' exported';\n break;\n case 'health_status':\n details = 'Container ' + eventAttr.name + ' executed health status';\n break;\n case 'oom':\n details = 'Container ' + eventAttr.name + ' goes in out of memory';\n break;\n case 'rename':\n details = 'Container ' + eventAttr.name + ' renamed';\n break;\n case 'resize':\n details = 'Container ' + eventAttr.name + ' resized';\n break;\n case 'top':\n details = 'Showed running processes for container ' + eventAttr.name;\n break;\n case 'update':\n details = 'Container ' + eventAttr.name + ' updated';\n break;\n case 'exec_create':\n details = 'Exec instance created';\n break;\n case 'exec_start':\n details = 'Exec instance started';\n break;\n case 'exec_die':\n details = 'Exec instance exited';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n case 'image':\n switch (action) {\n case 'delete':\n details = 'Image deleted';\n break;\n case 'import':\n details = 'Image ' + event.Actor.ID + ' imported';\n break;\n case 'load':\n details = 'Image ' + event.Actor.ID + ' loaded';\n break;\n case 'tag':\n details = 'New tag created for ' + eventAttr.name;\n break;\n case 'untag':\n details = 'Image untagged';\n break;\n case 'save':\n details = 'Image ' + event.Actor.ID + ' saved';\n break;\n case 'pull':\n details = 'Image ' + event.Actor.ID + ' pulled';\n break;\n case 'push':\n details = 'Image ' + event.Actor.ID + ' pushed';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n case 'network':\n switch (action) {\n case 'create':\n details = 'Network ' + eventAttr.name + ' created';\n break;\n case 'destroy':\n details = 'Network ' + eventAttr.name + ' deleted';\n break;\n case 'remove':\n details = 'Network ' + eventAttr.name + ' removed';\n break;\n case 'connect':\n details = 'Container connected to ' + eventAttr.name + ' network';\n break;\n case 'disconnect':\n details = 'Container disconnected from ' + eventAttr.name + ' network';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n case 'volume':\n switch (action) {\n case 'create':\n details = 'Volume ' + event.Actor.ID + ' created';\n break;\n case 'destroy':\n details = 'Volume ' + event.Actor.ID + ' deleted';\n break;\n case 'mount':\n details = 'Volume ' + event.Actor.ID + ' mounted';\n break;\n case 'unmount':\n details = 'Volume ' + event.Actor.ID + ' unmounted';\n break;\n default:\n details = 'Unsupported event';\n }\n break;\n default:\n details = 'Unsupported event';\n }\n return details + extra;\n}\n\nexport function EventViewModel(data) {\n // Type, Action, Actor unavailable in Docker < 1.10\n this.Time = data.time;\n if (data.Type) {\n this.Type = data.Type;\n this.Details = createEventDetails(data);\n } else {\n this.Type = data.status;\n this.Details = data.from;\n }\n}\n","export function ImageViewModel(data) {\n this.Id = data.Id;\n this.Tag = data.Tag;\n this.Repository = data.Repository;\n this.Created = data.Created;\n this.Checked = false;\n this.RepoTags = data.RepoTags;\n if (!this.RepoTags && data.RepoDigests) {\n this.RepoTags = [];\n for (var i = 0; i < data.RepoDigests.length; i++) {\n var digest = data.RepoDigests[i];\n var repository = digest.substring(0, digest.indexOf('@'));\n this.RepoTags.push(repository + ':');\n }\n }\n\n this.VirtualSize = data.VirtualSize;\n this.ContainerCount = data.ContainerCount;\n\n if (data.Portainer && data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n this.Labels = data.Labels;\n}\n\nexport function ImageBuildModel(data) {\n this.hasError = false;\n var buildLogs = [];\n\n for (var i = 0; i < data.length; i++) {\n var line = data[i];\n\n if (line.stream) {\n line = line.stream.replace(/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '');\n buildLogs.push(line);\n }\n\n if (line.errorDetail) {\n buildLogs.push(line.errorDetail.message);\n this.hasError = true;\n }\n }\n\n this.buildLogs = buildLogs;\n}\n","export function ImageDetailsViewModel(data) {\n this.Id = data.Id;\n this.Tag = data.Tag;\n this.Parent = data.Parent;\n this.Repository = data.Repository;\n this.Created = data.Created;\n this.Checked = false;\n this.RepoTags = data.RepoTags;\n this.VirtualSize = data.VirtualSize;\n this.DockerVersion = data.DockerVersion;\n this.Os = data.Os;\n this.Architecture = data.Architecture;\n this.Author = data.Author;\n this.Command = data.Config.Cmd;\n this.Entrypoint = data.ContainerConfig.Entrypoint ? data.ContainerConfig.Entrypoint : '';\n this.ExposedPorts = data.ContainerConfig.ExposedPorts ? Object.keys(data.ContainerConfig.ExposedPorts) : [];\n this.Volumes = data.ContainerConfig.Volumes ? Object.keys(data.ContainerConfig.Volumes) : [];\n this.Env = data.ContainerConfig.Env ? data.ContainerConfig.Env : [];\n this.Labels = data.ContainerConfig.Labels;\n}\n","export function ImageLayerViewModel(order, data) {\n this.Order = order;\n this.Id = data.Id;\n this.Created = data.Created;\n this.CreatedBy = data.CreatedBy;\n this.Size = data.Size;\n this.Comment = data.Comment;\n this.Tags = data.Tags;\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function NetworkViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Scope = data.Scope;\n this.Driver = data.Driver;\n this.Attachable = data.Attachable;\n this.Internal = data.Internal;\n this.IPAM = data.IPAM;\n this.Containers = data.Containers;\n this.Options = data.Options;\n this.Ingress = data.Ingress;\n\n this.Labels = data.Labels;\n if (this.Labels && this.Labels['com.docker.compose.project']) {\n this.StackName = this.Labels['com.docker.compose.project'];\n } else if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n if (data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n }\n\n this.ConfigFrom = data.ConfigFrom;\n this.ConfigOnly = data.ConfigOnly;\n}\n","export function NodeViewModel(data) {\n this.Model = data;\n this.Id = data.ID;\n this.Version = data.Version.Index;\n this.Name = data.Spec.Name;\n this.Role = data.Spec.Role;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Availability = data.Spec.Availability;\n\n var labels = data.Spec.Labels;\n if (labels) {\n this.Labels = Object.keys(labels).map(function (key) {\n return { key: key, value: labels[key], originalKey: key, originalValue: labels[key], added: true };\n });\n } else {\n this.Labels = [];\n }\n\n var engineLabels = data.Description.Engine.Labels;\n if (engineLabels) {\n this.EngineLabels = Object.keys(engineLabels).map(function (key) {\n return { key: key, value: engineLabels[key] };\n });\n } else {\n this.EngineLabels = [];\n }\n\n this.Hostname = data.Description.Hostname;\n this.PlatformArchitecture = data.Description.Platform.Architecture;\n this.PlatformOS = data.Description.Platform.OS;\n this.CPUs = data.Description.Resources.NanoCPUs;\n this.Memory = data.Description.Resources.MemoryBytes;\n this.EngineVersion = data.Description.Engine.EngineVersion;\n this.Plugins = data.Description.Engine.Plugins;\n this.Status = data.Status.State;\n\n if (data.Status.Addr) {\n this.Addr = data.Status.Addr;\n }\n\n if (data.ManagerStatus) {\n this.Leader = data.ManagerStatus.Leader;\n this.Reachability = data.ManagerStatus.Reachability;\n this.ManagerAddr = data.ManagerStatus.Addr;\n }\n}\n","// This model is based on https://github.com/moby/moby/blob/0ac25dfc751fa4304ab45afd5cd8705c2235d101/api/types/plugin.go#L8-L31\n// instead of the official documentation.\n// See: https://github.com/moby/moby/issues/34241\nexport function PluginViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Enabled = data.Enabled;\n this.Config = data.Config;\n}\n","/**\n * This model should be used with por-image-registry component\n * And bound to the 'model' attribute\n *\n * // viewController.js\n *\n * this.imageModel = new PorImageRegistryModel();\n *\n * // view.html\n * \n */\nexport function PorImageRegistryModel() {\n this.UseRegistry = true;\n this.Registry = {};\n this.Image = '';\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function SecretViewModel(data) {\n this.Id = data.ID;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Version = data.Version.Index;\n this.Name = data.Spec.Name;\n this.Labels = data.Spec.Labels;\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n }\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function ServiceViewModel(data, runningTasks, allTasks) {\n this.Model = data;\n this.Id = data.ID;\n this.Tasks = [];\n this.Name = data.Spec.Name;\n this.CreatedAt = data.CreatedAt;\n this.UpdatedAt = data.UpdatedAt;\n this.Image = data.Spec.TaskTemplate.ContainerSpec.Image;\n this.Version = data.Version.Index;\n if (data.Spec.Mode.Replicated) {\n this.Mode = 'replicated';\n this.Replicas = data.Spec.Mode.Replicated.Replicas;\n } else {\n this.Mode = 'global';\n if (allTasks) {\n this.Replicas = allTasks.length;\n }\n }\n if (runningTasks) {\n this.Running = runningTasks.length;\n }\n if (data.Spec.TaskTemplate.Resources) {\n if (data.Spec.TaskTemplate.Resources.Limits) {\n this.LimitNanoCPUs = data.Spec.TaskTemplate.Resources.Limits.NanoCPUs;\n this.LimitMemoryBytes = data.Spec.TaskTemplate.Resources.Limits.MemoryBytes;\n }\n if (data.Spec.TaskTemplate.Resources.Reservations) {\n this.ReservationNanoCPUs = data.Spec.TaskTemplate.Resources.Reservations.NanoCPUs;\n this.ReservationMemoryBytes = data.Spec.TaskTemplate.Resources.Reservations.MemoryBytes;\n }\n }\n\n if (data.Spec.TaskTemplate.RestartPolicy) {\n this.RestartCondition = data.Spec.TaskTemplate.RestartPolicy.Condition || 'any';\n this.RestartDelay = data.Spec.TaskTemplate.RestartPolicy.Delay || 5000000000;\n this.RestartMaxAttempts = data.Spec.TaskTemplate.RestartPolicy.MaxAttempts || 0;\n this.RestartWindow = data.Spec.TaskTemplate.RestartPolicy.Window || 0;\n } else {\n this.RestartCondition = 'any';\n this.RestartDelay = 5000000000;\n this.RestartMaxAttempts = 0;\n this.RestartWindow = 0;\n }\n\n if (data.Spec.TaskTemplate.LogDriver) {\n this.LogDriverName = data.Spec.TaskTemplate.LogDriver.Name || '';\n this.LogDriverOpts = data.Spec.TaskTemplate.LogDriver.Options || [];\n } else {\n this.LogDriverName = '';\n this.LogDriverOpts = [];\n }\n\n this.Constraints = data.Spec.TaskTemplate.Placement ? data.Spec.TaskTemplate.Placement.Constraints || [] : [];\n this.Preferences = data.Spec.TaskTemplate.Placement ? data.Spec.TaskTemplate.Placement.Preferences || [] : [];\n this.Platforms = data.Spec.TaskTemplate.Placement ? data.Spec.TaskTemplate.Placement.Platforms || [] : [];\n this.Labels = data.Spec.Labels;\n if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n\n var containerSpec = data.Spec.TaskTemplate.ContainerSpec;\n if (containerSpec) {\n this.ContainerLabels = containerSpec.Labels;\n this.Command = containerSpec.Command;\n this.Arguments = containerSpec.Args;\n this.Hostname = containerSpec.Hostname;\n this.Env = containerSpec.Env;\n this.Dir = containerSpec.Dir;\n this.User = containerSpec.User;\n this.Groups = containerSpec.Groups;\n this.TTY = containerSpec.TTY;\n this.OpenStdin = containerSpec.OpenStdin;\n this.ReadOnly = containerSpec.ReadOnly;\n this.Mounts = containerSpec.Mounts || [];\n this.StopSignal = containerSpec.StopSignal;\n this.StopGracePeriod = containerSpec.StopGracePeriod;\n this.HealthCheck = containerSpec.HealthCheck || {};\n this.Hosts = containerSpec.Hosts;\n this.DNSConfig = containerSpec.DNSConfig;\n this.Secrets = containerSpec.Secrets;\n this.Configs = containerSpec.Configs;\n }\n if (data.Endpoint) {\n this.Ports = data.Endpoint.Ports;\n }\n\n this.LogDriver = data.Spec.TaskTemplate.LogDriver;\n this.Runtime = data.Spec.TaskTemplate.Runtime;\n\n this.VirtualIPs = data.Endpoint ? data.Endpoint.VirtualIPs : [];\n\n if (data.Spec.UpdateConfig) {\n this.UpdateParallelism = typeof data.Spec.UpdateConfig.Parallelism !== undefined ? data.Spec.UpdateConfig.Parallelism || 0 : 1;\n this.UpdateDelay = data.Spec.UpdateConfig.Delay || 0;\n this.UpdateFailureAction = data.Spec.UpdateConfig.FailureAction || 'pause';\n this.UpdateOrder = data.Spec.UpdateConfig.Order || 'stop-first';\n } else {\n this.UpdateParallelism = 1;\n this.UpdateDelay = 0;\n this.UpdateFailureAction = 'pause';\n this.UpdateOrder = 'stop-first';\n }\n\n this.RollbackConfig = data.Spec.RollbackConfig;\n\n this.Checked = false;\n this.Scale = false;\n this.EditName = false;\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n }\n}\n","export function SwarmViewModel(data) {\n this.Id = data.ID;\n}\n","export function TaskViewModel(data) {\n this.Id = data.ID;\n this.Created = data.CreatedAt;\n this.Updated = data.UpdatedAt;\n this.Slot = data.Slot;\n this.Spec = data.Spec;\n this.Status = data.Status;\n this.DesiredState = data.DesiredState;\n this.ServiceId = data.ServiceID;\n this.NodeId = data.NodeID;\n if (data.Status && data.Status.ContainerStatus && data.Status.ContainerStatus.ContainerID) {\n this.ContainerId = data.Status.ContainerStatus.ContainerID;\n }\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function VolumeViewModel(data) {\n this.Id = data.Name;\n this.CreatedAt = data.CreatedAt;\n this.Driver = data.Driver;\n this.Options = data.Options;\n this.Labels = data.Labels;\n if (this.Labels && this.Labels['com.docker.compose.project']) {\n this.StackName = this.Labels['com.docker.compose.project'];\n } else if (this.Labels && this.Labels['com.docker.stack.namespace']) {\n this.StackName = this.Labels['com.docker.stack.namespace'];\n }\n this.Mountpoint = data.Mountpoint;\n\n this.ResourceId = data.ResourceID;\n\n if (data.Portainer) {\n if (data.Portainer.ResourceControl) {\n this.ResourceControl = new ResourceControlViewModel(data.Portainer.ResourceControl);\n }\n if (data.Portainer.Agent && data.Portainer.Agent.NodeName) {\n this.NodeName = data.Portainer.Agent.NodeName;\n }\n }\n}\n","import { jsonObjectsToArrayHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Build', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function BuildFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/build',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n buildImage: {\n method: 'POST',\n ignoreLoadingBar: true,\n transformResponse: jsonObjectsToArrayHandler,\n isArray: true,\n headers: { 'Content-Type': 'application/x-tar' },\n },\n buildImageOverride: {\n method: 'POST',\n ignoreLoadingBar: true,\n transformResponse: jsonObjectsToArrayHandler,\n isArray: true,\n },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Commit', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function CommitFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/commit',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n commitContainer: { method: 'POST', params: { container: '@id', repo: '@repo' }, ignoreLoadingBar: true },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Config', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ConfigFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/configs/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true },\n create: { method: 'POST', params: { action: 'create' }, ignoreLoadingBar: true },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","import { genericHandler, logsHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Container', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'ContainersInterceptor',\n function ContainerFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, ContainersInterceptor) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/containers/:id/:action',\n {\n name: '@name',\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: {\n method: 'GET',\n params: { all: 0, action: 'json', filters: '@filters' },\n isArray: true,\n interceptor: ContainersInterceptor,\n },\n get: {\n method: 'GET',\n params: { action: 'json' },\n },\n logs: {\n method: 'GET',\n params: { id: '@id', action: 'logs' },\n ignoreLoadingBar: true,\n transformResponse: logsHandler,\n },\n stats: {\n method: 'GET',\n params: { id: '@id', stream: false, action: 'stats' },\n ignoreLoadingBar: true,\n },\n top: {\n method: 'GET',\n params: { id: '@id', action: 'top' },\n ignoreLoadingBar: true,\n },\n create: {\n method: 'POST',\n params: { action: 'create' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n exec: {\n method: 'POST',\n params: { id: '@id', action: 'exec' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n inspect: {\n method: 'GET',\n params: { id: '@id', action: 'json' },\n },\n update: {\n method: 'POST',\n params: { id: '@id', action: 'update' },\n },\n prune: {\n method: 'POST',\n params: { action: 'prune', filters: '@filters' },\n },\n resize: {\n method: 'POST',\n params: { id: '@id', action: 'resize', h: '@height', w: '@width' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n }\n );\n },\n]);\n","import { genericHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Exec', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function ExecFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/exec/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n resize: {\n method: 'POST',\n params: { id: '@id', action: 'resize', h: '@height', w: '@width' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n }\n );\n },\n]);\n","import { deleteImageHandler, jsonObjectsToArrayHandler } from './response/handlers';\nimport { imageGetResponse } from './response/image';\n\nangular.module('portainer.docker').factory('Image', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'HttpRequestHelper',\n 'ImagesInterceptor',\n function ImageFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, HttpRequestHelper, ImagesInterceptor) {\n 'use strict';\n\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/images/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', params: { all: 0, action: 'json' }, isArray: true, interceptor: ImagesInterceptor },\n get: { method: 'GET', params: { action: 'json' } },\n search: { method: 'GET', params: { action: 'search' } },\n history: { method: 'GET', params: { action: 'history' }, isArray: true },\n insert: { method: 'POST', params: { id: '@id', action: 'insert' } },\n tag: { method: 'POST', params: { id: '@id', action: 'tag', force: 0, repo: '@repo' }, ignoreLoadingBar: true },\n inspect: { method: 'GET', params: { id: '@id', action: 'json' } },\n push: {\n method: 'POST',\n params: { action: 'push', id: '@imageName' },\n isArray: true,\n transformResponse: jsonObjectsToArrayHandler,\n headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },\n ignoreLoadingBar: true,\n },\n create: {\n method: 'POST',\n params: { action: 'create', fromImage: '@fromImage' },\n isArray: true,\n transformResponse: jsonObjectsToArrayHandler,\n headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },\n ignoreLoadingBar: true,\n },\n download: {\n method: 'GET',\n params: { action: 'get', names: '@names' },\n transformResponse: imageGetResponse,\n responseType: 'blob',\n ignoreLoadingBar: true,\n },\n remove: {\n method: 'DELETE',\n params: { id: '@id', force: '@force' },\n isArray: true,\n transformResponse: deleteImageHandler,\n },\n }\n );\n },\n]);\n","import { genericHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Network', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'NetworksInterceptor',\n function NetworkFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, NetworksInterceptor) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/networks/:id/:action',\n {\n id: '@id',\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: {\n method: 'GET',\n isArray: true,\n interceptor: NetworksInterceptor,\n },\n get: {\n method: 'GET',\n },\n create: {\n method: 'POST',\n params: { action: 'create' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n },\n remove: {\n method: 'DELETE',\n transformResponse: genericHandler,\n },\n connect: {\n method: 'POST',\n params: { action: 'connect' },\n },\n disconnect: {\n method: 'POST',\n params: { action: 'disconnect' },\n },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Node', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function NodeFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/nodes/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'POST', params: { id: '@id', action: 'update', version: '@version' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Plugin', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function PluginFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/plugins/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', isArray: true },\n }\n );\n },\n]);\n","function isJSONArray(jsonString) {\n return Object.prototype.toString.call(jsonString) === '[object Array]';\n}\n\nfunction isJSON(jsonString) {\n try {\n var o = JSON.parse(jsonString);\n if (o && typeof o === 'object') {\n return o;\n }\n } catch (e) {\n //empty\n }\n return false;\n}\n\n// The Docker API often returns a list of JSON object.\n// This handler wrap the JSON objects in an array.\n// Used by the API in: Image push, Image create, Events query.\nexport function jsonObjectsToArrayHandler(data) {\n // catching empty data helps the function not to fail and prevents unwanted error message to user.\n if (!data) {\n return [];\n }\n var str = '[' + data.replace(/\\n/g, ' ').replace(/\\}\\s*\\{/g, '}, {') + ']';\n return angular.fromJson(str);\n}\n\n// The Docker API often returns an empty string or a valid JSON object on success (Docker 1.9 -> Docker 1.12).\n// On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message\n// container the error (Docker = 1.12)\n// This handler ensure a valid JSON object is returned in any case.\n// Used by the API in: container deletion, network deletion, network creation, volume creation,\n// container exec, exec resize.\nexport function genericHandler(data) {\n var response = {};\n // No data is returned when deletion is successful (Docker 1.9 -> 1.12)\n if (!data) {\n return response;\n }\n // A string is returned on failure (Docker < 1.12)\n else if (!isJSON(data)) {\n response.message = data;\n }\n // Docker 1.12 returns a valid JSON object when an error occurs\n else {\n response = angular.fromJson(data);\n }\n return response;\n}\n\n// The Docker API returns the logs as a single string.\n// This handler wraps the data in a JSON object under the \"logs\" property.\nexport function logsHandler(data) {\n return {\n logs: data,\n };\n}\n\n// Image delete API returns an array on success (Docker 1.9 -> Docker 1.12).\n// On error, it returns either an error message as a string (Docker < 1.12) or a JSON object with the field message\n// container the error (Docker = 1.12).\n// This handler returns the original array on success or a newly created array containing\n// only one JSON object with the field message filled with the error message on failure.\nexport function deleteImageHandler(data) {\n // A string is returned on failure (Docker < 1.12)\n var response = [];\n if (!isJSON(data)) {\n response.push({ message: data });\n }\n // A JSON object is returned on failure (Docker = 1.12)\n else if (!isJSONArray(data)) {\n var json = angular.fromJson(data);\n response.push(json);\n }\n // An array is returned on success (Docker 1.9 -> 1.12)\n else {\n response = angular.fromJson(data);\n }\n return response;\n}\n","// The get action of the Image service returns a file.\n// ngResource will transform it as an array of chars.\n// This functions simply creates a response object and assign\n// the data to a field.\nexport function imageGetResponse(data) {\n var response = {};\n response.file = data;\n return response;\n}\n","angular.module('portainer.docker').factory('Secret', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function SecretFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/secrets/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true },\n create: { method: 'POST', params: { action: 'create' }, ignoreLoadingBar: true },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","import { logsHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Service', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'HttpRequestHelper',\n function ServiceFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, HttpRequestHelper) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/services/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true, params: { filters: '@filters' } },\n create: {\n method: 'POST',\n params: { action: 'create' },\n headers: {\n 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader,\n version: '1.29',\n },\n ignoreLoadingBar: true,\n },\n update: {\n method: 'POST',\n params: { id: '@id', action: 'update', version: '@version', rollback: '@rollback' },\n headers: {\n version: '1.29',\n },\n },\n remove: { method: 'DELETE', params: { id: '@id' } },\n logs: {\n method: 'GET',\n params: { id: '@id', action: 'logs' },\n ignoreLoadingBar: true,\n transformResponse: logsHandler,\n },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('Swarm', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function SwarmFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/swarm',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET' },\n }\n );\n },\n]);\n","import { jsonObjectsToArrayHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('System', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'InfoInterceptor',\n 'VersionInterceptor',\n function SystemFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, InfoInterceptor, VersionInterceptor) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/:action/:subAction',\n {\n name: '@name',\n endpointId: EndpointProvider.endpointID,\n },\n {\n info: {\n method: 'GET',\n params: { action: 'info' },\n interceptor: InfoInterceptor,\n },\n version: { method: 'GET', params: { action: 'version' }, interceptor: VersionInterceptor },\n events: {\n method: 'GET',\n params: { action: 'events', since: '@since', until: '@until' },\n isArray: true,\n transformResponse: jsonObjectsToArrayHandler,\n },\n auth: { method: 'POST', params: { action: 'auth' } },\n dataUsage: { method: 'GET', params: { action: 'system', subAction: 'df' } },\n }\n );\n },\n]);\n","angular.module('portainer.docker').factory('SystemEndpoint', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n function SystemEndpointFactory($resource, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/:action/:subAction',\n {\n name: '@name',\n },\n {\n ping: {\n method: 'GET',\n params: { action: '_ping', endpointId: '@endpointId' },\n },\n }\n );\n },\n]);\n","import { logsHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Task', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function TaskFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/tasks/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true, params: { filters: '@filters' } },\n logs: {\n method: 'GET',\n params: { id: '@id', action: 'logs' },\n ignoreLoadingBar: true,\n transformResponse: logsHandler,\n },\n }\n );\n },\n]);\n","import { genericHandler } from './response/handlers';\n\nangular.module('portainer.docker').factory('Volume', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n 'VolumesInterceptor',\n function VolumeFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, VolumesInterceptor) {\n 'use strict';\n\n function addVolumeNameToHeader(config) {\n return config.data.Name || '';\n }\n\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:endpointId/docker/volumes/:id/:action',\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n query: { method: 'GET', interceptor: VolumesInterceptor },\n get: { method: 'GET', params: { id: '@id' } },\n create: {\n method: 'POST',\n params: { action: 'create' },\n transformResponse: genericHandler,\n ignoreLoadingBar: true,\n headers: { 'X-Portainer-VolumeName': addVolumeNameToHeader },\n },\n remove: {\n method: 'DELETE',\n transformResponse: genericHandler,\n params: { id: '@id' },\n },\n }\n );\n },\n]);\n","import { ImageBuildModel } from '../models/image';\n\nangular.module('portainer.docker').factory('BuildService', [\n '$q',\n 'Build',\n 'FileUploadService',\n function BuildServiceFactory($q, Build, FileUploadService) {\n 'use strict';\n var service = {};\n\n service.buildImageFromUpload = function (names, file, path) {\n var deferred = $q.defer();\n\n FileUploadService.buildImage(names, file, path)\n .then(function success(response) {\n var model = new ImageBuildModel(response.data);\n deferred.resolve(model);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.buildImageFromURL = function (names, url, path) {\n var params = {\n t: names,\n remote: url,\n dockerfile: path,\n };\n\n var deferred = $q.defer();\n\n Build.buildImage(params, {})\n .$promise.then(function success(data) {\n var model = new ImageBuildModel(data);\n deferred.resolve(model);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.buildImageFromDockerfileContent = function (names, content) {\n var params = {\n t: names,\n };\n var payload = {\n content: content,\n };\n\n var deferred = $q.defer();\n\n Build.buildImageOverride(params, payload)\n .$promise.then(function success(data) {\n var model = new ImageBuildModel(data);\n deferred.resolve(model);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { ConfigViewModel } from '../models/config';\n\nangular.module('portainer.docker').factory('ConfigService', [\n '$q',\n 'Config',\n function ConfigServiceFactory($q, Config) {\n 'use strict';\n var service = {};\n\n service.config = function (configId) {\n var deferred = $q.defer();\n\n Config.get({ id: configId })\n .$promise.then(function success(data) {\n var config = new ConfigViewModel(data);\n deferred.resolve(config);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve config details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.configs = function () {\n var deferred = $q.defer();\n\n Config.query({})\n .$promise.then(function success(data) {\n var configs = data.map(function (item) {\n return new ConfigViewModel(item);\n });\n deferred.resolve(configs);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve configs', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (configId) {\n var deferred = $q.defer();\n\n Config.remove({ id: configId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove config', err: err });\n });\n\n return deferred.promise;\n };\n\n service.create = function (config) {\n return Config.create(config).$promise;\n };\n\n return service;\n },\n]);\n","import angular from 'angular';\nimport {\n killContainer,\n pauseContainer,\n removeContainer,\n renameContainer,\n restartContainer,\n resumeContainer,\n startContainer,\n stopContainer,\n} from '@/docker/containers/containers.service';\nimport { ContainerDetailsViewModel, ContainerStatsViewModel, ContainerViewModel } from '../models/container';\n\nangular.module('portainer.docker').factory('ContainerService', ContainerServiceFactory);\n\n/* @ngInject */\nfunction ContainerServiceFactory($q, Container, LogHelper, $timeout, EndpointProvider) {\n const service = {\n killContainer: withEndpointId(killContainer),\n pauseContainer: withEndpointId(pauseContainer),\n renameContainer: withEndpointId(renameContainer),\n restartContainer: withEndpointId(restartContainer),\n resumeContainer: withEndpointId(resumeContainer),\n startContainer: withEndpointId(startContainer),\n stopContainer: withEndpointId(stopContainer),\n remove: withEndpointId(removeContainer),\n updateLimits,\n };\n\n service.container = function (id) {\n var deferred = $q.defer();\n\n Container.get({ id: id })\n .$promise.then(function success(data) {\n var container = new ContainerDetailsViewModel(data);\n deferred.resolve(container);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve container information', err: err });\n });\n\n return deferred.promise;\n };\n\n service.containers = function (all, filters) {\n var deferred = $q.defer();\n Container.query({ all: all, filters: filters })\n .$promise.then(function success(data) {\n var containers = data.map(function (item) {\n return new ContainerViewModel(item);\n });\n deferred.resolve(containers);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve containers', err: err });\n });\n\n return deferred.promise;\n };\n\n service.resizeTTY = function (id, width, height, timeout) {\n var deferred = $q.defer();\n\n $timeout(function () {\n Container.resize({}, { id: id, height: height, width: width })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: 'Unable to resize tty of container ' + id, err: data.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to resize tty of container ' + id, err: err });\n });\n }, timeout);\n\n return deferred.promise;\n };\n\n service.updateRestartPolicy = updateRestartPolicy;\n\n function updateRestartPolicy(id, restartPolicy, maximumRetryCounts) {\n return Container.update({ id: id }, { RestartPolicy: { Name: restartPolicy, MaximumRetryCount: maximumRetryCounts } }).$promise;\n }\n\n function updateLimits(id, config) {\n return Container.update(\n { id: id },\n {\n // MemorySwap: must be set\n // -1: non limits, 0: treated as unset(cause update error).\n MemoryReservation: config.HostConfig.MemoryReservation,\n Memory: config.HostConfig.Memory,\n MemorySwap: -1,\n NanoCpus: config.HostConfig.NanoCpus,\n }\n ).$promise;\n }\n\n service.createContainer = function (configuration) {\n var deferred = $q.defer();\n Container.create(configuration)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create container', err: err });\n });\n return deferred.promise;\n };\n\n service.createAndStartContainer = function (configuration) {\n var deferred = $q.defer();\n var container;\n service\n .createContainer(configuration)\n .then(function success(data) {\n container = data;\n return service.startContainer(container.Id);\n })\n .then(function success() {\n deferred.resolve(container);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n return deferred.promise;\n };\n\n service.createExec = function (execConfig) {\n var deferred = $q.defer();\n\n Container.exec({}, execConfig)\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.logs = function (id, stdout, stderr, timestamps, since, tail, stripHeaders) {\n var deferred = $q.defer();\n\n var parameters = {\n id: id,\n stdout: stdout || 0,\n stderr: stderr || 0,\n timestamps: timestamps || 0,\n since: since || 0,\n tail: tail || 'all',\n };\n\n Container.logs(parameters)\n .$promise.then(function success(data) {\n var logs = LogHelper.formatLogs(data.logs, stripHeaders);\n deferred.resolve(logs);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.containerStats = function (id) {\n var deferred = $q.defer();\n\n Container.stats({ id: id })\n .$promise.then(function success(data) {\n var containerStats = new ContainerStatsViewModel(data);\n deferred.resolve(containerStats);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n service.containerTop = function (id) {\n return Container.top({ id: id }).$promise;\n };\n\n service.inspect = function (id) {\n return Container.inspect({ id: id }).$promise;\n };\n\n service.prune = function (filters) {\n return Container.prune({ filters: filters }).$promise;\n };\n\n return service;\n\n function withEndpointId(func) {\n return function (...args) {\n const endpointId = EndpointProvider.endpointID();\n\n return func(endpointId, ...args);\n };\n }\n}\n","angular.module('portainer.docker').factory('ExecService', [\n '$q',\n '$timeout',\n 'Exec',\n function ExecServiceFactory($q, $timeout, Exec) {\n 'use strict';\n var service = {};\n\n service.resizeTTY = function (execId, width, height, timeout) {\n var deferred = $q.defer();\n\n $timeout(function () {\n Exec.resize({}, { id: execId, height: height, width: width })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: 'Unable to resize tty of exec', err: data.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to resize tty of exec', err: err });\n });\n }, timeout);\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { ImageViewModel } from '../models/image';\nimport { ImageDetailsViewModel } from '../models/imageDetails';\nimport { ImageLayerViewModel } from '../models/imageLayer';\n\nangular.module('portainer.docker').factory('ImageService', [\n '$q',\n 'Image',\n 'ImageHelper',\n 'RegistryService',\n 'HttpRequestHelper',\n 'ContainerService',\n 'FileUploadService',\n function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, ContainerService, FileUploadService) {\n 'use strict';\n var service = {};\n\n service.image = function (imageId) {\n var deferred = $q.defer();\n Image.get({ id: imageId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n var image = new ImageDetailsViewModel(data);\n deferred.resolve(image);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve image details', err: err });\n });\n return deferred.promise;\n };\n\n service.images = function (withUsage) {\n var deferred = $q.defer();\n\n $q.all({\n containers: withUsage ? ContainerService.containers(1) : [],\n images: Image.query({}).$promise,\n })\n .then(function success(data) {\n var containers = data.containers;\n\n var images = data.images.map(function (item) {\n item.ContainerCount = 0;\n for (var i = 0; i < containers.length; i++) {\n var container = containers[i];\n if (container.ImageID === item.Id) {\n item.ContainerCount++;\n }\n }\n return new ImageViewModel(item);\n });\n\n deferred.resolve(images);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve images', err: err });\n });\n return deferred.promise;\n };\n\n service.history = function (imageId) {\n var deferred = $q.defer();\n Image.history({ id: imageId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n var layers = [];\n var order = data.length;\n angular.forEach(data, function (imageLayer) {\n layers.push(new ImageLayerViewModel(order, imageLayer));\n order--;\n });\n deferred.resolve(layers);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve image details', err: err });\n });\n return deferred.promise;\n };\n\n service.pushImage = pushImage;\n /**\n *\n * @param {PorImageRegistryModel} registryModel\n */\n function pushImage(registryModel) {\n var deferred = $q.defer();\n\n var authenticationDetails = registryModel.Registry.Authentication ? RegistryService.encodedCredentials(registryModel.Registry) : '';\n HttpRequestHelper.setRegistryAuthenticationHeader(authenticationDetails);\n\n const imageConfiguration = ImageHelper.createImageConfigForContainer(registryModel);\n\n Image.push({ imageName: imageConfiguration.fromImage })\n .$promise.then(function success(data) {\n if (data[data.length - 1].error) {\n deferred.reject({ msg: data[data.length - 1].error });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to push image tag', err: err });\n });\n return deferred.promise;\n }\n\n /**\n * PULL IMAGE\n */\n\n function pullImageAndIgnoreErrors(imageConfiguration) {\n var deferred = $q.defer();\n\n Image.create({}, imageConfiguration)\n .$promise.catch(() => {\n // left empty to ignore errors\n })\n .finally(function final() {\n deferred.resolve();\n });\n\n return deferred.promise;\n }\n\n function pullImageAndAcknowledgeErrors(imageConfiguration) {\n var deferred = $q.defer();\n\n Image.create({}, imageConfiguration)\n .$promise.then(function success(data) {\n var err = data.length > 0 && data[data.length - 1].message;\n if (err) {\n var detail = data[data.length - 1];\n deferred.reject({ msg: detail.message });\n } else {\n deferred.resolve(data);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to pull image', err: err });\n });\n\n return deferred.promise;\n }\n\n service.pullImage = pullImage;\n\n /**\n *\n * @param {PorImageRegistryModel} registry\n * @param {bool} ignoreErrors\n */\n function pullImage(registry, ignoreErrors) {\n var authenticationDetails = registry.Registry.Authentication ? RegistryService.encodedCredentials(registry.Registry) : '';\n HttpRequestHelper.setRegistryAuthenticationHeader(authenticationDetails);\n\n var imageConfiguration = ImageHelper.createImageConfigForContainer(registry);\n\n if (ignoreErrors) {\n return pullImageAndIgnoreErrors(imageConfiguration);\n }\n return pullImageAndAcknowledgeErrors(imageConfiguration);\n }\n\n /**\n * ! PULL IMAGE\n */\n\n service.tagImage = function (id, image) {\n return Image.tag({ id: id, repo: image }).$promise;\n };\n\n service.downloadImages = function (images) {\n var names = ImageHelper.getImagesNamesForDownload(images);\n return Image.download(names).$promise;\n };\n\n service.uploadImage = function (file) {\n return FileUploadService.loadImages(file);\n };\n\n service.deleteImage = function (id, forceRemoval) {\n var deferred = $q.defer();\n Image.remove({ id: id, force: forceRemoval })\n .$promise.then(function success(data) {\n if (data[0].message) {\n deferred.reject({ msg: data[0].message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove image', err: err });\n });\n return deferred.promise;\n };\n\n service.getUniqueTagListFromImages = function (availableImages) {\n return _.uniq(\n _.flatMap(availableImages, function (image) {\n _.remove(image.RepoTags, function (item) {\n return item.indexOf('') !== -1;\n });\n return image.RepoTags ? _.uniqWith(image.RepoTags, _.isEqual) : [];\n })\n );\n };\n\n return service;\n },\n]);\n","import { NetworkViewModel } from '../models/network';\n\nangular.module('portainer.docker').factory('NetworkService', [\n '$q',\n 'Network',\n function NetworkServiceFactory($q, Network) {\n 'use strict';\n var service = {};\n\n service.create = function (networkConfiguration) {\n var deferred = $q.defer();\n\n Network.create(networkConfiguration)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create network', err: err });\n });\n return deferred.promise;\n };\n\n service.network = function (id) {\n var deferred = $q.defer();\n\n Network.get({ id: id })\n .$promise.then(function success(data) {\n var network = new NetworkViewModel(data);\n deferred.resolve(network);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve network details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.networks = function (localNetworks, swarmNetworks, swarmAttachableNetworks, filters) {\n var deferred = $q.defer();\n\n Network.query({ filters: filters })\n .$promise.then(function success(data) {\n var networks = data;\n var filteredNetworks = networks\n .filter(function (network) {\n if (localNetworks && network.Scope === 'local') {\n return network;\n }\n if (swarmNetworks && network.Scope === 'swarm') {\n return network;\n }\n if (swarmAttachableNetworks && network.Scope === 'swarm' && network.Attachable === true) {\n return network;\n }\n })\n .map(function (item) {\n return new NetworkViewModel(item);\n });\n\n deferred.resolve(filteredNetworks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve networks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (id) {\n return Network.remove({ id: id }).$promise;\n };\n\n service.disconnectContainer = function (networkId, containerId, force) {\n return Network.disconnect({ id: networkId }, { Container: containerId, Force: force }).$promise;\n };\n\n service.connectContainer = function (networkId, containerId, aliases) {\n var payload = {\n Container: containerId,\n };\n if (aliases) {\n payload.EndpointConfig = {\n Aliases: aliases,\n };\n }\n return Network.connect({ id: networkId }, payload).$promise;\n };\n\n return service;\n },\n]);\n","import { NodeViewModel } from '../models/node';\n\nangular.module('portainer.docker').factory('NodeService', [\n '$q',\n 'Node',\n function NodeServiceFactory($q, Node) {\n 'use strict';\n var service = {};\n\n service.nodes = nodes;\n service.node = node;\n service.updateNode = updateNode;\n service.getActiveManager = getActiveManager;\n\n function node(id) {\n var deferred = $q.defer();\n Node.get({ id: id })\n .$promise.then(function onNodeLoaded(rawNode) {\n var node = new NodeViewModel(rawNode);\n return deferred.resolve(node);\n })\n .catch(function onFailed(err) {\n deferred.reject({ msg: 'Unable to retrieve node', err: err });\n });\n\n return deferred.promise;\n }\n\n function nodes() {\n var deferred = $q.defer();\n\n Node.query({})\n .$promise.then(function success(data) {\n var nodes = data.map(function (item) {\n return new NodeViewModel(item);\n });\n deferred.resolve(nodes);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve nodes', err: err });\n });\n\n return deferred.promise;\n }\n\n function updateNode(node) {\n return Node.update({ id: node.Id, version: node.Version }, node).$promise;\n }\n\n function getActiveManager() {\n var deferred = $q.defer();\n\n service\n .nodes()\n .then(function success(data) {\n for (var i = 0; i < data.length; ++i) {\n var node = data[i];\n if (node.Role === 'manager' && node.Availability === 'active' && node.Status === 'ready' && node.Addr !== '0.0.0.0') {\n deferred.resolve(node);\n break;\n }\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve nodes', err: err });\n });\n\n return deferred.promise;\n }\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { PluginViewModel } from '../models/plugin';\n\nangular.module('portainer.docker').factory('PluginService', [\n '$q',\n 'Plugin',\n 'SystemService',\n function PluginServiceFactory($q, Plugin, SystemService) {\n 'use strict';\n var service = {};\n\n service.plugins = function () {\n var deferred = $q.defer();\n var plugins = [];\n\n Plugin.query({})\n .$promise.then(function success(data) {\n for (var i = 0; i < data.length; i++) {\n var plugin = new PluginViewModel(data[i]);\n plugins.push(plugin);\n }\n })\n .finally(function final() {\n deferred.resolve(plugins);\n });\n\n return deferred.promise;\n };\n\n function servicePlugins(systemOnly, pluginType, pluginVersion) {\n var deferred = $q.defer();\n\n $q.all({\n system: SystemService.plugins(),\n plugins: systemOnly ? [] : service.plugins(),\n })\n .then(function success(data) {\n var aggregatedPlugins = [];\n var systemPlugins = data.system;\n var plugins = data.plugins;\n\n if (systemPlugins[pluginType]) {\n aggregatedPlugins = aggregatedPlugins.concat(systemPlugins[pluginType]);\n }\n\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i];\n if (plugin.Enabled && _.includes(plugin.Config.Interface.Types, pluginVersion)) {\n aggregatedPlugins.push(plugin.Name);\n }\n }\n\n deferred.resolve(aggregatedPlugins);\n })\n .catch(function error(err) {\n deferred.reject({ msg: err.msg, err: err });\n });\n\n return deferred.promise;\n }\n\n service.volumePlugins = function (systemOnly) {\n return servicePlugins(systemOnly, 'Volume', 'docker.volumedriver/1.0');\n };\n\n service.networkPlugins = function (systemOnly) {\n return servicePlugins(systemOnly, 'Network', 'docker.networkdriver/1.0');\n };\n\n service.loggingPlugins = function (systemOnly) {\n return servicePlugins(systemOnly, 'Log', 'docker.logdriver/1.0');\n };\n\n return service;\n },\n]);\n","import { SecretViewModel } from '../models/secret';\n\nangular.module('portainer.docker').factory('SecretService', [\n '$q',\n 'Secret',\n function SecretServiceFactory($q, Secret) {\n 'use strict';\n var service = {};\n\n service.secret = function (secretId) {\n var deferred = $q.defer();\n\n Secret.get({ id: secretId })\n .$promise.then(function success(data) {\n var secret = new SecretViewModel(data);\n deferred.resolve(secret);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve secret details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.secrets = function () {\n var deferred = $q.defer();\n\n Secret.query({})\n .$promise.then(function success(data) {\n var secrets = data.map(function (item) {\n return new SecretViewModel(item);\n });\n deferred.resolve(secrets);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve secrets', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (secretId) {\n var deferred = $q.defer();\n\n Secret.remove({ id: secretId })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove secret', err: err });\n });\n\n return deferred.promise;\n };\n\n service.create = function (secretConfig) {\n return Secret.create(secretConfig).$promise;\n };\n\n return service;\n },\n]);\n","import { ServiceViewModel } from '../models/service';\n\nangular.module('portainer.docker').factory('ServiceService', [\n '$q',\n 'Service',\n 'ServiceHelper',\n 'TaskService',\n 'ResourceControlService',\n 'LogHelper',\n function ServiceServiceFactory($q, Service, ServiceHelper, TaskService, ResourceControlService, LogHelper) {\n 'use strict';\n var service = {};\n\n service.services = function (filters) {\n var deferred = $q.defer();\n\n Service.query({ filters: filters ? filters : {} })\n .$promise.then(function success(data) {\n var services = data.map(function (item) {\n return new ServiceViewModel(item);\n });\n deferred.resolve(services);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve services', err: err });\n });\n\n return deferred.promise;\n };\n\n service.service = function (id) {\n var deferred = $q.defer();\n\n Service.get({ id: id })\n .$promise.then(function success(data) {\n var service = new ServiceViewModel(data);\n deferred.resolve(service);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve service details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (service) {\n var deferred = $q.defer();\n\n Service.remove({ id: service.Id })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove service', err: err });\n });\n\n return deferred.promise;\n };\n\n service.update = function (serv, config, rollback) {\n return service.service(serv.Id).then((data) => {\n const params = {\n id: serv.Id,\n version: data.Version,\n };\n if (rollback) {\n params.rollback = rollback;\n }\n return Service.update(params, config).$promise;\n });\n };\n\n service.logs = function (id, stdout, stderr, timestamps, since, tail) {\n var deferred = $q.defer();\n\n var parameters = {\n id: id,\n stdout: stdout || 0,\n stderr: stderr || 0,\n timestamps: timestamps || 0,\n since: since || 0,\n tail: tail || 'all',\n };\n\n Service.logs(parameters)\n .$promise.then(function success(data) {\n var logs = LogHelper.formatLogs(data.logs, true);\n deferred.resolve(logs);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { SwarmViewModel } from '../models/swarm';\n\nangular.module('portainer.docker').factory('SwarmService', [\n '$q',\n 'Swarm',\n function SwarmServiceFactory($q, Swarm) {\n 'use strict';\n var service = {};\n\n service.swarm = function () {\n var deferred = $q.defer();\n\n Swarm.get()\n .$promise.then(function success(data) {\n var swarm = new SwarmViewModel(data);\n deferred.resolve(swarm);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve Swarm details', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { EventViewModel } from '../models/event';\n\nangular.module('portainer.docker').factory('SystemService', [\n '$q',\n 'System',\n 'SystemEndpoint',\n function SystemServiceFactory($q, System, SystemEndpoint) {\n 'use strict';\n var service = {};\n\n service.plugins = function () {\n var deferred = $q.defer();\n System.info({})\n .$promise.then(function success(data) {\n var plugins = data.Plugins;\n deferred.resolve(plugins);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve plugins information from system', err: err });\n });\n return deferred.promise;\n };\n\n service.info = function () {\n return System.info({}).$promise;\n };\n\n service.ping = function (endpointId) {\n return SystemEndpoint.ping({ endpointId: endpointId }).$promise;\n };\n\n service.version = function () {\n return System.version({}).$promise;\n };\n\n service.events = function (from, to) {\n var deferred = $q.defer();\n\n System.events({ since: from, until: to })\n .$promise.then(function success(data) {\n var events = data.map(function (item) {\n return new EventViewModel(item);\n });\n deferred.resolve(events);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve engine events', err: err });\n });\n\n return deferred.promise;\n };\n\n service.dataUsage = function () {\n return System.dataUsage().$promise;\n };\n\n return service;\n },\n]);\n","import { TaskViewModel } from '../models/task';\n\nangular.module('portainer.docker').factory('TaskService', [\n '$q',\n 'Task',\n 'LogHelper',\n function TaskServiceFactory($q, Task, LogHelper) {\n 'use strict';\n var service = {};\n\n service.task = function (id) {\n var deferred = $q.defer();\n\n Task.get({ id: id })\n .$promise.then(function success(data) {\n var task = new TaskViewModel(data);\n deferred.resolve(task);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve task details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.tasks = function (filters) {\n var deferred = $q.defer();\n\n Task.query({ filters: filters ? filters : {} })\n .$promise.then(function success(data) {\n var tasks = data.map(function (item) {\n return new TaskViewModel(item);\n });\n deferred.resolve(tasks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve tasks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.logs = function (id, stdout, stderr, timestamps, since, tail) {\n var deferred = $q.defer();\n\n var parameters = {\n id: id,\n stdout: stdout || 0,\n stderr: stderr || 0,\n timestamps: timestamps || 0,\n since: since || 0,\n tail: tail || 'all',\n };\n\n Task.logs(parameters)\n .$promise.then(function success(data) {\n var logs = LogHelper.formatLogs(data.logs, true);\n deferred.resolve(logs);\n })\n .catch(function error(err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { VolumeViewModel } from '../models/volume';\n\nangular.module('portainer.docker').factory('VolumeService', [\n '$q',\n 'Volume',\n 'VolumeHelper',\n function VolumeServiceFactory($q, Volume, VolumeHelper) {\n 'use strict';\n var service = {};\n\n service.volumes = function (params) {\n var deferred = $q.defer();\n Volume.query(params)\n .$promise.then(function success(data) {\n var volumes = data.Volumes || [];\n volumes = volumes.map(function (item) {\n return new VolumeViewModel(item);\n });\n deferred.resolve(volumes);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve volumes', err: err });\n });\n return deferred.promise;\n };\n\n service.volume = function (id) {\n var deferred = $q.defer();\n Volume.get({ id: id })\n .$promise.then(function success(data) {\n var volume = new VolumeViewModel(data);\n deferred.resolve(volume);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve volume details', err: err });\n });\n return deferred.promise;\n };\n\n service.getVolumes = function () {\n return Volume.query({}).$promise;\n };\n\n service.remove = function (volume) {\n var deferred = $q.defer();\n\n Volume.remove({ id: volume.Id })\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message, err: data.message });\n } else {\n deferred.resolve();\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove volume', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createVolumeConfiguration = function (name, driver, driverOptions) {\n var volumeConfiguration = {\n Name: name,\n Driver: driver,\n DriverOpts: VolumeHelper.createDriverOptions(driverOptions),\n };\n return volumeConfiguration;\n };\n\n service.createVolume = function (volumeConfiguration) {\n var deferred = $q.defer();\n Volume.create(volumeConfiguration)\n .$promise.then(function success(data) {\n if (data.message) {\n deferred.reject({ msg: data.message });\n } else {\n var volume = new VolumeViewModel(data);\n deferred.resolve(volume);\n }\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create volume', err: err });\n });\n return deferred.promise;\n };\n\n service.createVolumes = function (volumeConfigurations) {\n var createVolumeQueries = volumeConfigurations.map(function (volumeConfiguration) {\n return service.createVolume(volumeConfiguration);\n });\n return $q.all(createVolumeQueries);\n };\n\n service.createXAutoGeneratedLocalVolumes = function (x) {\n var createVolumeQueries = [];\n for (var i = 0; i < x; i++) {\n createVolumeQueries.push(service.createVolume({ Driver: 'local' }));\n }\n return $q.all(createVolumeQueries);\n };\n\n return service;\n },\n]);\n","import angular from 'angular';\n\nclass ConfigsController {\n /* @ngInject */\n constructor($state, ConfigService, Notifications, $async) {\n this.$state = $state;\n this.ConfigService = ConfigService;\n this.Notifications = Notifications;\n this.$async = $async;\n\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n this.getConfigs = this.getConfigs.bind(this);\n this.getConfigsAsync = this.getConfigsAsync.bind(this);\n }\n\n getConfigs() {\n return this.$async(this.getConfigsAsync);\n }\n\n async getConfigsAsync() {\n try {\n this.configs = await this.ConfigService.configs();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configs');\n }\n }\n\n async $onInit() {\n this.configs = [];\n this.getConfigs();\n }\n\n removeAction(selectedItems) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const config of selectedItems) {\n try {\n await this.ConfigService.remove(config.Id);\n this.Notifications.success('Config successfully removed', config.Name);\n const index = this.configs.indexOf(config);\n this.configs.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove config');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload();\n }\n }\n }\n }\n}\nexport default ConfigsController;\nangular.module('portainer.docker').controller('ConfigsController', ConfigsController);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\n\nclass CreateConfigController {\n /* @ngInject */\n constructor($async, $state, $transition$, $window, ModalService, Notifications, ConfigService, Authentication, FormValidator, ResourceControlService) {\n this.$state = $state;\n this.$transition$ = $transition$;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.ConfigService = ConfigService;\n this.Authentication = Authentication;\n this.FormValidator = FormValidator;\n this.ResourceControlService = ResourceControlService;\n this.$async = $async;\n\n this.formValues = {\n Name: '',\n Labels: [],\n AccessControlData: new AccessControlFormData(),\n ConfigContent: '',\n };\n\n this.state = {\n formValidationError: '',\n isEditorDirty: false,\n };\n\n this.editorUpdate = this.editorUpdate.bind(this);\n this.createAsync = this.createAsync.bind(this);\n }\n\n async $onInit() {\n this.$window.onbeforeunload = () => {\n if (this.formValues.displayCodeEditor && this.formValues.ConfigContent && this.state.isEditorDirty) {\n return '';\n }\n };\n\n if (!this.$transition$.params().id) {\n this.formValues.displayCodeEditor = true;\n return;\n }\n\n try {\n let data = await this.ConfigService.config(this.$transition$.params().id);\n this.formValues.Name = data.Name + '_copy';\n this.formValues.Data = data.Data;\n let labels = _.keys(data.Labels);\n for (let i = 0; i < labels.length; i++) {\n let labelName = labels[i];\n let labelValue = data.Labels[labelName];\n this.formValues.Labels.push({ name: labelName, value: labelValue });\n }\n this.formValues.displayCodeEditor = true;\n } catch (err) {\n this.formValues.displayCodeEditor = true;\n this.Notifications.error('Failure', err, 'Unable to clone config');\n }\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n\n async uiCanExit() {\n if (this.formValues.displayCodeEditor && this.formValues.ConfigContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n addLabel() {\n this.formValues.Labels.push({ name: '', value: '' });\n }\n\n removeLabel(index) {\n this.formValues.Labels.splice(index, 1);\n }\n\n prepareLabelsConfig(config) {\n let labels = {};\n this.formValues.Labels.forEach(function (label) {\n if (label.name && label.value) {\n labels[label.name] = label.value;\n }\n });\n config.Labels = labels;\n }\n\n prepareConfigData(config) {\n let configData = this.formValues.ConfigContent;\n config.Data = btoa(unescape(encodeURIComponent(configData)));\n }\n\n prepareConfiguration() {\n let config = {};\n config.Name = this.formValues.Name;\n this.prepareConfigData(config);\n this.prepareLabelsConfig(config);\n return config;\n }\n\n validateForm(accessControlData, isAdmin) {\n this.state.formValidationError = '';\n let error = '';\n error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n create() {\n return this.$async(this.createAsync);\n }\n\n async createAsync() {\n const accessControlData = this.formValues.AccessControlData;\n const userDetails = this.Authentication.getUserDetails();\n const isAdmin = this.Authentication.isAdmin();\n\n if (this.formValues.ConfigContent === '') {\n this.state.formValidationError = 'Config content must not be empty';\n return;\n }\n\n if (!this.validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n const config = this.prepareConfiguration();\n\n try {\n const data = await this.ConfigService.create(config);\n const resourceControl = data.Portainer.ResourceControl;\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n this.Notifications.success('Config successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('docker.configs', {}, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create config');\n this.state.isEditorDirty = true;\n }\n }\n\n editorUpdate(cm) {\n this.formValues.ConfigContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n}\n\nexport default CreateConfigController;\nangular.module('portainer.docker').controller('CreateConfigController', CreateConfigController);\n","angular.module('portainer.docker').controller('ConfigController', [\n '$scope',\n '$transition$',\n '$state',\n 'ConfigService',\n 'Notifications',\n function ($scope, $transition$, $state, ConfigService, Notifications) {\n $scope.removeConfig = function removeConfig(configId) {\n ConfigService.remove(configId)\n .then(function success() {\n Notifications.success('Config successfully removed');\n $state.go('docker.configs', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove config');\n });\n };\n\n function initView() {\n ConfigService.config($transition$.params().id)\n .then(function success(data) {\n $scope.config = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve config details');\n });\n }\n\n initView();\n },\n]);\n","import { Terminal } from 'xterm';\nimport { baseHref } from '@/portainer/helpers/pathHelper';\n\nangular.module('portainer.docker').controller('ContainerConsoleController', [\n '$scope',\n '$state',\n '$transition$',\n 'ContainerService',\n 'ImageService',\n 'Notifications',\n 'ContainerHelper',\n 'ExecService',\n 'HttpRequestHelper',\n 'LocalStorage',\n 'CONSOLE_COMMANDS_LABEL_PREFIX',\n function (\n $scope,\n $state,\n $transition$,\n ContainerService,\n ImageService,\n Notifications,\n ContainerHelper,\n ExecService,\n HttpRequestHelper,\n LocalStorage,\n CONSOLE_COMMANDS_LABEL_PREFIX\n ) {\n var socket, term;\n\n let states = Object.freeze({\n disconnected: 0,\n connecting: 1,\n connected: 2,\n });\n\n $scope.loaded = false;\n $scope.states = states;\n $scope.state = states.disconnected;\n\n $scope.formValues = {};\n $scope.containerCommands = [];\n\n // Ensure the socket is closed before leaving the view\n $scope.$on('$stateChangeStart', function () {\n $scope.disconnect();\n });\n\n $scope.connectAttach = function () {\n if ($scope.state > states.disconnected) {\n return;\n }\n\n $scope.state = states.connecting;\n\n let attachId = $transition$.params().id;\n\n ContainerService.container(attachId)\n .then((details) => {\n if (!details.State.Running) {\n Notifications.error('Failure', details, 'Container ' + attachId + ' is not running!');\n $scope.disconnect();\n return;\n }\n\n const params = {\n token: LocalStorage.getJWT(),\n endpointId: $state.params.endpointId,\n id: attachId,\n };\n\n var url =\n window.location.origin +\n baseHref() +\n 'api/websocket/attach?' +\n Object.keys(params)\n .map((k) => k + '=' + params[k])\n .join('&');\n\n initTerm(url, ContainerService.resizeTTY.bind(this, attachId));\n })\n .catch(function error(err) {\n Notifications.error('Error', err, 'Unable to retrieve container details');\n $scope.disconnect();\n });\n };\n\n $scope.connectExec = function () {\n if ($scope.state > states.disconnected) {\n return;\n }\n\n $scope.state = states.connecting;\n var command = $scope.formValues.isCustomCommand ? $scope.formValues.customCommand : $scope.formValues.command;\n var execConfig = {\n id: $transition$.params().id,\n AttachStdin: true,\n AttachStdout: true,\n AttachStderr: true,\n Tty: true,\n User: $scope.formValues.user,\n Cmd: ContainerHelper.commandStringToArray(command),\n };\n\n ContainerService.createExec(execConfig)\n .then(function success(data) {\n const params = {\n token: LocalStorage.getJWT(),\n endpointId: $state.params.endpointId,\n id: data.Id,\n };\n\n var url =\n window.location.origin +\n baseHref() +\n 'api/websocket/exec?' +\n Object.keys(params)\n .map((k) => k + '=' + params[k])\n .join('&');\n\n initTerm(url, ExecService.resizeTTY.bind(this, params.id));\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to exec into container');\n $scope.disconnect();\n });\n };\n\n $scope.disconnect = function () {\n if (socket) {\n socket.close();\n }\n if ($scope.state > states.disconnected) {\n $scope.state = states.disconnected;\n if (term) {\n term.write('\\n\\r(connection closed)');\n term.dispose();\n }\n }\n };\n\n $scope.autoconnectAttachView = function () {\n return $scope.initView().then(function success() {\n if ($scope.container.State.Running) {\n $scope.connectAttach();\n }\n });\n };\n\n function resize(restcall, add) {\n add = add || 0;\n\n term.fit();\n var termWidth = term.cols;\n var termHeight = 30;\n term.resize(termWidth, termHeight);\n\n restcall(termWidth + add, termHeight + add, 1);\n }\n\n function initTerm(url, resizeRestCall) {\n let resizefun = resize.bind(this, resizeRestCall);\n\n if ($transition$.params().nodeName) {\n url += '&nodeName=' + $transition$.params().nodeName;\n }\n if (url.indexOf('https') > -1) {\n url = url.replace('https://', 'wss://');\n } else {\n url = url.replace('http://', 'ws://');\n }\n\n socket = new WebSocket(url);\n\n socket.onopen = function () {\n $scope.state = states.connected;\n term = new Terminal();\n\n term.on('data', function (data) {\n socket.send(data);\n });\n var terminal_container = document.getElementById('terminal-container');\n term.open(terminal_container);\n term.focus();\n term.setOption('cursorBlink', true);\n\n window.onresize = function () {\n resizefun();\n $scope.$apply();\n };\n\n $scope.$watch('toggle', function () {\n setTimeout(resizefun, 400);\n });\n\n socket.onmessage = function (e) {\n term.write(e.data);\n };\n socket.onerror = function (err) {\n $scope.disconnect();\n $scope.$apply();\n Notifications.error('Failure', err, 'Connection error');\n };\n socket.onclose = function () {\n $scope.disconnect();\n $scope.$apply();\n };\n\n resizefun(1);\n $scope.$apply();\n };\n }\n\n $scope.initView = function () {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n return ContainerService.container($transition$.params().id)\n .then(function success(data) {\n var container = data;\n $scope.container = container;\n return ImageService.image(container.Image);\n })\n .then(function success(data) {\n var image = data;\n var containerLabels = $scope.container.Config.Labels;\n $scope.imageOS = image.Os;\n $scope.formValues.command = image.Os === 'windows' ? 'powershell' : 'bash';\n $scope.containerCommands = Object.keys(containerLabels)\n .filter(function (label) {\n return label.indexOf(CONSOLE_COMMANDS_LABEL_PREFIX) === 0;\n })\n .map(function (label) {\n return {\n title: label.replace(CONSOLE_COMMANDS_LABEL_PREFIX, ''),\n command: containerLabels[label],\n };\n });\n $scope.loaded = true;\n })\n .catch(function error(err) {\n Notifications.error('Error', err, 'Unable to retrieve container details');\n });\n };\n },\n]);\n","angular.module('portainer.docker').controller('ContainersController', ContainersController);\n\n/* @ngInject */\nfunction ContainersController($scope, ContainerService, Notifications, endpoint) {\n $scope.offlineMode = endpoint.Status !== 1;\n $scope.endpoint = endpoint;\n\n $scope.getContainers = getContainers;\n\n function getContainers() {\n ContainerService.containers(1)\n .then(function success(data) {\n $scope.containers = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers');\n $scope.containers = [];\n });\n }\n\n function initView() {\n getContainers();\n }\n\n initView();\n}\n","import _ from 'lodash-es';\n\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nimport * as envVarsUtils from '@/portainer/helpers/env-vars';\nimport { ContainerCapabilities, ContainerCapability } from '../../../models/containerCapabilities';\nimport { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ContainerDetailsViewModel } from '../../../models/container';\n\nimport './createcontainer.css';\n\nangular.module('portainer.docker').controller('CreateContainerController', [\n '$q',\n '$scope',\n '$async',\n '$state',\n '$timeout',\n '$transition$',\n '$filter',\n 'Container',\n 'ContainerHelper',\n 'ImageHelper',\n 'Volume',\n 'NetworkService',\n 'ResourceControlService',\n 'Authentication',\n 'Notifications',\n 'ContainerService',\n 'ImageService',\n 'FormValidator',\n 'ModalService',\n 'RegistryService',\n 'SystemService',\n 'PluginService',\n 'HttpRequestHelper',\n 'endpoint',\n 'WebhookService',\n function (\n $q,\n $scope,\n $async,\n $state,\n $timeout,\n $transition$,\n $filter,\n Container,\n ContainerHelper,\n ImageHelper,\n Volume,\n NetworkService,\n ResourceControlService,\n Authentication,\n Notifications,\n ContainerService,\n ImageService,\n FormValidator,\n ModalService,\n RegistryService,\n SystemService,\n PluginService,\n HttpRequestHelper,\n endpoint,\n WebhookService\n ) {\n $scope.create = create;\n $scope.update = update;\n $scope.endpoint = endpoint;\n\n $scope.formValues = {\n alwaysPull: true,\n Console: 'none',\n Volumes: [],\n NetworkContainer: null,\n Labels: [],\n ExtraHosts: [],\n MacAddress: '',\n IPv4: '',\n IPv6: '',\n DnsPrimary: '',\n DnsSecondary: '',\n AccessControlData: new AccessControlFormData(),\n CpuLimit: 0,\n MemoryLimit: 0,\n MemoryReservation: 0,\n CmdMode: 'default',\n EntrypointMode: 'default',\n Env: [],\n NodeName: null,\n capabilities: [],\n Sysctls: [],\n LogDriverName: '',\n LogDriverOpts: [],\n RegistryModel: new PorImageRegistryModel(),\n EnableWebhook: false,\n };\n\n $scope.extraNetworks = {};\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n mode: '',\n pullImageValidity: true,\n settingUnlimitedResources: false,\n };\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.refreshSlider = function () {\n $timeout(function () {\n $scope.$broadcast('rzSliderForceRender');\n });\n };\n\n $scope.onImageNameChange = function () {\n $scope.formValues.CmdMode = 'default';\n $scope.formValues.EntrypointMode = 'default';\n };\n\n $scope.hasAuthorizations = function (authorizations) {\n return $scope.isAdmin || Authentication.hasAuthorizations(authorizations);\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n if (!validity) {\n $scope.formValues.alwaysPull = false;\n }\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.config = {\n Image: '',\n Env: [],\n Cmd: '',\n MacAddress: '',\n ExposedPorts: {},\n Entrypoint: '',\n HostConfig: {\n RestartPolicy: {\n Name: 'no',\n },\n PortBindings: [],\n PublishAllPorts: false,\n Binds: [],\n AutoRemove: false,\n NetworkMode: 'bridge',\n Privileged: false,\n Init: false,\n Runtime: null,\n ExtraHosts: [],\n Devices: [],\n CapAdd: [],\n CapDrop: [],\n Sysctls: {},\n },\n NetworkingConfig: {\n EndpointsConfig: {},\n },\n Labels: {},\n };\n\n $scope.addVolume = function () {\n $scope.formValues.Volumes.push({ name: '', containerPath: '', readOnly: false, type: 'volume' });\n };\n\n $scope.removeVolume = function (index) {\n $scope.formValues.Volumes.splice(index, 1);\n };\n\n $scope.addPortBinding = function () {\n $scope.config.HostConfig.PortBindings.push({ hostPort: '', containerPort: '', protocol: 'tcp' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.config.HostConfig.PortBindings.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ name: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n $scope.addExtraHost = function () {\n $scope.formValues.ExtraHosts.push({ value: '' });\n };\n\n $scope.removeExtraHost = function (index) {\n $scope.formValues.ExtraHosts.splice(index, 1);\n };\n\n $scope.addDevice = function () {\n $scope.config.HostConfig.Devices.push({ pathOnHost: '', pathInContainer: '' });\n };\n\n $scope.removeDevice = function (index) {\n $scope.config.HostConfig.Devices.splice(index, 1);\n };\n\n $scope.addSysctl = function () {\n $scope.formValues.Sysctls.push({ name: '', value: '' });\n };\n\n $scope.removeSysctl = function (index) {\n $scope.formValues.Sysctls.splice(index, 1);\n };\n\n $scope.addLogDriverOpt = function () {\n $scope.formValues.LogDriverOpts.push({ name: '', value: '' });\n };\n\n $scope.removeLogDriverOpt = function (index) {\n $scope.formValues.LogDriverOpts.splice(index, 1);\n };\n\n $scope.fromContainerMultipleNetworks = false;\n\n function prepareImageConfig(config) {\n const imageConfig = ImageHelper.createImageConfigForContainer($scope.formValues.RegistryModel);\n config.Image = imageConfig.fromImage;\n }\n\n function preparePortBindings(config) {\n const bindings = ContainerHelper.preparePortBindings(config.HostConfig.PortBindings);\n config.ExposedPorts = {};\n _.forEach(bindings, (_, key) => (config.ExposedPorts[key] = {}));\n config.HostConfig.PortBindings = bindings;\n }\n\n function prepareConsole(config) {\n var value = $scope.formValues.Console;\n var openStdin = true;\n var tty = true;\n if (value === 'tty') {\n openStdin = false;\n } else if (value === 'interactive') {\n tty = false;\n } else if (value === 'none') {\n openStdin = false;\n tty = false;\n }\n config.OpenStdin = openStdin;\n config.Tty = tty;\n }\n\n function prepareCmd(config) {\n if (_.isEmpty(config.Cmd) || $scope.formValues.CmdMode == 'default') {\n delete config.Cmd;\n } else {\n config.Cmd = ContainerHelper.commandStringToArray(config.Cmd);\n }\n }\n\n function prepareEntrypoint(config) {\n if ($scope.formValues.EntrypointMode == 'default' || (_.isEmpty(config.Cmd) && _.isEmpty(config.Entrypoint))) {\n config.Entrypoint = null;\n }\n }\n\n function prepareEnvironmentVariables(config) {\n config.Env = envVarsUtils.convertToArrayOfStrings($scope.formValues.Env);\n }\n\n function prepareVolumes(config) {\n var binds = [];\n var volumes = {};\n\n $scope.formValues.Volumes.forEach(function (volume) {\n var name = volume.name;\n var containerPath = volume.containerPath;\n if (name && containerPath) {\n var bind = name + ':' + containerPath;\n volumes[containerPath] = {};\n if (volume.readOnly) {\n bind += ':ro';\n }\n binds.push(bind);\n }\n });\n config.HostConfig.Binds = binds;\n config.Volumes = volumes;\n }\n\n function prepareNetworkConfig(config) {\n var mode = config.HostConfig.NetworkMode;\n var container = $scope.formValues.NetworkContainer;\n var containerName = container;\n if (container && typeof container === 'object') {\n containerName = $filter('trimcontainername')(container.Names[0]);\n }\n var networkMode = mode;\n if (containerName) {\n networkMode += ':' + containerName;\n config.Hostname = '';\n }\n config.HostConfig.NetworkMode = networkMode;\n config.MacAddress = $scope.formValues.MacAddress;\n\n config.NetworkingConfig.EndpointsConfig[networkMode] = {\n IPAMConfig: {\n IPv4Address: $scope.formValues.IPv4,\n IPv6Address: $scope.formValues.IPv6,\n },\n };\n\n if (networkMode && _.get($scope.config.NetworkingConfig.EndpointsConfig[networkMode], 'Aliases')) {\n var aliases = $scope.config.NetworkingConfig.EndpointsConfig[networkMode].Aliases;\n config.NetworkingConfig.EndpointsConfig[networkMode].Aliases = _.filter(aliases, (o) => {\n return !_.startsWith($scope.fromContainer.Id, o);\n });\n }\n\n var dnsServers = [];\n if ($scope.formValues.DnsPrimary) {\n dnsServers.push($scope.formValues.DnsPrimary);\n }\n if ($scope.formValues.DnsSecondary) {\n dnsServers.push($scope.formValues.DnsSecondary);\n }\n config.HostConfig.Dns = dnsServers;\n\n config.HostConfig.ExtraHosts = _.map(\n _.filter($scope.formValues.ExtraHosts, (v) => v.value),\n 'value'\n );\n }\n\n function prepareLabels(config) {\n var labels = {};\n $scope.formValues.Labels.forEach(function (label) {\n if (label.name) {\n if (label.value) {\n labels[label.name] = label.value;\n } else {\n labels[label.name] = '';\n }\n }\n });\n config.Labels = labels;\n }\n\n function prepareDevices(config) {\n var path = [];\n config.HostConfig.Devices.forEach(function (p) {\n if (p.pathOnHost) {\n if (p.pathInContainer === '') {\n p.pathInContainer = p.pathOnHost;\n }\n path.push({ PathOnHost: p.pathOnHost, PathInContainer: p.pathInContainer, CgroupPermissions: 'rwm' });\n }\n });\n config.HostConfig.Devices = path;\n }\n\n function prepareSysctls(config) {\n var sysctls = {};\n $scope.formValues.Sysctls.forEach(function (sysctl) {\n if (sysctl.name && sysctl.value) {\n sysctls[sysctl.name] = sysctl.value;\n }\n });\n config.HostConfig.Sysctls = sysctls;\n }\n\n function prepareResources(config) {\n // Memory Limit - Round to 0.125\n if ($scope.formValues.MemoryLimit >= 0) {\n var memoryLimit = (Math.round($scope.formValues.MemoryLimit * 8) / 8).toFixed(3);\n memoryLimit *= 1024 * 1024;\n config.HostConfig.Memory = memoryLimit;\n }\n\n // Memory Resevation - Round to 0.125\n if ($scope.formValues.MemoryReservation >= 0) {\n var memoryReservation = (Math.round($scope.formValues.MemoryReservation * 8) / 8).toFixed(3);\n memoryReservation *= 1024 * 1024;\n config.HostConfig.MemoryReservation = memoryReservation;\n }\n\n // CPU Limit\n if ($scope.formValues.CpuLimit >= 0) {\n config.HostConfig.NanoCpus = $scope.formValues.CpuLimit * 1000000000;\n }\n }\n\n function prepareLogDriver(config) {\n var logOpts = {};\n if ($scope.formValues.LogDriverName) {\n config.HostConfig.LogConfig = { Type: $scope.formValues.LogDriverName };\n if ($scope.formValues.LogDriverName !== 'none') {\n $scope.formValues.LogDriverOpts.forEach(function (opt) {\n if (opt.name) {\n logOpts[opt.name] = opt.value;\n }\n });\n if (Object.keys(logOpts).length !== 0 && logOpts.constructor === Object) {\n config.HostConfig.LogConfig.Config = logOpts;\n }\n }\n }\n }\n\n function prepareCapabilities(config) {\n var allowed = $scope.formValues.capabilities.filter(function (item) {\n return item.allowed === true;\n });\n var notAllowed = $scope.formValues.capabilities.filter(function (item) {\n return item.allowed === false;\n });\n\n var getCapName = function (item) {\n return item.capability;\n };\n config.HostConfig.CapAdd = allowed.map(getCapName);\n config.HostConfig.CapDrop = notAllowed.map(getCapName);\n }\n\n function prepareConfiguration() {\n var config = angular.copy($scope.config);\n prepareCmd(config);\n prepareEntrypoint(config);\n prepareNetworkConfig(config);\n prepareImageConfig(config);\n preparePortBindings(config);\n prepareConsole(config);\n prepareEnvironmentVariables(config);\n prepareVolumes(config);\n prepareLabels(config);\n prepareDevices(config);\n prepareResources(config);\n prepareLogDriver(config);\n prepareCapabilities(config);\n prepareSysctls(config);\n return config;\n }\n\n function loadFromContainerCmd() {\n if ($scope.config.Cmd) {\n $scope.config.Cmd = ContainerHelper.commandArrayToString($scope.config.Cmd);\n $scope.formValues.CmdMode = 'override';\n }\n }\n\n function loadFromContainerEntrypoint() {\n if (_.has($scope.config, 'Entrypoint')) {\n if ($scope.config.Entrypoint == null) {\n $scope.config.Entrypoint = '';\n }\n $scope.formValues.EntrypointMode = 'override';\n }\n }\n\n function loadFromContainerPortBindings() {\n const bindings = ContainerHelper.sortAndCombinePorts($scope.config.HostConfig.PortBindings);\n $scope.config.HostConfig.PortBindings = bindings;\n }\n\n function loadFromContainerVolumes(d) {\n for (var v in d.Mounts) {\n if ({}.hasOwnProperty.call(d.Mounts, v)) {\n var mount = d.Mounts[v];\n var volume = {\n type: mount.Type,\n name: mount.Name || mount.Source,\n containerPath: mount.Destination,\n readOnly: mount.RW === false,\n };\n $scope.formValues.Volumes.push(volume);\n }\n }\n }\n\n $scope.resetNetworkConfig = function () {\n $scope.config.NetworkingConfig = {\n EndpointsConfig: {},\n };\n };\n\n function loadFromContainerNetworkConfig(d) {\n $scope.config.NetworkingConfig = {\n EndpointsConfig: {},\n };\n var networkMode = d.HostConfig.NetworkMode;\n if (networkMode === 'default') {\n $scope.config.HostConfig.NetworkMode = 'bridge';\n if (!_.find($scope.availableNetworks, { Name: 'bridge' })) {\n $scope.config.HostConfig.NetworkMode = 'nat';\n }\n }\n if ($scope.config.HostConfig.NetworkMode.indexOf('container:') === 0) {\n var netContainer = $scope.config.HostConfig.NetworkMode.split(/^container:/)[1];\n $scope.config.HostConfig.NetworkMode = 'container';\n for (var c in $scope.runningContainers) {\n if ($scope.runningContainers[c].Id == netContainer) {\n $scope.formValues.NetworkContainer = $scope.runningContainers[c];\n }\n }\n }\n $scope.fromContainerMultipleNetworks = Object.keys(d.NetworkSettings.Networks).length >= 2;\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode]) {\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig) {\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv4Address) {\n $scope.formValues.IPv4 = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv4Address;\n }\n if (d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv6Address) {\n $scope.formValues.IPv6 = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode].IPAMConfig.IPv6Address;\n }\n }\n }\n $scope.config.NetworkingConfig.EndpointsConfig[$scope.config.HostConfig.NetworkMode] = d.NetworkSettings.Networks[$scope.config.HostConfig.NetworkMode];\n if (Object.keys(d.NetworkSettings.Networks).length > 1) {\n var firstNetwork = d.NetworkSettings.Networks[Object.keys(d.NetworkSettings.Networks)[0]];\n $scope.config.NetworkingConfig.EndpointsConfig[$scope.config.HostConfig.NetworkMode] = firstNetwork;\n $scope.extraNetworks = angular.copy(d.NetworkSettings.Networks);\n delete $scope.extraNetworks[Object.keys(d.NetworkSettings.Networks)[0]];\n }\n $scope.formValues.MacAddress = d.Config.MacAddress;\n\n if (d.HostConfig.Dns && d.HostConfig.Dns[0]) {\n $scope.formValues.DnsPrimary = d.HostConfig.Dns[0];\n if (d.HostConfig.Dns[1]) {\n $scope.formValues.DnsSecondary = d.HostConfig.Dns[1];\n }\n }\n\n // ExtraHosts\n if ($scope.config.HostConfig.ExtraHosts) {\n var extraHosts = $scope.config.HostConfig.ExtraHosts;\n for (var i = 0; i < extraHosts.length; i++) {\n var host = extraHosts[i];\n $scope.formValues.ExtraHosts.push({ value: host });\n }\n $scope.config.HostConfig.ExtraHosts = [];\n }\n }\n\n function loadFromContainerEnvironmentVariables() {\n $scope.formValues.Env = envVarsUtils.parseArrayOfStrings($scope.config.Env);\n }\n\n function loadFromContainerLabels() {\n for (var l in $scope.config.Labels) {\n if ({}.hasOwnProperty.call($scope.config.Labels, l)) {\n $scope.formValues.Labels.push({ name: l, value: $scope.config.Labels[l] });\n }\n }\n }\n\n function loadFromContainerConsole() {\n if ($scope.config.OpenStdin && $scope.config.Tty) {\n $scope.formValues.Console = 'both';\n } else if (!$scope.config.OpenStdin && $scope.config.Tty) {\n $scope.formValues.Console = 'tty';\n } else if ($scope.config.OpenStdin && !$scope.config.Tty) {\n $scope.formValues.Console = 'interactive';\n } else if (!$scope.config.OpenStdin && !$scope.config.Tty) {\n $scope.formValues.Console = 'none';\n }\n }\n\n function loadFromContainerDevices() {\n var path = [];\n for (var dev in $scope.config.HostConfig.Devices) {\n if ({}.hasOwnProperty.call($scope.config.HostConfig.Devices, dev)) {\n var device = $scope.config.HostConfig.Devices[dev];\n path.push({ pathOnHost: device.PathOnHost, pathInContainer: device.PathInContainer });\n }\n }\n $scope.config.HostConfig.Devices = path;\n }\n\n function loadFromContainerSysctls() {\n for (var s in $scope.config.HostConfig.Sysctls) {\n if ({}.hasOwnProperty.call($scope.config.HostConfig.Sysctls, s)) {\n $scope.formValues.Sysctls.push({ name: s, value: $scope.config.HostConfig.Sysctls[s] });\n }\n }\n }\n\n function loadFromContainerImageConfig() {\n RegistryService.retrievePorRegistryModelFromRepository($scope.config.Image, endpoint.Id)\n .then((model) => {\n $scope.formValues.RegistryModel = model;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve registry');\n });\n }\n\n function loadFromContainerResources(d) {\n if (d.HostConfig.NanoCpus) {\n $scope.formValues.CpuLimit = d.HostConfig.NanoCpus / 1000000000;\n }\n if (d.HostConfig.Memory) {\n $scope.formValues.MemoryLimit = d.HostConfig.Memory / 1024 / 1024;\n }\n if (d.HostConfig.MemoryReservation) {\n $scope.formValues.MemoryReservation = d.HostConfig.MemoryReservation / 1024 / 1024;\n }\n }\n\n function loadFromContainerCapabilities(d) {\n if (d.HostConfig.CapAdd) {\n d.HostConfig.CapAdd.forEach(function (cap) {\n $scope.formValues.capabilities.push(new ContainerCapability(cap, true));\n });\n }\n if (d.HostConfig.CapDrop) {\n d.HostConfig.CapDrop.forEach(function (cap) {\n $scope.formValues.capabilities.push(new ContainerCapability(cap, false));\n });\n }\n\n function hasCapability(item) {\n return item.capability === cap.capability;\n }\n\n var capabilities = new ContainerCapabilities();\n for (var i = 0; i < capabilities.length; i++) {\n var cap = capabilities[i];\n if (!_.find($scope.formValues.capabilities, hasCapability)) {\n $scope.formValues.capabilities.push(cap);\n }\n }\n\n $scope.formValues.capabilities.sort(function (a, b) {\n return a.capability < b.capability ? -1 : 1;\n });\n }\n\n function loadFromContainerSpec() {\n // Get container\n Container.get({ id: $transition$.params().from })\n .$promise.then(function success(d) {\n var fromContainer = new ContainerDetailsViewModel(d);\n if (fromContainer.ResourceControl && fromContainer.ResourceControl.Public) {\n $scope.formValues.AccessControlData.AccessControlEnabled = false;\n }\n $scope.fromContainer = fromContainer;\n $scope.state.mode = 'duplicate';\n $scope.config = ContainerHelper.configFromContainer(fromContainer.Model);\n loadFromContainerCmd(d);\n loadFromContainerEntrypoint(d);\n loadFromContainerLogging(d);\n loadFromContainerPortBindings(d);\n loadFromContainerVolumes(d);\n loadFromContainerNetworkConfig(d);\n loadFromContainerEnvironmentVariables(d);\n loadFromContainerLabels(d);\n loadFromContainerConsole(d);\n loadFromContainerDevices(d);\n loadFromContainerImageConfig(d);\n loadFromContainerResources(d);\n loadFromContainerCapabilities(d);\n loadFromContainerSysctls(d);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container');\n });\n }\n\n function loadFromContainerLogging(config) {\n var logConfig = config.HostConfig.LogConfig;\n $scope.formValues.LogDriverName = logConfig.Type;\n $scope.formValues.LogDriverOpts = _.map(logConfig.Config, function (value, name) {\n return {\n name: name,\n value: value,\n };\n });\n }\n\n async function initView() {\n var nodeName = $transition$.params().nodeName;\n $scope.formValues.NodeName = nodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n $scope.isAdmin = Authentication.isAdmin();\n $scope.showDeviceMapping = shouldShowDevices();\n $scope.areContainerCapabilitiesEnabled = checkIfContainerCapabilitiesEnabled();\n\n Volume.query(\n {},\n function (d) {\n $scope.availableVolumes = d.Volumes.sort((vol1, vol2) => {\n return vol1.Name.localeCompare(vol2.Name);\n });\n },\n function (e) {\n Notifications.error('Failure', e, 'Unable to retrieve volumes');\n }\n );\n\n var provider = $scope.applicationState.endpoint.mode.provider;\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n NetworkService.networks(provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', false, provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25)\n .then(function success(networks) {\n networks.push({ Name: 'container' });\n $scope.availableNetworks = networks.sort((a, b) => a.Name.localeCompare(b.Name));\n\n if (_.find(networks, { Name: 'nat' })) {\n $scope.config.HostConfig.NetworkMode = 'nat';\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve networks');\n });\n\n Container.query(\n {},\n function (d) {\n var containers = d;\n $scope.runningContainers = containers;\n if ($transition$.params().from) {\n loadFromContainerSpec();\n } else {\n $scope.fromContainer = {};\n $scope.formValues.capabilities = $scope.areContainerCapabilitiesEnabled ? new ContainerCapabilities() : [];\n }\n },\n function (e) {\n Notifications.error('Failure', e, 'Unable to retrieve running containers');\n }\n );\n\n SystemService.info()\n .then(function success(data) {\n $scope.availableRuntimes = data.Runtimes ? Object.keys(data.Runtimes) : [];\n $scope.state.sliderMaxCpu = 32;\n if (data.NCPU) {\n $scope.state.sliderMaxCpu = data.NCPU;\n }\n $scope.state.sliderMaxMemory = 32768;\n if (data.MemTotal) {\n $scope.state.sliderMaxMemory = Math.floor(data.MemTotal / 1000 / 1000);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve engine details');\n });\n\n $scope.allowBindMounts = checkIfAdminOrEndpointAdmin() || endpoint.SecuritySettings.allowBindMountsForRegularUsers;\n $scope.allowPrivilegedMode = checkIfAdminOrEndpointAdmin() || endpoint.SecuritySettings.allowPrivilegedModeForRegularUsers;\n $scope.allowSysctl = checkIfAdminOrEndpointAdmin() || endpoint.SecuritySettings.AllowSysctlSettingForRegularUsers;\n\n PluginService.loggingPlugins(apiVersion < 1.25).then(function success(loggingDrivers) {\n $scope.availableLoggingDrivers = loggingDrivers;\n });\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n $scope.handleResourceChange = handleResourceChange;\n function handleResourceChange() {\n $scope.state.settingUnlimitedResources = false;\n if (\n ($scope.config.HostConfig.Memory > 0 && $scope.formValues.MemoryLimit === 0) ||\n ($scope.config.HostConfig.MemoryReservation > 0 && $scope.formValues.MemoryReservation === 0) ||\n ($scope.config.HostConfig.NanoCpus > 0 && $scope.formValues.CpuLimit === 0)\n ) {\n $scope.state.settingUnlimitedResources = true;\n }\n }\n\n async function updateLimits(config) {\n try {\n if ($scope.state.settingUnlimitedResources) {\n create();\n } else {\n await ContainerService.updateLimits($transition$.params().from, config);\n $scope.config = config;\n Notifications.success('Limits updated');\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Update Limits fail');\n }\n }\n\n async function update() {\n $scope.state.actionInProgress = true;\n var config = angular.copy($scope.config);\n prepareResources(config);\n await updateLimits(config);\n $scope.state.actionInProgress = false;\n }\n\n function create() {\n var oldContainer = null;\n HttpRequestHelper.setPortainerAgentTargetHeader($scope.formValues.NodeName);\n return findCurrentContainer().then(setOldContainer).then(confirmCreateContainer).then(startCreationProcess).catch(notifyOnError).finally(final);\n\n function final() {\n $scope.state.actionInProgress = false;\n }\n\n function setOldContainer(container) {\n oldContainer = container;\n return container;\n }\n\n function findCurrentContainer() {\n return Container.query({ all: 1, filters: { name: ['^/' + $scope.config.name + '$'] } })\n .$promise.then(function onQuerySuccess(containers) {\n if (!containers.length) {\n return;\n }\n return containers[0];\n })\n .catch(notifyOnError);\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers');\n }\n }\n\n function createContainerWebhook(data) {\n const isNotEdgeAgentOnDockerEnvironment = endpoint.Type !== 4;\n if (isNotEdgeAgentOnDockerEnvironment && $scope.formValues.EnableWebhook) {\n const registryID = _.get($scope.formValues.RegistryModel, 'Registry.Id', 0);\n WebhookService.createWebhook(data.Id, endpoint.Id, registryID, 2).then(function success() {\n return data;\n });\n }\n return data;\n }\n\n function startCreationProcess(confirmed) {\n if (!confirmed) {\n return $q.when();\n }\n if (!validateAccessControl()) {\n return $q.when();\n }\n $scope.state.actionInProgress = true;\n return pullImageIfNeeded()\n .then(stopAndRenameContainer)\n .then(createNewContainer)\n .then(createContainerWebhook)\n .then(applyResourceControl)\n .then(connectToExtraNetworks)\n .then(removeOldContainer)\n .then(onSuccess)\n .catch(onCreationProcessFail);\n }\n\n function onCreationProcessFail(error) {\n var deferred = $q.defer();\n removeNewContainer()\n .then(restoreOldContainerName)\n .then(function () {\n deferred.reject(error);\n })\n .catch(function (restoreError) {\n deferred.reject(restoreError);\n });\n return deferred.promise;\n }\n\n function removeNewContainer() {\n return findCurrentContainer().then(function onContainerLoaded(container) {\n if (container && (!oldContainer || container.Id !== oldContainer.Id)) {\n return ContainerService.remove(container, true);\n }\n });\n }\n\n function restoreOldContainerName() {\n if (!oldContainer) {\n return;\n }\n return ContainerService.renameContainer(oldContainer.Id, oldContainer.Names[0].substring(1));\n }\n\n function confirmCreateContainer(container) {\n if (!container) {\n return $q.when(true);\n }\n\n return showConfirmationModal();\n\n function showConfirmationModal() {\n var deferred = $q.defer();\n\n ModalService.confirm({\n title: 'Are you sure ?',\n message: 'A container with the same name already exists. Portainer can automatically remove it and re-create one. Do you want to replace it?',\n buttons: {\n confirm: {\n label: 'Replace',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n deferred.resolve(confirmed);\n },\n });\n\n return deferred.promise;\n }\n }\n\n function stopAndRenameContainer() {\n if (!oldContainer) {\n return $q.when();\n }\n return stopContainerIfNeeded(oldContainer).then(renameContainer);\n }\n\n function stopContainerIfNeeded(oldContainer) {\n if (oldContainer.State !== 'running') {\n return $q.when();\n }\n return ContainerService.stopContainer(oldContainer.Id);\n }\n\n function renameContainer() {\n return ContainerService.renameContainer(oldContainer.Id, oldContainer.Names[0].substring(1) + '-old');\n }\n\n function pullImageIfNeeded() {\n return $q.when($scope.formValues.alwaysPull && ImageService.pullImage($scope.formValues.RegistryModel, true));\n }\n\n function createNewContainer() {\n return $async(async () => {\n const config = prepareConfiguration();\n return await ContainerService.createAndStartContainer(config);\n });\n }\n\n function applyResourceControl(newContainer) {\n const userId = Authentication.getUserDetails().ID;\n const resourceControl = newContainer.Portainer.ResourceControl;\n const containerId = newContainer.Id;\n const accessControlData = $scope.formValues.AccessControlData;\n\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl).then(function onApplyResourceControlSuccess() {\n return containerId;\n });\n }\n\n function connectToExtraNetworks(newContainerId) {\n if (!$scope.extraNetworks) {\n return $q.when();\n }\n\n var connectionPromises = _.forOwn($scope.extraNetworks, function (network, networkName) {\n if (_.has(network, 'Aliases')) {\n var aliases = _.filter(network.Aliases, (o) => {\n return !_.startsWith($scope.fromContainer.Id, o);\n });\n }\n return NetworkService.connectContainer(networkName, newContainerId, aliases);\n });\n\n return $q.all(connectionPromises);\n }\n\n function removeOldContainer() {\n var deferred = $q.defer();\n\n if (!oldContainer) {\n deferred.resolve();\n return;\n }\n\n ContainerService.remove(oldContainer, true).then(notifyOnRemoval).catch(notifyOnRemoveError);\n\n return deferred.promise;\n\n function notifyOnRemoval() {\n Notifications.success('Container Removed', oldContainer.Id);\n deferred.resolve();\n }\n\n function notifyOnRemoveError(err) {\n deferred.reject({ msg: 'Unable to remove container', err: err });\n }\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to create container');\n }\n\n function validateAccessControl() {\n var accessControlData = $scope.formValues.AccessControlData;\n return validateForm(accessControlData, $scope.isAdmin);\n }\n\n function onSuccess() {\n Notifications.success('Container successfully created');\n $state.go('docker.containers', {}, { reload: true });\n }\n }\n\n function shouldShowDevices() {\n return endpoint.SecuritySettings.allowDeviceMappingForRegularUsers || checkIfAdminOrEndpointAdmin();\n }\n\n function checkIfContainerCapabilitiesEnabled() {\n return endpoint.SecuritySettings.allowContainerCapabilitiesForRegularUsers || checkIfAdminOrEndpointAdmin();\n }\n\n function checkIfAdminOrEndpointAdmin() {\n return Authentication.isAdmin() || Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\nimport _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport { confirmContainerDeletion } from '@/portainer/services/modal.service/prompt';\n\nangular.module('portainer.docker').controller('ContainerController', [\n '$q',\n '$scope',\n '$state',\n '$transition$',\n '$filter',\n '$async',\n 'Commit',\n 'ContainerHelper',\n 'ContainerService',\n 'ImageHelper',\n 'NetworkService',\n 'Notifications',\n 'ModalService',\n 'ResourceControlService',\n 'RegistryService',\n 'ImageService',\n 'HttpRequestHelper',\n 'Authentication',\n 'StateManager',\n 'endpoint',\n 'WebhookService',\n 'WebhookHelper',\n 'clipboard',\n function (\n $q,\n $scope,\n $state,\n $transition$,\n $filter,\n $async,\n Commit,\n ContainerHelper,\n ContainerService,\n ImageHelper,\n NetworkService,\n Notifications,\n ModalService,\n ResourceControlService,\n RegistryService,\n ImageService,\n HttpRequestHelper,\n Authentication,\n StateManager,\n endpoint,\n WebhookService,\n WebhookHelper,\n clipboard\n ) {\n $scope.endpoint = endpoint;\n $scope.isAdmin = Authentication.isAdmin();\n $scope.activityTime = 0;\n $scope.portBindings = [];\n $scope.displayRecreateButton = false;\n $scope.displayWebhookButton = false;\n $scope.WebhookExists = false;\n $scope.WebhookURL = null;\n $scope.WebhookID = null;\n $scope.container = null;\n\n $scope.config = {\n RegistryModel: new PorImageRegistryModel(),\n commitInProgress: false,\n };\n\n $scope.state = {\n recreateContainerInProgress: false,\n joinNetworkInProgress: false,\n leaveNetworkInProgress: false,\n pullImageValidity: false,\n };\n\n $scope.hasAuthorizations = function (authorizations) {\n return $scope.isAdmin || Authentication.hasAuthorizations(authorizations);\n };\n\n $scope.disabledWebhookButton = function (webhookExists) {\n if (webhookExists) {\n return !$scope.hasAuthorizations(['PortainerWebhookDelete']);\n }\n return !$scope.hasAuthorizations(['PortainerWebhookCreate']);\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.updateRestartPolicy = updateRestartPolicy;\n $scope.updateWebhook = function updateWebhook(container, recreate) {\n if ($scope.WebhookExists) {\n WebhookService.deleteWebhook($scope.WebhookID)\n .then(function success() {\n $scope.WebhookURL = null;\n $scope.WebhookID = null;\n $scope.WebhookExists = false;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to delete webhook');\n });\n } else if (!recreate) {\n createWebhook(container);\n }\n if (recreate) {\n createWebhook(container);\n }\n };\n\n $scope.copyWebhook = function copyWebhook() {\n clipboard.copyText($scope.WebhookURL);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n };\n\n const createWebhook = function (container) {\n // Create Container Webhook\n const registryID = _.get($scope.config.RegistryModel, 'Registry.Id', 0);\n WebhookService.createWebhook(container.Id, endpoint.Id, registryID, 2)\n .then(function success(data) {\n $scope.WebhookExists = true;\n $scope.WebhookID = data.Id;\n $scope.WebhookURL = WebhookHelper.returnWebhookUrl(data.Token);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create webhook');\n });\n };\n\n var update = function () {\n var nodeName = $transition$.params().nodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n $scope.nodeName = nodeName;\n\n ContainerService.container($transition$.params().id)\n .then(function success(data) {\n var container = data;\n $scope.container = container;\n $scope.container.edit = false;\n $scope.container.newContainerName = $filter('trimcontainername')(container.Name);\n\n if (container.State.Running) {\n $scope.activityTime = moment.duration(moment(container.State.StartedAt).utc().diff(moment().utc())).humanize();\n } else if (container.State.Status === 'created') {\n $scope.activityTime = moment.duration(moment(container.Created).utc().diff(moment().utc())).humanize();\n } else {\n $scope.activityTime = moment.duration(moment().utc().diff(moment(container.State.FinishedAt).utc())).humanize();\n }\n\n $scope.portBindings = [];\n if (container.NetworkSettings.Ports) {\n _.forEach(Object.keys(container.NetworkSettings.Ports), function (key) {\n if (container.NetworkSettings.Ports[key]) {\n _.forEach(container.NetworkSettings.Ports[key], (portMapping) => {\n const mapping = {};\n mapping.container = key;\n mapping.host = `${portMapping.HostIp}:${portMapping.HostPort}`;\n $scope.portBindings.push(mapping);\n });\n }\n });\n }\n\n $scope.container.Config.Env = _.sortBy($scope.container.Config.Env, _.toLower);\n const inSwarm = $scope.container.Config.Labels['com.docker.swarm.service.id'];\n const autoRemove = $scope.container.HostConfig.AutoRemove;\n const admin = Authentication.isAdmin();\n const {\n allowContainerCapabilitiesForRegularUsers,\n allowHostNamespaceForRegularUsers,\n allowDeviceMappingForRegularUsers,\n allowSysctlSettingForRegularUsers,\n allowBindMountsForRegularUsers,\n allowPrivilegedModeForRegularUsers,\n } = endpoint.SecuritySettings;\n\n const settingRestrictsRegularUsers =\n !allowContainerCapabilitiesForRegularUsers ||\n !allowBindMountsForRegularUsers ||\n !allowDeviceMappingForRegularUsers ||\n !allowSysctlSettingForRegularUsers ||\n !allowHostNamespaceForRegularUsers ||\n !allowPrivilegedModeForRegularUsers;\n\n $scope.displayRecreateButton = !inSwarm && !autoRemove && (admin || !settingRestrictsRegularUsers);\n $scope.displayWebhookButton = $scope.displayRecreateButton;\n return $q.all({\n webhooks: WebhookService.webhooks(container.Id, endpoint.Id),\n });\n })\n .then(function success(data) {\n if (data.webhooks.length > 0) {\n const webhook = data.webhooks[0];\n $scope.WebhookExists = true;\n $scope.WebhookID = webhook.Id;\n $scope.WebhookURL = WebhookHelper.returnWebhookUrl(webhook.Token);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container info');\n });\n };\n\n function executeContainerAction(id, action, successMessage, errorMessage) {\n action(id)\n .then(function success() {\n Notifications.success(successMessage, id);\n update();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, errorMessage);\n });\n }\n\n $scope.start = function () {\n var successMessage = 'Container successfully started';\n var errorMessage = 'Unable to start container';\n executeContainerAction($transition$.params().id, ContainerService.startContainer, successMessage, errorMessage);\n };\n\n $scope.stop = function () {\n var successMessage = 'Container successfully stopped';\n var errorMessage = 'Unable to stop container';\n executeContainerAction($transition$.params().id, ContainerService.stopContainer, successMessage, errorMessage);\n };\n\n $scope.kill = function () {\n var successMessage = 'Container successfully killed';\n var errorMessage = 'Unable to kill container';\n executeContainerAction($transition$.params().id, ContainerService.killContainer, successMessage, errorMessage);\n };\n\n $scope.pause = function () {\n var successMessage = 'Container successfully paused';\n var errorMessage = 'Unable to pause container';\n executeContainerAction($transition$.params().id, ContainerService.pauseContainer, successMessage, errorMessage);\n };\n\n $scope.unpause = function () {\n var successMessage = 'Container successfully resumed';\n var errorMessage = 'Unable to resume container';\n executeContainerAction($transition$.params().id, ContainerService.resumeContainer, successMessage, errorMessage);\n };\n\n $scope.restart = function () {\n var successMessage = 'Container successfully restarted';\n var errorMessage = 'Unable to restart container';\n executeContainerAction($transition$.params().id, ContainerService.restartContainer, successMessage, errorMessage);\n };\n\n $scope.renameContainer = function () {\n var container = $scope.container;\n ContainerService.renameContainer($transition$.params().id, container.newContainerName)\n .then(function success() {\n container.Name = container.newContainerName;\n Notifications.success('Container successfully renamed', container.Name);\n })\n .catch(function error(err) {\n container.newContainerName = container.Name;\n Notifications.error('Failure', err, 'Unable to rename container');\n })\n .finally(function final() {\n $scope.container.edit = false;\n });\n };\n\n $scope.containerLeaveNetwork = function containerLeaveNetwork(container, networkId) {\n $scope.state.leaveNetworkInProgress = true;\n NetworkService.disconnectContainer(networkId, container.Id, false)\n .then(function success() {\n Notifications.success('Container left network', container.Id);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to disconnect container from network');\n })\n .finally(function final() {\n $scope.state.leaveNetworkInProgress = false;\n });\n };\n\n $scope.containerJoinNetwork = function containerJoinNetwork(container, networkId) {\n $scope.state.joinNetworkInProgress = true;\n NetworkService.connectContainer(networkId, container.Id)\n .then(function success() {\n Notifications.success('Container joined network', container.Id);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to connect container to network');\n })\n .finally(function final() {\n $scope.state.joinNetworkInProgress = false;\n });\n };\n\n async function commitContainerAsync() {\n $scope.config.commitInProgress = true;\n const registryModel = $scope.config.RegistryModel;\n const imageConfig = ImageHelper.createImageConfigForContainer(registryModel);\n try {\n await Commit.commitContainer({ id: $transition$.params().id, repo: imageConfig.fromImage }).$promise;\n Notifications.success('Image created', $transition$.params().id);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create image');\n $scope.config.commitInProgress = false;\n }\n }\n\n $scope.commit = function () {\n return $async(commitContainerAsync);\n };\n\n $scope.confirmRemove = function () {\n var title = 'You are about to remove a container.';\n if ($scope.container.State.Running) {\n title = 'You are about to remove a running container.';\n }\n\n confirmContainerDeletion(title, function (result) {\n if (!result) {\n return;\n }\n var cleanAssociatedVolumes = false;\n if (result[0]) {\n cleanAssociatedVolumes = true;\n }\n removeContainer(cleanAssociatedVolumes);\n });\n };\n\n function removeContainer(cleanAssociatedVolumes) {\n ContainerService.remove($scope.container, cleanAssociatedVolumes)\n .then(function success() {\n return $q.when($scope.WebhookID && WebhookService.deleteWebhook($scope.WebhookID));\n })\n .then(function success() {\n Notifications.success('Container successfully removed');\n $state.go('docker.containers', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove container');\n });\n }\n\n function recreateContainer(pullImage) {\n var container = $scope.container;\n var config = ContainerHelper.configFromContainer(container.Model);\n $scope.state.recreateContainerInProgress = true;\n var isRunning = container.State.Running;\n\n return pullImageIfNeeded()\n .then(stopContainerIfNeeded)\n .then(renameContainer)\n .then(setMainNetworkAndCreateContainer)\n .then(connectContainerToOtherNetworks)\n .then(recreateWebhook)\n .then(startContainerIfNeeded)\n .then(createResourceControl)\n .then(deleteOldContainer)\n .then(notifyAndChangeView)\n .catch(notifyOnError);\n\n function stopContainerIfNeeded() {\n if (!isRunning) {\n return $q.when();\n }\n return ContainerService.stopContainer(container.Id);\n }\n\n function renameContainer() {\n return ContainerService.renameContainer(container.Id, container.Name + '-old');\n }\n function recreateWebhook(container) {\n $scope.updateWebhook(container, true);\n return container;\n }\n\n function pullImageIfNeeded() {\n if (!pullImage) {\n return $q.when();\n }\n return RegistryService.retrievePorRegistryModelFromRepository(container.Config.Image, endpoint.Id).then((registryModel) => {\n return ImageService.pullImage(registryModel, false);\n });\n }\n\n function setMainNetworkAndCreateContainer() {\n var networks = config.NetworkingConfig.EndpointsConfig;\n var networksNames = Object.keys(networks);\n if (networksNames.length > 1) {\n config.NetworkingConfig.EndpointsConfig = {};\n config.NetworkingConfig.EndpointsConfig[networksNames[0]] = networks[0];\n }\n return $q.all([ContainerService.createContainer(config), networks]);\n }\n\n function connectContainerToOtherNetworks(createContainerData) {\n var newContainer = createContainerData[0];\n var networks = createContainerData[1];\n var networksNames = Object.keys(networks);\n var connectionPromises = networksNames.map(function connectToNetwork(name) {\n NetworkService.connectContainer(name, newContainer.Id);\n });\n return $q.all(connectionPromises).then(function onConnectToNetworkSuccess() {\n return newContainer;\n });\n }\n\n function deleteOldContainer(newContainer) {\n return ContainerService.remove(container, true).then(function onRemoveSuccess() {\n return newContainer;\n });\n }\n\n function startContainerIfNeeded(newContainer) {\n if (!isRunning) {\n return $q.when(newContainer);\n }\n return ContainerService.startContainer(newContainer.Id).then(function onStartSuccess() {\n return newContainer;\n });\n }\n\n function createResourceControl(newContainer) {\n const userId = Authentication.getUserDetails().ID;\n const oldResourceControl = container.ResourceControl;\n const newResourceControl = newContainer.Portainer.ResourceControl;\n return ResourceControlService.duplicateResourceControl(userId, oldResourceControl, newResourceControl);\n }\n\n function notifyAndChangeView() {\n Notifications.success('Container successfully re-created');\n $state.go('docker.containers', {}, { reload: true });\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to re-create container');\n $scope.state.recreateContainerInProgress = false;\n }\n }\n\n $scope.recreate = function () {\n ModalService.confirmContainerRecreation(function (result) {\n if (!result) {\n return;\n }\n var pullImage = false;\n if (result[0]) {\n pullImage = true;\n }\n recreateContainer(pullImage);\n });\n };\n\n function updateRestartPolicy(restartPolicy, maximumRetryCount) {\n maximumRetryCount = restartPolicy === 'on-failure' ? maximumRetryCount : undefined;\n\n return ContainerService.updateRestartPolicy($scope.container.Id, restartPolicy, maximumRetryCount).then(onUpdateSuccess).catch(notifyOnError);\n\n function onUpdateSuccess() {\n $scope.container.HostConfig.RestartPolicy = {\n Name: restartPolicy,\n MaximumRetryCount: maximumRetryCount,\n };\n Notifications.success('Restart policy updated');\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to update restart policy');\n return $q.reject(err);\n }\n }\n\n var provider = $scope.applicationState.endpoint.mode.provider;\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n NetworkService.networks(provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE', false, provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25)\n .then(function success(data) {\n var networks = data;\n $scope.availableNetworks = networks;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve networks');\n });\n\n update();\n },\n]);\n","angular.module('portainer.docker').controller('ContainerInspectController', [\n '$scope',\n '$transition$',\n 'Notifications',\n 'ContainerService',\n 'HttpRequestHelper',\n function ($scope, $transition$, Notifications, ContainerService, HttpRequestHelper) {\n $scope.state = {\n DisplayTextView: false,\n };\n $scope.containerInfo = {};\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n ContainerService.inspect($transition$.params().id)\n .then(function success(d) {\n $scope.containerInfo = d;\n })\n .catch(function error(e) {\n Notifications.error('Failure', e, 'Unable to inspect container');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('ContainerLogsController', [\n '$scope',\n '$transition$',\n '$interval',\n 'ContainerService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($scope, $transition$, $interval, ContainerService, Notifications, HttpRequestHelper) {\n $scope.state = {\n refreshRate: 3,\n lineCount: 100,\n sinceTimestamp: '',\n displayTimestamps: false,\n };\n\n $scope.changeLogCollection = function (logCollectionStatus) {\n if (!logCollectionStatus) {\n stopRepeater();\n } else {\n setUpdateRepeater(!$scope.container.Config.Tty);\n }\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater(skipHeaders) {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n ContainerService.logs(\n $transition$.params().id,\n 1,\n 1,\n $scope.state.displayTimestamps ? 1 : 0,\n moment($scope.state.sinceTimestamp).unix(),\n $scope.state.lineCount,\n skipHeaders\n )\n .then(function success(data) {\n $scope.logs = data;\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container logs');\n });\n }, refreshRate * 1000);\n }\n\n function startLogPolling(skipHeaders) {\n ContainerService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount, skipHeaders)\n .then(function success(data) {\n $scope.logs = data;\n setUpdateRepeater(skipHeaders);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container logs');\n });\n }\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n ContainerService.container($transition$.params().id)\n .then(function success(data) {\n var container = data;\n $scope.container = container;\n startLogPolling(!container.Config.Tty);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container information');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('ContainerStatsController', [\n '$q',\n '$scope',\n '$transition$',\n '$document',\n '$interval',\n 'ContainerService',\n 'ChartService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($q, $scope, $transition$, $document, $interval, ContainerService, ChartService, Notifications, HttpRequestHelper) {\n $scope.state = {\n refreshRate: '5',\n networkStatsUnavailable: false,\n ioStatsUnavailable: false,\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function updateNetworkChart(stats, chart) {\n if (stats.Networks.length > 0) {\n var rx = stats.Networks[0].rx_bytes;\n var tx = stats.Networks[0].tx_bytes;\n var label = moment(stats.read).format('HH:mm:ss');\n\n ChartService.UpdateNetworkChart(label, rx, tx, chart);\n }\n }\n\n function updateMemoryChart(stats, chart) {\n var label = moment(stats.read).format('HH:mm:ss');\n\n ChartService.UpdateMemoryChart(label, stats.MemoryUsage, stats.MemoryCache, chart);\n }\n\n function updateIOChart(stats, chart) {\n var label = moment(stats.read).format('HH:mm:ss');\n if (stats.noIOData !== true) {\n ChartService.UpdateIOChart(label, stats.BytesRead, stats.BytesWrite, chart);\n }\n }\n\n function updateCPUChart(stats, chart) {\n var label = moment(stats.read).format('HH:mm:ss');\n var value = stats.isWindows ? calculateCPUPercentWindows(stats) : calculateCPUPercentUnix(stats);\n\n ChartService.UpdateCPUChart(label, value, chart);\n }\n\n function calculateCPUPercentUnix(stats) {\n var cpuPercent = 0.0;\n var cpuDelta = stats.CurrentCPUTotalUsage - stats.PreviousCPUTotalUsage;\n var systemDelta = stats.CurrentCPUSystemUsage - stats.PreviousCPUSystemUsage;\n\n if (systemDelta > 0.0 && cpuDelta > 0.0) {\n cpuPercent = (cpuDelta / systemDelta) * stats.CPUCores * 100.0;\n }\n\n return cpuPercent;\n }\n\n function calculateCPUPercentWindows(stats) {\n var possIntervals =\n stats.NumProcs * parseFloat(moment(stats.read, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSSSZ').valueOf() - moment(stats.preread, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSSSZ').valueOf());\n var windowsCpuUsage = 0.0;\n if (possIntervals > 0) {\n windowsCpuUsage = parseFloat(stats.CurrentCPUTotalUsage - stats.PreviousCPUTotalUsage) / parseFloat(possIntervals * 100);\n }\n return windowsCpuUsage;\n }\n\n $scope.changeUpdateRepeater = function () {\n var networkChart = $scope.networkChart;\n var cpuChart = $scope.cpuChart;\n var memoryChart = $scope.memoryChart;\n var ioChart = $scope.ioChart;\n\n stopRepeater();\n setUpdateRepeater(networkChart, cpuChart, memoryChart, ioChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n };\n\n function startChartUpdate(networkChart, cpuChart, memoryChart, ioChart) {\n $q.all({\n stats: ContainerService.containerStats($transition$.params().id),\n top: ContainerService.containerTop($transition$.params().id),\n })\n .then(function success(data) {\n var stats = data.stats;\n $scope.processInfo = data.top;\n if (stats.Networks.length === 0) {\n $scope.state.networkStatsUnavailable = true;\n }\n if (stats.noIOData === true) {\n $scope.state.ioStatsUnavailable = true;\n }\n updateNetworkChart(stats, networkChart);\n updateMemoryChart(stats, memoryChart);\n updateCPUChart(stats, cpuChart);\n updateIOChart(stats, ioChart);\n setUpdateRepeater(networkChart, cpuChart, memoryChart, ioChart);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container statistics');\n });\n }\n\n function setUpdateRepeater(networkChart, cpuChart, memoryChart, ioChart) {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n $q.all({\n stats: ContainerService.containerStats($transition$.params().id),\n top: ContainerService.containerTop($transition$.params().id),\n })\n .then(function success(data) {\n var stats = data.stats;\n $scope.processInfo = data.top;\n updateNetworkChart(stats, networkChart);\n updateMemoryChart(stats, memoryChart);\n updateCPUChart(stats, cpuChart);\n updateIOChart(stats, ioChart);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve container statistics');\n });\n }, refreshRate * 1000);\n }\n\n function initCharts() {\n var networkChartCtx = $('#networkChart');\n var networkChart = ChartService.CreateNetworkChart(networkChartCtx);\n $scope.networkChart = networkChart;\n\n var cpuChartCtx = $('#cpuChart');\n var cpuChart = ChartService.CreateCPUChart(cpuChartCtx);\n $scope.cpuChart = cpuChart;\n\n var memoryChartCtx = $('#memoryChart');\n var memoryChart = ChartService.CreateMemoryChart(memoryChartCtx);\n $scope.memoryChart = memoryChart;\n\n var ioChartCtx = $('#ioChart');\n var ioChart = ChartService.CreateIOChart(ioChartCtx);\n $scope.ioChart = ioChart;\n\n startChartUpdate(networkChart, cpuChart, memoryChart, ioChart);\n }\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n ContainerService.container($transition$.params().id)\n .then(function success(data) {\n $scope.container = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve container information');\n });\n\n $document.ready(function () {\n initCharts();\n });\n }\n\n initView();\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash';\n\nimport { isOfflineEndpoint } from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.docker').controller('DashboardController', [\n '$scope',\n '$q',\n 'Authentication',\n 'ContainerService',\n 'ImageService',\n 'NetworkService',\n 'VolumeService',\n 'SystemService',\n 'ServiceService',\n 'StackService',\n 'Notifications',\n 'StateManager',\n 'TagService',\n 'endpoint',\n function (\n $scope,\n $q,\n Authentication,\n ContainerService,\n ImageService,\n NetworkService,\n VolumeService,\n SystemService,\n ServiceService,\n StackService,\n Notifications,\n StateManager,\n TagService,\n endpoint\n ) {\n $scope.dismissInformationPanel = function (id) {\n StateManager.dismissInformationPanel(id);\n };\n\n $scope.offlineMode = false;\n $scope.showStacks = false;\n\n async function initView() {\n const endpointMode = $scope.applicationState.endpoint.mode;\n $scope.endpoint = endpoint;\n\n $scope.showStacks = await shouldShowStacks();\n\n $q.all({\n containers: ContainerService.containers(1),\n images: ImageService.images(false),\n volumes: VolumeService.volumes(),\n networks: NetworkService.networks(true, true, true),\n services: endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER' ? ServiceService.services() : [],\n stacks: StackService.stacks(true, endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER', endpoint.Id),\n info: SystemService.info(),\n tags: TagService.tags(),\n })\n .then(function success(data) {\n $scope.containers = data.containers;\n $scope.images = data.images;\n $scope.volumeCount = data.volumes.length;\n $scope.networkCount = data.networks.length;\n $scope.serviceCount = data.services.length;\n $scope.stackCount = data.stacks.length;\n $scope.info = data.info;\n $scope.endpointTags = endpoint.TagIds.length\n ? _.join(\n _.filter(\n _.map(endpoint.TagIds, (id) => {\n const tag = data.tags.find((tag) => tag.Id === id);\n return tag ? tag.Name : '';\n }),\n Boolean\n ),\n ', '\n )\n : '-';\n $scope.offlineMode = isOfflineEndpoint(endpoint);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load dashboard data');\n });\n }\n\n async function shouldShowStacks() {\n const isAdmin = Authentication.isAdmin();\n\n return isAdmin || endpoint.SecuritySettings.allowStackManagementForRegularUsers || Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n }\n\n initView();\n },\n]);\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nexport default class DockerFeaturesConfigurationController {\n /* @ngInject */\n constructor($analytics, $async, $scope, EndpointService, Notifications, StateManager) {\n this.$analytics = $analytics;\n this.$async = $async;\n this.$scope = $scope;\n this.EndpointService = EndpointService;\n this.Notifications = Notifications;\n this.StateManager = StateManager;\n\n this.limitedFeature = FeatureId.HIDE_AUTO_UPDATE_WINDOW;\n\n this.formValues = {\n enableHostManagementFeatures: false,\n allowVolumeBrowserForRegularUsers: false,\n disableBindMountsForRegularUsers: false,\n disablePrivilegedModeForRegularUsers: false,\n disableHostNamespaceForRegularUsers: false,\n disableStackManagementForRegularUsers: false,\n disableDeviceMappingForRegularUsers: false,\n disableContainerCapabilitiesForRegularUsers: false,\n disableSysctlSettingForRegularUsers: false,\n };\n\n this.isAgent = false;\n\n this.state = {\n actionInProgress: false,\n autoUpdateSettings: { Enabled: false },\n timeZone: '',\n };\n\n this.save = this.save.bind(this);\n this.onChangeField = this.onChangeField.bind(this);\n this.onToggleAutoUpdate = this.onToggleAutoUpdate.bind(this);\n this.onChangeEnableHostManagementFeatures = this.onChangeField('enableHostManagementFeatures');\n this.onChangeAllowVolumeBrowserForRegularUsers = this.onChangeField('allowVolumeBrowserForRegularUsers');\n this.onChangeDisableBindMountsForRegularUsers = this.onChangeField('disableBindMountsForRegularUsers');\n this.onChangeDisablePrivilegedModeForRegularUsers = this.onChangeField('disablePrivilegedModeForRegularUsers');\n this.onChangeDisableHostNamespaceForRegularUsers = this.onChangeField('disableHostNamespaceForRegularUsers');\n this.onChangeDisableStackManagementForRegularUsers = this.onChangeField('disableStackManagementForRegularUsers');\n this.onChangeDisableDeviceMappingForRegularUsers = this.onChangeField('disableDeviceMappingForRegularUsers');\n this.onChangeDisableContainerCapabilitiesForRegularUsers = this.onChangeField('disableContainerCapabilitiesForRegularUsers');\n this.onChangeDisableSysctlSettingForRegularUsers = this.onChangeField('disableSysctlSettingForRegularUsers');\n }\n\n onToggleAutoUpdate(value) {\n return this.$scope.$evalAsync(() => {\n this.state.autoUpdateSettings.Enabled = value;\n });\n }\n\n onChange(values) {\n return this.$scope.$evalAsync(() => {\n this.formValues = {\n ...this.formValues,\n ...values,\n };\n });\n }\n\n onChangeField(field) {\n return (value) => {\n this.onChange({\n [field]: value,\n });\n };\n }\n\n isContainerEditDisabled() {\n const {\n disableBindMountsForRegularUsers,\n disableHostNamespaceForRegularUsers,\n disablePrivilegedModeForRegularUsers,\n disableDeviceMappingForRegularUsers,\n disableContainerCapabilitiesForRegularUsers,\n disableSysctlSettingForRegularUsers,\n } = this.formValues;\n return (\n disableBindMountsForRegularUsers ||\n disableHostNamespaceForRegularUsers ||\n disablePrivilegedModeForRegularUsers ||\n disableDeviceMappingForRegularUsers ||\n disableContainerCapabilitiesForRegularUsers ||\n disableSysctlSettingForRegularUsers\n );\n }\n\n async save() {\n return this.$async(async () => {\n try {\n this.state.actionInProgress = true;\n const securitySettings = {\n enableHostManagementFeatures: this.formValues.enableHostManagementFeatures,\n allowBindMountsForRegularUsers: !this.formValues.disableBindMountsForRegularUsers,\n allowPrivilegedModeForRegularUsers: !this.formValues.disablePrivilegedModeForRegularUsers,\n allowVolumeBrowserForRegularUsers: this.formValues.allowVolumeBrowserForRegularUsers,\n allowHostNamespaceForRegularUsers: !this.formValues.disableHostNamespaceForRegularUsers,\n allowDeviceMappingForRegularUsers: !this.formValues.disableDeviceMappingForRegularUsers,\n allowStackManagementForRegularUsers: !this.formValues.disableStackManagementForRegularUsers,\n allowContainerCapabilitiesForRegularUsers: !this.formValues.disableContainerCapabilitiesForRegularUsers,\n allowSysctlSettingForRegularUsers: !this.formValues.disableSysctlSettingForRegularUsers,\n };\n const settings = {\n securitySettings,\n changeWindow: this.state.autoUpdateSettings,\n };\n\n await this.EndpointService.updateSettings(this.endpoint.Id, settings);\n\n this.endpoint.SecuritySettings = settings.securitySettings;\n this.endpoint.ChangeWindow = settings.changeWindow;\n\n // Timezone is only for Analytics, not for API payload\n this.$analytics.eventTrack('time-window-create', {\n category: 'docker',\n metadata: {\n 'Start-time': settings.changeWindow.StartTime,\n 'End-time': settings.changeWindow.EndTime,\n 'Time-zone': this.state.timeZone,\n },\n });\n\n this.Notifications.success('Saved settings successfully');\n } catch (e) {\n this.Notifications.error('Failure', e, 'Failed saving settings');\n }\n this.state.actionInProgress = false;\n });\n }\n\n checkAgent() {\n const applicationState = this.StateManager.getState();\n return applicationState.endpoint.mode.agentProxy;\n }\n\n $onInit() {\n const securitySettings = this.endpoint.SecuritySettings;\n\n const isAgent = this.checkAgent();\n this.isAgent = isAgent;\n\n this.formValues = {\n enableHostManagementFeatures: isAgent && securitySettings.enableHostManagementFeatures,\n allowVolumeBrowserForRegularUsers: isAgent && securitySettings.allowVolumeBrowserForRegularUsers,\n disableBindMountsForRegularUsers: !securitySettings.allowBindMountsForRegularUsers,\n disablePrivilegedModeForRegularUsers: !securitySettings.allowPrivilegedModeForRegularUsers,\n disableHostNamespaceForRegularUsers: !securitySettings.allowHostNamespaceForRegularUsers,\n disableDeviceMappingForRegularUsers: !securitySettings.allowDeviceMappingForRegularUsers,\n disableStackManagementForRegularUsers: !securitySettings.allowStackManagementForRegularUsers,\n disableContainerCapabilitiesForRegularUsers: !securitySettings.allowContainerCapabilitiesForRegularUsers,\n disableSysctlSettingForRegularUsers: !securitySettings.allowSysctlSettingForRegularUsers,\n };\n\n this.state.autoUpdateSettings = this.endpoint.ChangeWindow;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./docker-features-configuration.html');\n\nimport angular from 'angular';\n\nimport controller from './docker-features-configuration.controller';\n\nangular.module('portainer.docker').component('dockerFeaturesConfigurationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n endpoint: '<',\n },\n});\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('EventsController', [\n '$scope',\n 'Notifications',\n 'SystemService',\n function ($scope, Notifications, SystemService) {\n function initView() {\n var from = moment().subtract(24, 'hour').unix();\n var to = moment().unix();\n\n SystemService.events(from, to)\n .then(function success(data) {\n $scope.events = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load events');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('HostBrowserViewController', [\n 'SystemService',\n 'Notifications',\n function HostBrowserViewController(SystemService, Notifications) {\n var ctrl = this;\n ctrl.$onInit = $onInit;\n\n function $onInit() {\n SystemService.info()\n .then(function onInfoLoaded(host) {\n ctrl.host = host;\n })\n .catch(function onError(err) {\n Notifications.error('Unable to retrieve host information', err);\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./host-browser-view.html');\n\nangular.module('portainer.docker').component('hostBrowserView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'HostBrowserViewController',\n bindings: {\n endpoint: '<',\n },\n});\n","import { isOfflineEndpoint } from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.docker').controller('HostViewController', [\n '$q',\n 'SystemService',\n 'Notifications',\n 'StateManager',\n 'AgentService',\n 'ContainerService',\n 'Authentication',\n function HostViewController($q, SystemService, Notifications, StateManager, AgentService, ContainerService, Authentication) {\n var ctrl = this;\n\n this.$onInit = initView;\n\n ctrl.state = {\n isAgent: false,\n isAdmin: false,\n offlineMode: false,\n };\n\n this.engineDetails = {};\n this.hostDetails = {};\n this.devices = null;\n this.disks = null;\n\n function initView() {\n var applicationState = StateManager.getState();\n ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy;\n ctrl.state.isAdmin = Authentication.isAdmin();\n var agentApiVersion = applicationState.endpoint.agentApiVersion;\n ctrl.state.agentApiVersion = agentApiVersion;\n ctrl.state.enableHostManagementFeatures = ctrl.endpoint.SecuritySettings.enableHostManagementFeatures;\n\n $q.all({\n version: SystemService.version(),\n info: SystemService.info(),\n jobs: ctrl.state.isAdmin ? ContainerService.containers(true, { label: ['io.portainer.job.endpoint'] }) : [],\n })\n .then(function success(data) {\n ctrl.engineDetails = buildEngineDetails(data);\n ctrl.hostDetails = buildHostDetails(data.info);\n ctrl.state.offlineMode = isOfflineEndpoint(ctrl.endpoint);\n ctrl.jobs = data.jobs;\n\n if (ctrl.state.isAgent && agentApiVersion > 1) {\n return AgentService.hostInfo(data.info.Hostname).then(function onHostInfoLoad(agentHostInfo) {\n ctrl.devices = agentHostInfo.PCIDevices;\n ctrl.disks = agentHostInfo.PhysicalDisks;\n });\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve engine details');\n });\n }\n\n function buildEngineDetails(data) {\n var versionDetails = data.version;\n var info = data.info;\n return {\n releaseVersion: versionDetails.Version,\n apiVersion: versionDetails.ApiVersion,\n rootDirectory: info.DockerRootDir,\n storageDriver: info.Driver,\n loggingDriver: info.LoggingDriver,\n volumePlugins: info.Plugins.Volume,\n networkPlugins: info.Plugins.Network,\n };\n }\n\n function buildHostDetails(info) {\n return {\n os: {\n arch: info.Architecture,\n type: info.OSType,\n name: info.OperatingSystem,\n },\n name: info.Name,\n kernelVersion: info.KernelVersion,\n totalCPU: info.NCPU,\n totalMemory: info.MemTotal,\n };\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./host-view.html');\n\nangular.module('portainer.docker').component('hostView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'HostViewController',\n bindings: {\n endpoint: '<',\n },\n});\n","angular.module('portainer.docker').controller('BuildImageController', BuildImageController);\n\n/* @ngInject */\nfunction BuildImageController($scope, $async, $window, ModalService, BuildService, Notifications, HttpRequestHelper) {\n $scope.state = {\n BuildType: 'editor',\n actionInProgress: false,\n activeTab: 0,\n isEditorDirty: false,\n };\n\n $scope.formValues = {\n ImageNames: [{ Name: '' }],\n UploadFile: null,\n DockerFileContent: '',\n URL: '',\n Path: 'Dockerfile',\n NodeName: null,\n };\n\n $window.onbeforeunload = () => {\n if ($scope.state.BuildType === 'editor' && $scope.formValues.DockerFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.$on('$destroy', function () {\n $scope.state.isEditorDirty = false;\n });\n\n $scope.addImageName = function () {\n $scope.formValues.ImageNames.push({ Name: '' });\n };\n\n $scope.addImageName = function () {\n $scope.formValues.ImageNames.push({ Name: '' });\n };\n\n $scope.removeImageName = function (index) {\n $scope.formValues.ImageNames.splice(index, 1);\n };\n\n function buildImageBasedOnBuildType(method, names) {\n var buildType = $scope.state.BuildType;\n var dockerfilePath = $scope.formValues.Path;\n\n if (buildType === 'upload') {\n var file = $scope.formValues.UploadFile;\n return BuildService.buildImageFromUpload(names, file, dockerfilePath);\n } else if (buildType === 'url') {\n var URL = $scope.formValues.URL;\n return BuildService.buildImageFromURL(names, URL, dockerfilePath);\n } else {\n var dockerfileContent = $scope.formValues.DockerFileContent;\n return BuildService.buildImageFromDockerfileContent(names, dockerfileContent);\n }\n }\n\n $scope.buildImage = buildImage;\n\n async function buildImage() {\n return $async(async () => {\n var buildType = $scope.state.BuildType;\n\n if (buildType === 'editor' && $scope.formValues.DockerFileContent === '') {\n $scope.state.formValidationError = 'Dockerfile content must not be empty';\n return;\n }\n\n $scope.state.actionInProgress = true;\n\n var imageNames = $scope.formValues.ImageNames.filter(function filterNull(x) {\n return x.Name;\n }).map(function getNames(x) {\n return x.Name;\n });\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n try {\n const data = await buildImageBasedOnBuildType(buildType, imageNames);\n $scope.buildLogs = data.buildLogs;\n\n if ($scope.buildLogs) {\n $scope.state.isEditorDirty = false;\n }\n\n $scope.state.activeTab = 1;\n\n if (data.hasError) {\n Notifications.error('An error occurred during build', { msg: 'Please check build logs output' });\n } else {\n Notifications.success('Image successfully built');\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to build image');\n } finally {\n $scope.state.actionInProgress = false;\n }\n });\n }\n\n $scope.validImageNames = function () {\n for (var i = 0; i < $scope.formValues.ImageNames.length; i++) {\n var item = $scope.formValues.ImageNames[i];\n if (item.Name !== '') {\n return true;\n }\n }\n return false;\n };\n\n $scope.editorUpdate = function (cm) {\n $scope.formValues.DockerFileContent = cm.getValue();\n $scope.state.isEditorDirty = true;\n };\n\n this.uiCanExit = async function () {\n if ($scope.state.BuildType === 'editor' && $scope.formValues.DockerFileContent && $scope.state.isEditorDirty) {\n return ModalService.confirmWebEditorDiscard();\n }\n };\n}\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nangular.module('portainer.docker').controller('ImageController', [\n '$async',\n '$q',\n '$scope',\n '$transition$',\n '$state',\n 'Authentication',\n 'ImageService',\n 'ImageHelper',\n 'RegistryService',\n 'Notifications',\n 'HttpRequestHelper',\n 'ModalService',\n 'FileSaver',\n 'Blob',\n 'endpoint',\n 'EndpointService',\n 'RegistryModalService',\n function (\n $async,\n $q,\n $scope,\n $transition$,\n $state,\n Authentication,\n ImageService,\n ImageHelper,\n RegistryService,\n Notifications,\n HttpRequestHelper,\n ModalService,\n FileSaver,\n Blob,\n endpoint,\n EndpointService,\n RegistryModalService\n ) {\n $scope.endpoint = endpoint;\n $scope.isAdmin = Authentication.isAdmin();\n\n $scope.formValues = {\n RegistryModel: new PorImageRegistryModel(),\n };\n\n $scope.state = {\n exportInProgress: false,\n pullImageValidity: false,\n };\n\n $scope.sortType = 'Order';\n $scope.sortReverse = false;\n\n $scope.order = function (sortType) {\n $scope.sortReverse = $scope.sortType === sortType ? !$scope.sortReverse : false;\n $scope.sortType = sortType;\n };\n\n $scope.toggleLayerCommand = function (layerId) {\n $('#layer-command-expander' + layerId + ' span').toggleClass('glyphicon-plus-sign glyphicon-minus-sign');\n $('#layer-command-' + layerId + '-short').toggle();\n $('#layer-command-' + layerId + '-full').toggle();\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.tagImage = function () {\n const registryModel = $scope.formValues.RegistryModel;\n\n const image = ImageHelper.createImageConfigForContainer(registryModel);\n\n ImageService.tagImage($transition$.params().id, image.fromImage)\n .then(function success() {\n Notifications.success('Image successfully tagged');\n $state.go('docker.images.image', { id: $transition$.params().id }, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to tag image');\n });\n };\n\n $scope.pushTag = pushTag;\n\n async function pushTag(repository) {\n return $async(async () => {\n try {\n const registryModel = await RegistryModalService.registryModal(repository, $scope.registries);\n if (registryModel) {\n $('#uploadResourceHint').show();\n await ImageService.pushImage(registryModel);\n Notifications.success('Image successfully pushed', repository);\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to push image to repository');\n } finally {\n $('#uploadResourceHint').hide();\n }\n });\n }\n\n $scope.pullTag = pullTag;\n async function pullTag(repository) {\n return $async(async () => {\n try {\n const registryModel = await RegistryModalService.registryModal(repository, $scope.registries);\n if (registryModel) {\n $('#downloadResourceHint').show();\n await ImageService.pullImage(registryModel);\n Notifications.success('Image successfully pulled', repository);\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to pull image from repository');\n } finally {\n $('#downloadResourceHint').hide();\n }\n });\n }\n\n $scope.removeTag = function (repository) {\n ImageService.deleteImage(repository, false)\n .then(function success() {\n if ($scope.image.RepoTags.length === 1) {\n Notifications.success('Image successfully deleted', repository);\n $state.go('docker.images', {}, { reload: true });\n } else {\n Notifications.success('Tag successfully deleted', repository);\n $state.go('docker.images.image', { id: $transition$.params().id }, { reload: true });\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove image');\n });\n };\n\n $scope.removeImage = function (id) {\n ImageService.deleteImage(id, false)\n .then(function success() {\n Notifications.success('Image successfully deleted', id);\n $state.go('docker.images', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove image');\n });\n };\n\n function exportImage(image) {\n HttpRequestHelper.setPortainerAgentTargetHeader(image.NodeName);\n $scope.state.exportInProgress = true;\n ImageService.downloadImages([image])\n .then(function success(data) {\n var downloadData = new Blob([data.file], { type: 'application/x-tar' });\n FileSaver.saveAs(downloadData, 'images.tar');\n Notifications.success('Image successfully downloaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to download image');\n })\n .finally(function final() {\n $scope.state.exportInProgress = false;\n });\n }\n\n $scope.exportImage = function (image) {\n if (image.RepoTags.length === 0 || _.includes(image.RepoTags, '')) {\n Notifications.warning('', 'Cannot download a untagged image');\n return;\n }\n\n ModalService.confirmImageExport(function (confirmed) {\n if (!confirmed) {\n return;\n }\n exportImage(image);\n });\n };\n\n async function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n\n try {\n $scope.registries = await RegistryService.loadRegistriesForDropdown(endpoint.Id);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load registries');\n }\n\n $q.all({\n image: ImageService.image($transition$.params().id),\n history: ImageService.history($transition$.params().id),\n })\n .then(function success(data) {\n $scope.image = data.image;\n $scope.history = data.history;\n $scope.image.Env = _.sortBy($scope.image.Env, _.toLower);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve image details');\n $state.go('docker.images');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport { isOfflineEndpoint } from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.docker').controller('ImagesController', [\n '$scope',\n '$state',\n 'Authentication',\n 'ImageService',\n 'Notifications',\n 'ModalService',\n 'HttpRequestHelper',\n 'FileSaver',\n 'Blob',\n 'endpoint',\n function ($scope, $state, Authentication, ImageService, Notifications, ModalService, HttpRequestHelper, FileSaver, Blob, endpoint) {\n $scope.endpoint = endpoint;\n $scope.isAdmin = Authentication.isAdmin();\n\n $scope.state = {\n actionInProgress: false,\n exportInProgress: false,\n pullRateValid: false,\n };\n\n $scope.formValues = {\n RegistryModel: new PorImageRegistryModel(),\n NodeName: null,\n };\n\n $scope.pullImage = function () {\n const registryModel = $scope.formValues.RegistryModel;\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n $scope.state.actionInProgress = true;\n ImageService.pullImage(registryModel, false)\n .then(function success(data) {\n var err = data[data.length - 1].errorDetail;\n if (err) {\n return Notifications.error('Failure', err, 'Unable to pull image');\n }\n Notifications.success('Image successfully pulled', registryModel.Image);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to pull image');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.confirmRemovalAction = function (selectedItems, force) {\n ModalService.confirmImageForceRemoval(function (confirmed) {\n if (!confirmed) {\n return;\n }\n $scope.removeAction(selectedItems, force);\n });\n };\n\n function isAuthorizedToDownload(selectedItems) {\n for (var i = 0; i < selectedItems.length; i++) {\n var image = selectedItems[i];\n\n var untagged = _.find(image.RepoTags, function (item) {\n return item.indexOf('') > -1;\n });\n\n if (untagged) {\n Notifications.warning('', 'Cannot download a untagged image');\n return false;\n }\n }\n\n if (_.uniqBy(selectedItems, 'NodeName').length > 1) {\n Notifications.warning('', 'Cannot download images from different nodes at the same time');\n return false;\n }\n\n return true;\n }\n\n function exportImages(images) {\n HttpRequestHelper.setPortainerAgentTargetHeader(images[0].NodeName);\n $scope.state.exportInProgress = true;\n ImageService.downloadImages(images)\n .then(function success(data) {\n var downloadData = new Blob([data.file], { type: 'application/x-tar' });\n FileSaver.saveAs(downloadData, 'images.tar');\n Notifications.success('Image(s) successfully downloaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to download image(s)');\n })\n .finally(function final() {\n $scope.state.exportInProgress = false;\n });\n }\n\n $scope.downloadAction = function (selectedItems) {\n if (!isAuthorizedToDownload(selectedItems)) {\n return;\n }\n\n ModalService.confirmImageExport(function (confirmed) {\n if (!confirmed) {\n return;\n }\n exportImages(selectedItems);\n });\n };\n\n $scope.removeAction = function (selectedItems, force) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (image) {\n HttpRequestHelper.setPortainerAgentTargetHeader(image.NodeName);\n ImageService.deleteImage(image.Id, force)\n .then(function success() {\n Notifications.success('Image successfully removed', image.Id);\n var index = $scope.images.indexOf(image);\n $scope.images.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove image');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.offlineMode = false;\n\n $scope.getImages = getImages;\n function getImages() {\n ImageService.images(true)\n .then(function success(data) {\n $scope.images = data;\n $scope.offlineMode = isOfflineEndpoint(endpoint);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve images');\n $scope.images = [];\n });\n }\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullRateValid = validity;\n }\n\n function initView() {\n getImages();\n }\n\n initView();\n },\n]);\n","import { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nangular.module('portainer.docker').controller('ImportImageController', [\n '$scope',\n '$state',\n 'ImageService',\n 'Notifications',\n 'HttpRequestHelper',\n 'Authentication',\n 'ImageHelper',\n 'endpoint',\n function ($scope, $state, ImageService, Notifications, HttpRequestHelper, Authentication, ImageHelper, endpoint) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.endpoint = endpoint;\n\n $scope.isAdmin = Authentication.isAdmin();\n\n $scope.formValues = {\n UploadFile: null,\n NodeName: null,\n RegistryModel: new PorImageRegistryModel(),\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n async function tagImage(id) {\n const registryModel = $scope.formValues.RegistryModel;\n if (registryModel.Image) {\n const image = ImageHelper.createImageConfigForContainer(registryModel);\n try {\n await ImageService.tagImage(id, image.fromImage);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to tag image');\n }\n }\n }\n\n $scope.uploadImage = async function () {\n $scope.state.actionInProgress = true;\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n var file = $scope.formValues.UploadFile;\n try {\n const { data } = await ImageService.uploadImage(file);\n if (data.error) {\n Notifications.error('Failure', data.error, 'Unable to upload image');\n } else if (data.stream) {\n var regex = /Loaded.*?: (.*?)\\n$/g;\n var imageIds = regex.exec(data.stream);\n if (imageIds && imageIds.length == 2) {\n await tagImage(imageIds[1]);\n $state.go('docker.images.image', { id: imageIds[1] }, { reload: true });\n }\n Notifications.success('Images successfully uploaded');\n } else {\n Notifications.success('The uploaded tar file contained multiple images. The provided tag therefore has been ignored.');\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to upload image');\n } finally {\n $scope.state.actionInProgress = false;\n }\n };\n },\n]);\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\nimport { MacvlanFormData } from '../../../components/network-macvlan-form/networkMacvlanFormModel';\n\nangular.module('portainer.docker').controller('CreateNetworkController', [\n '$q',\n '$scope',\n '$state',\n 'PluginService',\n 'Notifications',\n 'NetworkService',\n 'LabelHelper',\n 'Authentication',\n 'ResourceControlService',\n 'FormValidator',\n 'HttpRequestHelper',\n function ($q, $scope, $state, PluginService, Notifications, NetworkService, LabelHelper, Authentication, ResourceControlService, FormValidator, HttpRequestHelper) {\n $scope.formValues = {\n DriverOptions: [],\n IPV4: {\n Subnet: '',\n Gateway: '',\n IPRange: '',\n AuxiliaryAddresses: [],\n },\n IPV6: {\n Subnet: '',\n Gateway: '',\n IPRange: '',\n AuxiliaryAddresses: [],\n },\n Labels: [],\n AccessControlData: new AccessControlFormData(),\n NodeName: null,\n Macvlan: new MacvlanFormData(),\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.availableNetworkDrivers = [];\n\n $scope.config = {\n Driver: 'bridge',\n CheckDuplicate: true,\n Internal: false,\n Attachable: false,\n EnableIPv6: false,\n // Force IPAM Driver to 'default', should not be required.\n // See: https://github.com/docker/docker/issues/25735\n IPAM: {\n Driver: 'default',\n Config: [],\n },\n Labels: {},\n };\n\n $scope.addDriverOption = function () {\n $scope.formValues.DriverOptions.push({\n name: '',\n value: '',\n });\n };\n\n $scope.removeDriverOption = function (index) {\n $scope.formValues.DriverOptions.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({\n key: '',\n value: '',\n });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n $scope.addIPV4AuxAddress = function () {\n $scope.formValues.IPV4.AuxiliaryAddresses.push('');\n };\n\n $scope.addIPV6AuxAddress = function () {\n $scope.formValues.IPV6.AuxiliaryAddresses.push('');\n };\n\n $scope.removeIPV4AuxAddress = function (index) {\n $scope.formValues.IPV4.AuxiliaryAddresses.splice(index, 1);\n $scope.state.IPV4AuxiliaryAddressesError.splice(index, 1);\n };\n\n $scope.removeIPV6AuxAddress = function (index) {\n $scope.formValues.IPV6.AuxiliaryAddresses.splice(index, 1);\n $scope.state.IPV6AuxiliaryAddressesError.splice(index, 1);\n };\n\n function checkAuxiliaryAddress(excludedIP, gateway) {\n const split = _.split(excludedIP, '=');\n\n if (split.length === 2) {\n return split[1] === gateway;\n }\n return excludedIP === gateway;\n }\n\n $scope.checkIPV4AuxiliaryAddress = function (index) {\n $scope.state.IPV4AuxiliaryAddressesError[index] = checkAuxiliaryAddress($scope.formValues.IPV4.AuxiliaryAddresses[index], $scope.formValues.IPV4.Gateway);\n };\n\n $scope.checkIPV6AuxiliaryAddress = function (index) {\n $scope.state.IPV6AuxiliaryAddressesError[index] = checkAuxiliaryAddress($scope.formValues.IPV6.AuxiliaryAddresses[index], $scope.formValues.IPV6.Gateway);\n };\n\n $scope.isValid = function () {\n const validIPV4 = !_.reduce($scope.state.IPV4AuxiliaryAddressesError, (acc, item) => acc || item, false);\n const validIPV6 = !_.reduce($scope.state.IPV6AuxiliaryAddressesError, (acc, item) => acc || item, false);\n return validIPV4 && validIPV6;\n };\n\n function prepareAuxiliaryAddresses(ipamConfig, ipFormValues) {\n ipamConfig.AuxiliaryAddresses = {};\n _.forEach(ipFormValues.AuxiliaryAddresses, (auxAddress, index) => {\n const split = _.split(auxAddress, '=');\n if (split.length === 2) {\n ipamConfig.AuxiliaryAddresses[split[0]] = split[1];\n } else {\n ipamConfig.AuxiliaryAddresses['device' + index] = auxAddress;\n }\n });\n }\n\n function prepareIPAMConfiguration(config) {\n if ($scope.formValues.IPV4.Subnet) {\n let ipamConfig = {};\n ipamConfig.Subnet = $scope.formValues.IPV4.Subnet;\n if ($scope.formValues.IPV4.Gateway) {\n ipamConfig.Gateway = $scope.formValues.IPV4.Gateway;\n }\n if ($scope.formValues.IPV4.IPRange) {\n ipamConfig.IPRange = $scope.formValues.IPV4.IPRange;\n }\n if ($scope.formValues.IPV4.AuxiliaryAddresses.length) {\n prepareAuxiliaryAddresses(ipamConfig, $scope.formValues.IPV4);\n }\n config.IPAM.Config.push(ipamConfig);\n }\n if ($scope.formValues.IPV6.Subnet) {\n let ipamConfig = {};\n ipamConfig.Subnet = $scope.formValues.IPV6.Subnet;\n if ($scope.formValues.IPV6.Gateway) {\n ipamConfig.Gateway = $scope.formValues.IPV6.Gateway;\n }\n if ($scope.formValues.IPV6.IPRange) {\n ipamConfig.IPRange = $scope.formValues.IPV6.IPRange;\n }\n if ($scope.formValues.IPV6.AuxiliaryAddresses.length) {\n prepareAuxiliaryAddresses(ipamConfig, $scope.formValues.IPV6);\n }\n config.EnableIPv6 = true;\n config.IPAM.Config.push(ipamConfig);\n }\n }\n\n function prepareDriverOptions(config) {\n var options = {};\n $scope.formValues.DriverOptions.forEach(function (option) {\n options[option.name] = option.value;\n });\n config.Options = options;\n }\n\n function prepareLabelsConfig(config) {\n config.Labels = LabelHelper.fromKeyValueToLabelHash($scope.formValues.Labels);\n }\n\n function prepareConfiguration() {\n var config = angular.copy($scope.config);\n prepareIPAMConfiguration(config);\n prepareDriverOptions(config);\n prepareLabelsConfig(config);\n return config;\n }\n\n function modifyNetworkConfigurationForMacvlanConfigOnly(config) {\n config.Internal = null;\n config.Attachable = null;\n config.ConfigOnly = true;\n config.Options.parent = $scope.formValues.Macvlan.ParentNetworkCard;\n }\n\n function modifyNetworkConfigurationForMacvlanConfigFrom(config, selectedNetworkConfig) {\n config.ConfigFrom = {\n Network: selectedNetworkConfig.Name,\n };\n if ($scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {\n config.Scope = 'swarm';\n } else {\n config.Scope = 'local';\n }\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function createNetwork(context) {\n HttpRequestHelper.setPortainerAgentTargetHeader(context.nodeName);\n HttpRequestHelper.setPortainerAgentManagerOperation(context.managerOperation);\n\n $scope.state.actionInProgress = true;\n NetworkService.create(context.networkConfiguration)\n .then(function success(data) {\n const userId = context.userDetails.ID;\n const accessControlData = context.accessControlData;\n const resourceControl = data.Portainer.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Network successfully created');\n if (context.reload) {\n $state.go(\n 'docker.networks',\n {},\n {\n reload: true,\n }\n );\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'An error occured during network creation');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n $scope.create = function () {\n var networkConfiguration = prepareConfiguration();\n var accessControlData = $scope.formValues.AccessControlData;\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n var creationContext = {\n nodeName: $scope.formValues.NodeName,\n managerOperation: false,\n networkConfiguration: networkConfiguration,\n userDetails: userDetails,\n accessControlData: accessControlData,\n reload: true,\n };\n\n if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE' && $scope.config.Driver === 'overlay') {\n creationContext.managerOperation = true;\n }\n\n if ($scope.config.Driver === 'macvlan') {\n if ($scope.formValues.Macvlan.Scope === 'local') {\n modifyNetworkConfigurationForMacvlanConfigOnly(networkConfiguration);\n } else if ($scope.formValues.Macvlan.Scope === 'swarm') {\n var selectedNetworkConfig = $scope.formValues.Macvlan.SelectedNetworkConfig;\n modifyNetworkConfigurationForMacvlanConfigFrom(networkConfiguration, selectedNetworkConfig);\n creationContext.nodeName = selectedNetworkConfig.NodeName;\n }\n }\n\n if (\n $scope.config.Driver === 'macvlan' &&\n $scope.formValues.Macvlan.Scope === 'local' &&\n $scope.applicationState.endpoint.mode.agentProxy &&\n $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE'\n ) {\n var selectedNodes = $scope.formValues.Macvlan.DatatableState.selectedItems;\n selectedNodes.forEach(function (node, idx) {\n creationContext.nodeName = node.Hostname;\n creationContext.reload = idx === selectedNodes.length - 1 ? true : false;\n createNetwork(creationContext);\n });\n } else {\n createNetwork(creationContext);\n }\n };\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n $scope.state.IPV4AuxiliaryAddressesError = [];\n $scope.state.IPV6AuxiliaryAddressesError = [];\n\n PluginService.networkPlugins(apiVersion < 1.25)\n .then(function success(data) {\n $scope.availableNetworkDrivers = data;\n $scope.availableNetworkDrivers = _.filter($scope.availableNetworkDrivers, (driver) => driver !== 'host' && driver !== 'null');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve network drivers');\n });\n }\n\n initView();\n },\n]);\n","import DockerNetworkHelper from 'Docker/helpers/networkHelper';\n\nangular.module('portainer.docker').controller('NetworkController', [\n '$scope',\n '$state',\n '$transition$',\n '$filter',\n 'NetworkService',\n 'Container',\n 'Notifications',\n 'HttpRequestHelper',\n 'NetworkHelper',\n function ($scope, $state, $transition$, $filter, NetworkService, Container, Notifications, HttpRequestHelper, NetworkHelper) {\n $scope.removeNetwork = function removeNetwork() {\n NetworkService.remove($transition$.params().id, $transition$.params().id)\n .then(function success() {\n Notifications.success('Network removed', $transition$.params().id);\n $state.go('docker.networks', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove network');\n });\n };\n\n $scope.containerLeaveNetwork = function containerLeaveNetwork(network, container) {\n HttpRequestHelper.setPortainerAgentTargetHeader(container.NodeName);\n NetworkService.disconnectContainer($transition$.params().id, container.Id, false)\n .then(function success() {\n Notifications.success('Container left network', $transition$.params().id);\n $state.go('docker.networks.network', { id: network.Id }, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to disconnect container from network');\n });\n };\n\n $scope.isSystemNetwork = function () {\n return $scope.network && NetworkHelper.isSystemNetwork($scope.network);\n };\n\n $scope.allowRemove = function () {\n return !$scope.isSystemNetwork();\n };\n\n function filterContainersInNetwork(network, containers) {\n var containersInNetwork = [];\n containers.forEach(function (container) {\n var containerInNetwork = network.Containers[container.Id];\n if (containerInNetwork) {\n containerInNetwork.Id = container.Id;\n // Name is not available in Docker 1.9\n if (!containerInNetwork.Name) {\n containerInNetwork.Name = $filter('trimcontainername')(container.Names[0]);\n }\n containersInNetwork.push(containerInNetwork);\n }\n });\n $scope.containersInNetwork = containersInNetwork;\n }\n\n function getContainersInNetwork(network) {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n if (network.Containers) {\n if (apiVersion < 1.24) {\n Container.query(\n {},\n function success(data) {\n var containersInNetwork = data.filter(function filter(container) {\n if (container.HostConfig.NetworkMode === network.Name) {\n return container;\n }\n });\n filterContainersInNetwork(network, containersInNetwork);\n },\n function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers in network');\n }\n );\n } else {\n Container.query(\n {\n filters: { network: [$transition$.params().id] },\n },\n function success(data) {\n filterContainersInNetwork(network, data);\n },\n function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve containers in network');\n }\n );\n }\n }\n }\n\n function initView() {\n var nodeName = $transition$.params().nodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n $scope.nodeName = nodeName;\n NetworkService.network($transition$.params().id)\n .then(function success(data) {\n $scope.network = data;\n getContainersInNetwork(data);\n $scope.network.IPAM.IPV4Configs = DockerNetworkHelper.getIPV4Configs($scope.network.IPAM.Config);\n $scope.network.IPAM.IPV6Configs = DockerNetworkHelper.getIPV6Configs($scope.network.IPAM.Config);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve network info');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport DockerNetworkHelper from 'Docker/helpers/networkHelper';\nimport { isOfflineEndpoint } from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.docker').controller('NetworksController', [\n '$q',\n '$scope',\n '$state',\n 'NetworkService',\n 'Notifications',\n 'HttpRequestHelper',\n 'endpoint',\n 'AgentService',\n function ($q, $scope, $state, NetworkService, Notifications, HttpRequestHelper, endpoint, AgentService) {\n $scope.removeAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (network) {\n HttpRequestHelper.setPortainerAgentTargetHeader(network.NodeName);\n NetworkService.remove(network.Id)\n .then(function success() {\n Notifications.success('Network successfully removed', network.Name);\n var index = $scope.networks.indexOf(network);\n $scope.networks.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove network');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.offlineMode = false;\n\n $scope.getNetworks = getNetworks;\n\n function groupSwarmNetworksManagerNodesFirst(networks, agents) {\n const getRole = (item) => _.find(agents, (agent) => agent.NodeName === item.NodeName).NodeRole;\n\n const nonSwarmNetworks = _.remove(networks, (item) => item.Scope !== 'swarm');\n const grouped = _.toArray(_.groupBy(networks, (item) => item.Id));\n const sorted = _.map(grouped, (arr) => _.sortBy(arr, (item) => getRole(item)));\n const arr = _.map(sorted, (a) => {\n const item = a[0];\n for (let i = 1; i < a.length; i++) {\n item.Subs.push(a[i]);\n }\n return item;\n });\n const res = _.concat(arr, ...nonSwarmNetworks);\n return res;\n }\n\n function getNetworks() {\n const req = {\n networks: NetworkService.networks(true, true, true),\n };\n\n if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {\n req.agents = AgentService.agents();\n }\n\n $q.all(req)\n .then((data) => {\n $scope.offlineMode = isOfflineEndpoint(endpoint);\n const networks = _.forEach(data.networks, (item) => (item.Subs = []));\n if ($scope.applicationState.endpoint.mode.agentProxy && $scope.applicationState.endpoint.mode.provider === 'DOCKER_SWARM_MODE') {\n $scope.networks = groupSwarmNetworksManagerNodesFirst(data.networks, data.agents);\n } else {\n $scope.networks = networks;\n }\n\n _.forEach($scope.networks, (network) => {\n network.IPAM.IPV4Configs = DockerNetworkHelper.getIPV4Configs(network.IPAM.Config);\n network.IPAM.IPV6Configs = DockerNetworkHelper.getIPV6Configs(network.IPAM.Config);\n });\n })\n .catch((err) => {\n $scope.networks = [];\n Notifications.error('Failure', err, 'Unable to retrieve networks');\n });\n }\n\n function initView() {\n getNetworks();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('NodeBrowserController', [\n '$stateParams',\n 'NodeService',\n 'HttpRequestHelper',\n 'Notifications',\n function NodeBrowserController($stateParams, NodeService, HttpRequestHelper, Notifications) {\n var ctrl = this;\n ctrl.$onInit = $onInit;\n\n function $onInit() {\n ctrl.nodeId = $stateParams.id;\n\n NodeService.node(ctrl.nodeId)\n .then(function onNodeLoaded(node) {\n HttpRequestHelper.setPortainerAgentTargetHeader(node.Hostname);\n ctrl.node = node;\n })\n .catch(function onError(err) {\n Notifications.error('Unable to retrieve host information', err);\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-browser.html');\n\nangular.module('portainer.docker').component('nodeBrowserView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeBrowserController',\n bindings: {\n endpoint: '<',\n },\n});\n","angular.module('portainer.docker').controller('NodeDetailsViewController', [\n '$q',\n '$stateParams',\n 'NodeService',\n 'StateManager',\n 'AgentService',\n 'ContainerService',\n 'Authentication',\n function NodeDetailsViewController($q, $stateParams, NodeService, StateManager, AgentService, ContainerService, Authentication) {\n var ctrl = this;\n\n ctrl.$onInit = initView;\n\n ctrl.state = {\n isAgent: false,\n isAdmin: false,\n };\n\n function initView() {\n var applicationState = StateManager.getState();\n ctrl.state.isAgent = applicationState.endpoint.mode.agentProxy;\n ctrl.state.isAdmin = Authentication.isAdmin();\n ctrl.state.enableHostManagementFeatures = ctrl.endpoint.SecuritySettings.enableHostManagementFeatures;\n\n var fetchJobs = ctrl.state.isAdmin && ctrl.state.isAgent;\n\n var nodeId = $stateParams.id;\n $q.all({\n node: NodeService.node(nodeId),\n jobs: fetchJobs ? ContainerService.containers(true, { label: ['io.portainer.job.endpoint'] }) : [],\n }).then(function (data) {\n var node = data.node;\n ctrl.originalNode = node;\n ctrl.hostDetails = buildHostDetails(node);\n ctrl.engineDetails = buildEngineDetails(node);\n ctrl.nodeDetails = buildNodeDetails(node);\n ctrl.jobs = data.jobs;\n if (ctrl.state.isAgent) {\n var agentApiVersion = applicationState.endpoint.agentApiVersion;\n ctrl.state.agentApiVersion = agentApiVersion;\n if (agentApiVersion < 2) {\n return;\n }\n\n AgentService.hostInfo(node.Hostname).then(function onHostInfoLoad(agentHostInfo) {\n ctrl.devices = agentHostInfo.PCIDevices;\n ctrl.disks = agentHostInfo.PhysicalDisks;\n });\n }\n });\n }\n\n function buildHostDetails(node) {\n return {\n os: {\n arch: node.PlatformArchitecture,\n type: node.PlatformOS,\n },\n name: node.Hostname,\n totalCPU: node.CPUs / 1e9,\n totalMemory: node.Memory,\n };\n }\n\n function buildEngineDetails(node) {\n return {\n releaseVersion: node.EngineVersion,\n volumePlugins: transformPlugins(node.Plugins, 'Volume'),\n networkPlugins: transformPlugins(node.Plugins, 'Network'),\n engineLabels: node.EngineLabels,\n };\n }\n\n function buildNodeDetails(node) {\n return {\n name: node.Name,\n role: node.Role,\n managerAddress: node.ManagerAddr,\n availability: node.Availability,\n status: node.Status,\n nodeLabels: node.Labels,\n };\n }\n\n function transformPlugins(pluginsList, type) {\n return pluginsList\n .filter(function (plugin) {\n return plugin.Type === type;\n })\n .map(function (plugin) {\n return plugin.Name;\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./node-details-view.html');\n\nangular.module('portainer.docker').component('nodeDetailsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'NodeDetailsViewController',\n bindings: {\n endpoint: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registryAccess.html');\n\nangular.module('portainer.docker').component('dockerRegistryAccessView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'DockerRegistryAccessController',\n bindings: {\n endpoint: '<',\n },\n});\n","import { TeamAccessViewModel, UserAccessViewModel } from 'Portainer/models/access';\n\nclass DockerRegistryAccessController {\n /* @ngInject */\n constructor($async, $state, Authentication, Notifications, EndpointService, GroupService, RoleService) {\n this.$async = $async;\n this.$state = $state;\n this.Authentication = Authentication;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.RoleService = RoleService;\n\n this.updateAccess = this.updateAccess.bind(this);\n this.filterUsers = this.filterUsers.bind(this);\n }\n\n updateAccess() {\n return this.$async(async () => {\n this.state.actionInProgress = true;\n try {\n await this.EndpointService.updateRegistryAccess(this.state.endpointId, this.state.registryId, this.registryEndpointAccesses);\n this.Notifications.success('Access successfully updated');\n this.$state.reload();\n } catch (err) {\n this.state.actionInProgress = false;\n this.Notifications.error('Failure', err, 'Unable to update accesses');\n }\n });\n }\n\n filterUsers(users) {\n const endpointUsers = this.endpoint.UserAccessPolicies;\n const endpointTeams = this.endpoint.TeamAccessPolicies;\n\n const endpointGroupUsers = this.endpointGroup.UserAccessPolicies;\n const endpointGroupTeams = this.endpointGroup.TeamAccessPolicies;\n\n return users.filter((userOrTeam) => {\n const userAccess = userOrTeam instanceof UserAccessViewModel && (endpointUsers[userOrTeam.Id] || endpointGroupUsers[userOrTeam.Id]);\n const teamAccess = userOrTeam instanceof TeamAccessViewModel && (endpointTeams[userOrTeam.Id] || endpointGroupTeams[userOrTeam.Id]);\n\n const entityAccess = userAccess || teamAccess;\n if (!entityAccess) {\n return false;\n }\n\n const roleId = entityAccess.RoleId;\n const role = this.roles.find((role) => role.Id === roleId);\n return this.isStandardRole(role);\n });\n }\n\n isStandardRole(role) {\n return role && (role.Authorizations['DockerImageCreate'] || role.Authorizations['DockerImagePush']) && !role.Authorizations['EndpointResourcesAccess'];\n }\n\n $onInit() {\n return this.$async(async () => {\n this.Authentication.redirectIfUnauthorized(['PortainerRegistryUpdateAccess']);\n\n try {\n this.state = {\n viewReady: false,\n actionInProgress: false,\n endpointId: this.$state.params.endpointId,\n registryId: this.$state.params.id,\n };\n this.roles = await this.RoleService.roles();\n this.registry = await this.EndpointService.registry(this.state.endpointId, this.state.registryId);\n this.registryEndpointAccesses = this.registry.RegistryAccesses[this.state.endpointId] || {};\n this.endpointGroup = await this.GroupService.group(this.endpoint.GroupId);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registry details');\n } finally {\n this.state.viewReady = true;\n }\n });\n }\n}\n\nexport default DockerRegistryAccessController;\nangular.module('portainer.docker').controller('DockerRegistryAccessController', DockerRegistryAccessController);\n","import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\n\nangular.module('portainer.docker').controller('CreateSecretController', [\n '$scope',\n '$state',\n 'Notifications',\n 'SecretService',\n 'LabelHelper',\n 'Authentication',\n 'ResourceControlService',\n 'FormValidator',\n function ($scope, $state, Notifications, SecretService, LabelHelper, Authentication, ResourceControlService, FormValidator) {\n $scope.formValues = {\n Name: '',\n Data: '',\n Labels: [],\n encodeSecret: true,\n AccessControlData: new AccessControlFormData(),\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ key: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n function prepareLabelsConfig(config) {\n config.Labels = LabelHelper.fromKeyValueToLabelHash($scope.formValues.Labels);\n }\n\n function prepareSecretData(config) {\n if ($scope.formValues.encodeSecret) {\n config.Data = btoa(unescape(encodeURIComponent($scope.formValues.Data)));\n } else {\n config.Data = $scope.formValues.Data;\n }\n }\n\n function prepareConfiguration() {\n var config = {};\n config.Name = $scope.formValues.Name;\n prepareSecretData(config);\n prepareLabelsConfig(config);\n return config;\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n $scope.create = function () {\n const accessControlData = $scope.formValues.AccessControlData;\n const userDetails = Authentication.getUserDetails();\n const isAdmin = Authentication.isAdmin();\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n $scope.state.actionInProgress = true;\n var secretConfiguration = prepareConfiguration();\n SecretService.create(secretConfiguration)\n .then(function success(data) {\n const userId = userDetails.ID;\n const resourceControl = data.Portainer.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Secret successfully created');\n $state.go('docker.secrets', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create secret');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n },\n]);\n","angular.module('portainer.docker').controller('SecretController', [\n '$scope',\n '$transition$',\n '$state',\n 'SecretService',\n 'Notifications',\n function ($scope, $transition$, $state, SecretService, Notifications) {\n $scope.removeSecret = function removeSecret(secretId) {\n SecretService.remove(secretId)\n .then(function success() {\n Notifications.success('Secret successfully removed');\n $state.go('docker.secrets', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove secret');\n });\n };\n\n function initView() {\n SecretService.secret($transition$.params().id)\n .then(function success(data) {\n $scope.secret = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve secret details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('SecretsController', [\n '$scope',\n '$state',\n 'SecretService',\n 'Notifications',\n function ($scope, $state, SecretService, Notifications) {\n $scope.removeAction = function (selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (secret) {\n SecretService.remove(secret.Id)\n .then(function success() {\n Notifications.success('Secret successfully removed', secret.Name);\n var index = $scope.secrets.indexOf(secret);\n $scope.secrets.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove secret');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n };\n\n $scope.getSecrets = getSecrets;\n\n function getSecrets() {\n SecretService.secrets()\n .then(function success(data) {\n $scope.secrets = data;\n })\n .catch(function error(err) {\n $scope.secrets = [];\n Notifications.error('Failure', err, 'Unable to retrieve secrets');\n });\n }\n\n function initView() {\n getSecrets();\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport * as envVarsUtils from '@/portainer/helpers/env-vars';\nimport { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\n\nrequire('./includes/update-restart.html');\nrequire('./includes/secret.html');\nrequire('./includes/config.html');\nrequire('./includes/resources-placement.html');\n\nangular.module('portainer.docker').controller('CreateServiceController', [\n '$q',\n '$scope',\n '$state',\n '$timeout',\n 'Service',\n 'ServiceHelper',\n 'ConfigService',\n 'ConfigHelper',\n 'SecretHelper',\n 'SecretService',\n 'VolumeService',\n 'NetworkService',\n 'ImageHelper',\n 'LabelHelper',\n 'Authentication',\n 'ResourceControlService',\n 'Notifications',\n 'FormValidator',\n 'PluginService',\n 'RegistryService',\n 'HttpRequestHelper',\n 'NodeService',\n 'WebhookService',\n 'endpoint',\n function (\n $q,\n $scope,\n $state,\n $timeout,\n Service,\n ServiceHelper,\n ConfigService,\n ConfigHelper,\n SecretHelper,\n SecretService,\n VolumeService,\n NetworkService,\n ImageHelper,\n LabelHelper,\n Authentication,\n ResourceControlService,\n Notifications,\n FormValidator,\n PluginService,\n RegistryService,\n HttpRequestHelper,\n NodeService,\n WebhookService,\n endpoint\n ) {\n $scope.endpoint = endpoint;\n\n $scope.formValues = {\n Name: '',\n RegistryModel: new PorImageRegistryModel(),\n Mode: 'replicated',\n Replicas: 1,\n Command: '',\n EntryPoint: '',\n WorkingDir: '',\n User: '',\n Env: [],\n Labels: [],\n ContainerLabels: [],\n Volumes: [],\n Network: '',\n ExtraNetworks: [],\n HostsEntries: [],\n Ports: [],\n Parallelism: 1,\n PlacementConstraints: [],\n PlacementPreferences: [],\n UpdateDelay: '0s',\n UpdateOrder: 'stop-first',\n FailureAction: 'pause',\n Secrets: [],\n Configs: [],\n AccessControlData: new AccessControlFormData(),\n CpuLimit: 0,\n CpuReservation: 0,\n MemoryLimit: 0,\n MemoryReservation: 0,\n MemoryLimitUnit: 'MB',\n MemoryReservationUnit: 'MB',\n RestartCondition: 'any',\n RestartDelay: '5s',\n RestartMaxAttempts: 0,\n RestartWindow: '0s',\n LogDriverName: '',\n LogDriverOpts: [],\n Webhook: false,\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n pullImageValidity: false,\n };\n\n $scope.allowBindMounts = false;\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.hasAuthorizations = function (authorizations) {\n return $scope.isAdmin || Authentication.hasAuthorizations(authorizations);\n };\n\n $scope.refreshSlider = function () {\n $timeout(function () {\n $scope.$broadcast('rzSliderForceRender');\n });\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.addPortBinding = function () {\n $scope.formValues.Ports.push({ PublishedPort: '', TargetPort: '', Protocol: 'tcp', PublishMode: 'ingress' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.formValues.Ports.splice(index, 1);\n };\n\n $scope.addExtraNetwork = function () {\n $scope.formValues.ExtraNetworks.push({ Name: '' });\n };\n\n $scope.removeExtraNetwork = function (index) {\n $scope.formValues.ExtraNetworks.splice(index, 1);\n };\n\n $scope.addHostsEntry = function () {\n $scope.formValues.HostsEntries.push({});\n };\n\n $scope.removeHostsEntry = function (index) {\n $scope.formValues.HostsEntries.splice(index, 1);\n };\n\n $scope.addVolume = function () {\n $scope.formValues.Volumes.push({ Source: null, Target: '', ReadOnly: false, Type: 'volume' });\n };\n\n $scope.removeVolume = function (index) {\n $scope.formValues.Volumes.splice(index, 1);\n };\n\n $scope.addConfig = function () {\n $scope.formValues.Configs.push({});\n };\n\n $scope.removeConfig = function (index) {\n $scope.formValues.Configs.splice(index, 1);\n $scope.checkIfConfigDuplicated();\n };\n\n $scope.addSecret = function () {\n $scope.formValues.Secrets.push({ overrideTarget: false });\n };\n\n $scope.removeSecret = function (index) {\n $scope.formValues.Secrets.splice(index, 1);\n $scope.checkIfSecretDuplicated();\n };\n\n $scope.addPlacementConstraint = function () {\n $scope.formValues.PlacementConstraints.push({ key: '', operator: '==', value: '' });\n };\n\n $scope.removePlacementConstraint = function (index) {\n $scope.formValues.PlacementConstraints.splice(index, 1);\n };\n\n $scope.addPlacementPreference = function () {\n $scope.formValues.PlacementPreferences.push({ strategy: 'spread', value: '' });\n };\n\n $scope.removePlacementPreference = function (index) {\n $scope.formValues.PlacementPreferences.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.formValues.Labels.push({ key: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.formValues.Labels.splice(index, 1);\n };\n\n $scope.addContainerLabel = function () {\n $scope.formValues.ContainerLabels.push({ key: '', value: '' });\n };\n\n $scope.removeContainerLabel = function (index) {\n $scope.formValues.ContainerLabels.splice(index, 1);\n };\n\n $scope.addLogDriverOpt = function () {\n $scope.formValues.LogDriverOpts.push({ name: '', value: '' });\n };\n\n $scope.removeLogDriverOpt = function (index) {\n $scope.formValues.LogDriverOpts.splice(index, 1);\n };\n\n $scope.checkIfSecretDuplicated = function () {\n $scope.formValues.Secrets.$invalid = false;\n [...$scope.formValues.Secrets]\n .sort((a, b) => a.model.Id.localeCompare(b.model.Id))\n .sort((a, b) => {\n if (a.model.Id === b.model.Id) {\n $scope.formValues.Secrets.$invalid = true;\n $scope.formValues.Secrets.$error = 'Secret ' + a.model.Name + ' cannot be assigned multiple times.';\n }\n });\n if (!$scope.formValues.Secrets.$invalid) {\n $scope.formValues.Secrets.$error = '';\n }\n };\n\n $scope.checkIfConfigDuplicated = function () {\n $scope.formValues.Configs.$invalid = false;\n [...$scope.formValues.Configs]\n .sort((a, b) => a.model.Id.localeCompare(b.model.Id))\n .sort((a, b) => {\n if (a.model.Id === b.model.Id) {\n $scope.formValues.Configs.$invalid = true;\n $scope.formValues.Configs.$error = 'Config ' + a.model.Name + ' cannot be assigned multiple times.';\n }\n });\n if (!$scope.formValues.Configs.$invalid) {\n $scope.formValues.Configs.$error = '';\n }\n };\n\n function prepareImageConfig(config, input) {\n var imageConfig = ImageHelper.createImageConfigForContainer(input.RegistryModel);\n config.TaskTemplate.ContainerSpec.Image = imageConfig.fromImage;\n }\n\n function preparePortsConfig(config, input) {\n let ports = [];\n input.Ports.forEach(function (binding) {\n const port = {\n Protocol: binding.Protocol,\n PublishMode: binding.PublishMode,\n };\n if (binding.TargetPort) {\n port.TargetPort = +binding.TargetPort;\n if (binding.PublishedPort) {\n port.PublishedPort = +binding.PublishedPort;\n }\n ports.push(port);\n }\n });\n config.EndpointSpec.Ports = ports;\n }\n\n function prepareSchedulingConfig(config, input) {\n if (input.Mode === 'replicated') {\n config.Mode.Replicated = {\n Replicas: input.Replicas,\n };\n } else {\n config.Mode.Global = {};\n }\n }\n\n function commandToArray(cmd) {\n var tokens = [].concat\n .apply(\n [],\n cmd.split(\"'\").map(function (v, i) {\n return i % 2 ? v : v.split(' ');\n })\n )\n .filter(Boolean);\n return tokens;\n }\n\n function prepareCommandConfig(config, input) {\n if (input.EntryPoint) {\n config.TaskTemplate.ContainerSpec.Command = commandToArray(input.EntryPoint);\n }\n if (input.Command) {\n config.TaskTemplate.ContainerSpec.Args = commandToArray(input.Command);\n }\n if (input.User) {\n config.TaskTemplate.ContainerSpec.User = input.User;\n }\n if (input.WorkingDir) {\n config.TaskTemplate.ContainerSpec.Dir = input.WorkingDir;\n }\n }\n\n function prepareEnvConfig(config, input) {\n config.TaskTemplate.ContainerSpec.Env = envVarsUtils.convertToArrayOfStrings(input.Env);\n }\n\n function prepareLabelsConfig(config, input) {\n config.Labels = LabelHelper.fromKeyValueToLabelHash(input.Labels);\n config.TaskTemplate.ContainerSpec.Labels = LabelHelper.fromKeyValueToLabelHash(input.ContainerLabels);\n }\n\n function createMountObjectFromVolume(volumeObject, target, readonly) {\n return {\n Target: target,\n Source: volumeObject.Id,\n Type: 'volume',\n ReadOnly: readonly,\n VolumeOptions: {\n Labels: volumeObject.Labels,\n DriverConfig: {\n Name: volumeObject.Driver,\n Options: volumeObject.Options,\n },\n },\n };\n }\n\n function prepareVolumes(config, input) {\n input.Volumes.forEach(function (volume) {\n if (volume.Source && volume.Target) {\n if (volume.Type !== 'volume') {\n config.TaskTemplate.ContainerSpec.Mounts.push(volume);\n } else {\n var volumeObject = volume.Source;\n var mount = createMountObjectFromVolume(volumeObject, volume.Target, volume.ReadOnly);\n config.TaskTemplate.ContainerSpec.Mounts.push(mount);\n }\n }\n });\n }\n\n function prepareNetworks(config, input) {\n var networks = [];\n if (input.Network) {\n networks.push({ Target: input.Network });\n }\n input.ExtraNetworks.forEach(function (network) {\n networks.push({ Target: network.Name });\n });\n config.Networks = _.uniqWith(networks, _.isEqual);\n }\n\n function prepareHostsEntries(config, input) {\n var hostsEntries = [];\n if (input.HostsEntries) {\n input.HostsEntries.forEach(function (host_ip) {\n if (host_ip.value && host_ip.value.indexOf(':') && host_ip.value.split(':').length === 2) {\n var keyVal = host_ip.value.split(':');\n // Hosts file format, IP_address canonical_hostname\n hostsEntries.push(keyVal[1] + ' ' + keyVal[0]);\n }\n });\n if (hostsEntries.length > 0) {\n config.TaskTemplate.ContainerSpec.Hosts = hostsEntries;\n }\n }\n }\n\n function prepareUpdateConfig(config, input) {\n config.UpdateConfig = {\n Parallelism: input.Parallelism || 0,\n Delay: ServiceHelper.translateHumanDurationToNanos(input.UpdateDelay) || 0,\n FailureAction: input.FailureAction,\n Order: input.UpdateOrder,\n };\n }\n\n function prepareRestartPolicy(config, input) {\n config.TaskTemplate.RestartPolicy = {\n Condition: input.RestartCondition || 'any',\n Delay: ServiceHelper.translateHumanDurationToNanos(input.RestartDelay) || 5000000000,\n MaxAttempts: input.RestartMaxAttempts || 0,\n Window: ServiceHelper.translateHumanDurationToNanos(input.RestartWindow) || 0,\n };\n }\n\n function preparePlacementConfig(config, input) {\n config.TaskTemplate.Placement.Constraints = ServiceHelper.translateKeyValueToPlacementConstraints(input.PlacementConstraints);\n config.TaskTemplate.Placement.Preferences = ServiceHelper.translateKeyValueToPlacementPreferences(input.PlacementPreferences);\n }\n\n function prepareConfigConfig(config, input) {\n if (input.Configs) {\n var configs = [];\n angular.forEach(input.Configs, function (config) {\n if (config.model) {\n var s = ConfigHelper.configConfig(config.model);\n s.File.Name = config.FileName || s.File.Name;\n configs.push(s);\n }\n });\n config.TaskTemplate.ContainerSpec.Configs = configs;\n }\n }\n\n function prepareSecretConfig(config, input) {\n if (input.Secrets) {\n var secrets = [];\n angular.forEach(input.Secrets, function (secret) {\n if (secret.model) {\n var s = SecretHelper.secretConfig(secret.model);\n s.File.Name = s.SecretName;\n if (secret.overrideTarget && secret.target && secret.target !== '') {\n s.File.Name = secret.target;\n }\n secrets.push(s);\n }\n });\n config.TaskTemplate.ContainerSpec.Secrets = secrets;\n }\n }\n\n function prepareResourcesCpuConfig(config, input) {\n // CPU Limit\n if (input.CpuLimit > 0) {\n config.TaskTemplate.Resources.Limits.NanoCPUs = input.CpuLimit * 1000000000;\n }\n // CPU Reservation\n if (input.CpuReservation > 0) {\n config.TaskTemplate.Resources.Reservations.NanoCPUs = input.CpuReservation * 1000000000;\n }\n }\n\n function prepareResourcesMemoryConfig(config, input) {\n // Memory Limit - Round to 0.125\n var memoryLimit = (Math.round(input.MemoryLimit * 8) / 8).toFixed(3);\n memoryLimit *= 1024 * 1024;\n if (input.MemoryLimitUnit === 'GB') {\n memoryLimit *= 1024;\n }\n if (memoryLimit > 0) {\n config.TaskTemplate.Resources.Limits.MemoryBytes = memoryLimit;\n }\n // Memory Resevation - Round to 0.125\n var memoryReservation = (Math.round(input.MemoryReservation * 8) / 8).toFixed(3);\n memoryReservation *= 1024 * 1024;\n if (input.MemoryReservationUnit === 'GB') {\n memoryReservation *= 1024;\n }\n if (memoryReservation > 0) {\n config.TaskTemplate.Resources.Reservations.MemoryBytes = memoryReservation;\n }\n }\n\n function prepareLogDriverConfig(config, input) {\n var logOpts = {};\n if (input.LogDriverName) {\n config.TaskTemplate.LogDriver = { Name: input.LogDriverName };\n if (input.LogDriverName !== 'none') {\n input.LogDriverOpts.forEach(function (opt) {\n if (opt.name) {\n logOpts[opt.name] = opt.value;\n }\n });\n if (Object.keys(logOpts).length !== 0 && logOpts.constructor === Object) {\n config.TaskTemplate.LogDriver.Options = logOpts;\n }\n }\n }\n }\n\n function prepareConfiguration() {\n var input = $scope.formValues;\n var config = {\n Name: input.Name,\n TaskTemplate: {\n ContainerSpec: {\n Mounts: [],\n },\n Placement: {},\n Resources: {\n Limits: {},\n Reservations: {},\n },\n },\n Mode: {},\n EndpointSpec: {},\n };\n prepareSchedulingConfig(config, input);\n prepareImageConfig(config, input);\n preparePortsConfig(config, input);\n prepareCommandConfig(config, input);\n prepareEnvConfig(config, input);\n prepareLabelsConfig(config, input);\n prepareVolumes(config, input);\n prepareNetworks(config, input);\n prepareHostsEntries(config, input);\n prepareUpdateConfig(config, input);\n prepareConfigConfig(config, input);\n prepareSecretConfig(config, input);\n preparePlacementConfig(config, input);\n prepareResourcesCpuConfig(config, input);\n prepareResourcesMemoryConfig(config, input);\n prepareRestartPolicy(config, input);\n prepareLogDriverConfig(config, input);\n return config;\n }\n\n function createNewService(config, accessControlData) {\n const registryModel = $scope.formValues.RegistryModel;\n var authenticationDetails = registryModel.Registry.Authentication ? RegistryService.encodedCredentials(registryModel.Registry) : '';\n HttpRequestHelper.setRegistryAuthenticationHeader(authenticationDetails);\n\n Service.create(config)\n .$promise.then(function success(data) {\n const serviceId = data.ID;\n const resourceControl = data.Portainer.ResourceControl;\n const userId = Authentication.getUserDetails().ID;\n const rcPromise = ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n const registryID = $scope.formValues.RegistryModel.Registry.Id;\n const webhookPromise = $q.when(endpoint.Type !== 4 && $scope.formValues.Webhook && WebhookService.createWebhook(serviceId, endpoint.Id, registryID, 1));\n return $q.all([rcPromise, webhookPromise]);\n })\n .then(function success() {\n Notifications.success('Service successfully created');\n $state.go('docker.services', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create service');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin) || $scope.formValues.Secrets.$error || $scope.formValues.Configs.$error;\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n $scope.volumesAreValid = volumesAreValid;\n function volumesAreValid() {\n const volumes = $scope.formValues.Volumes;\n return volumes.every((volume) => volume.Target && volume.Source);\n }\n\n $scope.create = function createService() {\n var accessControlData = $scope.formValues.AccessControlData;\n\n if (!validateForm(accessControlData, $scope.isAdmin)) {\n return;\n }\n\n $scope.state.actionInProgress = true;\n var config = prepareConfiguration();\n createNewService(config, accessControlData);\n };\n\n function initSlidersMaxValuesBasedOnNodeData(nodes) {\n var maxCpus = 0;\n var maxMemory = 0;\n for (var n in nodes) {\n if (nodes[n].CPUs && nodes[n].CPUs > maxCpus) {\n maxCpus = nodes[n].CPUs;\n }\n if (nodes[n].Memory && nodes[n].Memory > maxMemory) {\n maxMemory = nodes[n].Memory;\n }\n }\n if (maxCpus > 0) {\n $scope.state.sliderMaxCpu = maxCpus / 1000000000;\n } else {\n $scope.state.sliderMaxCpu = 32;\n }\n if (maxMemory > 0) {\n $scope.state.sliderMaxMemory = Math.floor(maxMemory / 1000 / 1000);\n } else {\n $scope.state.sliderMaxMemory = 32768;\n }\n }\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n\n $q.all({\n volumes: VolumeService.volumes(),\n networks: NetworkService.networks(true, true, false),\n secrets: apiVersion >= 1.25 ? SecretService.secrets() : [],\n configs: apiVersion >= 1.3 ? ConfigService.configs() : [],\n nodes: NodeService.nodes(),\n availableLoggingDrivers: PluginService.loggingPlugins(apiVersion < 1.25),\n allowBindMounts: checkIfAllowedBindMounts(),\n })\n .then(function success(data) {\n $scope.availableVolumes = data.volumes;\n $scope.availableNetworks = data.networks;\n $scope.availableSecrets = data.secrets;\n $scope.availableConfigs = data.configs;\n $scope.availableLoggingDrivers = data.availableLoggingDrivers;\n initSlidersMaxValuesBasedOnNodeData(data.nodes);\n $scope.isAdmin = Authentication.isAdmin();\n $scope.allowBindMounts = data.allowBindMounts;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to initialize view');\n });\n }\n\n initView();\n\n async function checkIfAllowedBindMounts() {\n const isAdmin = Authentication.isAdmin();\n\n const { allowBindMountsForRegularUsers } = endpoint.SecuritySettings;\n return isAdmin || allowBindMountsForRegularUsers || Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n }\n },\n]);\n","require('./includes/configs.html');\nrequire('./includes/constraints.html');\nrequire('./includes/container-specs.html');\nrequire('./includes/containerlabels.html');\nrequire('./includes/environmentvariables.html');\nrequire('./includes/hosts.html');\nrequire('./includes/image.html');\nrequire('./includes/logging.html');\nrequire('./includes/mounts.html');\nrequire('./includes/networks.html');\nrequire('./includes/placementPreferences.html');\nrequire('./includes/ports.html');\nrequire('./includes/resources.html');\nrequire('./includes/restart.html');\nrequire('./includes/secrets.html');\nrequire('./includes/servicelabels.html');\nrequire('./includes/tasks.html');\nrequire('./includes/updateconfig.html');\n\nimport _ from 'lodash-es';\n\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport * as envVarsUtils from '@/portainer/helpers/env-vars';\n\nangular.module('portainer.docker').controller('ServiceController', [\n '$q',\n '$scope',\n '$transition$',\n '$state',\n '$location',\n '$timeout',\n '$anchorScroll',\n 'ServiceService',\n 'ConfigService',\n 'ConfigHelper',\n 'SecretService',\n 'ImageService',\n 'SecretHelper',\n 'ServiceHelper',\n 'LabelHelper',\n 'TaskService',\n 'NodeService',\n 'ContainerService',\n 'TaskHelper',\n 'Notifications',\n 'ModalService',\n 'PluginService',\n 'Authentication',\n 'VolumeService',\n 'ImageHelper',\n 'WebhookService',\n 'clipboard',\n 'WebhookHelper',\n 'NetworkService',\n 'endpoint',\n 'EndpointService',\n 'RegistryService',\n function (\n $q,\n $scope,\n $transition$,\n $state,\n $location,\n $timeout,\n $anchorScroll,\n ServiceService,\n ConfigService,\n ConfigHelper,\n SecretService,\n ImageService,\n SecretHelper,\n ServiceHelper,\n LabelHelper,\n TaskService,\n NodeService,\n ContainerService,\n TaskHelper,\n Notifications,\n ModalService,\n PluginService,\n Authentication,\n VolumeService,\n ImageHelper,\n WebhookService,\n clipboard,\n WebhookHelper,\n NetworkService,\n endpoint,\n EndpointService,\n RegistryService\n ) {\n $scope.endpoint = endpoint;\n $scope.state = {\n updateInProgress: false,\n deletionInProgress: false,\n rollbackInProgress: false,\n };\n\n $scope.formValues = {\n RegistryModel: new PorImageRegistryModel(),\n };\n\n $scope.tasks = [];\n $scope.availableImages = [];\n\n $scope.lastVersion = 0;\n\n var originalService = {};\n var previousServiceValues = [];\n\n $scope.goToItem = function (hash) {\n if ($location.hash() !== hash) {\n $location.hash(hash);\n } else {\n $anchorScroll();\n }\n };\n\n $scope.addEnvironmentVariable = function addEnvironmentVariable(service) {\n service.EnvironmentVariables.push({ name: '', value: '' });\n updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);\n };\n\n $scope.onChangeEnvVars = onChangeEnvVars;\n\n function onChangeEnvVars(env) {\n const service = $scope.service;\n\n const orgEnv = service.EnvironmentVariables;\n service.EnvironmentVariables = env.map((v) => {\n const orgVar = orgEnv.find(({ name }) => v.name === name);\n const added = orgVar && orgVar.added;\n return { ...v, added };\n });\n\n updateServiceArray(service, 'EnvironmentVariables', service.EnvironmentVariables);\n }\n\n $scope.addConfig = function addConfig(service, config) {\n if (\n config &&\n service.ServiceConfigs.filter(function (serviceConfig) {\n return serviceConfig.Id === config.Id;\n }).length === 0\n ) {\n service.ServiceConfigs.push({ Id: config.Id, Name: config.Name, FileName: config.Name, Uid: '0', Gid: '0', Mode: 292 });\n updateServiceArray(service, 'ServiceConfigs', service.ServiceConfigs);\n }\n };\n $scope.removeConfig = function removeSecret(service, index) {\n var removedElement = service.ServiceConfigs.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceConfigs', service.ServiceConfigs);\n }\n };\n $scope.updateConfig = function updateConfig(service) {\n updateServiceArray(service, 'ServiceConfigs', service.ServiceConfigs);\n };\n $scope.addSecret = function addSecret(service, newSecret) {\n if (newSecret.secret) {\n var filename = newSecret.secret.Name;\n if (newSecret.override) {\n filename = newSecret.target;\n }\n if (\n service.ServiceSecrets.filter(function (serviceSecret) {\n return serviceSecret.Id === newSecret.secret.Id && serviceSecret.FileName === filename;\n }).length === 0\n ) {\n service.ServiceSecrets.push({ Id: newSecret.secret.Id, Name: newSecret.secret.Name, FileName: filename, Uid: '0', Gid: '0', Mode: 444 });\n updateServiceArray(service, 'ServiceSecrets', service.ServiceSecrets);\n }\n }\n };\n $scope.removeSecret = function removeSecret(service, index) {\n var removedElement = service.ServiceSecrets.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceSecrets', service.ServiceSecrets);\n }\n };\n $scope.addLabel = function addLabel(service) {\n service.ServiceLabels.push({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'ServiceLabels', service.ServiceLabels);\n };\n $scope.removeLabel = function removeLabel(service, index) {\n var removedElement = service.ServiceLabels.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceLabels', service.ServiceLabels);\n }\n };\n $scope.updateLabel = function updateLabel(service, label) {\n if (label.value !== label.originalValue || label.key !== label.originalKey) {\n updateServiceArray(service, 'ServiceLabels', service.ServiceLabels);\n }\n };\n $scope.addContainerLabel = function addContainerLabel(service) {\n service.ServiceContainerLabels.push({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'ServiceContainerLabels', service.ServiceContainerLabels);\n };\n $scope.removeContainerLabel = function removeLabel(service, index) {\n var removedElement = service.ServiceContainerLabels.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceContainerLabels', service.ServiceContainerLabels);\n }\n };\n $scope.updateContainerLabel = function updateLabel(service, label) {\n if (label.value !== label.originalValue || label.key !== label.originalKey) {\n updateServiceArray(service, 'ServiceContainerLabels', service.ServiceContainerLabels);\n }\n };\n $scope.addMount = function addMount(service) {\n service.ServiceMounts.push({ Type: 'volume', Source: null, Target: '', ReadOnly: false });\n updateServiceArray(service, 'ServiceMounts', service.ServiceMounts);\n };\n $scope.removeMount = function removeMount(service, index) {\n var removedElement = service.ServiceMounts.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceMounts', service.ServiceMounts);\n }\n };\n\n $scope.onChangeMountType = function onChangeMountType(service, mount) {\n mount.Source = null;\n $scope.updateMount(service, mount);\n };\n\n $scope.updateMount = function updateMount(service) {\n updateServiceArray(service, 'ServiceMounts', service.ServiceMounts);\n };\n\n $scope.addNetwork = function addNetwork(service) {\n if (!service.Networks) {\n service.Networks = [];\n }\n service.Networks.push({ Editable: true });\n };\n\n $scope.removeNetwork = function removeNetwork(service, index) {\n var removedElement = service.Networks.splice(index, 1);\n if (removedElement && removedElement.length && removedElement[0].Id) {\n updateServiceArray(service, 'Networks', service.Networks);\n }\n };\n\n $scope.updateNetwork = function updateNetwork(service) {\n updateServiceArray(service, 'Networks', service.Networks);\n };\n\n $scope.addPlacementConstraint = function addPlacementConstraint(service) {\n service.ServiceConstraints.push({ key: '', operator: '==', value: '' });\n updateServiceArray(service, 'ServiceConstraints', service.ServiceConstraints);\n };\n $scope.removePlacementConstraint = function removePlacementConstraint(service, index) {\n var removedElement = service.ServiceConstraints.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServiceConstraints', service.ServiceConstraints);\n }\n };\n $scope.updatePlacementConstraint = function (service) {\n updateServiceArray(service, 'ServiceConstraints', service.ServiceConstraints);\n };\n\n $scope.addPlacementPreference = function (service) {\n service.ServicePreferences.push({ strategy: 'spread', value: '' });\n updateServiceArray(service, 'ServicePreferences', service.ServicePreferences);\n };\n $scope.removePlacementPreference = function (service, index) {\n var removedElement = service.ServicePreferences.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'ServicePreferences', service.ServicePreferences);\n }\n };\n $scope.updatePlacementPreference = function (service) {\n updateServiceArray(service, 'ServicePreferences', service.ServicePreferences);\n };\n\n $scope.addPublishedPort = function addPublishedPort(service) {\n if (!service.Ports) {\n service.Ports = [];\n }\n service.Ports.push({ PublishedPort: '', TargetPort: '', Protocol: 'tcp', PublishMode: 'ingress' });\n };\n $scope.updatePublishedPort = function updatePublishedPort(service) {\n updateServiceArray(service, 'Ports', service.Ports);\n };\n $scope.removePortPublishedBinding = function removePortPublishedBinding(service, index) {\n var removedElement = service.Ports.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'Ports', service.Ports);\n }\n };\n\n $scope.addLogDriverOpt = function addLogDriverOpt(service) {\n service.LogDriverOpts.push({ key: '', value: '', originalValue: '' });\n updateServiceArray(service, 'LogDriverOpts', service.LogDriverOpts);\n };\n $scope.removeLogDriverOpt = function removeLogDriverOpt(service, index) {\n var removedElement = service.LogDriverOpts.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'LogDriverOpts', service.LogDriverOpts);\n }\n };\n $scope.updateLogDriverOpt = function updateLogDriverOpt(service, variable) {\n if (variable.value !== variable.originalValue || variable.key !== variable.originalKey) {\n updateServiceArray(service, 'LogDriverOpts', service.LogDriverOpts);\n }\n };\n $scope.updateLogDriverName = function updateLogDriverName(service) {\n updateServiceArray(service, 'LogDriverName', service.LogDriverName);\n };\n\n $scope.addHostsEntry = function (service) {\n if (!service.Hosts) {\n service.Hosts = [];\n }\n service.Hosts.push({ hostname: '', ip: '' });\n };\n $scope.removeHostsEntry = function (service, index) {\n var removedElement = service.Hosts.splice(index, 1);\n if (removedElement !== null) {\n updateServiceArray(service, 'Hosts', service.Hosts);\n }\n };\n $scope.updateHostsEntry = function (service) {\n updateServiceArray(service, 'Hosts', service.Hosts);\n };\n\n $scope.updateWebhook = function updateWebhook(service) {\n if ($scope.WebhookExists) {\n WebhookService.deleteWebhook($scope.webhookID)\n .then(function success() {\n $scope.webhookURL = null;\n $scope.webhookID = null;\n $scope.WebhookExists = false;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to delete webhook');\n });\n } else {\n WebhookService.createWebhook(service.Id, endpoint.Id, $scope.initialRegistryID, 1)\n .then(function success(data) {\n $scope.WebhookExists = true;\n $scope.webhookID = data.Id;\n $scope.webhookURL = WebhookHelper.returnWebhookUrl(data.Token);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create webhook');\n });\n }\n };\n\n $scope.updateWebhookRegistryId = function () {\n const newRegistryID = _.get($scope.formValues.RegistryModel, 'Registry.Id', 0);\n const registryChanged = $scope.initialRegistryID != newRegistryID;\n\n if ($scope.WebhookExists && registryChanged) {\n WebhookService.updateServiceWebhook($scope.webhookID, newRegistryID).catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update webhook');\n });\n }\n };\n\n $scope.copyWebhook = function copyWebhook() {\n clipboard.copyText($scope.webhookURL);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n };\n\n $scope.cancelChanges = async function cancelChanges(service, keys) {\n if (keys) {\n // clean out the keys only from the list of modified keys\n for (const key of keys) {\n if (key === 'Image') {\n $scope.formValues.RegistryModel = await RegistryService.retrievePorRegistryModelFromRepository(originalService.Image, endpoint.Id);\n } else {\n var index = previousServiceValues.indexOf(key);\n if (index >= 0) {\n previousServiceValues.splice(index, 1);\n }\n }\n }\n } else {\n // clean out all changes\n $scope.formValues.RegistryModel = await RegistryService.retrievePorRegistryModelFromRepository(originalService.Image, endpoint.Id);\n keys = Object.keys(service);\n previousServiceValues = [];\n }\n keys.forEach(function (attribute) {\n service[attribute] = originalService[attribute]; // reset service values\n });\n service.hasChanges = false;\n };\n\n $scope.hasChanges = function (service, elements) {\n var hasChanges = false;\n elements.forEach(function (key) {\n if (key === 'Image') {\n const originalImage = service ? service.Model.Spec.TaskTemplate.ContainerSpec.Image : null;\n const currentImage = ImageHelper.createImageConfigForContainer($scope.formValues.RegistryModel).fromImage;\n hasChanges = hasChanges || originalImage !== currentImage;\n } else {\n hasChanges = hasChanges || previousServiceValues.indexOf(key) >= 0;\n }\n });\n return hasChanges;\n };\n\n $scope.mountsAreValid = mountsAreValid;\n function mountsAreValid() {\n const mounts = $scope.service.ServiceMounts;\n return mounts.every((mount) => mount.Source && mount.Target);\n }\n\n function buildChanges(service) {\n var config = ServiceHelper.serviceToConfig(service.Model);\n config.Name = service.Name;\n config.Labels = LabelHelper.fromKeyValueToLabelHash(service.ServiceLabels);\n config.TaskTemplate.ContainerSpec.Env = envVarsUtils.convertToArrayOfStrings(service.EnvironmentVariables);\n config.TaskTemplate.ContainerSpec.Labels = LabelHelper.fromKeyValueToLabelHash(service.ServiceContainerLabels);\n\n if ($scope.hasChanges(service, ['Image'])) {\n const image = ImageHelper.createImageConfigForContainer($scope.formValues.RegistryModel);\n config.TaskTemplate.ContainerSpec.Image = image.fromImage;\n } else {\n config.TaskTemplate.ContainerSpec.Image = service.Image;\n }\n\n if ($scope.hasChanges(service, ['Networks'])) {\n config.Networks = _.map(\n _.filter(service.Networks, (item) => item.Id && item.Editable),\n (item) => ({ Target: item.Id })\n );\n config.TaskTemplate.Networks = config.Networks;\n }\n\n config.TaskTemplate.ContainerSpec.Secrets = service.ServiceSecrets ? service.ServiceSecrets.map(SecretHelper.secretConfig) : [];\n config.TaskTemplate.ContainerSpec.Configs = service.ServiceConfigs ? service.ServiceConfigs.map(ConfigHelper.configConfig) : [];\n config.TaskTemplate.ContainerSpec.Hosts = service.Hosts ? ServiceHelper.translateHostnameIPToHostsEntries(service.Hosts) : [];\n\n if (service.Mode === 'replicated') {\n config.Mode.Replicated.Replicas = service.Replicas;\n }\n config.TaskTemplate.ContainerSpec.Mounts = service.ServiceMounts;\n if (typeof config.TaskTemplate.Placement === 'undefined') {\n config.TaskTemplate.Placement = {};\n }\n config.TaskTemplate.Placement.Constraints = ServiceHelper.translateKeyValueToPlacementConstraints(service.ServiceConstraints);\n config.TaskTemplate.Placement.Preferences = ServiceHelper.translateKeyValueToPlacementPreferences(service.ServicePreferences);\n\n if ($scope.hasChanges(service, ['LimitNanoCPUs', 'LimitMemoryBytes', 'ReservationNanoCPUs', 'ReservationMemoryBytes'])) {\n // Round memory values to 0.125 and convert MB to B\n var memoryLimit = (Math.round(service.LimitMemoryBytes * 8) / 8).toFixed(3);\n memoryLimit *= 1024 * 1024;\n var memoryReservation = (Math.round(service.ReservationMemoryBytes * 8) / 8).toFixed(3);\n memoryReservation *= 1024 * 1024;\n config.TaskTemplate.Resources = {\n Limits: {\n NanoCPUs: service.LimitNanoCPUs * 1000000000,\n MemoryBytes: memoryLimit,\n },\n Reservations: {\n NanoCPUs: service.ReservationNanoCPUs * 1000000000,\n MemoryBytes: memoryReservation,\n },\n };\n }\n\n if ($scope.hasChanges(service, ['UpdateFailureAction', 'UpdateDelay', 'UpdateParallelism', 'UpdateOrder'])) {\n config.UpdateConfig = {\n Parallelism: service.UpdateParallelism,\n Delay: ServiceHelper.translateHumanDurationToNanos(service.UpdateDelay) || 0,\n FailureAction: service.UpdateFailureAction,\n Order: service.UpdateOrder,\n };\n }\n\n if ($scope.hasChanges(service, ['RestartCondition', 'RestartDelay', 'RestartMaxAttempts', 'RestartWindow'])) {\n config.TaskTemplate.RestartPolicy = {\n Condition: service.RestartCondition,\n Delay: ServiceHelper.translateHumanDurationToNanos(service.RestartDelay) || 5000000000,\n MaxAttempts: service.RestartMaxAttempts,\n Window: ServiceHelper.translateHumanDurationToNanos(service.RestartWindow) || 0,\n };\n }\n\n config.TaskTemplate.LogDriver = null;\n if (service.LogDriverName) {\n config.TaskTemplate.LogDriver = { Name: service.LogDriverName };\n if (service.LogDriverName !== 'none') {\n var logOpts = ServiceHelper.translateKeyValueToLogDriverOpts(service.LogDriverOpts);\n if (Object.keys(logOpts).length !== 0 && logOpts.constructor === Object) {\n config.TaskTemplate.LogDriver.Options = logOpts;\n }\n }\n }\n\n if (service.Ports) {\n service.Ports.forEach(function (binding) {\n if (binding.PublishedPort === null || binding.PublishedPort === '') {\n delete binding.PublishedPort;\n }\n });\n }\n\n config.EndpointSpec = {\n Mode: (config.EndpointSpec && config.EndpointSpec.Mode) || 'vip',\n Ports: service.Ports,\n };\n return service, config;\n }\n\n function rollbackService(service) {\n $scope.state.rollbackInProgress = true;\n let config = {};\n service, (config = buildChanges(service));\n ServiceService.update(service, config, 'previous')\n .then(function (data) {\n if (data.message && data.message.match(/^rpc error:/)) {\n Notifications.error('Failure', data, 'Error');\n } else {\n Notifications.success('Success', 'Service successfully rolled back');\n $scope.cancelChanges({});\n initView();\n }\n })\n .catch(function (e) {\n if (e.data.message && e.data.message.includes('does not have a previous spec')) {\n Notifications.error('Failure', { message: 'No previous config to rollback to.' });\n } else {\n Notifications.error('Failure', e, 'Unable to rollback service');\n }\n })\n .finally(function () {\n $scope.state.rollbackInProgress = false;\n });\n }\n\n $scope.rollbackService = function (service) {\n ModalService.confirm({\n title: 'Rollback service',\n message: 'Are you sure you want to rollback?',\n buttons: {\n confirm: {\n label: 'Yes',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n rollbackService(service);\n },\n });\n };\n\n $scope.setPullImageValidity = setPullImageValidity;\n function setPullImageValidity(validity) {\n $scope.state.pullImageValidity = validity;\n }\n\n $scope.updateService = function updateService(service) {\n let config = {};\n service, (config = buildChanges(service));\n ServiceService.update(service, config).then(\n function (data) {\n if (data.message && data.message.match(/^rpc error:/)) {\n Notifications.error('Failure', data, 'Error');\n } else {\n Notifications.success('Service successfully updated', 'Service updated');\n $scope.updateWebhookRegistryId();\n }\n $scope.cancelChanges({});\n initView();\n },\n function (e) {\n Notifications.error('Failure', e, 'Unable to update service');\n }\n );\n };\n\n $scope.removeService = function () {\n ModalService.confirmDeletion('Do you want to remove this service? All the containers associated to this service will be removed too.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n removeService();\n });\n };\n\n function removeService() {\n $scope.state.deletionInProgress = true;\n ServiceService.remove($scope.service)\n .then(function success() {\n return $q.when($scope.webhookID && WebhookService.deleteWebhook($scope.webhookID));\n })\n .then(function success() {\n Notifications.success('Service successfully deleted');\n $state.go('docker.services', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove service');\n })\n .finally(function final() {\n $scope.state.deletionInProgress = false;\n });\n }\n\n $scope.forceUpdateService = function (service) {\n ModalService.confirmServiceForceUpdate('Do you want to force an update of the service? All the tasks associated to the service will be recreated.', function (result) {\n if (!result) {\n return;\n }\n var pullImage = false;\n if (result[0]) {\n pullImage = true;\n }\n forceUpdateService(service, pullImage);\n });\n };\n\n function forceUpdateService(service, pullImage) {\n $scope.state.updateInProgress = true;\n EndpointService.forceUpdateService(endpoint.Id, service.Id, pullImage)\n .then(function success() {\n Notifications.success('Service successfully updated', service.Name);\n $scope.cancelChanges({});\n initView();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to force update service', service.Name);\n })\n .finally(function final() {\n $scope.state.updateInProgress = false;\n });\n }\n\n function translateServiceArrays(service) {\n service.ServiceSecrets = service.Secrets ? service.Secrets.map(SecretHelper.flattenSecret) : [];\n service.ServiceConfigs = service.Configs ? service.Configs.map(ConfigHelper.flattenConfig) : [];\n service.EnvironmentVariables = envVarsUtils\n .parseArrayOfStrings(service.Env)\n .map((v) => ({ ...v, added: true }))\n .sort((v1, v2) => (v1.name > v2.name ? 1 : -1));\n service.LogDriverOpts = ServiceHelper.translateLogDriverOptsToKeyValue(service.LogDriverOpts);\n service.ServiceLabels = LabelHelper.fromLabelHashToKeyValue(service.Labels);\n service.ServiceContainerLabels = LabelHelper.fromLabelHashToKeyValue(service.ContainerLabels);\n service.ServiceMounts = angular.copy(service.Mounts);\n service.ServiceConstraints = ServiceHelper.translateConstraintsToKeyValue(service.Constraints);\n service.ServicePreferences = ServiceHelper.translatePreferencesToKeyValue(service.Preferences);\n service.Hosts = ServiceHelper.translateHostsEntriesToHostnameIP(service.Hosts);\n }\n\n function transformResources(service) {\n service.LimitNanoCPUs = service.LimitNanoCPUs / 1000000000 || 0;\n service.ReservationNanoCPUs = service.ReservationNanoCPUs / 1000000000 || 0;\n service.LimitMemoryBytes = service.LimitMemoryBytes / 1024 / 1024 || 0;\n service.ReservationMemoryBytes = service.ReservationMemoryBytes / 1024 / 1024 || 0;\n }\n\n function transformDurations(service) {\n service.RestartDelay = ServiceHelper.translateNanosToHumanDuration(service.RestartDelay) || '5s';\n service.RestartWindow = ServiceHelper.translateNanosToHumanDuration(service.RestartWindow) || '0s';\n service.UpdateDelay = ServiceHelper.translateNanosToHumanDuration(service.UpdateDelay) || '0s';\n service.StopGracePeriod = service.StopGracePeriod ? ServiceHelper.translateNanosToHumanDuration(service.StopGracePeriod) : '';\n }\n\n $scope.hasAuthorizations = function (authorizations) {\n return $scope.isAdmin || Authentication.hasAuthorizations(authorizations);\n };\n\n $scope.disabledWebhookButton = function (webhookExists) {\n if (webhookExists) {\n return !$scope.hasAuthorizations(['PortainerWebhookDelete']);\n }\n return !$scope.hasAuthorizations(['PortainerWebhookCreate']);\n };\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n var service = null;\n ServiceService.service($transition$.params().id)\n .then(function success(data) {\n service = data;\n $scope.isUpdating = $scope.lastVersion >= service.Version;\n if (!$scope.isUpdating) {\n $scope.lastVersion = service.Version;\n }\n\n transformResources(service);\n translateServiceArrays(service);\n transformDurations(service);\n $scope.service = service;\n originalService = angular.copy(service);\n\n return $q.all({\n volumes: VolumeService.volumes(),\n tasks: TaskService.tasks({ service: [service.Name] }),\n containers: agentProxy ? ContainerService.containers() : [],\n nodes: NodeService.nodes(),\n secrets: apiVersion >= 1.25 ? SecretService.secrets() : [],\n configs: apiVersion >= 1.3 ? ConfigService.configs() : [],\n availableImages: ImageService.images(),\n availableLoggingDrivers: PluginService.loggingPlugins(apiVersion < 1.25),\n availableNetworks: NetworkService.networks(true, true, apiVersion >= 1.25),\n webhooks: WebhookService.webhooks(service.Id, endpoint.Id),\n });\n })\n .then(async function success(data) {\n $scope.nodes = data.nodes;\n $scope.configs = data.configs;\n $scope.secrets = data.secrets;\n $scope.availableImages = ImageService.getUniqueTagListFromImages(data.availableImages);\n $scope.availableLoggingDrivers = data.availableLoggingDrivers;\n $scope.availableVolumes = data.volumes;\n $scope.allowBindMounts = endpoint.SecuritySettings.allowBindMountsForRegularUsers;\n $scope.isAdmin = Authentication.isAdmin();\n $scope.availableNetworks = data.availableNetworks;\n $scope.swarmNetworks = _.filter($scope.availableNetworks, (network) => network.Scope === 'swarm');\n\n const serviceNetworks = _.uniqBy(_.concat($scope.service.Model.Spec.Networks || [], $scope.service.Model.Spec.TaskTemplate.Networks || []), 'Target');\n const networks = _.filter(\n _.map(serviceNetworks, ({ Target }) => _.find(data.availableNetworks, { Id: Target })),\n Boolean\n );\n\n if (_.some($scope.service.Ports, (port) => port.PublishMode === 'ingress')) {\n const ingressNetwork = _.find($scope.availableNetworks, (network) => network.Ingress);\n if (ingressNetwork) {\n networks.unshift(ingressNetwork);\n }\n }\n\n $scope.service.Networks = await Promise.all(\n _.map(networks, async (item) => {\n let addr = '';\n if (item.IPAM.Config.length) {\n addr = item.IPAM.Config[0].Subnet;\n } else {\n const network = await NetworkService.network(item.Id);\n addr = (network && network.IPAM && network.IPAM.Config && network.IPAM.Config.length && network.IPAM.Config[0].Subnet) || '';\n }\n return { Id: item.Id, Name: item.Name, Addr: addr, Editable: !item.Ingress };\n })\n );\n\n originalService.Networks = angular.copy($scope.service.Networks);\n\n if (data.webhooks.length > 0) {\n var webhook = data.webhooks[0];\n $scope.WebhookExists = true;\n $scope.webhookID = webhook.Id;\n $scope.webhookURL = WebhookHelper.returnWebhookUrl(webhook.Token);\n }\n\n var tasks = data.tasks;\n\n if (agentProxy) {\n var containers = data.containers;\n for (var i = 0; i < tasks.length; i++) {\n var task = tasks[i];\n TaskHelper.associateContainerToTask(task, containers);\n }\n }\n\n ServiceHelper.associateTasksToService(service, tasks);\n\n $scope.tasks = data.tasks;\n\n // Set max cpu value\n var maxCpus = 0;\n for (var n in data.nodes) {\n if (data.nodes[n].CPUs && data.nodes[n].CPUs > maxCpus) {\n maxCpus = data.nodes[n].CPUs;\n }\n }\n if (maxCpus > 0) {\n $scope.state.sliderMaxCpu = maxCpus / 1000000000;\n } else {\n $scope.state.sliderMaxCpu = 32;\n }\n\n const image = $scope.service.Model.Spec.TaskTemplate.ContainerSpec.Image;\n RegistryService.retrievePorRegistryModelFromRepository(image, endpoint.Id).then((model) => {\n $scope.formValues.RegistryModel = model;\n $scope.initialRegistryID = _.get(model, 'Registry.Id', 0);\n });\n\n // Default values\n $scope.state.addSecret = { override: false };\n\n $timeout(function () {\n $anchorScroll();\n });\n })\n .catch(function error(err) {\n $scope.secrets = [];\n $scope.configs = [];\n Notifications.error('Failure', err, 'Unable to retrieve service details');\n });\n }\n\n $scope.updateServiceAttribute = updateServiceAttribute;\n function updateServiceAttribute(service, name) {\n if (service[name] !== originalService[name] || !(name in originalService)) {\n service.hasChanges = true;\n }\n previousServiceValues.push(name);\n }\n\n $scope.filterNetworks = filterNetworks;\n function filterNetworks(networks, current) {\n return networks.filter((network) => !network.Ingress && (network.Id === current.Id || $scope.service.Networks.every((serviceNetwork) => network.Id !== serviceNetwork.Id)));\n }\n\n function updateServiceArray(service, name) {\n previousServiceValues.push(name);\n service.hasChanges = true;\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('ServiceLogsController', [\n '$scope',\n '$transition$',\n '$interval',\n 'ServiceService',\n 'Notifications',\n function ($scope, $transition$, $interval, ServiceService, Notifications) {\n $scope.state = {\n refreshRate: 3,\n lineCount: 100,\n sinceTimestamp: '',\n displayTimestamps: false,\n };\n\n $scope.changeLogCollection = function (logCollectionStatus) {\n if (!logCollectionStatus) {\n stopRepeater();\n } else {\n setUpdateRepeater();\n }\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater() {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n ServiceService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve service logs');\n });\n }, refreshRate * 1000);\n }\n\n function startLogPolling() {\n ServiceService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n setUpdateRepeater();\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve service logs');\n });\n }\n\n function initView() {\n ServiceService.service($transition$.params().id)\n .then(function success(data) {\n $scope.service = data;\n startLogPolling();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve service information');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('ServicesController', [\n '$q',\n '$scope',\n 'ServiceService',\n 'ServiceHelper',\n 'Notifications',\n 'TaskService',\n 'TaskHelper',\n 'NodeService',\n 'ContainerService',\n 'endpoint',\n function ($q, $scope, ServiceService, ServiceHelper, Notifications, TaskService, TaskHelper, NodeService, ContainerService, endpoint) {\n $scope.getServices = getServices;\n $scope.endpoint = endpoint;\n\n function getServices() {\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n return $q\n .all({\n services: ServiceService.services(),\n tasks: TaskService.tasks(),\n containers: agentProxy ? ContainerService.containers(1) : [],\n nodes: NodeService.nodes(),\n })\n .then(function success(data) {\n var services = data.services;\n var tasks = data.tasks;\n\n if (agentProxy) {\n var containers = data.containers;\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n TaskHelper.associateContainerToTask(task, containers);\n }\n }\n\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n ServiceHelper.associateTasksToService(service, tasks);\n }\n\n $scope.nodes = data.nodes;\n $scope.tasks = tasks;\n $scope.services = services;\n })\n .catch(function error(err) {\n $scope.services = [];\n Notifications.error('Failure', err, 'Unable to retrieve services');\n });\n }\n\n function initView() {\n getServices();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('SwarmController', [\n '$q',\n '$scope',\n 'SystemService',\n 'NodeService',\n 'Notifications',\n 'StateManager',\n 'Authentication',\n function ($q, $scope, SystemService, NodeService, Notifications, StateManager, Authentication) {\n $scope.info = {};\n $scope.docker = {};\n $scope.swarm = {};\n $scope.totalCPU = 0;\n $scope.totalMemory = 0;\n\n function extractSwarmInfo(info) {\n // Swarm info is available in SystemStatus object\n var systemStatus = info.SystemStatus;\n // Swarm strategy\n $scope.swarm[systemStatus[1][0]] = systemStatus[1][1];\n // Swarm filters\n $scope.swarm[systemStatus[2][0]] = systemStatus[2][1];\n // Swarm node count\n var nodes = systemStatus[0][1] === 'primary' ? systemStatus[3][1] : systemStatus[4][1];\n var node_count = parseInt(nodes, 10);\n $scope.swarm[systemStatus[3][0]] = node_count;\n\n $scope.swarm.Status = [];\n extractNodesInfo(systemStatus, node_count);\n }\n\n function extractNodesInfo(info, node_count) {\n // First information for node1 available at element #4 of SystemStatus if connected to a primary\n // If connected to a replica, information for node1 is available at element #5\n // The next 10 elements are information related to the node\n var node_offset = info[0][1] === 'primary' ? 4 : 5;\n for (let i = 0; i < node_count; i++) {\n extractNodeInfo(info, node_offset);\n node_offset += 9;\n }\n }\n\n function extractNodeInfo(info, offset) {\n var node = {};\n node.name = info[offset][0];\n node.ip = info[offset][1];\n node.Id = info[offset + 1][1];\n node.status = info[offset + 2][1];\n node.containers = info[offset + 3][1];\n node.cpu = info[offset + 4][1].split('/')[1];\n node.memory = info[offset + 5][1].split('/')[1];\n node.labels = info[offset + 6][1];\n node.version = info[offset + 8][1];\n $scope.swarm.Status.push(node);\n }\n\n function processTotalCPUAndMemory(nodes) {\n var CPU = 0,\n memory = 0;\n angular.forEach(nodes, function (node) {\n CPU += node.CPUs;\n memory += node.Memory;\n });\n $scope.totalCPU = CPU / 1000000000;\n $scope.totalMemory = memory;\n }\n\n $scope.getNodes = getNodes;\n function getNodes() {\n var provider = $scope.applicationState.endpoint.mode.provider;\n if (provider === 'DOCKER_SWARM_MODE') {\n NodeService.nodes()\n .then(function (data) {\n var nodes = data;\n processTotalCPUAndMemory(nodes);\n $scope.nodes = nodes;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve cluster details');\n });\n }\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n var provider = $scope.applicationState.endpoint.mode.provider;\n $q.all({\n version: SystemService.version(),\n info: SystemService.info(),\n })\n .then(function success(data) {\n $scope.docker = data.version;\n $scope.info = data.info;\n if (provider === 'DOCKER_SWARM_MODE') {\n getNodes();\n } else {\n extractSwarmInfo(data.info);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve cluster details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('SwarmVisualizerController', [\n '$q',\n '$scope',\n '$document',\n '$interval',\n 'NodeService',\n 'ServiceService',\n 'TaskService',\n 'Notifications',\n 'LocalStorage',\n function ($q, $scope, $document, $interval, NodeService, ServiceService, TaskService, Notifications, LocalStorage) {\n $scope.state = {\n ShowInformationPanel: true,\n DisplayOnlyRunningTasks: false,\n DisplayNodeLabels: false,\n refreshRate: '5',\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n $scope.changeShowInformationPanel = function (value) {\n $scope.state.ShowInformationPanel = value;\n LocalStorage.storeSwarmVisualizerSettings('show_info_panel', value);\n };\n\n $scope.changeDisplayOnlyRunningTasks = function () {\n var value = $scope.state.DisplayOnlyRunningTasks;\n LocalStorage.storeSwarmVisualizerSettings('display_only_running_tasks', value);\n };\n\n $scope.changeDisplayNodeLabels = function () {\n var value = $scope.state.DisplayNodeLabels;\n LocalStorage.storeSwarmVisualizerSettings('display_node_labels', value);\n };\n\n $scope.changeUpdateRepeater = function () {\n stopRepeater();\n setUpdateRepeater();\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n LocalStorage.storeSwarmVisualizerSettings('refresh_rate', $scope.state.refreshRate);\n };\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater() {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n $q.all({\n nodes: NodeService.nodes(),\n services: ServiceService.services(),\n tasks: TaskService.tasks(),\n })\n .then(function success(data) {\n var nodes = data.nodes;\n $scope.nodes = nodes;\n var services = data.services;\n $scope.services = services;\n var tasks = data.tasks;\n $scope.tasks = tasks;\n prepareVisualizerData(nodes, services, tasks);\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve cluster information');\n });\n }, refreshRate * 1000);\n }\n\n function assignServiceInfo(services, tasks) {\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n\n if (task.ServiceId === service.Id) {\n task.ServiceName = service.Name;\n }\n }\n }\n }\n\n function assignTasksToNode(nodes, tasks) {\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n node.Tasks = [];\n\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n\n if (task.NodeId === node.Id) {\n node.Tasks.push(task);\n }\n }\n }\n }\n\n function prepareVisualizerData(nodes, services, tasks) {\n var visualizerData = {};\n\n assignServiceInfo(services, tasks);\n assignTasksToNode(nodes, tasks);\n\n visualizerData.nodes = nodes;\n $scope.visualizerData = visualizerData;\n }\n\n function loadState() {\n var showInfoPanel = LocalStorage.getSwarmVisualizerSettings('show_info_panel');\n if (showInfoPanel !== undefined && showInfoPanel !== null) $scope.state.ShowInformationPanel = showInfoPanel;\n\n var displayOnlyRunningTasks = LocalStorage.getSwarmVisualizerSettings('display_only_running_tasks');\n if (displayOnlyRunningTasks !== undefined && displayOnlyRunningTasks !== null) $scope.state.DisplayOnlyRunningTasks = displayOnlyRunningTasks;\n\n var displayNodeLabels = LocalStorage.getSwarmVisualizerSettings('display_node_labels');\n if (displayNodeLabels !== undefined && displayNodeLabels !== null) $scope.state.DisplayNodeLabels = displayNodeLabels;\n\n var refreshRate = LocalStorage.getSwarmVisualizerSettings('refresh_rate');\n if (refreshRate !== undefined && refreshRate !== null) $scope.state.refreshRate = refreshRate;\n }\n\n function initView() {\n $q.all({\n nodes: NodeService.nodes(),\n services: ServiceService.services(),\n tasks: TaskService.tasks(),\n })\n .then(function success(data) {\n var nodes = data.nodes;\n $scope.nodes = nodes;\n var services = data.services;\n $scope.services = services;\n var tasks = data.tasks;\n $scope.tasks = tasks;\n prepareVisualizerData(nodes, services, tasks);\n setUpdateRepeater();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to initialize cluster visualizer');\n });\n\n loadState();\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('TaskController', [\n '$scope',\n '$transition$',\n 'TaskService',\n 'ServiceService',\n 'Notifications',\n function ($scope, $transition$, TaskService, ServiceService, Notifications) {\n function initView() {\n TaskService.task($transition$.params().id)\n .then(function success(data) {\n var task = data;\n $scope.task = task;\n return ServiceService.service(task.ServiceId);\n })\n .then(function success(data) {\n var service = data;\n $scope.service = service;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve task details');\n });\n }\n\n initView();\n },\n]);\n","import moment from 'moment';\n\nangular.module('portainer.docker').controller('TaskLogsController', [\n '$scope',\n '$transition$',\n '$interval',\n 'TaskService',\n 'ServiceService',\n 'Notifications',\n function ($scope, $transition$, $interval, TaskService, ServiceService, Notifications) {\n $scope.state = {\n refreshRate: 3,\n lineCount: 100,\n sinceTimestamp: '',\n displayTimestamps: false,\n };\n\n $scope.changeLogCollection = function (logCollectionStatus) {\n if (!logCollectionStatus) {\n stopRepeater();\n } else {\n setUpdateRepeater();\n }\n };\n\n $scope.$on('$destroy', function () {\n stopRepeater();\n });\n\n function stopRepeater() {\n var repeater = $scope.repeater;\n if (angular.isDefined(repeater)) {\n $interval.cancel(repeater);\n repeater = null;\n }\n }\n\n function setUpdateRepeater() {\n var refreshRate = $scope.state.refreshRate;\n $scope.repeater = $interval(function () {\n TaskService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve task logs');\n });\n }, refreshRate * 1000);\n }\n\n function startLogPolling() {\n TaskService.logs($transition$.params().id, 1, 1, $scope.state.displayTimestamps ? 1 : 0, moment($scope.state.sinceTimestamp).unix(), $scope.state.lineCount)\n .then(function success(data) {\n $scope.logs = data;\n setUpdateRepeater();\n })\n .catch(function error(err) {\n stopRepeater();\n Notifications.error('Failure', err, 'Unable to retrieve task logs');\n });\n }\n\n function initView() {\n TaskService.task($transition$.params().id)\n .then(function success(data) {\n var task = data;\n $scope.task = task;\n return ServiceService.service(task.ServiceId);\n })\n .then(function success(data) {\n var service = data;\n $scope.service = service;\n startLogPolling();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve task details');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('BrowseVolumeController', BrowseVolumeController);\n\n/* @ngInject */\nfunction BrowseVolumeController($scope, $transition$, StateManager, endpoint) {\n function initView() {\n $scope.volumeId = $transition$.params().id;\n $scope.nodeName = $transition$.params().nodeName;\n $scope.agentApiVersion = StateManager.getAgentApiVersion();\n $scope.endpointId = endpoint.Id;\n }\n\n initView();\n}\n","import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';\nimport { VolumesNFSFormData } from '../../../components/volumesNFSForm/volumesNFSFormModel';\nimport { VolumesCIFSFormData } from '../../../components/volumesCIFSForm/volumesCifsFormModel';\n\nangular.module('portainer.docker').controller('CreateVolumeController', [\n '$q',\n '$scope',\n '$state',\n 'VolumeService',\n 'PluginService',\n 'ResourceControlService',\n 'Authentication',\n 'Notifications',\n 'FormValidator',\n 'HttpRequestHelper',\n function ($q, $scope, $state, VolumeService, PluginService, ResourceControlService, Authentication, Notifications, FormValidator, HttpRequestHelper) {\n $scope.formValues = {\n Driver: 'local',\n DriverOptions: [],\n AccessControlData: new AccessControlFormData(),\n NodeName: null,\n NFSData: new VolumesNFSFormData(),\n CIFSData: new VolumesCIFSFormData(),\n };\n\n $scope.state = {\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.availableVolumeDrivers = [];\n\n $scope.addDriverOption = function () {\n $scope.formValues.DriverOptions.push({ name: '', value: '' });\n };\n\n $scope.removeDriverOption = function (index) {\n $scope.formValues.DriverOptions.splice(index, 1);\n };\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function prepareCIFSConfiguration(driverOptions) {\n const data = $scope.formValues.CIFSData;\n\n driverOptions.push({ name: 'type', value: 'cifs' });\n\n let share = data.share.replace('\\\\', '/');\n if (share[0] !== '/') {\n share = '/' + share;\n }\n const device = '//' + data.serverAddress + share;\n driverOptions.push({ name: 'device', value: device });\n\n const versionNumber = data.versionsNumber[data.versions.indexOf(data.version)];\n const options = 'username=' + data.username + ',password=' + data.password + ',vers=' + versionNumber;\n driverOptions.push({ name: 'o', value: options });\n }\n\n function prepareNFSConfiguration(driverOptions) {\n var data = $scope.formValues.NFSData;\n\n driverOptions.push({ name: 'type', value: 'nfs' });\n\n var options = 'addr=' + data.serverAddress + ',' + data.options;\n if (data.version === 'NFS4') {\n options = options + ',nfsvers=4';\n }\n driverOptions.push({ name: 'o', value: options });\n\n var mountPoint = data.mountPoint[0] === ':' ? data.mountPoint : ':' + data.mountPoint;\n driverOptions.push({ name: 'device', value: mountPoint });\n }\n\n $scope.create = function () {\n var name = $scope.formValues.Name;\n var driver = $scope.formValues.Driver;\n var driverOptions = $scope.formValues.DriverOptions;\n\n if ($scope.formValues.NFSData.useNFS) {\n prepareNFSConfiguration(driverOptions);\n }\n\n if ($scope.formValues.CIFSData.useCIFS) {\n prepareCIFSConfiguration(driverOptions);\n }\n\n var volumeConfiguration = VolumeService.createVolumeConfiguration(name, driver, driverOptions);\n var accessControlData = $scope.formValues.AccessControlData;\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n var nodeName = $scope.formValues.NodeName;\n HttpRequestHelper.setPortainerAgentTargetHeader(nodeName);\n\n $scope.state.actionInProgress = true;\n VolumeService.createVolume(volumeConfiguration)\n .then(function success(data) {\n const userId = userDetails.ID;\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Volume successfully created');\n $state.go('docker.volumes', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'An error occured during volume creation');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function initView() {\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n\n PluginService.volumePlugins(apiVersion < 1.25)\n .then(function success(data) {\n $scope.availableVolumeDrivers = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve volume drivers');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.docker').controller('VolumeController', [\n '$scope',\n '$state',\n '$transition$',\n '$q',\n 'ModalService',\n 'VolumeService',\n 'ContainerService',\n 'Notifications',\n 'HttpRequestHelper',\n function ($scope, $state, $transition$, $q, ModalService, VolumeService, ContainerService, Notifications, HttpRequestHelper) {\n $scope.removeVolume = function removeVolume() {\n ModalService.confirmDeletion('Do you want to remove this volume?', (confirmed) => {\n if (confirmed) {\n VolumeService.remove($scope.volume)\n .then(function success() {\n Notifications.success('Volume successfully removed', $transition$.params().id);\n $state.go('docker.volumes', {});\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove volume');\n });\n }\n });\n };\n\n function getVolumeDataFromContainer(container, volumeId) {\n return container.Mounts.find(function (volume) {\n return volume.Name === volumeId;\n });\n }\n\n function initView() {\n HttpRequestHelper.setPortainerAgentTargetHeader($transition$.params().nodeName);\n\n VolumeService.volume($transition$.params().id)\n .then(function success(data) {\n var volume = data;\n $scope.volume = volume;\n var containerFilter = { volume: [volume.Id] };\n\n return ContainerService.containers(1, containerFilter);\n })\n .then(function success(data) {\n var dataContainers = $scope.isCioDriver ? data.containers : data;\n\n var containers = dataContainers.map(function (container) {\n container.volumeData = getVolumeDataFromContainer(container, $scope.volume.Id);\n return container;\n });\n $scope.containersUsingVolume = containers;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve volume details');\n });\n }\n\n initView();\n },\n]);\n","import { isOfflineEndpoint } from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.docker').controller('VolumesController', [\n '$q',\n '$scope',\n '$state',\n 'VolumeService',\n 'ServiceService',\n 'VolumeHelper',\n 'Notifications',\n 'HttpRequestHelper',\n 'ModalService',\n 'endpoint',\n function ($q, $scope, $state, VolumeService, ServiceService, VolumeHelper, Notifications, HttpRequestHelper, ModalService, endpoint) {\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected volume(s)?', (confirmed) => {\n if (confirmed) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (volume) {\n HttpRequestHelper.setPortainerAgentTargetHeader(volume.NodeName);\n VolumeService.remove(volume)\n .then(function success() {\n Notifications.success('Volume successfully removed', volume.Id);\n var index = $scope.volumes.indexOf(volume);\n $scope.volumes.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove volume');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n });\n };\n\n $scope.offlineMode = false;\n\n $scope.getVolumes = getVolumes;\n function getVolumes() {\n var endpointProvider = $scope.applicationState.endpoint.mode.provider;\n var endpointRole = $scope.applicationState.endpoint.mode.role;\n\n $q.all({\n attached: VolumeService.volumes({ filters: { dangling: ['false'] } }),\n dangling: VolumeService.volumes({ filters: { dangling: ['true'] } }),\n services: endpointProvider === 'DOCKER_SWARM_MODE' && endpointRole === 'MANAGER' ? ServiceService.services() : [],\n })\n .then(function success(data) {\n var services = data.services;\n $scope.offlineMode = isOfflineEndpoint(endpoint);\n $scope.volumes = data.attached\n .map(function (volume) {\n volume.dangling = false;\n return volume;\n })\n .concat(\n data.dangling.map(function (volume) {\n volume.dangling = true;\n if (VolumeHelper.isVolumeUsedByAService(volume, services)) {\n volume.dangling = false;\n }\n return volume;\n })\n );\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve volumes');\n });\n }\n\n function initView() {\n getVolumes();\n\n $scope.showBrowseAction = $scope.applicationState.endpoint.mode.agentProxy;\n }\n\n initView();\n },\n]);\n","import { TableSettingsMenuAutoRefresh } from '@/portainer/components/datatables/components/TableSettingsMenuAutoRefresh';\nimport { useTableSettings } from '@/portainer/components/datatables/components/useTableSettings';\nimport { EdgeDeviceTableSettings } from '@/edge/devices/types';\n\nexport function EdgeDevicesDatatableSettings() {\n const { settings, setTableSettings } =\n useTableSettings();\n\n return (\n \n );\n\n function handleRefreshRateChange(autoRefreshRate: number) {\n setTableSettings({ autoRefreshRate });\n }\n}\n","import { useRouter } from '@uirouter/react';\n\nimport type { Environment } from '@/portainer/environments/types';\nimport { Button } from '@/portainer/components/Button';\nimport { confirmAsync } from '@/portainer/services/modal.service/confirm';\nimport { promptAsync } from '@/portainer/services/modal.service/prompt';\nimport * as notifications from '@/portainer/services/notifications';\nimport { activateDevice } from '@/portainer/hostmanagement/open-amt/open-amt.service';\nimport { deleteEndpoint } from '@/portainer/environments/environment.service';\n\ninterface Props {\n selectedItems: Environment[];\n isFDOEnabled: boolean;\n isOpenAMTEnabled: boolean;\n setLoadingMessage(message: string): void;\n}\n\nexport function EdgeDevicesDatatableActions({\n selectedItems,\n isOpenAMTEnabled,\n isFDOEnabled,\n setLoadingMessage,\n}: Props) {\n const router = useRouter();\n\n return (\n
    \n onDeleteEdgeDeviceClick()}\n >\n \n Remove\n \n\n \n\n {isOpenAMTEnabled && (\n onAssociateOpenAMTClick(selectedItems)}\n >\n \n Associate with OpenAMT\n \n )}\n
    \n );\n\n async function onDeleteEdgeDeviceClick() {\n const confirmed = await confirmAsync({\n title: 'Are you sure ?',\n message:\n 'This action will remove all configurations associated to your environment(s). Continue?',\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n });\n\n if (!confirmed) {\n return;\n }\n\n await Promise.all(\n selectedItems.map(async (environment) => {\n try {\n await deleteEndpoint(environment.Id);\n\n notifications.success(\n 'Environment successfully removed',\n environment.Name\n );\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'Unable to remove environment'\n );\n }\n })\n );\n\n await router.stateService.reload();\n }\n\n async function onAddNewDeviceClick() {\n if (!isFDOEnabled) {\n router.stateService.go('portainer.endpoints.newEdgeDevice');\n return;\n }\n\n const result = await promptAsync({\n title: 'How would you like to add an Edge Device?',\n inputType: 'radio',\n inputOptions: [\n {\n text: 'Provision bare-metal using Intel FDO',\n value: 'FDO',\n },\n {\n text: 'Deploy agent manually',\n value: 'MANUAL',\n },\n ],\n buttons: {\n confirm: {\n label: 'Confirm',\n className: 'btn-primary',\n },\n },\n });\n\n switch (result) {\n case 'FDO':\n router.stateService.go('portainer.endpoints.importDevice');\n break;\n case 'MANUAL':\n router.stateService.go('portainer.endpoints.newEdgeDevice');\n break;\n default:\n break;\n }\n }\n\n async function onAssociateOpenAMTClick(selectedItems: Environment[]) {\n const selectedEnvironment = selectedItems[0];\n\n const confirmed = await confirmAsync({\n title: '',\n message: `Associate ${selectedEnvironment.Name} with OpenAMT`,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-default',\n },\n confirm: {\n label: 'Confirm',\n className: 'btn-primary',\n },\n },\n });\n\n if (!confirmed) {\n return;\n }\n\n try {\n setLoadingMessage(\n 'Activating Active Management Technology on selected device...'\n );\n await activateDevice(selectedEnvironment.Id);\n notifications.success(\n 'Successfully associated with OpenAMT',\n selectedEnvironment.Name\n );\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'Unable to associate with OpenAMT'\n );\n } finally {\n setLoadingMessage('');\n }\n }\n}\n","import { PropsWithChildren } from 'react';\n\nimport styles from './InnerDatatable.module.css';\n\nexport function InnerDatatable({ children }: PropsWithChildren) {\n return
    {children}
    ;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"innerDatatable\":\"app-portainer-components-datatables-components-InnerDatatable-module__inner-datatable\"};","import {\n createContext,\n useContext,\n useMemo,\n useReducer,\n PropsWithChildren,\n} from 'react';\nimport { EnvironmentId } from 'Portainer/environments/types';\n\ninterface RowContextState {\n environmentId: EnvironmentId;\n isLoading: boolean;\n toggleIsLoading(): void;\n}\n\nconst RowContext = createContext(null);\n\nexport interface RowProviderProps {\n environmentId: EnvironmentId;\n}\n\nexport function RowProvider({\n environmentId,\n children,\n}: PropsWithChildren) {\n const [isLoading, toggleIsLoading] = useReducer((state) => !state, false);\n\n const state = useMemo(\n () => ({ isLoading, toggleIsLoading, environmentId }),\n [isLoading, toggleIsLoading, environmentId]\n );\n\n return {children};\n}\n\nexport function useRowContext() {\n const context = useContext(RowContext);\n if (!context) {\n throw new Error('should be nested under RowProvider');\n }\n\n return context;\n}\n","import { Column } from 'react-table';\n\nimport { Device } from '@/portainer/hostmanagement/open-amt/model';\n\nexport const hostname: Column = {\n Header: 'Hostname',\n accessor: (row) => row.hostname || '-',\n id: 'hostname',\n disableFilters: true,\n canHide: true,\n sortType: 'string',\n Filter: () => null,\n};\n","export interface EdgeDeviceTableSettings {\n hiddenColumns: string[];\n autoRefreshRate: number;\n pageSize: number;\n sortBy: { id: string; desc: boolean };\n}\n\nexport interface FDOProfilesTableSettings {\n pageSize: number;\n sortBy: { id: string; desc: boolean };\n}\n\nexport enum DeviceAction {\n PowerOn = 'power on',\n PowerOff = 'power off',\n Restart = 'restart',\n}\n\nexport enum PowerState {\n Running = 'Running',\n Sleep = 'Sleep',\n Off = 'Off',\n Hibernate = 'Hibernate',\n PowerCycle = 'Power Cycle',\n}\n\nexport enum PowerStateCode {\n On = 2,\n SleepLight = 3,\n SleepDeep = 4,\n OffHard = 6,\n Hibernate = 7,\n OffSoft = 8,\n PowerCycle = 9,\n OffHardGraceful = 13,\n}\n","import { CellProps, Column } from 'react-table';\nimport clsx from 'clsx';\n\nimport { Device } from '@/portainer/hostmanagement/open-amt/model';\n\nexport const status: Column = {\n Header: 'MPS Status',\n id: 'status',\n disableFilters: true,\n canHide: true,\n sortType: 'string',\n Cell: StatusCell,\n Filter: () => null,\n};\n\nexport function StatusCell({ row: { original: device } }: CellProps) {\n return (\n \n {device.connectionStatus ? 'Connected' : 'Disconnected'}\n \n );\n}\n","import { CellProps, Column } from 'react-table';\nimport clsx from 'clsx';\n\nimport { Device } from '@/portainer/hostmanagement/open-amt/model';\nimport { useRowContext } from '@/edge/devices/components/AMTDevicesDatatable/columns/RowContext';\nimport { PowerState, PowerStateCode } from '@/edge/devices/types';\n\nexport const powerState: Column = {\n Header: 'Power State',\n accessor: (row) => parsePowerState(row.powerState),\n id: 'powerState',\n disableFilters: true,\n canHide: true,\n sortType: 'string',\n Cell: PowerStateCell,\n Filter: () => null,\n};\n\nexport function PowerStateCell({\n row: { original: device },\n}: CellProps) {\n const { isLoading } = useRowContext();\n return (\n <>\n \n {parsePowerState(device.powerState)}\n \n {isLoading && }\n \n );\n}\n\nfunction parsePowerState(value: PowerStateCode) {\n // https://app.swaggerhub.com/apis-docs/rbheopenamt/mps/1.4.0#/AMT/get_api_v1_amt_power_state__guid_\n switch (value) {\n case PowerStateCode.On:\n return PowerState.Running;\n case PowerStateCode.SleepLight:\n case PowerStateCode.SleepDeep:\n return PowerState.Sleep;\n case PowerStateCode.OffHard:\n case PowerStateCode.OffSoft:\n case PowerStateCode.OffHardGraceful:\n return PowerState.Off;\n case PowerStateCode.Hibernate:\n return PowerState.Hibernate;\n case PowerStateCode.PowerCycle:\n return PowerState.PowerCycle;\n default:\n return '-';\n }\n}\n","import { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { Menu, MenuList, MenuButton } from '@reach/menu-button';\n\nimport styles from './ActionsMenu.module.css';\n\ninterface Props {\n children: ReactNode;\n}\n\nexport function ActionsMenu({ children }: Props) {\n return (\n \n {({ isExpanded }) => (\n <>\n \n \n \n \n
    {children}
    \n
    \n \n )}\n
    \n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"actions\":\"app-portainer-components-datatables-components-ActionsMenu-module__actions\",\"actionsActive\":\"app-portainer-components-datatables-components-ActionsMenu-module__actions-active\",\"tableActionsMenuList\":\"app-portainer-components-datatables-components-ActionsMenu-module__table-actions-menu-list\",\"tableActionsMenuBtn\":\"app-portainer-components-datatables-components-ActionsMenu-module__table-actions-menu-btn\"};","import { ReactNode } from 'react';\n\nimport styles from './ActionsMenuTitle.module.css';\n\ninterface Props {\n children: ReactNode;\n}\n\nexport function ActionsMenuTitle({ children }: Props) {\n return
    {children}
    ;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"tableActionsTitle\":\"app-portainer-components-datatables-components-ActionsMenuTitle-module__table-actions-title\"};","import { CellProps, Column } from 'react-table';\nimport { useSref } from '@uirouter/react';\nimport { MenuItem, MenuLink } from '@reach/menu-button';\nimport { useQueryClient } from 'react-query';\n\nimport { Device } from '@/portainer/hostmanagement/open-amt/model';\nimport { ActionsMenu } from '@/portainer/components/datatables/components/ActionsMenu';\nimport { confirmAsync } from '@/portainer/services/modal.service/confirm';\nimport { executeDeviceAction } from '@/portainer/hostmanagement/open-amt/open-amt.service';\nimport * as notifications from '@/portainer/services/notifications';\nimport { ActionsMenuTitle } from '@/portainer/components/datatables/components/ActionsMenuTitle';\nimport { useRowContext } from '@/edge/devices/components/AMTDevicesDatatable/columns/RowContext';\nimport { DeviceAction } from '@/edge/devices/types';\n\nexport const actions: Column = {\n Header: 'Actions',\n accessor: () => 'actions',\n id: 'actions',\n disableFilters: true,\n canHide: true,\n disableResizing: true,\n width: '5px',\n sortType: 'string',\n Filter: () => null,\n Cell: ActionsCell,\n};\n\nexport function ActionsCell({ row: { original: device } }: CellProps) {\n const queryClient = useQueryClient();\n\n const { isLoading, toggleIsLoading, environmentId } = useRowContext();\n\n const kvmLinkProps = useSref('portainer.endpoints.endpoint.kvm', {\n id: environmentId,\n deviceId: device.guid,\n deviceName: device.hostname,\n });\n\n return (\n \n AMT Functions\n handleDeviceActionClick(DeviceAction.PowerOn)}\n >\n Power ON\n \n handleDeviceActionClick(DeviceAction.PowerOff)}\n >\n Power OFF\n \n handleDeviceActionClick(DeviceAction.Restart)}\n >\n Restart\n \n \n KVM\n \n \n );\n\n async function handleDeviceActionClick(action: string) {\n const confirmed = await confirmAsync({\n title: 'Confirm action',\n message: `Are you sure you want to ${action} the device?`,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-default',\n },\n confirm: {\n label: 'Confirm',\n className: 'btn-primary',\n },\n },\n });\n\n if (!confirmed) {\n return;\n }\n\n try {\n toggleIsLoading();\n await executeDeviceAction(environmentId, device.guid, action);\n notifications.success(\n `${action} action sent successfully`,\n device.hostname\n );\n await queryClient.invalidateQueries(['amt_devices', environmentId]);\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n `Failed to ${action} the device`\n );\n } finally {\n toggleIsLoading();\n }\n }\n}\n","import { usePagination, useTable } from 'react-table';\n\nimport {\n Table,\n TableContainer,\n TableHeaderRow,\n TableRow,\n} from '@/portainer/components/datatables/components';\nimport { InnerDatatable } from '@/portainer/components/datatables/components/InnerDatatable';\nimport { Device } from '@/portainer/hostmanagement/open-amt/model';\nimport { useAMTDevices } from '@/edge/devices/components/AMTDevicesDatatable/useAMTDevices';\nimport { RowProvider } from '@/edge/devices/components/AMTDevicesDatatable/columns/RowContext';\nimport { EnvironmentId } from '@/portainer/environments/types';\nimport PortainerError from '@/portainer/error';\n\nimport { useColumns } from './columns';\n\nexport interface AMTDevicesTableProps {\n environmentId: EnvironmentId;\n}\n\nexport function AMTDevicesDatatable({ environmentId }: AMTDevicesTableProps) {\n const columns = useColumns();\n\n const { isLoading, devices, error } = useAMTDevices(environmentId);\n\n const { getTableProps, getTableBodyProps, headerGroups, page, prepareRow } =\n useTable(\n {\n columns,\n data: devices,\n },\n usePagination\n );\n\n const tableProps = getTableProps();\n const tbodyProps = getTableBodyProps();\n\n return (\n \n \n \n \n {headerGroups.map((headerGroup) => {\n const { key, className, role, style } =\n headerGroup.getHeaderGroupProps();\n return (\n \n key={key}\n className={className}\n role={role}\n style={style}\n headers={headerGroup.headers}\n />\n );\n })}\n \n \n {!isLoading && devices && devices.length > 0 ? (\n page.map((row) => {\n prepareRow(row);\n const { key, className, role, style } = row.getRowProps();\n\n return (\n \n \n cells={row.cells}\n key={key}\n className={className}\n role={role}\n style={style}\n />\n \n );\n })\n ) : (\n \n \n {userMessage(isLoading, error)}\n \n \n )}\n \n \n \n \n );\n}\n\nfunction userMessage(isLoading: boolean, error?: PortainerError) {\n if (isLoading) {\n return 'Loading...';\n }\n\n if (error) {\n return error.message;\n }\n\n return 'No devices found';\n}\n","import { useMemo } from 'react';\n\nimport { hostname } from './hostname';\nimport { status } from './status';\nimport { powerState } from './power-state';\nimport { actions } from './actions';\n\nexport function useColumns() {\n return useMemo(() => [hostname, status, powerState, actions], []);\n}\n","import { useEffect, useMemo } from 'react';\nimport { useQuery } from 'react-query';\n\nimport { getDevices } from '@/portainer/hostmanagement/open-amt/open-amt.service';\nimport { EnvironmentId } from '@/portainer/environments/types';\nimport PortainerError from '@/portainer/error';\nimport * as notifications from '@/portainer/services/notifications';\n\nexport function useAMTDevices(environmentId: EnvironmentId) {\n const { isLoading, data, isError, error } = useQuery(\n ['amt_devices', environmentId],\n () => getDevices(environmentId)\n );\n\n useEffect(() => {\n if (isError) {\n notifications.error(\n 'Failure',\n error as Error,\n 'Failed retrieving AMT devices'\n );\n }\n }, [isError, error]);\n\n const devices = useMemo(() => data || [], [data]);\n\n return {\n isLoading,\n devices,\n error: isError ? (error as PortainerError) : undefined,\n };\n}\n","import { createContext, useContext, useMemo, PropsWithChildren } from 'react';\n\ninterface RowContextState {\n disableTrustOnFirstConnect: boolean;\n isOpenAmtEnabled: boolean;\n}\n\nconst RowContext = createContext(null);\n\nexport interface RowProviderProps {\n disableTrustOnFirstConnect: boolean;\n isOpenAmtEnabled: boolean;\n}\n\nexport function RowProvider({\n disableTrustOnFirstConnect,\n isOpenAmtEnabled,\n children,\n}: PropsWithChildren) {\n const state = useMemo(\n () => ({ disableTrustOnFirstConnect, isOpenAmtEnabled }),\n [disableTrustOnFirstConnect, isOpenAmtEnabled]\n );\n\n return {children};\n}\n\nexport function useRowContext() {\n const context = useContext(RowContext);\n if (!context) {\n throw new Error('should be nested under RowProvider');\n }\n\n return context;\n}\n","import { PropsWithChildren } from 'react';\nimport { Row } from 'react-table';\n\nimport styles from './ExpandingCell.module.css';\n\ninterface Props = Record> {\n row: Row;\n showExpandArrow: boolean;\n}\n\nexport function ExpandingCell<\n D extends Record = Record\n>({ row, showExpandArrow, children }: PropsWithChildren>) {\n return (\n <>\n {showExpandArrow && (\n \n )}\n {children}\n \n );\n\n function arrowClass(isExpanded: boolean) {\n if (isExpanded) {\n return 'fa-angle-down';\n }\n return 'fa-angle-right';\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"expandButton\":\"app-portainer-components-datatables-components-ExpandingCell-module__expand-button\"};","import { CellProps, Column } from 'react-table';\n\nimport { Environment } from '@/portainer/environments/types';\nimport { Link } from '@/portainer/components/Link';\nimport { ExpandingCell } from '@/portainer/components/datatables/components/ExpandingCell';\nimport { useRowContext } from '@/edge/devices/components/EdgeDevicesDatatable/columns/RowContext';\n\nexport const name: Column = {\n Header: 'Name',\n accessor: (row) => row.Name,\n id: 'name',\n Cell: NameCell,\n disableFilters: true,\n Filter: () => null,\n canHide: false,\n sortType: 'string',\n};\n\nexport function NameCell({ value: name, row }: CellProps) {\n const { isOpenAmtEnabled } = useRowContext();\n const showExpandedRow = !!(\n isOpenAmtEnabled &&\n row.original.AMTDeviceGUID &&\n row.original.AMTDeviceGUID.length > 0\n );\n return (\n \n \n {name}\n \n \n );\n}\n","import { CellProps, Column } from 'react-table';\nimport clsx from 'clsx';\n\nimport { Environment, EnvironmentStatus } from '@/portainer/environments/types';\nimport { useRowContext } from '@/edge/devices/components/EdgeDevicesDatatable/columns/RowContext';\n\nexport const heartbeat: Column = {\n Header: 'Heartbeat',\n accessor: 'Status',\n id: 'status',\n Cell: StatusCell,\n disableFilters: true,\n canHide: true,\n};\n\nexport function StatusCell({\n row: { original: environment },\n}: CellProps) {\n const { disableTrustOnFirstConnect } = useRowContext();\n\n if (disableTrustOnFirstConnect && !environment.UserTrusted) {\n return untrusted;\n }\n\n if (!environment.LastCheckInDate) {\n return (\n \n associated\n \n );\n }\n\n return (\n \n );\n\n function environmentStatusLabel(status: EnvironmentStatus) {\n if (status === EnvironmentStatus.Up) {\n return 'green-icon';\n }\n return 'orange-icon';\n }\n}\n","import { Column } from 'react-table';\n\nimport { Environment } from '@/portainer/environments/types';\nimport { DefaultFilter } from '@/portainer/components/datatables/components/Filter';\n\nexport const group: Column = {\n Header: 'Group',\n accessor: (row) => row.GroupName || '-',\n id: 'groupName',\n Filter: DefaultFilter,\n canHide: true,\n};\n","import { CellProps, Column } from 'react-table';\nimport { MenuItem, MenuLink } from '@reach/menu-button';\nimport { useRouter, useSref } from '@uirouter/react';\n\nimport { Environment } from '@/portainer/environments/types';\nimport { ActionsMenu } from '@/portainer/components/datatables/components/ActionsMenu';\nimport {\n snapshotEndpoint,\n trustEndpoint,\n} from '@/portainer/environments/environment.service';\nimport * as notifications from '@/portainer/services/notifications';\nimport { getRoute } from '@/portainer/environments/utils';\nimport { confirmAsync } from '@/portainer/services/modal.service/confirm';\nimport { useRowContext } from '@/edge/devices/components/EdgeDevicesDatatable/columns/RowContext';\n\nexport const actions: Column = {\n Header: 'Actions',\n accessor: () => 'actions',\n id: 'actions',\n disableFilters: true,\n canHide: true,\n disableResizing: true,\n width: '5px',\n sortType: 'string',\n Filter: () => null,\n Cell: ActionsCell,\n};\n\nexport function ActionsCell({\n row: { original: environment },\n}: CellProps) {\n const router = useRouter();\n\n const environmentRoute = getRoute(environment);\n const browseLinkProps = useSref(environmentRoute, {\n id: environment.Id,\n endpointId: environment.Id,\n });\n\n const showRefreshSnapshot = false; // remove and show MenuItem when feature is available\n\n const { disableTrustOnFirstConnect } = useRowContext();\n\n return (\n \n \n Browse\n \n {showRefreshSnapshot && (\n \n )}\n {disableTrustOnFirstConnect && !environment.UserTrusted && (\n Trust\n )}\n \n );\n\n async function handleRefreshSnapshotClick() {\n try {\n await snapshotEndpoint(environment.Id);\n notifications.success('Success', 'Environment updated');\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'An error occurred during environment snapshot'\n );\n } finally {\n await router.stateService.reload();\n }\n }\n\n async function trustDevice() {\n const confirmed = await confirmAsync({\n title: '',\n message: `Mark ${environment.Name} as trusted?`,\n buttons: {\n cancel: {\n label: 'Cancel',\n className: 'btn-default',\n },\n confirm: {\n label: 'Trust',\n className: 'btn-primary',\n },\n },\n });\n\n if (!confirmed) {\n return;\n }\n\n try {\n await trustEndpoint(environment.Id);\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'An error occurred while trusting the environment'\n );\n } finally {\n await router.stateService.reload();\n }\n }\n}\n","import { Environment, EnvironmentType, PlatformType } from './types';\n\nexport function getPlatformType(envType: EnvironmentType) {\n switch (envType) {\n case EnvironmentType.KubernetesLocal:\n case EnvironmentType.AgentOnKubernetes:\n case EnvironmentType.EdgeAgentOnKubernetes:\n return PlatformType.Kubernetes;\n case EnvironmentType.Docker:\n case EnvironmentType.AgentOnDocker:\n case EnvironmentType.EdgeAgentOnDocker:\n return PlatformType.Docker;\n case EnvironmentType.Azure:\n return PlatformType.Azure;\n default:\n throw new Error(`Environment Type ${envType} is not supported`);\n }\n}\n\nexport function isEdgeEnvironment(envType: EnvironmentType) {\n return [\n EnvironmentType.EdgeAgentOnDocker,\n EnvironmentType.EdgeAgentOnKubernetes,\n ].includes(envType);\n}\n\nexport function getRoute(environment: Environment) {\n if (isEdgeEnvironment(environment.Type) && !environment.EdgeID) {\n return 'portainer.endpoints.endpoint';\n }\n\n const platform = getPlatformType(environment.Type);\n\n switch (platform) {\n case PlatformType.Azure:\n return 'azure.dashboard';\n case PlatformType.Docker:\n return 'docker.dashboard';\n case PlatformType.Kubernetes:\n return 'kubernetes.dashboard';\n default:\n return '';\n }\n}\n","import { useEffect } from 'react';\nimport {\n useTable,\n useExpanded,\n useSortBy,\n useFilters,\n useGlobalFilter,\n usePagination,\n} from 'react-table';\nimport { useRowSelectColumn } from '@lineup-lite/hooks';\n\nimport { Environment } from '@/portainer/environments/types';\nimport { PaginationControls } from '@/portainer/components/pagination-controls';\nimport {\n Table,\n TableActions,\n TableContainer,\n TableHeaderRow,\n TableRow,\n TableSettingsMenu,\n TableTitle,\n TableTitleActions,\n} from '@/portainer/components/datatables/components';\nimport { multiple } from '@/portainer/components/datatables/components/filter-types';\nimport { useTableSettings } from '@/portainer/components/datatables/components/useTableSettings';\nimport { ColumnVisibilityMenu } from '@/portainer/components/datatables/components/ColumnVisibilityMenu';\nimport { useRepeater } from '@/portainer/components/datatables/components/useRepeater';\nimport { useDebounce } from '@/portainer/hooks/useDebounce';\nimport {\n useSearchBarContext,\n SearchBar,\n} from '@/portainer/components/datatables/components/SearchBar';\nimport { useRowSelect } from '@/portainer/components/datatables/components/useRowSelect';\nimport { TableFooter } from '@/portainer/components/datatables/components/TableFooter';\nimport { SelectedRowsCount } from '@/portainer/components/datatables/components/SelectedRowsCount';\nimport { EdgeDeviceTableSettings } from '@/edge/devices/types';\nimport { EdgeDevicesDatatableSettings } from '@/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatableSettings';\nimport { EdgeDevicesDatatableActions } from '@/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatableActions';\nimport { AMTDevicesDatatable } from '@/edge/devices/components/AMTDevicesDatatable/AMTDevicesDatatable';\nimport { TextTip } from '@/portainer/components/Tip/TextTip';\n\nimport { RowProvider } from './columns/RowContext';\nimport { useColumns } from './columns';\nimport styles from './EdgeDevicesDatatable.module.css';\n\nexport interface EdgeDevicesTableProps {\n isEnabled: boolean;\n isFdoEnabled: boolean;\n isOpenAmtEnabled: boolean;\n disableTrustOnFirstConnect: boolean;\n mpsServer: string;\n dataset: Environment[];\n onRefresh(): Promise;\n setLoadingMessage(message: string): void;\n}\n\nexport function EdgeDevicesDatatable({\n isFdoEnabled,\n isOpenAmtEnabled,\n disableTrustOnFirstConnect,\n mpsServer,\n dataset,\n onRefresh,\n setLoadingMessage,\n}: EdgeDevicesTableProps) {\n const { settings, setTableSettings } =\n useTableSettings();\n const [searchBarValue, setSearchBarValue] = useSearchBarContext();\n\n const columns = useColumns();\n\n useRepeater(settings.autoRefreshRate, onRefresh);\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n page,\n prepareRow,\n selectedFlatRows,\n allColumns,\n gotoPage,\n setPageSize,\n setHiddenColumns,\n setGlobalFilter,\n state: { pageIndex, pageSize },\n } = useTable(\n {\n defaultCanFilter: false,\n columns,\n data: dataset,\n filterTypes: { multiple },\n initialState: {\n pageSize: settings.pageSize || 10,\n hiddenColumns: settings.hiddenColumns,\n sortBy: [settings.sortBy],\n globalFilter: searchBarValue,\n },\n isRowSelectable() {\n return true;\n },\n autoResetExpanded: false,\n autoResetSelectedRows: false,\n selectColumnWidth: 5,\n },\n useFilters,\n useGlobalFilter,\n useSortBy,\n useExpanded,\n usePagination,\n useRowSelect,\n useRowSelectColumn\n );\n\n const debouncedSearchValue = useDebounce(searchBarValue);\n\n useEffect(() => {\n setGlobalFilter(debouncedSearchValue);\n }, [debouncedSearchValue, setGlobalFilter]);\n\n const columnsToHide = allColumns.filter((colInstance) => {\n const columnDef = columns.find((c) => c.id === colInstance.id);\n return columnDef?.canHide;\n });\n\n const tableProps = getTableProps();\n const tbodyProps = getTableBodyProps();\n\n const someDeviceHasAMTActivated = dataset.some(\n (environment) =>\n environment.AMTDeviceGUID && environment.AMTDeviceGUID !== ''\n );\n\n return (\n \n \n \n \n columns={columnsToHide}\n onChange={handleChangeColumnsVisibility}\n value={settings.hiddenColumns}\n />\n\n \n \n \n \n \n\n \n row.original)}\n isFDOEnabled={isFdoEnabled}\n isOpenAMTEnabled={isOpenAmtEnabled}\n setLoadingMessage={setLoadingMessage}\n />\n \n\n {someDeviceHasAMTActivated && (\n
    \n \n For the KVM function to work you need to have the MPS server added\n to your trusted site list, browse to this{' '}\n \n site\n {' '}\n and add to your trusted site list\n \n
    \n )}\n\n \n\n \n \n {headerGroups.map((headerGroup) => {\n const { key, className, role, style } =\n headerGroup.getHeaderGroupProps();\n\n return (\n \n key={key}\n className={className}\n role={role}\n style={style}\n headers={headerGroup.headers}\n onSortChange={handleSortChange}\n />\n );\n })}\n \n \n {page.map((row) => {\n prepareRow(row);\n const { key, className, role, style } = row.getRowProps();\n\n return (\n \n \n cells={row.cells}\n key={key}\n className={className}\n role={role}\n style={style}\n />\n {row.isExpanded && (\n \n \n \n \n \n \n )}\n \n );\n })}\n \n \n\n \n \n gotoPage(p - 1)}\n totalCount={dataset.length}\n onPageLimitChange={handlePageSizeChange}\n />\n \n
    \n );\n\n function handlePageSizeChange(pageSize: number) {\n setPageSize(pageSize);\n setTableSettings((settings) => ({ ...settings, pageSize }));\n }\n\n function handleChangeColumnsVisibility(hiddenColumns: string[]) {\n setHiddenColumns(hiddenColumns);\n setTableSettings((settings) => ({ ...settings, hiddenColumns }));\n }\n\n function handleSearchBarChange(value: string) {\n setSearchBarValue(value);\n }\n\n function handleSortChange(id: string, desc: boolean) {\n setTableSettings((settings) => ({\n ...settings,\n sortBy: { id, desc },\n }));\n }\n}\n","import { useMemo } from 'react';\n\nimport { name } from './name';\nimport { heartbeat } from './heartbeat';\nimport { group } from './group';\nimport { actions } from './actions';\n\nexport function useColumns() {\n return useMemo(() => [name, heartbeat, group, actions], []);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"kvmTip\":\"app-edge-devices-components-EdgeDevicesDatatable-EdgeDevicesDatatable-module__kvm-tip\"};","import { react2angular } from '@/react-tools/react2angular';\nimport { TableSettingsProvider } from '@/portainer/components/datatables/components/useTableSettings';\nimport { SearchBarProvider } from '@/portainer/components/datatables/components/SearchBar';\n\nimport {\n EdgeDevicesDatatable,\n EdgeDevicesTableProps,\n} from './EdgeDevicesDatatable';\n\nexport function EdgeDevicesDatatableContainer({\n ...props\n}: EdgeDevicesTableProps) {\n const defaultSettings = {\n autoRefreshRate: 0,\n hiddenQuickActions: [],\n hiddenColumns: [],\n pageSize: 10,\n sortBy: { id: 'state', desc: false },\n };\n\n return (\n \n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n \n );\n}\n\nexport const EdgeDevicesDatatableAngular = react2angular(\n EdgeDevicesDatatableContainer,\n [\n 'dataset',\n 'onRefresh',\n 'setLoadingMessage',\n 'isFdoEnabled',\n 'disableTrustOnFirstConnect',\n 'isOpenAmtEnabled',\n 'mpsServer',\n ]\n);\n","import angular from 'angular';\n\nimport { EdgeDevicesDatatableAngular } from '@/edge/devices/components/EdgeDevicesDatatable/EdgeDevicesDatatableContainer';\n\nexport default angular\n .module('portainer.edge.devices', [])\n .component('edgeDevicesDatatable', EdgeDevicesDatatableAngular).name;\n","import angular from 'angular';\n\nimport edgeStackModule from './views/edge-stacks';\nimport edgeDevicesModule from './devices';\n\nangular.module('portainer.edge', [edgeStackModule, edgeDevicesModule]).config(function config($stateRegistryProvider) {\n const edge = {\n name: 'edge',\n url: '/edge',\n parent: 'root',\n abstract: true,\n };\n\n const groups = {\n name: 'edge.groups',\n url: '/groups',\n views: {\n 'content@': {\n component: 'edgeGroupsView',\n },\n },\n };\n\n const groupsNew = {\n name: 'edge.groups.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createEdgeGroupView',\n },\n },\n };\n\n const groupsEdit = {\n name: 'edge.groups.edit',\n url: '/:groupId',\n views: {\n 'content@': {\n component: 'editEdgeGroupView',\n },\n },\n };\n\n const stacks = {\n name: 'edge.stacks',\n url: '/stacks',\n views: {\n 'content@': {\n component: 'edgeStacksView',\n },\n },\n };\n\n const stacksNew = {\n name: 'edge.stacks.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createEdgeStackView',\n },\n },\n };\n\n const stacksEdit = {\n name: 'edge.stacks.edit',\n url: '/:stackId',\n views: {\n 'content@': {\n component: 'editEdgeStackView',\n },\n },\n params: {\n tab: 0,\n },\n };\n\n const edgeJobs = {\n name: 'edge.jobs',\n url: '/jobs',\n views: {\n 'content@': {\n component: 'edgeJobsView',\n },\n },\n };\n\n const edgeJob = {\n name: 'edge.jobs.job',\n url: '/:id',\n views: {\n 'content@': {\n component: 'edgeJobView',\n },\n },\n params: {\n tab: 0,\n },\n };\n\n const edgeJobCreation = {\n name: 'edge.jobs.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createEdgeJobView',\n },\n },\n };\n\n const edgeDevices = {\n name: 'edge.devices',\n url: '/devices',\n views: {\n 'content@': {\n component: 'edgeDevicesView',\n },\n },\n };\n\n $stateRegistryProvider.register(edge);\n\n $stateRegistryProvider.register(groups);\n $stateRegistryProvider.register(groupsNew);\n $stateRegistryProvider.register(groupsEdit);\n\n $stateRegistryProvider.register(stacks);\n $stateRegistryProvider.register(stacksNew);\n $stateRegistryProvider.register(stacksEdit);\n\n $stateRegistryProvider.register(edgeJobs);\n $stateRegistryProvider.register(edgeJob);\n $stateRegistryProvider.register(edgeJobCreation);\n\n $stateRegistryProvider.register(edgeDevices);\n});\n","import angular from 'angular';\n\nexport class AssociatedEndpointsDatatableController {\n /* @ngInject */\n constructor($scope, $controller, DatatableService, PaginationService) {\n this.extendGenericController($controller, $scope);\n this.DatatableService = DatatableService;\n this.PaginationService = PaginationService;\n\n this.state = Object.assign(this.state, {\n orderBy: this.orderBy,\n loading: true,\n filteredDataSet: [],\n totalFilteredDataset: 0,\n pageNumber: 1,\n });\n\n this.onPageChange = this.onPageChange.bind(this);\n this.paginationChanged = this.paginationChanged.bind(this);\n }\n\n extendGenericController($controller, $scope) {\n // extending the controller overrides the current controller functions\n const $onInit = this.$onInit.bind(this);\n const changePaginationLimit = this.changePaginationLimit.bind(this);\n const onTextFilterChange = this.onTextFilterChange.bind(this);\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.$onInit = $onInit;\n this.changePaginationLimit = changePaginationLimit;\n this.onTextFilterChange = onTextFilterChange;\n }\n\n $onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n var storedOrder = this.DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = this.DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.paginationChanged();\n }\n\n $onChanges({ updateKey }) {\n if (updateKey.currentValue && !updateKey.isFirstChange()) {\n this.paginationChanged();\n }\n }\n\n onPageChange(newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n changePaginationLimit() {\n this.PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n onTextFilterChange() {\n var filterValue = this.state.textFilter;\n this.DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n this.paginationChanged();\n }\n\n paginationChanged() {\n this.state.loading = true;\n this.state.filteredDataSet = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter)\n .then((data) => {\n this.state.filteredDataSet = data.endpoints;\n this.state.totalFilteredDataSet = data.totalCount;\n })\n .finally(() => {\n this.state.loading = false;\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./associatedEndpointsDatatable.html');\n\nimport angular from 'angular';\n\nimport { AssociatedEndpointsDatatableController } from './associatedEndpointsDatatableController';\n\nangular.module('portainer.edge').component('associatedEndpointsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: AssociatedEndpointsDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n retrievePage: '<',\n updateKey: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./edgeGroupsSelector.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.edge').component('edgeGroupsSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n items: '<',\n onChange: '<',\n },\n});\n","import _ from 'lodash-es';\nimport moment from 'moment';\n\nexport class EdgeJobFormController {\n /* @ngInject */\n constructor() {\n this.state = {\n formValidationError: '',\n };\n\n this.scheduleValues = [\n {\n displayed: 'Every hour',\n cron: '0 * * * *',\n },\n {\n displayed: 'Every 2 hours',\n cron: '0 */2 * * *',\n },\n {\n displayed: 'Every day',\n cron: '0 0 * * *',\n },\n ];\n\n this.formValues = {\n datetime: moment(),\n scheduleValue: this.scheduleValues[0],\n cronMethod: 'basic',\n method: 'editor',\n };\n\n // see https://regexr.com/573i2\n this.cronRegex =\n /(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\\d+(ns|us|µs|ms|s|m|h))+)|((((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*) ){4,6}((\\d+,)+\\d+|(\\d+(\\/|-)\\d+)|\\d+|\\*))/;\n\n this.action = this.action.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n }\n\n onChangeModel(model) {\n const defaultTime = moment().add('hours', 1);\n this.formValues = {\n datetime: model.CronExpression ? cronToDatetime(model.CronExpression, defaultTime) : defaultTime,\n scheduleValue: this.formValues.scheduleValue,\n cronMethod: model.Recurring ? 'advanced' : 'basic',\n method: this.formValues.method,\n };\n }\n\n action() {\n this.state.formValidationError = '';\n\n if (this.formValues.method === 'editor' && this.model.FileContent === '') {\n this.state.formValidationError = 'Script file content must not be empty';\n return;\n }\n\n if (this.formValues.cronMethod === 'basic') {\n if (!this.model.Recurring) {\n this.model.CronExpression = datetimeToCron(this.formValues.datetime);\n } else {\n this.model.CronExpression = this.formValues.scheduleValue.cron;\n }\n } else {\n this.model.Recurring = true;\n }\n\n this.formAction(this.formValues.method);\n }\n\n editorUpdate(cm) {\n this.model.FileContent = cm.getValue();\n this.isEditorDirty = true;\n }\n\n associateEndpoint(endpoint) {\n if (!_.includes(this.model.Endpoints, endpoint.Id)) {\n this.model.Endpoints = [...this.model.Endpoints, endpoint.Id];\n }\n }\n\n dissociateEndpoint(endpoint) {\n this.model.Endpoints = _.filter(this.model.Endpoints, (id) => id !== endpoint.Id);\n }\n\n $onInit() {\n this.onChangeModel(this.model);\n }\n}\n\nfunction cronToDatetime(cron, defaultTime = moment()) {\n var strings = cron.split(' ');\n if (strings.length > 4) {\n strings = strings.slice(0, 4);\n } else {\n return defaultTime;\n }\n return moment(cron, 'm H D M');\n}\n\nfunction datetimeToCron(datetime) {\n var date = moment(datetime);\n return [date.minutes(), date.hours(), date.date(), date.month() + 1, '*'].join(' ');\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeJobForm.html');\n\nimport angular from 'angular';\n\nimport { EdgeJobFormController } from './edgeJobFormController';\n\nangular.module('portainer.edge').component('edgeJobForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobFormController,\n bindings: {\n model: '=',\n groups: '<',\n tags: '<',\n addLabelAction: '<',\n removeLabelAction: '<',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n isEditorDirty: '=',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nexport class EdgeJobResultsDatatableController {\n /* @ngInject */\n constructor($controller, $scope, $state) {\n this.$state = $state;\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n }\n\n collectLogs(...args) {\n this.settings.repeater.autoRefresh = true;\n this.settings.repeater.refreshRate = '5';\n this.onSettingsRepeaterChange();\n this.onCollectLogsClick(...args);\n }\n\n $onChanges({ dataset }) {\n if (dataset && dataset.currentValue) {\n this.onDatasetChange(dataset.currentValue);\n }\n }\n\n onDatasetChange(dataset) {\n const anyCollecting = _.some(dataset, (item) => item.LogsStatus === 2);\n this.settings.repeater.autoRefresh = anyCollecting;\n this.settings.repeater.refreshRate = '5';\n this.onSettingsRepeaterChange();\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeJobResultsDatatable.html');\n\nimport angular from 'angular';\n\nimport { EdgeJobResultsDatatableController } from './edgeJobResultsDatatableController';\nimport './edgeJobResultsDatatable.css';\n\nangular.module('portainer.edge').component('edgeJobResultsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobResultsDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n onDownloadLogsClick: '<',\n onCollectLogsClick: '<',\n onClearLogsClick: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./edgeJobsDatatable.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.edge').component('edgeJobsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","export default class EdgeStackDeploymentTypeSelectorController {\n /* @ngInject */\n constructor() {\n this.deploymentOptions = [\n { id: 'deployment_compose', icon: 'fab fa-docker', label: 'Compose', description: 'docker-compose format', value: 0 },\n {\n id: 'deployment_kube',\n icon: 'fa fa-cubes',\n label: 'Kubernetes',\n description: 'Kubernetes manifest format',\n value: 1,\n disabled: () => {\n return this.hasDockerEndpoint();\n },\n tooltip: () => {\n return this.hasDockerEndpoint() ? 'Cannot use this option with Edge Docker endpoints' : '';\n },\n },\n ];\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edge-stack-deployment-type-selector.html');\n\nimport angular from 'angular';\nimport controller from './edge-stack-deployment-type-selector.controller.js';\n\nexport const edgeStackDeploymentTypeSelector = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n value: '<',\n onChange: '<',\n hasDockerEndpoint: '<',\n },\n};\n\nangular.module('portainer.edge').component('edgeStackDeploymentTypeSelector', edgeStackDeploymentTypeSelector);\n","import angular from 'angular';\n\nexport class EdgeStackEndpointsDatatableController {\n /* @ngInject */\n constructor($async, $scope, $controller, DatatableService, PaginationService, Notifications) {\n this.extendGenericController($controller, $scope);\n this.DatatableService = DatatableService;\n this.PaginationService = PaginationService;\n this.Notifications = Notifications;\n this.$async = $async;\n\n this.state = Object.assign(this.state, {\n orderBy: this.orderBy,\n loading: true,\n filteredDataSet: [],\n totalFilteredDataset: 0,\n pageNumber: 1,\n });\n\n this.onPageChange = this.onPageChange.bind(this);\n this.paginationChanged = this.paginationChanged.bind(this);\n this.paginationChangedAsync = this.paginationChangedAsync.bind(this);\n\n this.statusMap = {\n 1: 'OK',\n 2: 'Error',\n 3: 'Acknowledged',\n };\n }\n\n extendGenericController($controller, $scope) {\n // extending the controller overrides the current controller functions\n const $onInit = this.$onInit.bind(this);\n const changePaginationLimit = this.changePaginationLimit.bind(this);\n const onTextFilterChange = this.onTextFilterChange.bind(this);\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.$onInit = $onInit;\n this.changePaginationLimit = changePaginationLimit;\n this.onTextFilterChange = onTextFilterChange;\n }\n\n $onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n var storedOrder = this.DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = this.DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.paginationChanged();\n }\n\n onPageChange(newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n changePaginationLimit() {\n this.PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChanged();\n }\n\n /**\n * Overridden\n */\n onTextFilterChange() {\n var filterValue = this.state.textFilter;\n this.DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n this.paginationChanged();\n }\n\n paginationChanged() {\n this.$async(this.paginationChangedAsync);\n }\n\n async paginationChangedAsync() {\n this.state.loading = true;\n this.state.filteredDataSet = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n try {\n const { endpoints, totalCount } = await this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter);\n this.state.filteredDataSet = endpoints;\n this.state.totalFilteredDataSet = totalCount;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environments');\n } finally {\n this.state.loading = false;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeStackEndpointsDatatable.html');\n\nimport angular from 'angular';\n\nimport { EdgeStackEndpointsDatatableController } from './edgeStackEndpointsDatatableController';\n\nangular.module('portainer.edge').component('edgeStackEndpointsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeStackEndpointsDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n retrievePage: '<',\n },\n});\n","const statusMap = {\n 1: 'ok',\n 2: 'error',\n 3: 'acknowledged',\n};\n\nexport class EdgeStackStatusController {\n $onChanges({ stackStatus }) {\n if (!stackStatus || !stackStatus.currentValue) {\n return;\n }\n const aggregateStatus = { ok: 0, error: 0, acknowledged: 0 };\n for (let endpointId in stackStatus.currentValue) {\n const endpoint = stackStatus.currentValue[endpointId];\n const endpointStatusKey = statusMap[endpoint.Type];\n aggregateStatus[endpointStatusKey]++;\n }\n this.status = aggregateStatus;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeStackStatus.html');\n\nimport angular from 'angular';\n\nimport { EdgeStackStatusController } from './edgeStackStatusController';\nimport './edgeStackStatus.css';\n\nangular.module('portainer.edge').component('edgeStackStatus', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeStackStatusController,\n bindings: {\n stackStatus: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./edgeStacksDatatable.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.edge').component('edgeStacksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","import { PortainerEndpointTypes } from '@/portainer/models/endpoint/models';\n\nexport class EditEdgeStackFormController {\n /* @ngInject */\n constructor() {\n this.state = {\n endpointTypes: [],\n };\n\n this.fileContents = {\n 0: '',\n 1: '',\n };\n\n this.onChangeGroups = this.onChangeGroups.bind(this);\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.onChangeComposeConfig = this.onChangeComposeConfig.bind(this);\n this.onChangeKubeManifest = this.onChangeKubeManifest.bind(this);\n this.hasDockerEndpoint = this.hasDockerEndpoint.bind(this);\n this.hasKubeEndpoint = this.hasKubeEndpoint.bind(this);\n this.onChangeDeploymentType = this.onChangeDeploymentType.bind(this);\n this.removeLineBreaks = this.removeLineBreaks.bind(this);\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n }\n\n hasKubeEndpoint() {\n return this.state.endpointTypes.includes(PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment);\n }\n\n hasDockerEndpoint() {\n return this.state.endpointTypes.includes(PortainerEndpointTypes.EdgeAgentOnDockerEnvironment);\n }\n\n onChangeGroups(groups) {\n this.model.EdgeGroups = groups;\n\n this.checkEndpointTypes(groups);\n }\n\n isFormValid() {\n return this.model.EdgeGroups.length && this.model.StackFileContent && this.validateEndpointsForDeployment();\n }\n\n checkEndpointTypes(groups) {\n const edgeGroups = groups.map((id) => this.edgeGroups.find((e) => e.Id === id));\n this.state.endpointTypes = edgeGroups.flatMap((group) => group.EndpointTypes);\n }\n\n removeLineBreaks(value) {\n return value.replace(/(\\r\\n|\\n|\\r)/gm, '');\n }\n\n onChangeFileContent(type, value) {\n const oldValue = this.fileContents[type];\n if (this.removeLineBreaks(oldValue) !== this.removeLineBreaks(value)) {\n this.model.StackFileContent = value;\n this.fileContents[type] = value;\n this.isEditorDirty = true;\n }\n }\n\n onChangeKubeManifest(value) {\n this.onChangeFileContent(1, value);\n }\n\n onChangeComposeConfig(value) {\n this.onChangeFileContent(0, value);\n }\n\n onChangeDeploymentType(deploymentType) {\n this.model.DeploymentType = deploymentType;\n\n this.model.StackFileContent = this.fileContents[deploymentType];\n }\n\n validateEndpointsForDeployment() {\n return this.model.DeploymentType == 0 || !this.hasDockerEndpoint();\n }\n\n $onInit() {\n this.checkEndpointTypes(this.model.EdgeGroups);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./editEdgeStackForm.html');\n\nimport angular from 'angular';\n\nimport { EditEdgeStackFormController } from './editEdgeStackFormController';\n\nangular.module('portainer.edge').component('editEdgeStackForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditEdgeStackFormController,\n bindings: {\n model: '<',\n actionInProgress: '<',\n submitAction: '<',\n edgeGroups: '<',\n isEditorDirty: '=',\n },\n});\n","import _ from 'lodash-es';\n\nexport class EdgeGroupFormController {\n /* @ngInject */\n constructor(EndpointService, $async, $scope) {\n this.EndpointService = EndpointService;\n this.$async = $async;\n\n this.endpoints = {\n state: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n value: null,\n };\n\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n this.getDynamicEndpointsAsync = this.getDynamicEndpointsAsync.bind(this);\n this.getDynamicEndpoints = this.getDynamicEndpoints.bind(this);\n\n $scope.$watch(\n () => this.model,\n () => {\n if (this.model.Dynamic) {\n this.getDynamicEndpoints();\n }\n },\n true\n );\n }\n\n associateEndpoint(endpoint) {\n if (!_.includes(this.model.Endpoints, endpoint.Id)) {\n this.model.Endpoints = [...this.model.Endpoints, endpoint.Id];\n }\n }\n\n dissociateEndpoint(endpoint) {\n this.model.Endpoints = _.filter(this.model.Endpoints, (id) => id !== endpoint.Id);\n }\n\n getDynamicEndpoints() {\n return this.$async(this.getDynamicEndpointsAsync);\n }\n\n async getDynamicEndpointsAsync() {\n const { pageNumber, limit, search } = this.endpoints.state;\n const start = (pageNumber - 1) * limit + 1;\n const query = { search, types: [4, 7], tagIds: this.model.TagIds, tagsPartialMatch: this.model.PartialMatch };\n\n const response = await this.EndpointService.endpoints(start, limit, query);\n\n const totalCount = parseInt(response.totalCount, 10);\n this.endpoints.value = response.value;\n this.endpoints.state.totalCount = totalCount;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./groupForm.html');\n\nimport angular from 'angular';\n\nimport { EdgeGroupFormController } from './groupFormController';\n\nangular.module('portainer.edge').component('edgeGroupForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeGroupFormController,\n bindings: {\n model: '<',\n groups: '<',\n tags: '<',\n formActionLabel: '@',\n formAction: '<',\n actionInProgress: '<',\n loaded: '<',\n pageType: '@',\n },\n});\n","import angular from 'angular';\n\nexport class EdgeGroupsDatatableController {\n /* @ngInject */\n constructor($scope, $controller) {\n const allowSelection = this.allowSelection;\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.allowSelection = allowSelection.bind(this);\n }\n\n /**\n * Override this method to allow/deny selection\n */\n allowSelection(item) {\n return !item.HasEdgeStack;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./groupsDatatable.html');\n\nimport angular from 'angular';\n\nimport { EdgeGroupsDatatableController } from './groupsDatatableController';\n\nangular.module('portainer.edge').component('edgeGroupsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeGroupsDatatableController,\n bindings: {\n dataset: '<',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n removeAction: '<',\n updateAction: '<',\n reverseOrder: '<',\n },\n});\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeGroups', function EdgeGroupsFactory($resource, API_ENDPOINT_EDGE_GROUPS) {\n return $resource(\n API_ENDPOINT_EDGE_GROUPS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@Id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n});\n","angular.module('portainer.edge').factory('EdgeJobResults', EdgeJobResultsFactory);\n\nfunction EdgeJobResultsFactory($resource, API_ENDPOINT_EDGE_JOBS) {\n return $resource(\n API_ENDPOINT_EDGE_JOBS + '/:id/tasks/:taskId/:action',\n {},\n {\n query: { method: 'GET', isArray: true, params: { id: '@id' } },\n logFile: { method: 'GET', params: { id: '@id', taskId: '@taskId', action: 'logs' } },\n clearLogs: { method: 'DELETE', params: { id: '@id', taskId: '@taskId', action: 'logs' } },\n collectLogs: { method: 'POST', params: { id: '@id', taskId: '@taskId', action: 'logs' } },\n }\n );\n}\n","angular.module('portainer.edge').factory('EdgeJobs', EdgeJobsFactory);\n\nfunction EdgeJobsFactory($resource, API_ENDPOINT_EDGE_JOBS) {\n return $resource(\n API_ENDPOINT_EDGE_JOBS + '/:id/:action',\n {},\n {\n create: { method: 'POST' },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n file: { method: 'GET', params: { id: '@id', action: 'file' } },\n tasks: { method: 'GET', isArray: true, params: { id: '@id', action: 'tasks' } },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeStacks', function EdgeStacksFactory($resource, API_ENDPOINT_EDGE_STACKS) {\n return $resource(\n API_ENDPOINT_EDGE_STACKS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n file: { method: 'GET', params: { id: '@id', action: 'file' } },\n }\n );\n});\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeTemplates', function EdgeStacksFactory($resource, API_ENDPOINT_EDGE_TEMPLATES) {\n return $resource(\n API_ENDPOINT_EDGE_TEMPLATES,\n {},\n {\n query: { method: 'GET', isArray: true },\n }\n );\n});\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeGroupService', function EdgeGroupServiceFactory(EdgeGroups) {\n var service = {};\n\n service.group = function group(groupId) {\n return EdgeGroups.get({ id: groupId }).$promise;\n };\n\n service.groups = function groups() {\n return EdgeGroups.query({}).$promise;\n };\n\n service.remove = function remove(groupId) {\n return EdgeGroups.remove({ id: groupId }).$promise;\n };\n\n service.create = function create(group) {\n return EdgeGroups.create(group).$promise;\n };\n\n service.update = function update(group) {\n return EdgeGroups.update(group).$promise;\n };\n\n return service;\n});\n","import angular from 'angular';\n\nimport { ScheduleCreateRequest, ScheduleUpdateRequest } from '@/portainer/models/schedule';\n\nfunction EdgeJobService(EdgeJobs, EdgeJobResults, FileUploadService) {\n var service = {};\n\n service.edgeJob = edgeJob;\n async function edgeJob(edgeJobId) {\n try {\n return await EdgeJobs.get({ id: edgeJobId }).$promise;\n } catch (err) {\n throw { msg: 'Unable to retrieve edgeJob', err: err };\n }\n }\n\n service.edgeJobs = edgeJobs;\n async function edgeJobs() {\n try {\n return await EdgeJobs.query().$promise;\n } catch (err) {\n throw { msg: 'Unable to retrieve edgeJobs', err: err };\n }\n }\n\n service.jobResults = jobResults;\n async function jobResults(edgeJobId) {\n try {\n return await EdgeJobResults.query({ id: edgeJobId }).$promise;\n } catch (err) {\n throw { msg: 'Unable to retrieve results associated to the edgeJob', err: err };\n }\n }\n\n service.logFile = logFile;\n function logFile(id, taskId) {\n return EdgeJobResults.logFile({ id, taskId }).$promise;\n }\n\n service.collectLogs = collectLogs;\n function collectLogs(id, taskId) {\n return EdgeJobResults.collectLogs({ id, taskId }).$promise;\n }\n\n service.clearLogs = clearLogs;\n function clearLogs(id, taskId) {\n return EdgeJobResults.clearLogs({ id, taskId }).$promise;\n }\n\n service.createEdgeJobFromFileContent = function (model) {\n var payload = new ScheduleCreateRequest(model);\n return EdgeJobs.create({ method: 'string' }, payload).$promise;\n };\n\n service.createEdgeJobFromFileUpload = function (model) {\n var payload = new ScheduleCreateRequest(model);\n return FileUploadService.createSchedule(payload);\n };\n\n service.updateEdgeJob = function (model) {\n var payload = new ScheduleUpdateRequest(model);\n return EdgeJobs.update(payload).$promise;\n };\n\n service.remove = function (edgeJobId) {\n return EdgeJobs.remove({ id: edgeJobId }).$promise;\n };\n\n service.getScriptFile = function (edgeJobId) {\n return EdgeJobs.file({ id: edgeJobId }).$promise;\n };\n\n return service;\n}\n\nangular.module('portainer.edge').factory('EdgeJobService', EdgeJobService);\n","import angular from 'angular';\n\nangular.module('portainer.edge').factory('EdgeStackService', function EdgeStackServiceFactory(EdgeStacks, FileUploadService) {\n var service = {};\n\n service.stack = function stack(id) {\n return EdgeStacks.get({ id }).$promise;\n };\n\n service.stacks = function stacks() {\n return EdgeStacks.query({}).$promise;\n };\n\n service.remove = function remove(id) {\n return EdgeStacks.remove({ id }).$promise;\n };\n\n service.stackFile = async function stackFile(id) {\n try {\n const { StackFileContent } = await EdgeStacks.file({ id }).$promise;\n return StackFileContent;\n } catch (err) {\n throw { msg: 'Unable to retrieve stack content', err };\n }\n };\n\n service.updateStack = async function updateStack(id, stack) {\n return EdgeStacks.update({ id }, stack).$promise;\n };\n\n service.createStackFromFileContent = async function createStackFromFileContent(payload) {\n try {\n return await EdgeStacks.create({ method: 'string' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the stack', err };\n }\n };\n\n service.createStackFromFileUpload = async function createStackFromFileUpload(payload, file) {\n try {\n return await FileUploadService.createEdgeStack(payload, file);\n } catch (err) {\n throw { msg: 'Unable to create the stack', err };\n }\n };\n\n service.createStackFromGitRepository = async function createStackFromGitRepository(payload, repositoryOptions) {\n try {\n return await EdgeStacks.create(\n { method: 'repository' },\n {\n ...payload,\n RepositoryURL: repositoryOptions.RepositoryURL,\n RepositoryReferenceName: repositoryOptions.RepositoryReferenceName,\n FilePathInRepository: repositoryOptions.FilePathInRepository,\n RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,\n RepositoryUsername: repositoryOptions.RepositoryUsername,\n RepositoryPassword: repositoryOptions.RepositoryPassword,\n }\n ).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the stack', err };\n }\n };\n\n service.update = function update(stack) {\n return EdgeStacks.update(stack).$promise;\n };\n\n return service;\n});\n","import angular from 'angular';\n\nclass EdgeTemplateService {\n /* @ngInject */\n constructor(EdgeTemplates) {\n this.EdgeTemplates = EdgeTemplates;\n }\n\n edgeTemplates() {\n return this.EdgeTemplates.query().$promise;\n }\n\n async edgeTemplate(template) {\n const response = await fetch(template.stackFile);\n if (!response.ok) {\n throw new Error(response.statusText);\n }\n\n return response.text();\n }\n}\n\nangular.module('portainer.edge').service('EdgeTemplateService', EdgeTemplateService);\n","import EndpointHelper from 'Portainer/helpers/endpointHelper';\nimport { getEndpoints } from 'Portainer/environments/environment.service';\nimport { EnvironmentType } from 'Portainer/environments/types';\n\nangular.module('portainer.edge').controller('EdgeDevicesViewController', EdgeDevicesViewController);\n/* @ngInject */\nexport function EdgeDevicesViewController($q, $async, EndpointService, GroupService, SettingsService, ModalService, Notifications) {\n var ctrl = this;\n\n ctrl.edgeDevices = [];\n\n this.getEnvironments = function () {\n return $async(async () => {\n try {\n const [endpointsResponse, groups] = await Promise.all([getEndpoints(0, 100, { types: [EnvironmentType.EdgeAgentOnDocker] }), GroupService.groups()]);\n EndpointHelper.mapGroupNameToEndpoint(endpointsResponse.value, groups);\n ctrl.edgeDevices = endpointsResponse.value;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve edge devices');\n ctrl.edgeDevices = [];\n }\n });\n };\n\n this.getSettings = function () {\n return $async(async () => {\n try {\n const settings = await SettingsService.settings();\n\n ctrl.isFDOEnabled = settings && settings.EnableEdgeComputeFeatures && settings.fdoConfiguration && settings.fdoConfiguration.enabled;\n ctrl.disableTrustOnFirstConnect = settings && settings.EnableEdgeComputeFeatures && settings.DisableTrustOnFirstConnect;\n ctrl.isOpenAMTEnabled = settings && settings.EnableEdgeComputeFeatures && settings.openAMTConfiguration && settings.openAMTConfiguration.enabled;\n ctrl.mpsServer = ctrl.isOpenAMTEnabled ? settings.openAMTConfiguration.mpsServer : '';\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve settings');\n }\n });\n };\n\n this.setLoadingMessage = function (message) {\n return $async(async () => {\n ctrl.loadingMessage = message;\n });\n };\n\n function initView() {\n ctrl.getEnvironments();\n ctrl.getSettings();\n }\n\n initView();\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeDevicesView.html');\n\nimport angular from 'angular';\n\nimport { EdgeDevicesViewController } from './edgeDevicesViewController';\n\nangular.module('portainer.edge').component('edgeDevicesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeDevicesViewController,\n});\n","export class CreateEdgeGroupController {\n /* @ngInject */\n constructor(EdgeGroupService, GroupService, TagService, Notifications, $state, $async) {\n this.EdgeGroupService = EdgeGroupService;\n this.GroupService = GroupService;\n this.TagService = TagService;\n this.Notifications = Notifications;\n this.$state = $state;\n this.$async = $async;\n\n this.state = {\n actionInProgress: false,\n loaded: false,\n };\n\n this.model = {\n Name: '',\n Endpoints: [],\n Dynamic: false,\n TagIds: [],\n PartialMatch: false,\n };\n\n this.createGroup = this.createGroup.bind(this);\n this.createGroupAsync = this.createGroupAsync.bind(this);\n }\n\n async $onInit() {\n const [tags, endpointGroups] = await Promise.all([this.TagService.tags(), this.GroupService.groups()]);\n this.tags = tags;\n this.endpointGroups = endpointGroups;\n this.state.loaded = true;\n }\n\n createGroup() {\n return this.$async(this.createGroupAsync);\n }\n\n async createGroupAsync() {\n this.state.actionInProgress = true;\n try {\n await this.EdgeGroupService.create(this.model);\n this.Notifications.success('Edge group successfully created');\n this.$state.go('edge.groups');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create edge group');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./createEdgeGroupView.html');\n\nimport angular from 'angular';\n\nimport { CreateEdgeGroupController } from './createEdgeGroupViewController';\n\nangular.module('portainer.edge').component('createEdgeGroupView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateEdgeGroupController,\n});\n","import _ from 'lodash-es';\n\nexport class EdgeGroupsController {\n /* @ngInject */\n constructor($async, $state, EdgeGroupService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.EdgeGroupService = EdgeGroupService;\n this.Notifications = Notifications;\n\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n async $onInit() {\n try {\n this.items = await this.EdgeGroupService.groups();\n } catch (err) {\n this.items = [];\n this.Notifications.error('Failure', err, 'Unable to retrieve Edge groups');\n }\n }\n\n removeAction(selectedItems) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n\n async removeActionAsync(selectedItems) {\n for (let item of selectedItems) {\n try {\n await this.EdgeGroupService.remove(item.Id);\n\n this.Notifications.success('Edge Group successfully removed', item.Name);\n _.remove(this.items, item);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove Edge Group');\n }\n }\n\n this.$state.reload();\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeGroupsView.html');\n\nimport angular from 'angular';\n\nimport { EdgeGroupsController } from './edgeGroupsViewController';\n\nangular.module('portainer.edge').component('edgeGroupsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeGroupsController,\n});\n","export class EditEdgeGroupController {\n /* @ngInject */\n constructor(EdgeGroupService, GroupService, TagService, Notifications, $state, $async) {\n this.EdgeGroupService = EdgeGroupService;\n this.GroupService = GroupService;\n this.TagService = TagService;\n this.Notifications = Notifications;\n this.$state = $state;\n this.$async = $async;\n\n this.state = {\n actionInProgress: false,\n loaded: false,\n };\n\n this.updateGroup = this.updateGroup.bind(this);\n this.updateGroupAsync = this.updateGroupAsync.bind(this);\n }\n\n async $onInit() {\n const [tags, endpointGroups, group] = await Promise.all([this.TagService.tags(), this.GroupService.groups(), this.EdgeGroupService.group(this.$state.params.groupId)]);\n\n if (!group) {\n this.Notifications.error('Failed to find edge group', {});\n this.$state.go('edge.groups');\n }\n this.tags = tags;\n this.endpointGroups = endpointGroups;\n this.model = group;\n this.state.loaded = true;\n }\n\n updateGroup() {\n return this.$async(this.updateGroupAsync);\n }\n\n async updateGroupAsync() {\n this.state.actionInProgress = true;\n try {\n await this.EdgeGroupService.update(this.model);\n this.Notifications.success('Edge group successfully updated');\n this.$state.go('edge.groups');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update edge group');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./editEdgeGroupView.html');\n\nimport angular from 'angular';\n\nimport { EditEdgeGroupController } from './editEdgeGroupViewController';\n\nangular.module('portainer.edge').component('editEdgeGroupView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditEdgeGroupController,\n});\n","export class CreateEdgeJobViewController {\n /* @ngInject */\n constructor($async, $q, $state, $window, ModalService, EdgeJobService, GroupService, Notifications, TagService) {\n this.state = {\n actionInProgress: false,\n isEditorDirty: false,\n };\n\n this.model = {\n Name: '',\n Recurring: false,\n CronExpression: '',\n Endpoints: [],\n FileContent: '',\n File: null,\n };\n\n this.$async = $async;\n this.$q = $q;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.GroupService = GroupService;\n this.EdgeJobService = EdgeJobService;\n this.TagService = TagService;\n\n this.create = this.create.bind(this);\n this.createEdgeJob = this.createEdgeJob.bind(this);\n this.createAsync = this.createAsync.bind(this);\n }\n\n create(method) {\n return this.$async(this.createAsync, method);\n }\n\n async createAsync(method) {\n this.state.actionInProgress = true;\n\n try {\n await this.createEdgeJob(method, this.model);\n this.Notifications.success('Edge job successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('edge.jobs', {}, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create Edge job');\n }\n\n this.state.actionInProgress = false;\n }\n\n createEdgeJob(method, model) {\n if (method === 'editor') {\n return this.EdgeJobService.createEdgeJobFromFileContent(model);\n }\n return this.EdgeJobService.createEdgeJobFromFileUpload(model);\n }\n\n async uiCanExit() {\n if (this.model.FileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n\n async $onInit() {\n try {\n const [groups, tags] = await Promise.all([this.GroupService.groups(), this.TagService.tags()]);\n this.groups = groups;\n this.tags = tags;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve page data');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.model.FileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./createEdgeJobView.html');\n\nimport angular from 'angular';\nimport { CreateEdgeJobViewController } from './createEdgeJobViewController';\n\nangular.module('portainer.edge').component('createEdgeJobView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateEdgeJobViewController,\n});\n","import _ from 'lodash-es';\n\nexport class EdgeJobController {\n /* @ngInject */\n constructor($async, $q, $state, $window, ModalService, EdgeJobService, EndpointService, FileSaver, GroupService, HostBrowserService, Notifications, TagService) {\n this.state = {\n actionInProgress: false,\n showEditorTab: false,\n isEditorDirty: false,\n };\n\n this.$async = $async;\n this.$q = $q;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.EdgeJobService = EdgeJobService;\n this.EndpointService = EndpointService;\n this.FileSaver = FileSaver;\n this.GroupService = GroupService;\n this.HostBrowserService = HostBrowserService;\n this.Notifications = Notifications;\n this.TagService = TagService;\n\n this.update = this.update.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.downloadLogs = this.downloadLogs.bind(this);\n this.downloadLogsAsync = this.downloadLogsAsync.bind(this);\n this.collectLogs = this.collectLogs.bind(this);\n this.collectLogsAsync = this.collectLogsAsync.bind(this);\n this.clearLogs = this.clearLogs.bind(this);\n this.clearLogsAsync = this.clearLogsAsync.bind(this);\n this.refresh = this.refresh.bind(this);\n this.refreshAsync = this.refreshAsync.bind(this);\n this.showEditor = this.showEditor.bind(this);\n }\n\n update() {\n return this.$async(this.updateAsync);\n }\n\n async updateAsync() {\n const model = this.edgeJob;\n this.state.actionInProgress = true;\n\n try {\n await this.EdgeJobService.updateEdgeJob(model);\n this.Notifications.success('Edge job successfully updated');\n this.state.isEditorDirty = false;\n this.$state.go('edge.jobs', {}, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update Edge job');\n }\n\n this.state.actionInProgress = false;\n }\n\n downloadLogs(endpointId) {\n return this.$async(this.downloadLogsAsync, endpointId);\n }\n async downloadLogsAsync(endpointId) {\n try {\n const data = await this.EdgeJobService.logFile(this.edgeJob.Id, endpointId);\n const downloadData = new Blob([data.FileContent], {\n type: 'text/plain;charset=utf-8',\n });\n const logFileName = `job_${this.edgeJob.Id}_task_${endpointId}.log`;\n this.FileSaver.saveAs(downloadData, logFileName);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to download file');\n }\n }\n\n associateEndpointsToResults(results, endpoints) {\n return _.map(results, (result) => {\n const endpoint = _.find(endpoints, (endpoint) => endpoint.Id === result.EndpointId);\n result.Endpoint = endpoint;\n return result;\n });\n }\n\n collectLogs(endpointId) {\n return this.$async(this.collectLogsAsync, endpointId);\n }\n\n async collectLogsAsync(endpointId) {\n try {\n await this.EdgeJobService.collectLogs(this.edgeJob.Id, endpointId);\n const result = _.find(this.results, (result) => result.EndpointId === endpointId);\n result.LogsStatus = 2;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to collect logs');\n }\n }\n\n clearLogs(endpointId) {\n return this.$async(this.clearLogsAsync, endpointId);\n }\n async clearLogsAsync(endpointId) {\n try {\n await this.EdgeJobService.clearLogs(this.edgeJob.Id, endpointId);\n const result = _.find(this.results, (result) => result.EndpointId === endpointId);\n result.LogsStatus = 1;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to clear logs');\n }\n }\n\n refresh() {\n return this.$async(this.refreshAsync);\n }\n async refreshAsync() {\n const { id } = this.$state.params;\n const results = await this.EdgeJobService.jobResults(id);\n if (results.length > 0) {\n const endpointIds = _.map(results, (result) => result.EndpointId);\n const endpoints = await this.EndpointService.endpoints(undefined, undefined, { endpointIds });\n this.results = this.associateEndpointsToResults(results, endpoints.value);\n } else {\n this.results = results;\n }\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n }\n\n async uiCanExit() {\n if (this.edgeJob.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n const { id, tab } = this.$state.params;\n this.state.activeTab = tab;\n if (!tab || tab === 0) {\n this.state.showEditorTab = true;\n }\n\n try {\n const [edgeJob, file, results, groups, tags] = await Promise.all([\n this.EdgeJobService.edgeJob(id),\n this.EdgeJobService.getScriptFile(id),\n this.EdgeJobService.jobResults(id),\n this.GroupService.groups(),\n this.TagService.tags(),\n ]);\n\n edgeJob.FileContent = file.FileContent;\n this.oldFileContent = edgeJob.FileContent;\n this.edgeJob = edgeJob;\n this.groups = groups;\n this.tags = tags;\n\n if (results.length > 0) {\n const endpointIds = _.map(results, (result) => result.EndpointId);\n const endpoints = await this.EndpointService.endpoints(undefined, undefined, { endpointIds });\n this.results = this.associateEndpointsToResults(results, endpoints.value);\n } else {\n this.results = results;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environment list');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.edgeJob.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeJob.html');\n\nimport angular from 'angular';\nimport { EdgeJobController } from './edgeJobController';\n\nangular.module('portainer.edge').component('edgeJobView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobController,\n});\n","import _ from 'lodash-es';\n\nexport class EdgeJobsViewController {\n /* @ngInject */\n constructor($async, $state, EdgeJobService, ModalService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.EdgeJobService = EdgeJobService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n\n this.removeAction = this.removeAction.bind(this);\n this.deleteJobsAsync = this.deleteJobsAsync.bind(this);\n this.deleteJobs = this.deleteJobs.bind(this);\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected edge job(s) ?', (confirmed) => {\n if (!confirmed) {\n return;\n }\n this.deleteJobs(selectedItems);\n });\n }\n\n deleteJobs(edgeJobs) {\n return this.$async(this.deleteJobsAsync, edgeJobs);\n }\n\n async deleteJobsAsync(edgeJobs) {\n for (let edgeJob of edgeJobs) {\n try {\n await this.EdgeJobService.remove(edgeJob.Id);\n this.Notifications.success('Stack successfully removed', edgeJob.Name);\n _.remove(this.edgeJobs, edgeJob);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove Edge job ' + edgeJob.Name);\n }\n }\n\n this.$state.reload();\n }\n\n async $onInit() {\n try {\n const edgeJobs = await this.EdgeJobService.edgeJobs();\n this.edgeJobs = edgeJobs;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Edge jobs');\n this.edgeJobs = [];\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeJobsView.html');\n\nimport angular from 'angular';\nimport { EdgeJobsViewController } from './edgeJobsViewController';\n\nangular.module('portainer.edge').component('edgeJobsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeJobsViewController,\n});\n","export default class CreateEdgeStackViewController {\n /* @ngInject */\n constructor($state, $window, ModalService, EdgeStackService, EdgeGroupService, Notifications, $async) {\n Object.assign(this, { $state, $window, ModalService, EdgeStackService, EdgeGroupService, Notifications, $async });\n\n this.formValues = {\n Name: '',\n StackFileContent: '',\n StackFile: null,\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n Env: [],\n ComposeFilePathInRepository: '',\n Groups: [],\n DeploymentType: 0,\n };\n\n this.state = {\n Method: 'editor',\n formValidationError: '',\n actionInProgress: false,\n StackType: null,\n isEditorDirty: false,\n endpointTypes: [],\n };\n\n this.edgeGroups = null;\n\n this.createStack = this.createStack.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.createStackByMethod = this.createStackByMethod.bind(this);\n this.createStackFromFileContent = this.createStackFromFileContent.bind(this);\n this.createStackFromFileUpload = this.createStackFromFileUpload.bind(this);\n this.createStackFromGitRepository = this.createStackFromGitRepository.bind(this);\n this.onChangeGroups = this.onChangeGroups.bind(this);\n this.hasDockerEndpoint = this.hasDockerEndpoint.bind(this);\n this.onChangeDeploymentType = this.onChangeDeploymentType.bind(this);\n }\n\n buildAnalyticsProperties() {\n const format = 'compose';\n const metadata = { type: methodLabel(this.state.Method), format };\n\n if (metadata.type === 'template') {\n metadata.templateName = this.selectedTemplate.title;\n }\n\n return { metadata };\n\n function methodLabel(method) {\n switch (method) {\n case 'editor':\n return 'web-editor';\n case 'repository':\n return 'git';\n case 'upload':\n return 'file-upload';\n case 'template':\n return 'template';\n }\n }\n }\n\n async uiCanExit() {\n if (this.state.Method === 'editor' && this.formValues.StackFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n try {\n this.edgeGroups = await this.EdgeGroupService.groups();\n this.noGroups = this.edgeGroups.length === 0;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Edge groups');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.state.Method === 'editor' && this.formValues.StackFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n\n createStack() {\n return this.$async(async () => {\n const name = this.formValues.Name;\n let method = this.state.Method;\n\n if (method === 'template') {\n method = 'editor';\n }\n\n if (!this.validateForm(method)) {\n return;\n }\n\n this.state.actionInProgress = true;\n try {\n await this.createStackByMethod(name, method);\n\n this.Notifications.success('Stack successfully deployed');\n this.state.isEditorDirty = false;\n this.$state.go('edge.stacks');\n } catch (err) {\n this.Notifications.error('Deployment error', err, 'Unable to deploy stack');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n\n onChangeGroups(groups) {\n this.formValues.Groups = groups;\n\n this.checkIfEndpointTypes(groups);\n }\n\n checkIfEndpointTypes(groups) {\n const edgeGroups = groups.map((id) => this.edgeGroups.find((e) => e.Id === id));\n this.state.endpointTypes = edgeGroups.flatMap((group) => group.EndpointTypes);\n\n if (this.hasDockerEndpoint() && this.formValues.DeploymentType == 1) {\n this.onChangeDeploymentType(0);\n }\n }\n\n hasKubeEndpoint() {\n return this.state.endpointTypes.includes(7);\n }\n\n hasDockerEndpoint() {\n return this.state.endpointTypes.includes(4);\n }\n\n validateForm(method) {\n this.state.formValidationError = '';\n\n if (method === 'editor' && this.formValues.StackFileContent === '') {\n this.state.formValidationError = 'Stack file content must not be empty';\n return;\n }\n\n return true;\n }\n\n createStackByMethod(name, method) {\n switch (method) {\n case 'editor':\n return this.createStackFromFileContent(name);\n case 'upload':\n return this.createStackFromFileUpload(name);\n case 'repository':\n return this.createStackFromGitRepository(name);\n }\n }\n\n createStackFromFileContent(name) {\n const { StackFileContent, Groups, DeploymentType } = this.formValues;\n\n return this.EdgeStackService.createStackFromFileContent({\n name,\n StackFileContent,\n EdgeGroups: Groups,\n DeploymentType,\n });\n }\n\n createStackFromFileUpload(name) {\n const { StackFile, Groups, DeploymentType } = this.formValues;\n return this.EdgeStackService.createStackFromFileUpload(\n {\n Name: name,\n EdgeGroups: Groups,\n DeploymentType,\n },\n StackFile\n );\n }\n\n createStackFromGitRepository(name) {\n const { Groups, DeploymentType } = this.formValues;\n const repositoryOptions = {\n RepositoryURL: this.formValues.RepositoryURL,\n RepositoryReferenceName: this.formValues.RepositoryReferenceName,\n FilePathInRepository: this.formValues.ComposeFilePathInRepository,\n RepositoryAuthentication: this.formValues.RepositoryAuthentication,\n RepositoryUsername: this.formValues.RepositoryUsername,\n RepositoryPassword: this.formValues.RepositoryPassword,\n };\n return this.EdgeStackService.createStackFromGitRepository(\n {\n name,\n EdgeGroups: Groups,\n DeploymentType,\n },\n repositoryOptions\n );\n }\n\n onChangeDeploymentType(deploymentType) {\n this.formValues.DeploymentType = deploymentType;\n this.state.Method = 'editor';\n this.formValues.StackFileContent = '';\n }\n\n formIsInvalid() {\n return (\n this.form.$invalid ||\n !this.formValues.Groups.length ||\n (['template', 'editor'].includes(this.state.Method) && !this.formValues.StackFileContent) ||\n ('upload' === this.state.Method && !this.formValues.StackFile)\n );\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./create-edge-stack-view.html');\n\nimport controller from './create-edge-stack-view.controller';\n\nexport const createEdgeStackView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","class DockerComposeFormController {\n /* @ngInject */\n constructor($async, EdgeTemplateService, Notifications) {\n Object.assign(this, { $async, EdgeTemplateService, Notifications });\n\n this.methodOptions = [\n { id: 'method_editor', icon: 'fa fa-edit', label: 'Web editor', description: 'Use our Web editor', value: 'editor' },\n { id: 'method_upload', icon: 'fa fa-upload', label: 'Upload', description: 'Upload from your computer', value: 'upload' },\n { id: 'method_repository', icon: 'fab fa-github', label: 'Repository', description: 'Use a git repository', value: 'repository' },\n { id: 'method_template', icon: 'fa fa-rocket', label: 'Template', description: 'Use an Edge stack template', value: 'template' },\n ];\n\n this.selectedTemplate = null;\n\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.onChangeFile = this.onChangeFile.bind(this);\n this.onChangeTemplate = this.onChangeTemplate.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n this.onChangeFormValues = this.onChangeFormValues.bind(this);\n }\n\n onChangeFormValues(values) {\n this.formValues = values;\n }\n\n onChangeMethod(method) {\n this.state.Method = method;\n this.formValues.StackFileContent = '';\n this.selectedTemplate = null;\n }\n\n onChangeTemplate(template) {\n return this.$async(async () => {\n this.formValues.StackFileContent = '';\n try {\n const fileContent = await this.EdgeTemplateService.edgeTemplate(template);\n this.formValues.StackFileContent = fileContent;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Template');\n }\n });\n }\n\n onChangeFileContent(value) {\n this.formValues.StackFileContent = value;\n }\n\n onChangeFile(value) {\n return this.$async(async () => {\n this.formValues.StackFile = value;\n });\n }\n\n async $onInit() {\n return this.$async(async () => {\n try {\n const templates = await this.EdgeTemplateService.edgeTemplates();\n this.templates = templates.map((template) => ({ ...template, label: `${template.title} - ${template.description}` }));\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Templates');\n }\n });\n }\n}\n\nexport default DockerComposeFormController;\n","const autoNgTemplateLoaderTemplate1 = require('./docker-compose-form.html');\n\nimport controller from './docker-compose-form.controller.js';\n\nexport const edgeStacksDockerComposeForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n formValues: '=',\n state: '=',\n },\n};\n","import angular from 'angular';\n\nimport { createEdgeStackView } from './create-edge-stack-view';\nimport { edgeStacksDockerComposeForm } from './docker-compose-form';\nimport { kubeManifestForm } from './kube-manifest-form';\nimport { kubeDeployDescription } from './kube-deploy-description';\n\nexport default angular\n .module('portainer.edge.stacks.create', [])\n .component('createEdgeStackView', createEdgeStackView)\n .component('edgeStacksDockerComposeForm', edgeStacksDockerComposeForm)\n .component('edgeStacksKubeManifestForm', kubeManifestForm)\n .component('kubeDeployDescription', kubeDeployDescription).name;\n","const autoNgTemplateLoaderTemplate1 = require('./kube-deploy-description.html');\n\nexport const kubeDeployDescription = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./kube-manifest-form.html');\n\nimport controller from './kube-manifest-form.controller.js';\n\nexport const kubeManifestForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n formValues: '=',\n state: '=',\n },\n};\n","class KubeManifestFormController {\n /* @ngInject */\n constructor($async) {\n Object.assign(this, { $async });\n\n this.methodOptions = [\n { id: 'method_editor', icon: 'fa fa-edit', label: 'Web editor', description: 'Use our Web editor', value: 'editor' },\n { id: 'method_upload', icon: 'fa fa-upload', label: 'Upload', description: 'Upload from your computer', value: 'upload' },\n { id: 'method_repository', icon: 'fab fa-github', label: 'Repository', description: 'Use a git repository', value: 'repository' },\n ];\n\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.onChangeFormValues = this.onChangeFormValues.bind(this);\n this.onChangeFile = this.onChangeFile.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n }\n\n onChangeFormValues(values) {\n this.formValues = values;\n }\n\n onChangeFileContent(value) {\n this.formValues.StackFileContent = value;\n }\n\n onChangeFile(value) {\n return this.$async(async () => {\n this.formValues.StackFile = value;\n });\n }\n\n onChangeMethod(method) {\n this.state.Method = method;\n }\n}\n\nexport default KubeManifestFormController;\n","import _ from 'lodash-es';\n\nexport class EdgeStacksViewController {\n /* @ngInject */\n constructor($state, Notifications, EdgeStackService, $scope, $async) {\n this.$state = $state;\n this.Notifications = Notifications;\n this.EdgeStackService = EdgeStackService;\n this.$scope = $scope;\n this.$async = $async;\n\n this.stacks = undefined;\n\n this.getStacks = this.getStacks.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n $onInit() {\n this.getStacks();\n }\n\n removeAction(stacks) {\n return this.$async(this.removeActionAsync, stacks);\n }\n\n async removeActionAsync(stacks) {\n for (let stack of stacks) {\n try {\n await this.EdgeStackService.remove(stack.Id);\n this.Notifications.success('Stack successfully removed', stack.Name);\n _.remove(this.stacks, stack);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove stack ' + stack.Name);\n }\n }\n\n this.$state.reload();\n }\n\n async getStacks() {\n try {\n this.stacks = await this.EdgeStackService.stacks();\n } catch (err) {\n this.stacks = [];\n this.Notifications.error('Failure', err, 'Unable to retrieve stacks');\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./edgeStacksView.html');\n\nimport angular from 'angular';\n\nimport { EdgeStacksViewController } from './edgeStacksViewController';\n\nangular.module('portainer.edge').component('edgeStacksView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EdgeStacksViewController,\n});\n","import _ from 'lodash-es';\n\nexport class EditEdgeStackViewController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, EdgeGroupService, EdgeStackService, EndpointService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.EdgeGroupService = EdgeGroupService;\n this.EdgeStackService = EdgeStackService;\n this.EndpointService = EndpointService;\n this.Notifications = Notifications;\n\n this.stack = null;\n this.edgeGroups = null;\n\n this.state = {\n actionInProgress: false,\n activeTab: 0,\n isEditorDirty: false,\n };\n\n this.deployStack = this.deployStack.bind(this);\n this.deployStackAsync = this.deployStackAsync.bind(this);\n this.getPaginatedEndpoints = this.getPaginatedEndpoints.bind(this);\n this.getPaginatedEndpointsAsync = this.getPaginatedEndpointsAsync.bind(this);\n }\n\n async $onInit() {\n const { stackId, tab } = this.$state.params;\n this.state.activeTab = tab;\n try {\n const [edgeGroups, model, file] = await Promise.all([this.EdgeGroupService.groups(), this.EdgeStackService.stack(stackId), this.EdgeStackService.stackFile(stackId)]);\n this.edgeGroups = edgeGroups;\n this.stack = model;\n this.stackEndpointIds = this.filterStackEndpoints(model.EdgeGroups, edgeGroups);\n this.originalFileContent = file;\n this.formValues = {\n StackFileContent: file,\n EdgeGroups: this.stack.EdgeGroups,\n DeploymentType: this.stack.DeploymentType,\n };\n this.oldFileContent = this.formValues.StackFileContent;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stack data');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.formValues.StackFileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n\n async uiCanExit() {\n if (this.formValues.StackFileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== this.oldFileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n filterStackEndpoints(groupIds, groups) {\n return _.flatten(\n _.map(groupIds, (Id) => {\n const group = _.find(groups, { Id });\n return group.Endpoints;\n })\n );\n }\n\n deployStack() {\n return this.$async(this.deployStackAsync);\n }\n\n async deployStackAsync() {\n this.state.actionInProgress = true;\n try {\n if (this.originalFileContent != this.formValues.StackFileContent) {\n this.formValues.Version = this.stack.Version + 1;\n }\n await this.EdgeStackService.updateStack(this.stack.Id, this.formValues);\n this.Notifications.success('Stack successfully deployed');\n this.state.isEditorDirty = false;\n this.$state.go('edge.stacks');\n } catch (err) {\n this.Notifications.error('Deployment error', err, 'Unable to deploy stack');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n getPaginatedEndpoints(...args) {\n return this.$async(this.getPaginatedEndpointsAsync, ...args);\n }\n\n async getPaginatedEndpointsAsync(lastId, limit, search) {\n try {\n const query = { search, types: [4, 7], endpointIds: this.stackEndpointIds };\n const { value, totalCount } = await this.EndpointService.endpoints(lastId, limit, query);\n const endpoints = _.map(value, (endpoint) => {\n const status = this.stack.Status[endpoint.Id];\n endpoint.Status = status;\n return endpoint;\n });\n return { endpoints, totalCount };\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environment information');\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./editEdgeStackView.html');\n\nimport angular from 'angular';\n\nimport { EditEdgeStackViewController } from './editEdgeStackViewController';\n\nangular.module('portainer.edge').component('editEdgeStackView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditEdgeStackViewController,\n});\n","import angular from 'angular';\n\nimport createModule from './createEdgeStackView';\n\nexport default angular.module('portainer.edge.stacks', [createModule]).name;\n","import './assets/css';\n\nimport './i18n';\n\nimport angular from 'angular';\nimport { UI_ROUTER_REACT_HYBRID } from '@uirouter/react-hybrid';\n\nimport './matomo-setup';\nimport analyticsModule from './angulartics.matomo';\n\nimport './agent';\nimport './azure/_module';\nimport './docker/__module';\nimport './edge/__module';\nimport './portainer/__module';\n\nimport { onStartupAngular } from './app';\nimport { configApp } from './config';\n\nimport { init as initFeatureService } from './portainer/feature-flags/feature-flags.service';\nimport { Edition } from './portainer/feature-flags/enums';\n\ninitFeatureService(Edition[process.env.PORTAINER_EDITION]);\n\nangular\n .module('portainer', [\n 'ui.bootstrap',\n 'ui.router',\n UI_ROUTER_REACT_HYBRID,\n 'ui.select',\n 'isteven-multi-select',\n 'ngSanitize',\n 'ngFileUpload',\n 'ngMessages',\n 'ngResource',\n 'angularUtils.directives.dirPagination',\n 'LocalStorageModule',\n 'angular-jwt',\n 'angular-json-tree',\n 'angular-loading-bar',\n 'angular-clipboard',\n 'ngFileSaver',\n 'luegg.directives',\n 'portainer.app',\n 'portainer.agent',\n 'portainer.azure',\n 'portainer.docker',\n 'portainer.kubernetes',\n 'portainer.edge',\n 'rzModule',\n 'moment-picker',\n 'angulartics',\n analyticsModule,\n ])\n .run(onStartupAngular)\n .config(configApp);\n\nif (require) {\n const req = require.context('./', true, /^(.*\\.(js$))[^.]*$/im);\n req\n .keys()\n .filter((path) => !path.includes('.test'))\n .forEach(function (key) {\n req(key);\n });\n}\n","import registriesModule from './registries';\nimport customTemplateModule from './custom-templates';\n\nangular.module('portainer.kubernetes', ['portainer.app', registriesModule, customTemplateModule]).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n const kubernetes = {\n name: 'kubernetes',\n url: '/kubernetes',\n parent: 'endpoint',\n abstract: true,\n\n onEnter: /* @ngInject */ function onEnter($async, $state, endpoint, EndpointProvider, KubernetesHealthService, KubernetesNamespaceService, Notifications, StateManager) {\n return $async(async () => {\n if (![5, 6, 7].includes(endpoint.Type)) {\n $state.go('portainer.home');\n return;\n }\n try {\n if (endpoint.Type === 7) {\n //edge\n try {\n await KubernetesHealthService.ping(endpoint.Id);\n endpoint.Status = 1;\n } catch (e) {\n endpoint.Status = 2;\n }\n }\n\n EndpointProvider.setEndpointID(endpoint.Id);\n await StateManager.updateEndpointState(endpoint);\n\n if (endpoint.Type === 7 && endpoint.Status === 2) {\n throw new Error('Unable to contact Edge agent, please ensure that the agent is properly running on the remote environment.');\n }\n\n await KubernetesNamespaceService.get();\n } catch (e) {\n Notifications.error('Failed loading environment', e);\n $state.go('portainer.home', {}, { reload: true });\n }\n });\n },\n };\n\n const helmApplication = {\n name: 'kubernetes.helm',\n url: '/helm/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesHelmApplicationView',\n },\n },\n };\n\n const helmTemplates = {\n name: 'kubernetes.templates.helm',\n url: '/helm',\n views: {\n 'content@': {\n component: 'helmTemplatesView',\n },\n },\n };\n\n const applications = {\n name: 'kubernetes.applications',\n url: '/applications',\n views: {\n 'content@': {\n component: 'kubernetesApplicationsView',\n },\n },\n };\n\n const applicationCreation = {\n name: 'kubernetes.applications.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'kubernetesCreateApplicationView',\n },\n },\n };\n\n const application = {\n name: 'kubernetes.applications.application',\n url: '/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesApplicationView',\n },\n },\n };\n\n const applicationEdit = {\n name: 'kubernetes.applications.application.edit',\n url: '/edit',\n views: {\n 'content@': {\n component: 'kubernetesCreateApplicationView',\n },\n },\n };\n\n const applicationConsole = {\n name: 'kubernetes.applications.application.console',\n url: '/:pod/:container/console',\n views: {\n 'content@': {\n component: 'kubernetesApplicationConsoleView',\n },\n },\n };\n\n const applicationLogs = {\n name: 'kubernetes.applications.application.logs',\n url: '/:pod/:container/logs',\n views: {\n 'content@': {\n component: 'kubernetesApplicationLogsView',\n },\n },\n };\n\n const applicationStats = {\n name: 'kubernetes.applications.application.stats',\n url: '/:pod/:container/stats',\n views: {\n 'content@': {\n component: 'kubernetesApplicationStatsView',\n },\n },\n };\n\n const stacks = {\n name: 'kubernetes.stacks',\n url: '/stacks',\n abstract: true,\n };\n\n const stack = {\n name: 'kubernetes.stacks.stack',\n url: '/:namespace/:name',\n abstract: true,\n };\n\n const stackLogs = {\n name: 'kubernetes.stacks.stack.logs',\n url: '/logs',\n views: {\n 'content@': {\n component: 'kubernetesStackLogsView',\n },\n },\n };\n\n const configurations = {\n name: 'kubernetes.configurations',\n url: '/configurations',\n views: {\n 'content@': {\n component: 'kubernetesConfigurationsView',\n },\n },\n };\n\n const configurationCreation = {\n name: 'kubernetes.configurations.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'kubernetesCreateConfigurationView',\n },\n },\n };\n\n const configuration = {\n name: 'kubernetes.configurations.configuration',\n url: '/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesConfigurationView',\n },\n },\n };\n\n const cluster = {\n name: 'kubernetes.cluster',\n url: '/cluster',\n views: {\n 'content@': {\n component: 'kubernetesClusterView',\n },\n },\n };\n\n const node = {\n name: 'kubernetes.cluster.node',\n url: '/:name',\n views: {\n 'content@': {\n component: 'kubernetesNodeView',\n },\n },\n };\n\n const nodeStats = {\n name: 'kubernetes.cluster.node.stats',\n url: '/stats',\n views: {\n 'content@': {\n component: 'kubernetesNodeStatsView',\n },\n },\n };\n\n const dashboard = {\n name: 'kubernetes.dashboard',\n url: '/dashboard',\n views: {\n 'content@': {\n component: 'kubernetesDashboardView',\n },\n },\n };\n\n const deploy = {\n name: 'kubernetes.deploy',\n url: '/deploy?templateId',\n views: {\n 'content@': {\n component: 'kubernetesDeployView',\n },\n },\n params: {\n templateId: '',\n },\n };\n\n const resourcePools = {\n name: 'kubernetes.resourcePools',\n url: '/pools',\n views: {\n 'content@': {\n component: 'kubernetesResourcePoolsView',\n },\n },\n };\n\n const resourcePoolCreation = {\n name: 'kubernetes.resourcePools.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'kubernetesCreateResourcePoolView',\n },\n },\n };\n\n const resourcePool = {\n name: 'kubernetes.resourcePools.resourcePool',\n url: '/:id',\n views: {\n 'content@': {\n component: 'kubernetesResourcePoolView',\n },\n },\n };\n\n const resourcePoolAccess = {\n name: 'kubernetes.resourcePools.resourcePool.access',\n url: '/access',\n views: {\n 'content@': {\n component: 'kubernetesResourcePoolAccessView',\n },\n },\n };\n\n const volumes = {\n name: 'kubernetes.volumes',\n url: '/volumes',\n views: {\n 'content@': {\n component: 'kubernetesVolumesView',\n },\n },\n };\n\n const volume = {\n name: 'kubernetes.volumes.volume',\n url: '/:namespace/:name',\n views: {\n 'content@': {\n component: 'kubernetesVolumeView',\n },\n },\n };\n\n const registries = {\n name: 'kubernetes.registries',\n url: '/registries',\n views: {\n 'content@': {\n component: 'endpointRegistriesView',\n },\n },\n };\n\n const registriesAccess = {\n name: 'kubernetes.registries.access',\n url: '/:id/access',\n views: {\n 'content@': {\n component: 'kubernetesRegistryAccessView',\n },\n },\n };\n\n $stateRegistryProvider.register(kubernetes);\n $stateRegistryProvider.register(helmApplication);\n $stateRegistryProvider.register(helmTemplates);\n $stateRegistryProvider.register(applications);\n $stateRegistryProvider.register(applicationCreation);\n $stateRegistryProvider.register(application);\n $stateRegistryProvider.register(applicationEdit);\n $stateRegistryProvider.register(applicationConsole);\n $stateRegistryProvider.register(applicationLogs);\n $stateRegistryProvider.register(applicationStats);\n $stateRegistryProvider.register(stacks);\n $stateRegistryProvider.register(stack);\n $stateRegistryProvider.register(stackLogs);\n $stateRegistryProvider.register(configurations);\n $stateRegistryProvider.register(configurationCreation);\n $stateRegistryProvider.register(configuration);\n $stateRegistryProvider.register(cluster);\n $stateRegistryProvider.register(dashboard);\n $stateRegistryProvider.register(deploy);\n $stateRegistryProvider.register(node);\n $stateRegistryProvider.register(nodeStats);\n $stateRegistryProvider.register(resourcePools);\n $stateRegistryProvider.register(resourcePoolCreation);\n $stateRegistryProvider.register(resourcePool);\n $stateRegistryProvider.register(resourcePoolAccess);\n $stateRegistryProvider.register(volumes);\n $stateRegistryProvider.register(volume);\n $stateRegistryProvider.register(registries);\n $stateRegistryProvider.register(registriesAccess);\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./containersDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesContainersDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n refreshCallback: '<',\n showConsole: '<',\n accessNode: '<',\n isPod: '<',\n useServerMetrics: '<',\n },\n});\n","import { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nexport default class {\n $onInit() {\n const secrets = (this.configurations || [])\n .filter((config) => config.Data && config.Type === KubernetesConfigurationTypes.SECRET)\n .flatMap((config) => Object.entries(config.Data))\n .map(([key, value]) => ({ key, value }));\n\n this.state = { secrets };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./applications-datatable-details.html');\n\nimport angular from 'angular';\nimport controller from './applications-datatable-details.controller';\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsDatatableDetails', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n configurations: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./applications-datatable-url.html');\n\nimport angular from 'angular';\nimport './applications-datatable-url.css';\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsDatatableUrl', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n publishedUrl: '@',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./applicationsDatatable.html');\n\nimport './applicationsDatatable.css';\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n settingsKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n onPublishingModeClick: '<',\n isPrimary: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { KubernetesApplicationDeploymentTypes, KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nangular.module('portainer.docker').controller('KubernetesApplicationsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n const ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.state = Object.assign(this.state, {\n expandAll: false,\n expandedItems: [],\n });\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n values: [],\n },\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n this.state.filteredDataSet.forEach((item) => this.expandItem(item, this.state.expandAll));\n };\n\n this.isItemExpanded = function (item) {\n return this.state.expandedItems.includes(item.Id);\n };\n\n this.isExpandable = function (item) {\n return item.KubernetesApplications || this.hasConfigurationSecrets(item) || !!this.getPublishedUrl(item).length;\n };\n\n this.expandItem = function (item, expanded) {\n // collapse item\n if (!expanded) {\n this.state.expandedItems = this.state.expandedItems.filter((id) => id !== item.Id);\n // expanded item\n } else if (expanded && !this.state.expandedItems.includes(item.Id)) {\n this.state.expandedItems = [...this.state.expandedItems, item.Id];\n }\n DatatableService.setDataTableExpandedItems(this.tableKey, this.state.expandedItems);\n };\n\n this.expandItems = function (storedExpandedItems) {\n this.state.expandedItems = storedExpandedItems;\n if (this.state.expandedItems.length === this.dataset.length) {\n this.state.expandAll = true;\n }\n };\n\n this.onDataRefresh = function () {\n const storedExpandedItems = DatatableService.getDataTableExpandedItems(this.tableKey);\n if (storedExpandedItems !== null) {\n this.expandItems(storedExpandedItems);\n }\n };\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.isSystemNamespace = function (item) {\n // if all charts in a helm app/release are in the system namespace\n if (item.KubernetesApplications && item.KubernetesApplications.length > 0) {\n return item.KubernetesApplications.some((app) => KubernetesNamespaceHelper.isSystemNamespace(app.ResourcePool));\n }\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || ctrl.settings.showSystem;\n };\n\n this.getPublishedUrl = function (item) {\n // Map all ingress rules in published ports to their respective URLs\n const ingressUrls = item.PublishedPorts.flatMap((pp) => pp.IngressRules)\n .filter(({ Host, IP }) => Host || IP)\n .map(({ Host, IP, Port, Path }) => {\n let scheme = Port === 443 ? 'https' : 'http';\n let urlPort = Port === 80 || Port === 443 ? '' : `:${Port}`;\n return `${scheme}://${Host || IP}${urlPort}${Path}`;\n });\n\n // Map all load balancer service ports to ip address\n let loadBalancerURLs = [];\n if (item.LoadBalancerIPAddress) {\n loadBalancerURLs = item.PublishedPorts.map((pp) => `http://${item.LoadBalancerIPAddress}:${pp.Port}`);\n }\n\n // combine ingress urls\n const publishedUrls = [...ingressUrls, ...loadBalancerURLs];\n\n // Return the first URL - priority given to ingress urls, then services (load balancers)\n return publishedUrls.length > 0 ? publishedUrls[0] : '';\n };\n\n this.hasConfigurationSecrets = function (item) {\n return item.Configurations && item.Configurations.some((config) => config.Data && config.Type === KubernetesConfigurationTypes.SECRET);\n };\n\n /**\n * Do not allow applications in system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.isSystemNamespace(item);\n };\n\n this.applyFilters = function (item) {\n return ctrl.filters.state.values.some((filter) => item.ApplicationType === filter.type && filter.display);\n };\n\n this.onStateFilterChange = function () {\n this.filters.state.enabled = this.filters.state.values.some((filter) => !filter.display);\n };\n\n this.prepareTableFromDataset = function () {\n const availableTypeFilters = this.dataset.map((item) => ({ type: item.ApplicationType, display: true }));\n this.filters.state.values = _.uniqBy(availableTypeFilters, 'type');\n };\n\n this.$onInit = function () {\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.KubernetesApplicationTypes = KubernetesApplicationTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n const storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n const textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n const storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n const storedExpandedItems = DatatableService.getDataTableExpandedItems(this.tableKey);\n if (storedExpandedItems !== null) {\n this.expandItems(storedExpandedItems);\n }\n\n const storedSettings = DatatableService.getDataTableSettings(this.settingsKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n if (!Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']) && this.settings.showSystem) {\n this.settings.showSystem = false;\n DatatableService.setDataTableSettings(this.settingsKey, this.settings);\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./applicationsPortsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsPortsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsPortsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { KubernetesApplicationDeploymentTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\n\nangular.module('portainer.docker').controller('KubernetesApplicationsPortsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n var ctrl = this;\n this.KubernetesServiceTypes = KubernetesServiceTypes;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || ctrl.settings.showSystem;\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Ports.length > 1 || item.Ports[0].IngressRules.length > 1;\n };\n\n this.buildIngressRuleURL = function (rule) {\n const hostname = rule.Host ? rule.Host : rule.IP;\n return 'http://' + hostname + rule.Path;\n };\n\n this.portHasIngressRules = function (port) {\n return port.IngressRules.length > 0;\n };\n\n this.ruleCanBeDisplayed = function (rule) {\n return !rule.Host && !rule.IP ? false : true;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n if (!Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']) && this.settings.showSystem) {\n this.settings.showSystem = false;\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./applicationsStacksDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsStacksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsStacksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n removeAction: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { KubernetesApplicationDeploymentTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nangular.module('portainer.kubernetes').controller('KubernetesApplicationsStacksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n var ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n /**\n * Do not allow applications in system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.isSystemNamespace(item.ResourcePool);\n };\n\n /**\n * @param {String} namespace Namespace (string name)\n * @returns Boolean\n */\n this.isSystemNamespace = function (namespace) {\n return KubernetesNamespaceHelper.isSystemNamespace(namespace);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item.ResourcePool) || ctrl.settings.showSystem;\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Applications.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n if (!Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']) && this.settings.showSystem) {\n this.settings.showSystem = false;\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./configurationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n refreshCallback: '<',\n removeAction: '<',\n },\n});\n","import KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nangular.module('portainer.docker').controller('KubernetesConfigurationsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n const ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.Namespace);\n };\n\n this.isSystemToken = function (item) {\n return KubernetesConfigurationHelper.isSystemToken(item);\n };\n\n this.isSystemConfig = function (item) {\n return ctrl.isSystemNamespace(item) || ctrl.isSystemToken(item) || item.IsRegistrySecret;\n };\n\n this.isExternalConfiguration = function (item) {\n return KubernetesConfigurationHelper.isExternalConfiguration(item);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemConfig(item) || ctrl.settings.showSystem;\n };\n\n /**\n * Do not allow configurations in system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.isSystemConfig(item) && !item.Used;\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n if (!Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']) && this.settings.showSystem) {\n this.settings.showSystem = false;\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./eventsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesEventsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n loading: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./integratedApplicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesIntegratedApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./nodeApplicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodeApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesNodeApplicationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","import { KubernetesApplicationDeploymentTypes } from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nangular.module('portainer.docker').controller('KubernetesNodeApplicationsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool);\n };\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.$onInit = function () {\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./nodesDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n refreshCallback: '<',\n hasK8sClusterNodeR: '<',\n useServerMetrics: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePoolApplicationsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolApplicationsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolApplicationsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","import KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nangular.module('portainer.docker').controller('KubernetesResourcePoolApplicationsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.isExternalApplication = function (item) {\n return KubernetesApplicationHelper.isExternalApplication(item);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePoolsDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","import KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nangular.module('portainer.docker').controller('KubernetesResourcePoolsDatatableController', [\n '$scope',\n '$controller',\n 'Authentication',\n 'DatatableService',\n 'EndpointProvider',\n function ($scope, $controller, Authentication, DatatableService, EndpointProvider) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n var ctrl = this;\n\n this.settings = Object.assign(this.settings, {\n showSystem: false,\n });\n\n this.onSettingsShowSystemChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.canManageAccess = function (item) {\n if (!this.endpoint.Kubernetes.Configuration.RestrictDefaultNamespace) {\n return !KubernetesNamespaceHelper.isDefaultNamespace(item.Namespace.Name) && !this.isSystemNamespace(item);\n } else {\n return !this.isSystemNamespace(item);\n }\n };\n\n this.disableRemove = function (item) {\n return this.isSystemNamespace(item) || KubernetesNamespaceHelper.isDefaultNamespace(item.Namespace.Name);\n };\n\n this.isSystemNamespace = function (item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.Namespace.Name);\n };\n\n this.isDisplayed = function (item) {\n return !ctrl.isSystemNamespace(item) || ctrl.settings.showSystem;\n };\n\n this.namespaceStatusColor = function (status) {\n switch (status.toLowerCase()) {\n case 'active':\n return 'success';\n case 'terminating':\n return 'danger';\n default:\n return 'primary';\n }\n };\n\n /**\n * Do not allow system namespaces to be selected\n */\n this.allowSelection = function (item) {\n return !this.disableRemove(item);\n };\n\n this.$onInit = function () {\n this.endpoint = EndpointProvider.currentEndpoint();\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n if (!Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']) && this.settings.showSystem) {\n this.settings.showSystem = false;\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./volumesDatatable.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n refreshCallback: '<',\n },\n});\n","import angular from 'angular';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\n// TODO: review - refactor to use `extends GenericDatatableController`\nclass KubernetesVolumesDatatableController {\n /* @ngInject */\n constructor($async, $controller, DatatableService, Authentication) {\n this.$async = $async;\n this.$controller = $controller;\n this.DatatableService = DatatableService;\n this.Authentication = Authentication;\n\n this.onInit = this.onInit.bind(this);\n this.allowSelection = this.allowSelection.bind(this);\n this.isDisplayed = this.isDisplayed.bind(this);\n }\n\n onSettingsShowSystemChange() {\n this.DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n\n disableRemove(item) {\n return this.isSystemNamespace(item) || this.isUsed(item);\n }\n\n isUsed(item) {\n return KubernetesVolumeHelper.isUsed(item);\n }\n\n isSystemNamespace(item) {\n return KubernetesNamespaceHelper.isSystemNamespace(item.ResourcePool.Namespace.Name);\n }\n\n isDisplayed(item) {\n return !this.isSystemNamespace(item) || this.settings.showSystem;\n }\n\n isExternalVolume(item) {\n return KubernetesVolumeHelper.isExternalVolume(item);\n }\n\n allowSelection(item) {\n return !this.disableRemove(item);\n }\n\n async onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n this.settings.showSystem = false;\n\n this.state.orderBy = this.orderBy;\n var storedOrder = this.DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = this.DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = this.DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n if (!this.Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']) && this.settings.showSystem) {\n this.settings.showSystem = false;\n this.DatatableService.setDataTableSettings(this.tableKey, this.settings);\n }\n this.onSettingsRepeaterChange();\n }\n\n $onInit() {\n const ctrl = angular.extend({}, this.$controller('GenericDatatableController'), this);\n angular.extend(this, ctrl);\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesVolumesDatatableController;\nangular.module('portainer.kubernetes').controller('KubernetesVolumesDatatableController', KubernetesVolumesDatatableController);\n","export default class HelmAddRepositoryController {\n /* @ngInject */\n constructor($state, $async, HelmService, Notifications, EndpointProvider) {\n this.$state = $state;\n this.$async = $async;\n this.HelmService = HelmService;\n this.Notifications = Notifications;\n this.EndpointProvider = EndpointProvider;\n }\n\n doesRepoExist() {\n if (!this.state.repository) {\n return false;\n }\n // lowercase, strip trailing slash and compare\n return this.repos.includes(this.state.repository.toLowerCase().replace(/\\/$/, ''));\n }\n\n async addRepository() {\n this.state.isAddingRepo = true;\n try {\n await this.HelmService.addHelmRepository(this.EndpointProvider.currentEndpoint().Id, { url: this.state.repository });\n this.Notifications.success('Helm repository added successfully');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Installation error', err);\n } finally {\n this.state.isAddingRepo = false;\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n isAddingRepo: false,\n repository: '',\n };\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./helm-add-repository.html');\n\nimport angular from 'angular';\nimport controller from './helm-add-repository.controller';\n\nangular.module('portainer.kubernetes').component('helmAddRepository', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n repos: '<',\n endpoint: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./helm-templates-list-item.html');\n\nimport angular from 'angular';\nimport './helm-templates-list-item.css';\n\nangular.module('portainer.kubernetes').component('helmTemplatesListItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n onSelect: '<',\n },\n transclude: {\n actions: '?templateItemActions',\n },\n});\n","export default class HelmTemplatesListController {\n /* @ngInject */\n constructor($async, DatatableService, HelmService, Notifications) {\n this.$async = $async;\n this.DatatableService = DatatableService;\n this.HelmService = HelmService;\n this.Notifications = Notifications;\n\n this.updateCategories = this.updateCategories.bind(this);\n }\n\n async updateCategories() {\n try {\n const annotationCategories = this.charts\n .map((t) => t.annotations) // get annotations\n .filter((a) => a) // filter out undefined/nulls\n .map((c) => c.category); // get annotation category\n const availableCategories = [...new Set(annotationCategories)].sort(); // unique and sort\n this.state.categories = availableCategories;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve helm charts categories');\n }\n }\n\n onTextFilterChange() {\n this.DatatableService.setDataTableTextFilters(this.tableKey, this.state.textFilter);\n }\n\n clearCategory() {\n this.state.selectedCategory = '';\n }\n\n $onChanges() {\n if (this.charts.length > 0) {\n this.updateCategories();\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n textFilter: '',\n selectedCategory: '',\n categories: [],\n };\n\n const textFilter = this.DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./helm-templates-list.html');\n\nimport angular from 'angular';\nimport controller from './helm-templates-list.controller';\n\nangular.module('portainer.kubernetes').component('helmTemplatesList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n loading: '<',\n titleText: '@',\n titleIcon: '@',\n charts: '<',\n tableKey: '@',\n selectAction: '<',\n },\n});\n","import _ from 'lodash-es';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nexport default class HelmTemplatesController {\n /* @ngInject */\n constructor($analytics, $async, $state, $window, $anchorScroll, Authentication, HelmService, KubernetesResourcePoolService, Notifications, ModalService) {\n this.$analytics = $analytics;\n this.$async = $async;\n this.$window = $window;\n this.$state = $state;\n this.$anchorScroll = $anchorScroll;\n this.Authentication = Authentication;\n this.HelmService = HelmService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.Notifications = Notifications;\n this.ModalService = ModalService;\n\n this.editorUpdate = this.editorUpdate.bind(this);\n this.uiCanExit = this.uiCanExit.bind(this);\n this.installHelmchart = this.installHelmchart.bind(this);\n this.getHelmValues = this.getHelmValues.bind(this);\n this.selectHelmChart = this.selectHelmChart.bind(this);\n this.getHelmRepoURLs = this.getHelmRepoURLs.bind(this);\n this.getLatestCharts = this.getLatestCharts.bind(this);\n this.getResourcePools = this.getResourcePools.bind(this);\n\n $window.onbeforeunload = () => {\n if (this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n editorUpdate(content) {\n const contentvalues = content.getValue();\n if (this.state.originalvalues === contentvalues) {\n this.state.isEditorDirty = false;\n } else {\n this.state.values = contentvalues;\n this.state.isEditorDirty = true;\n }\n }\n\n async uiCanExit() {\n if (this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async installHelmchart() {\n this.state.actionInProgress = true;\n try {\n const payload = {\n Name: this.state.appName,\n Repo: this.state.chart.repo,\n Chart: this.state.chart.name,\n Values: this.state.values,\n Namespace: this.state.resourcePool.Namespace.Name,\n };\n await this.HelmService.install(this.endpoint.Id, payload);\n this.Notifications.success('Helm Chart successfully installed');\n this.$analytics.eventTrack('kubernetes-helm-install', { category: 'kubernetes', metadata: { 'chart-name': this.state.chart.name } });\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.applications');\n } catch (err) {\n this.Notifications.error('Installation error', err);\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n async getHelmValues() {\n this.state.loadingValues = true;\n try {\n const { values } = await this.HelmService.values(this.state.chart.repo, this.state.chart.name);\n this.state.values = values;\n this.state.originalvalues = values;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve helm chart values.');\n } finally {\n this.state.loadingValues = false;\n }\n }\n\n async selectHelmChart(chart) {\n this.$anchorScroll('view-top');\n this.state.showCustomValues = false;\n this.state.chart = chart;\n await this.getHelmValues();\n }\n\n /**\n * @description This function is used to get the helm repo urls for the endpoint and user\n * @returns {Promise} list of helm repo urls\n */\n async getHelmRepoURLs() {\n this.state.reposLoading = true;\n try {\n // fetch globally set helm repo and user helm repos (parallel)\n const { GlobalRepository, UserRepositories } = await this.HelmService.getHelmRepositories(this.endpoint.Id);\n this.state.globalRepository = GlobalRepository;\n const userHelmReposUrls = UserRepositories.map((repo) => repo.URL);\n const uniqueHelmRepos = [...new Set([GlobalRepository, ...userHelmReposUrls])].map((url) => url.toLowerCase()).filter((url) => url); // remove duplicates and blank, to lowercase\n this.state.repos = uniqueHelmRepos;\n return uniqueHelmRepos;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve helm repo urls.');\n } finally {\n this.state.reposLoading = false;\n }\n }\n\n /**\n * @description This function is used to fetch the respective index.yaml files for the provided helm repo urls\n * @param {string[]} helmRepos list of helm repositories\n * @param {bool} append append charts returned from repo to existing list of helm charts\n */\n async getLatestCharts(helmRepos) {\n this.state.chartsLoading = true;\n try {\n const promiseList = helmRepos.map((repo) => this.HelmService.search(repo));\n // fetch helm charts from all the provided helm repositories (parallel)\n // Promise.allSettled is used to account for promise failure(s) - in cases the user has provided invalid helm repo\n const chartPromises = await Promise.allSettled(promiseList);\n const latestCharts = chartPromises\n .filter((tp) => tp.status === 'fulfilled') // remove failed promises\n .map((tp) => ({ entries: tp.value.entries, repo: helmRepos[chartPromises.indexOf(tp)] })) // extract chart entries with respective repo data\n .flatMap(\n ({ entries, repo }) => Object.values(entries).map((charts) => ({ ...charts[0], repo })) // flatten chart entries to single array with respective repo\n );\n\n this.state.charts = latestCharts;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve helm repo charts.');\n } finally {\n this.state.chartsLoading = false;\n }\n }\n\n async getResourcePools() {\n this.state.resourcePoolsLoading = true;\n try {\n const resourcePools = await this.KubernetesResourcePoolService.get();\n\n const nonSystemNamespaces = resourcePools.filter((resourcePool) => !KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name));\n this.state.resourcePools = _.sortBy(nonSystemNamespaces, ({ Namespace }) => (Namespace.Name === 'default' ? 0 : 1));\n this.state.resourcePool = this.state.resourcePools[0];\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve initial helm data.');\n } finally {\n this.state.resourcePoolsLoading = false;\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n appName: '',\n chart: null,\n showCustomValues: false,\n actionInProgress: false,\n resourcePools: [],\n resourcePool: '',\n values: null,\n originalvalues: null,\n repos: [],\n charts: [],\n loadingValues: false,\n isEditorDirty: false,\n chartsLoading: false,\n resourcePoolsLoading: false,\n canInstallChart: this.Authentication.hasAuthorizations(['HelmInstallChart']),\n viewReady: false,\n isAdmin: this.Authentication.isAdmin(),\n globalRepository: undefined,\n };\n\n const helmRepos = await this.getHelmRepoURLs();\n await Promise.all([this.getLatestCharts(helmRepos), this.getResourcePools()]);\n\n this.state.viewReady = true;\n });\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./helm-templates.html');\n\nimport angular from 'angular';\nimport controller from './helm-templates.controller';\n\nangular.module('portainer.kubernetes').component('helmTemplatesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n endpoint: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { KubernetesServicePort, KubernetesIngressServiceRoute } from 'Kubernetes/models/service/models';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesApplicationPublishingTypes } from 'Kubernetes/models/application/models/constants';\n\nexport default class KubeServicesItemViewController {\n /* @ngInject */\n constructor(EndpointProvider, Authentication) {\n this.EndpointProvider = EndpointProvider;\n this.Authentication = Authentication;\n this.KubernetesApplicationPublishingTypes = KubernetesApplicationPublishingTypes;\n }\n\n addPort() {\n const port = new KubernetesServicePort();\n port.nodePort = '';\n port.port = '';\n port.targetPort = '';\n port.protocol = 'TCP';\n\n if (this.ingressType) {\n const route = new KubernetesIngressServiceRoute();\n route.ServiceName = this.serviceName;\n\n if (this.serviceType === KubernetesApplicationPublishingTypes.CLUSTER_IP && this.originalIngresses.length > 0) {\n if (!route.IngressName) {\n route.IngressName = this.originalIngresses[0].Name;\n }\n\n if (!route.Host) {\n route.Host = this.originalIngresses[0].Hosts[0];\n }\n }\n\n port.ingress = route;\n port.Ingress = true;\n }\n this.servicePorts.push(port);\n }\n\n removePort(index) {\n this.servicePorts.splice(index, 1);\n }\n\n servicePort(index) {\n const targetPort = this.servicePorts[index].targetPort;\n this.servicePorts[index].port = targetPort;\n }\n\n isAdmin() {\n return this.Authentication.isAdmin();\n }\n\n onChangeContainerPort() {\n const state = this.state.duplicates.targetPort;\n const source = _.map(this.servicePorts, (sp) => sp.targetPort);\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n onChangeServicePort() {\n const state = this.state.duplicates.servicePort;\n const source = _.map(this.servicePorts, (sp) => sp.port);\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n onChangeNodePort() {\n const state = this.state.duplicates.nodePort;\n const source = _.map(this.servicePorts, (sp) => sp.nodePort);\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n $onInit() {\n if (this.servicePorts.length === 0) {\n this.addPort();\n }\n\n this.state = {\n duplicates: {\n targetPort: new KubernetesFormValidationReferences(),\n servicePort: new KubernetesFormValidationReferences(),\n nodePort: new KubernetesFormValidationReferences(),\n },\n endpointId: this.EndpointProvider.endpointID(),\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./kube-services-item.html');\n\nimport angular from 'angular';\nimport controller from './kube-services-item.controller';\n\nangular.module('portainer.kubernetes').component('kubeServicesItemView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n serviceType: '<',\n servicePorts: '=',\n serviceRoutes: '=',\n ingressType: '<',\n originalIngresses: '<',\n isEdit: '<',\n serviceName: '<',\n multiItemDisable: '<',\n serviceIndex: '<',\n loadbalancerEnabled: '<',\n },\n});\n","import { KubernetesService, KubernetesServicePort, KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport { KubernetesApplicationPublishingTypes } from 'Kubernetes/models/application/models/constants';\n\nexport default class KubeServicesViewController {\n /* @ngInject */\n constructor($async, EndpointProvider, Authentication) {\n this.$async = $async;\n this.EndpointProvider = EndpointProvider;\n this.Authentication = Authentication;\n }\n\n addEntry(service) {\n const p = new KubernetesService();\n if (service === KubernetesApplicationPublishingTypes.INGRESS) {\n p.Type = KubernetesApplicationPublishingTypes.CLUSTER_IP;\n p.Ingress = true;\n } else {\n p.Type = service;\n }\n\n p.Selector = this.formValues.Selector;\n\n p.Name = this.getUniqName();\n this.state.nameIndex += 1;\n this.formValues.Services.push(p);\n }\n\n getUniqName() {\n let name = this.formValues.Name + '-' + this.state.nameIndex;\n const services = this.formValues.Services;\n services.forEach((service) => {\n if (service.Name === name) {\n this.state.nameIndex += 1;\n name = this.formValues.Name + '-' + this.state.nameIndex;\n }\n });\n const UniqName = this.formValues.Name + '-' + this.state.nameIndex;\n return UniqName;\n }\n\n deleteService(index) {\n this.formValues.Services.splice(index, 1);\n this.state.nameIndex -= 1;\n }\n\n addPort(index) {\n const p = new KubernetesServicePort();\n this.formValues.Services[index].Ports.push(p);\n }\n\n serviceType(type) {\n switch (type) {\n case KubernetesApplicationPublishingTypes.CLUSTER_IP:\n return KubernetesServiceTypes.CLUSTER_IP;\n case KubernetesApplicationPublishingTypes.NODE_PORT:\n return KubernetesServiceTypes.NODE_PORT;\n case KubernetesApplicationPublishingTypes.LOAD_BALANCER:\n return KubernetesServiceTypes.LOAD_BALANCER;\n case KubernetesApplicationPublishingTypes.INGRESS:\n return KubernetesServiceTypes.INGRESS;\n }\n }\n\n isAdmin() {\n return this.Authentication.isAdmin();\n }\n\n iconStyle(type) {\n switch (type) {\n case KubernetesApplicationPublishingTypes.CLUSTER_IP:\n return 'fa fa-list-alt';\n case KubernetesApplicationPublishingTypes.NODE_PORT:\n return 'fa fa-list';\n case KubernetesApplicationPublishingTypes.LOAD_BALANCER:\n return 'fa fa-project-diagram';\n case KubernetesApplicationPublishingTypes.INGRESS:\n return 'fa fa-route';\n }\n }\n $onInit() {\n this.state = {\n serviceType: [\n {\n typeName: KubernetesServiceTypes.CLUSTER_IP,\n typeValue: KubernetesApplicationPublishingTypes.CLUSTER_IP,\n },\n {\n typeName: KubernetesServiceTypes.NODE_PORT,\n typeValue: KubernetesApplicationPublishingTypes.NODE_PORT,\n },\n {\n typeName: KubernetesServiceTypes.LOAD_BALANCER,\n typeValue: KubernetesApplicationPublishingTypes.LOAD_BALANCER,\n },\n {\n typeName: KubernetesServiceTypes.INGRESS,\n typeValue: KubernetesApplicationPublishingTypes.INGRESS,\n },\n ],\n selected: KubernetesApplicationPublishingTypes.CLUSTER_IP,\n nameIndex: this.formValues.Services.length,\n endpointId: this.EndpointProvider.endpointID(),\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./kube-services.html');\n\nimport angular from 'angular';\nimport controller from './kube-services.controller';\n\nangular.module('portainer.kubernetes').component('kubeServicesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n formValues: '=',\n isEdit: '<',\n loadbalancerEnabled: '<',\n },\n});\n","import { Terminal } from 'xterm';\nimport * as fit from 'xterm/lib/addons/fit/fit';\nimport { baseHref } from '@/portainer/helpers/pathHelper';\n\nexport default class KubectlShellController {\n /* @ngInject */\n constructor(TerminalWindow, $window, $async, EndpointProvider, LocalStorage, Notifications) {\n this.$async = $async;\n this.$window = $window;\n this.TerminalWindow = TerminalWindow;\n this.EndpointProvider = EndpointProvider;\n this.LocalStorage = LocalStorage;\n this.Notifications = Notifications;\n\n $window.onbeforeunload = () => {\n if (this.state.shell.connected) {\n return '';\n }\n };\n }\n\n disconnect() {\n if (this.state.shell.connected) {\n this.state.shell.connected = false;\n this.state.icon = 'fas fa-window-minimize';\n this.state.shell.socket.close();\n this.state.shell.term.dispose();\n this.TerminalWindow.terminalclose();\n this.$window.onresize = null;\n }\n }\n\n screenClear() {\n this.state.shell.term.clear();\n }\n\n miniRestore() {\n if (this.state.css === 'mini') {\n this.state.css = 'normal';\n this.state.icon = 'fas fa-window-minimize';\n this.TerminalWindow.terminalopen();\n } else {\n this.state.css = 'mini';\n this.state.icon = 'fas fa-window-restore';\n this.TerminalWindow.terminalclose();\n }\n }\n\n configureSocketAndTerminal(socket, term) {\n socket.onopen = () => {\n const terminal_container = document.getElementById('terminal-container');\n term.open(terminal_container);\n term.setOption('cursorBlink', true);\n term.focus();\n term.fit();\n term.writeln('#Run kubectl commands inside here');\n term.writeln('#e.g. kubectl get all');\n term.writeln('');\n };\n\n term.on('data', (data) => {\n socket.send(data);\n });\n\n socket.onmessage = (msg) => {\n term.write(msg.data);\n };\n\n socket.onerror = (err) => {\n this.disconnect();\n if (err.target.readyState !== WebSocket.CLOSED) {\n this.Notifications.error('Failure', err, 'Websocket connection error');\n }\n };\n\n this.$window.onresize = () => {\n this.TerminalWindow.terminalresize();\n };\n\n socket.onclose = this.disconnect.bind(this);\n\n this.state.shell.connected = true;\n }\n\n connectConsole() {\n this.TerminalWindow.terminalopen();\n this.state.css = 'normal';\n\n const params = {\n token: this.LocalStorage.getJWT(),\n endpointId: this.EndpointProvider.endpointID(),\n };\n\n const wsProtocol = this.$window.location.protocol === 'https:' ? 'wss://' : 'ws://';\n const path = baseHref() + 'api/websocket/kubernetes-shell';\n const queryParams = Object.entries(params)\n .map(([k, v]) => `${k}=${v}`)\n .join('&');\n const url = `${wsProtocol}${window.location.host}${path}?${queryParams}`;\n\n Terminal.applyAddon(fit);\n this.state.shell.socket = new WebSocket(url);\n this.state.shell.term = new Terminal();\n\n this.configureSocketAndTerminal(this.state.shell.socket, this.state.shell.term);\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n css: 'normal',\n icon: 'fa-window-minimize',\n shell: {\n connected: false,\n socket: null,\n term: null,\n },\n };\n });\n }\n\n $onDestroy() {\n if (this.state.shell.connected) {\n this.disconnect();\n this.$window.onresize = null;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./kubectl-shell.html');\n\nimport angular from 'angular';\nimport controller from './kubectl-shell.controller';\nimport './kubectl-shell.css';\n\nangular.module('portainer.kubernetes').component('kubectlShell', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./kubernetesConfigurationData.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationData', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationDataController',\n bindings: {\n formValues: '=',\n isValid: '=',\n isCreation: '=',\n isEditorDirty: '=',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport chardet from 'chardet';\nimport { Base64 } from 'js-base64';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesConfigurationDataController {\n /* @ngInject */\n constructor($async) {\n this.$async = $async;\n\n this.editorUpdate = this.editorUpdate.bind(this);\n this.editorUpdateAsync = this.editorUpdateAsync.bind(this);\n this.onFileLoad = this.onFileLoad.bind(this);\n this.onFileLoadAsync = this.onFileLoadAsync.bind(this);\n this.showSimpleMode = this.showSimpleMode.bind(this);\n this.showAdvancedMode = this.showAdvancedMode.bind(this);\n }\n\n onChangeKey(entry) {\n if (entry && entry.Used) {\n return;\n }\n\n this.state.duplicateKeys = KubernetesFormValidationHelper.getDuplicates(_.map(this.formValues.Data, (data) => data.Key));\n this.state.invalidKeys = KubernetesFormValidationHelper.getInvalidKeys(_.map(this.formValues.Data, (data) => data.Key));\n this.isValid = Object.keys(this.state.duplicateKeys).length === 0 && Object.keys(this.state.invalidKeys).length === 0;\n }\n\n addEntry() {\n this.formValues.Data.push(new KubernetesConfigurationFormValuesEntry());\n }\n\n removeEntry(index, entry) {\n if (entry.Used) {\n return;\n }\n\n this.formValues.Data.splice(index, 1);\n this.onChangeKey();\n }\n\n async editorUpdateAsync(cm) {\n if (this.formValues.DataYaml !== cm.getValue()) {\n this.formValues.DataYaml = cm.getValue();\n this.isEditorDirty = true;\n }\n }\n\n editorUpdate(cm) {\n return this.$async(this.editorUpdateAsync, cm);\n }\n\n async onFileLoadAsync(event) {\n const entry = new KubernetesConfigurationFormValuesEntry();\n const encoding = chardet.detect(Buffer.from(event.target.result));\n const decoder = new TextDecoder(encoding);\n\n entry.Key = event.target.fileName;\n entry.IsBinary = KubernetesConfigurationHelper.isBinary(encoding);\n\n if (!entry.IsBinary) {\n entry.Value = decoder.decode(event.target.result);\n } else {\n const stringValue = decoder.decode(event.target.result);\n entry.Value = Base64.encode(stringValue);\n }\n\n this.formValues.Data.push(entry);\n this.onChangeKey();\n }\n\n onFileLoad(event) {\n return this.$async(this.onFileLoadAsync, event);\n }\n\n addEntryFromFile(file) {\n if (file) {\n const temporaryFileReader = new FileReader();\n temporaryFileReader.fileName = file.name;\n temporaryFileReader.onload = this.onFileLoad;\n temporaryFileReader.readAsArrayBuffer(file);\n }\n }\n\n showSimpleMode() {\n this.formValues.IsSimple = true;\n this.formValues.Data = KubernetesConfigurationHelper.parseYaml(this.formValues);\n this.onChangeKey();\n }\n\n showAdvancedMode() {\n this.formValues.IsSimple = false;\n this.formValues.DataYaml = KubernetesConfigurationHelper.parseData(this.formValues);\n }\n\n $onInit() {\n this.state = {\n duplicateKeys: [],\n invalidKeys: {},\n };\n }\n}\n\nexport default KubernetesConfigurationDataController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationDataController', KubernetesConfigurationDataController);\n","const autoNgTemplateLoaderTemplate1 = require('./kubernetes-sidebar.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.kubernetes').component('kubernetesSidebar', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointId: '<',\n isSidebarOpen: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./resourceReservation.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourceReservation', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourceReservationController',\n bindings: {\n description: '@',\n cpuReservation: '<',\n cpuUsage: '<',\n cpuLimit: '<',\n memoryReservation: '<',\n memoryUsage: '<',\n memoryLimit: '<',\n displayUsage: '<',\n },\n});\n","import angular from 'angular';\n\nclass KubernetesResourceReservationController {\n usageValues() {\n if (this.cpuLimit) {\n this.cpuReservationPercent = Math.round((this.cpuReservation / this.cpuLimit) * 100);\n }\n if (this.memoryLimit) {\n this.memoryReservationPercent = Math.round((this.memoryReservation / this.memoryLimit) * 100);\n }\n\n if (this.displayUsage && this.cpuLimit && this.memoryLimit) {\n this.cpuUsagePercent = Math.round((this.cpuUsage / this.cpuLimit) * 100);\n this.memoryUsagePercent = Math.round((this.memoryUsage / this.memoryLimit) * 100);\n }\n }\n\n $onInit() {\n this.usageValues();\n }\n\n $onChanges() {\n this.usageValues();\n }\n}\n\nexport default KubernetesResourceReservationController;\nangular.module('portainer.kubernetes').controller('KubernetesResourceReservationController', KubernetesResourceReservationController);\n","const autoNgTemplateLoaderTemplate1 = require('./viewHeader.html');\n\nangular.module('portainer.kubernetes').component('kubernetesViewHeader', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n transclude: true,\n bindings: {\n viewReady: '<',\n title: '@',\n state: '@',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./viewLoading.html');\n\nangular.module('portainer.kubernetes').component('kubernetesViewLoading', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n viewReady: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./yamlInspector.html');\n\nangular.module('portainer.kubernetes').component('kubernetesYamlInspector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesYamlInspectorController',\n bindings: {\n key: '@',\n data: '<',\n },\n});\n","import angular from 'angular';\n\nclass KubernetesYamlInspectorController {\n /* @ngInject */\n\n constructor(clipboard) {\n this.clipboard = clipboard;\n this.expanded = false;\n }\n\n copyYAML() {\n this.clipboard.copyText(this.data);\n $('#copyNotificationYAML').show().fadeOut(2500);\n }\n\n toggleYAMLInspectorExpansion() {\n let selector = 'kubernetes-yaml-inspector code-editor > div.CodeMirror';\n let height = this.expanded ? '500px' : '80vh';\n $(selector).css({ height: height });\n this.expanded = !this.expanded;\n }\n}\n\nexport default KubernetesYamlInspectorController;\nangular.module('portainer.kubernetes').controller('KubernetesYamlInspectorController', KubernetesYamlInspectorController);\n","import _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\n\nimport {\n KubernetesApplication,\n KubernetesApplicationConfigurationVolume,\n KubernetesApplicationDataAccessPolicies,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPersistedFolder,\n KubernetesApplicationPort,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationTypes,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationNote,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationStackIdLabel,\n KubernetesPortainerApplicationKindLabel,\n} from 'Kubernetes/models/application/models';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesApplicationFormValues } from 'Kubernetes/models/application/formValues';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\n\nimport KubernetesDeploymentConverter from 'Kubernetes/converters/deployment';\nimport KubernetesDaemonSetConverter from 'Kubernetes/converters/daemonSet';\nimport KubernetesStatefulSetConverter from 'Kubernetes/converters/statefulSet';\nimport KubernetesServiceConverter from 'Kubernetes/converters/service';\nimport KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesIngressHelper } from 'Kubernetes/ingress/helper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nfunction _apiPortsToPublishedPorts(pList, pRefs) {\n const ports = _.map(pList, (item) => {\n const res = new KubernetesApplicationPort();\n res.Port = item.port;\n res.TargetPort = item.targetPort;\n res.NodePort = item.nodePort;\n res.Protocol = item.protocol;\n return res;\n });\n _.forEach(ports, (port) => {\n if (isNaN(port.TargetPort)) {\n const targetPort = _.find(pRefs, { name: port.TargetPort });\n if (targetPort) {\n port.TargetPort = targetPort.containerPort;\n }\n }\n });\n return ports;\n}\n\nclass KubernetesApplicationConverter {\n static applicationCommon(res, data, pods, service, ingresses) {\n const containers = data.spec.template ? _.without(_.concat(data.spec.template.spec.containers, data.spec.template.spec.initContainers), undefined) : data.spec.containers;\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Metadata = data.metadata;\n\n if (data.metadata.labels) {\n const { labels } = data.metadata;\n res.StackId = labels[KubernetesPortainerApplicationStackIdLabel] ? parseInt(labels[KubernetesPortainerApplicationStackIdLabel], 10) : null;\n res.StackName = labels[KubernetesPortainerApplicationStackNameLabel] || '';\n res.ApplicationKind = labels[KubernetesPortainerApplicationKindLabel] || '';\n res.ApplicationOwner = labels[KubernetesPortainerApplicationOwnerLabel] || '';\n res.ApplicationName = labels[KubernetesPortainerApplicationNameLabel] || res.Name;\n }\n\n res.Note = data.metadata.annotations ? data.metadata.annotations[KubernetesPortainerApplicationNote] || '' : '';\n res.ResourcePool = data.metadata.namespace;\n if (containers.length) {\n res.Image = containers[0].image;\n }\n if (data.spec.template && data.spec.template.spec && data.spec.template.spec.imagePullSecrets && data.spec.template.spec.imagePullSecrets.length) {\n res.RegistryId = parseInt(data.spec.template.spec.imagePullSecrets[0].name.replace('registry-', ''), 10);\n }\n res.CreationDate = data.metadata.creationTimestamp;\n res.Env = _.without(_.flatMap(_.map(containers, 'env')), undefined);\n res.Pods = data.spec.selector ? KubernetesApplicationHelper.associatePodsAndApplication(pods, data.spec.selector) : [data];\n\n const limits = {\n Cpu: 0,\n Memory: 0,\n };\n res.Limits = _.reduce(\n containers,\n (acc, item) => {\n if (item.resources.limits && item.resources.limits.cpu) {\n acc.Cpu += KubernetesResourceReservationHelper.parseCPU(item.resources.limits.cpu);\n }\n if (item.resources.limits && item.resources.limits.memory) {\n acc.Memory += filesizeParser(item.resources.limits.memory, { base: 10 });\n }\n return acc;\n },\n limits\n );\n\n const requests = {\n Cpu: 0,\n Memory: 0,\n };\n res.Requests = _.reduce(\n containers,\n (acc, item) => {\n if (item.resources.requests && item.resources.requests.cpu) {\n acc.Cpu += KubernetesResourceReservationHelper.parseCPU(item.resources.requests.cpu);\n }\n if (item.resources.requests && item.resources.requests.memory) {\n acc.Memory += filesizeParser(item.resources.requests.memory, { base: 10 });\n }\n return acc;\n },\n requests\n );\n\n if (service) {\n const serviceType = service.spec.type;\n res.ServiceType = serviceType;\n res.ServiceId = service.metadata.uid;\n res.ServiceName = service.metadata.name;\n res.ClusterIp = service.spec.clusterIP;\n res.ExternalIp = service.spec.externalIP;\n\n if (serviceType === KubernetesServiceTypes.LOAD_BALANCER) {\n if (service.status.loadBalancer.ingress && service.status.loadBalancer.ingress.length > 0) {\n res.LoadBalancerIPAddress = service.status.loadBalancer.ingress[0].ip || service.status.loadBalancer.ingress[0].hostname;\n }\n }\n\n const portsRefs = _.concat(..._.map(containers, (container) => container.ports));\n const ports = _apiPortsToPublishedPorts(service.spec.ports, portsRefs);\n const rules = KubernetesIngressHelper.findSBoundServiceIngressesRules(ingresses, service.metadata.name);\n _.forEach(ports, (port) => (port.IngressRules = _.filter(rules, (rule) => rule.Port === port.Port)));\n res.PublishedPorts = ports;\n }\n\n if (data.spec.template) {\n res.Volumes = data.spec.template.spec.volumes ? data.spec.template.spec.volumes : [];\n } else {\n res.Volumes = data.spec.volumes;\n }\n\n // TODO: review\n // this if() fixs direct use of PVC reference inside spec.template.spec.containers[0].volumeMounts\n // instead of referencing the PVC the \"good way\" using spec.template.spec.volumes array\n // Basically it creates an \"in-memory\" reference for the PVC, as if it was saved in\n // spec.template.spec.volumes and retrieved from here.\n //\n // FIX FOR SFS ONLY ; as far as we know it's not possible to do this with DEPLOYMENTS/DAEMONSETS\n //\n // This may lead to destructing behaviours when we will allow external apps to be edited.\n // E.G. if we try to generate the formValues and patch the app, SFS reference will be created under\n // spec.template.spec.volumes and not be referenced directly inside spec.template.spec.containers[0].volumeMounts\n // As we preserve original SFS name and try to build around it, it SHOULD be fine, but we definitely need to test this\n // before allowing external apps modification\n if (data.spec.volumeClaimTemplates) {\n const vcTemplates = _.map(data.spec.volumeClaimTemplates, (vc) => {\n return {\n name: vc.metadata.name,\n persistentVolumeClaim: { claimName: vc.metadata.name },\n };\n });\n const inexistingPVC = _.filter(vcTemplates, (vc) => {\n return !_.find(res.Volumes, { persistentVolumeClaim: { claimName: vc.persistentVolumeClaim.claimName } });\n });\n res.Volumes = _.concat(res.Volumes, inexistingPVC);\n }\n\n const persistedFolders = _.filter(res.Volumes, (volume) => volume.persistentVolumeClaim || volume.hostPath);\n\n res.PersistedFolders = _.map(persistedFolders, (volume) => {\n const volumeMounts = _.uniq(_.flatMap(_.map(containers, 'volumeMounts')), 'name');\n const matchingVolumeMount = _.find(volumeMounts, { name: volume.name });\n\n if (matchingVolumeMount) {\n const persistedFolder = new KubernetesApplicationPersistedFolder();\n persistedFolder.MountPath = matchingVolumeMount.mountPath;\n\n if (volume.persistentVolumeClaim) {\n persistedFolder.PersistentVolumeClaimName = volume.persistentVolumeClaim.claimName;\n } else {\n persistedFolder.HostPath = volume.hostPath.path;\n }\n\n return persistedFolder;\n }\n });\n\n res.PersistedFolders = _.without(res.PersistedFolders, undefined);\n\n res.ConfigurationVolumes = _.reduce(\n res.Volumes,\n (acc, volume) => {\n if (volume.configMap || volume.secret) {\n const matchingVolumeMount = _.find(_.flatMap(_.map(containers, 'volumeMounts')), { name: volume.name });\n\n if (matchingVolumeMount) {\n let items = [];\n let configurationName = '';\n\n if (volume.configMap) {\n items = volume.configMap.items;\n configurationName = volume.configMap.name;\n } else {\n items = volume.secret.items;\n configurationName = volume.secret.secretName;\n }\n\n if (!items) {\n const configurationVolume = new KubernetesApplicationConfigurationVolume();\n configurationVolume.fileMountPath = matchingVolumeMount.mountPath;\n configurationVolume.rootMountPath = matchingVolumeMount.mountPath;\n configurationVolume.configurationName = configurationName;\n\n acc.push(configurationVolume);\n } else {\n _.forEach(items, (item) => {\n const configurationVolume = new KubernetesApplicationConfigurationVolume();\n configurationVolume.fileMountPath = matchingVolumeMount.mountPath + '/' + item.path;\n configurationVolume.rootMountPath = matchingVolumeMount.mountPath;\n configurationVolume.configurationKey = item.key;\n configurationVolume.configurationName = configurationName;\n\n acc.push(configurationVolume);\n });\n }\n }\n }\n\n return acc;\n },\n []\n );\n }\n\n static apiPodToApplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.POD;\n return res;\n }\n\n static apiDeploymentToApplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.DEPLOYMENT;\n res.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;\n res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.SHARED;\n res.RunningPodsCount = data.status.availableReplicas || data.status.replicas - data.status.unavailableReplicas || 0;\n res.TotalPodsCount = data.spec.replicas;\n return res;\n }\n\n static apiDaemonSetToApplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.DAEMONSET;\n res.DeploymentType = KubernetesApplicationDeploymentTypes.GLOBAL;\n res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.SHARED;\n res.RunningPodsCount = data.status.numberAvailable || data.status.desiredNumberScheduled - data.status.numberUnavailable || 0;\n res.TotalPodsCount = data.status.desiredNumberScheduled;\n return res;\n }\n\n static apiStatefulSetToapplication(data, pods, service, ingresses) {\n const res = new KubernetesApplication();\n KubernetesApplicationConverter.applicationCommon(res, data, pods, service, ingresses);\n res.ApplicationType = KubernetesApplicationTypes.STATEFULSET;\n res.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;\n res.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.ISOLATED;\n res.RunningPodsCount = data.status.readyReplicas || 0;\n res.TotalPodsCount = data.spec.replicas;\n res.HeadlessServiceName = data.spec.serviceName;\n return res;\n }\n\n static applicationToFormValues(app, resourcePools, configurations, persistentVolumeClaims, nodesLabels, ingresses) {\n const res = new KubernetesApplicationFormValues();\n res.ApplicationType = app.ApplicationType;\n res.ResourcePool = _.find(resourcePools, ['Namespace.Name', app.ResourcePool]);\n res.Name = app.Name;\n res.Services = KubernetesApplicationHelper.generateServicesFormValuesFromServices(app);\n res.Selector = KubernetesApplicationHelper.generateSelectorFromService(app);\n res.StackName = app.StackName;\n res.ApplicationOwner = app.ApplicationOwner;\n res.ImageModel.Image = app.Image;\n res.ImageModel.Registry.Id = app.RegistryId;\n res.ReplicaCount = app.TotalPodsCount;\n res.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(app.Limits.Memory);\n res.CpuLimit = app.Limits.Cpu;\n res.DeploymentType = app.DeploymentType;\n res.DataAccessPolicy = app.DataAccessPolicy;\n res.EnvironmentVariables = KubernetesApplicationHelper.generateEnvVariablesFromEnv(app.Env);\n res.PersistedFolders = KubernetesApplicationHelper.generatePersistedFoldersFormValuesFromPersistedFolders(app.PersistedFolders, persistentVolumeClaims); // generate from PVC and app.PersistedFolders\n res.Configurations = KubernetesApplicationHelper.generateConfigurationFormValuesFromEnvAndVolumes(app.Env, app.ConfigurationVolumes, configurations);\n res.AutoScaler = KubernetesApplicationHelper.generateAutoScalerFormValueFromHorizontalPodAutoScaler(app.AutoScaler, res.ReplicaCount);\n res.PublishedPorts = KubernetesApplicationHelper.generatePublishedPortsFormValuesFromPublishedPorts(app.ServiceType, app.PublishedPorts, ingresses);\n res.Containers = app.Containers;\n\n const isIngress = _.filter(res.PublishedPorts, (p) => p.IngressName).length;\n if (app.ServiceType === KubernetesServiceTypes.LOAD_BALANCER) {\n res.PublishingType = KubernetesApplicationPublishingTypes.LOAD_BALANCER;\n } else if (app.ServiceType === KubernetesServiceTypes.NODE_PORT) {\n res.PublishingType = KubernetesApplicationPublishingTypes.NODE_PORT;\n } else if (app.ServiceType === KubernetesServiceTypes.CLUSTER_IP && isIngress) {\n res.PublishingType = KubernetesApplicationPublishingTypes.INGRESS;\n } else {\n res.PublishingType = KubernetesApplicationPublishingTypes.CLUSTER_IP;\n }\n\n if (app.Pods && app.Pods.length) {\n KubernetesApplicationHelper.generatePlacementsFormValuesFromAffinity(res, app.Pods[0].Affinity, nodesLabels);\n }\n\n return res;\n }\n\n static applicationFormValuesToApplication(formValues) {\n formValues.ApplicationOwner = KubernetesCommonHelper.ownerToLabel(formValues.ApplicationOwner);\n\n const claims = KubernetesPersistentVolumeClaimConverter.applicationFormValuesToVolumeClaims(formValues);\n const rwx = KubernetesApplicationHelper.hasRWX(claims);\n\n const deployment =\n (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED &&\n (claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.SHARED))) ||\n formValues.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT;\n\n const statefulSet =\n (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED &&\n claims.length > 0 &&\n formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.ISOLATED) ||\n formValues.ApplicationType === KubernetesApplicationTypes.STATEFULSET;\n\n const daemonSet =\n (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.GLOBAL &&\n (claims.length === 0 || (claims.length > 0 && formValues.DataAccessPolicy === KubernetesApplicationDataAccessPolicies.SHARED && rwx))) ||\n formValues.ApplicationType === KubernetesApplicationTypes.DAEMONSET;\n\n let app;\n if (deployment) {\n app = KubernetesDeploymentConverter.applicationFormValuesToDeployment(formValues, claims);\n } else if (statefulSet) {\n app = KubernetesStatefulSetConverter.applicationFormValuesToStatefulSet(formValues, claims);\n } else if (daemonSet) {\n app = KubernetesDaemonSetConverter.applicationFormValuesToDaemonSet(formValues, claims);\n } else {\n throw new PortainerError('Unable to determine which association to use to convert form');\n }\n\n let headlessService;\n if (statefulSet) {\n headlessService = KubernetesServiceConverter.applicationFormValuesToHeadlessService(formValues);\n }\n\n let service = KubernetesServiceConverter.applicationFormValuesToService(formValues);\n if (!service.Ports.length) {\n service = undefined;\n }\n\n let services = KubernetesServiceConverter.applicationFormValuesToServices(formValues);\n\n return [app, headlessService, services, service, claims];\n }\n}\n\nexport default KubernetesApplicationConverter;\n","import _ from 'lodash-es';\nimport { KubernetesConfigMap, KubernetesPortainerAccessConfigMap } from 'Kubernetes/models/config-map/models';\nimport { KubernetesConfigMapCreatePayload, KubernetesConfigMapUpdatePayload } from 'Kubernetes/models/config-map/payloads';\nimport { KubernetesPortainerConfigurationOwnerLabel } from 'Kubernetes/models/configuration/models';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesConfigMapConverter {\n static apiToPortainerAccessConfigMap(data) {\n const res = new KubernetesPortainerAccessConfigMap();\n res.Id = data.metadata.uid;\n res.Data = data.data;\n return res;\n }\n\n static createAccessPayload(data) {\n const res = new KubernetesConfigMapCreatePayload();\n _.unset(res, 'binaryData');\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n res.data = data.Data;\n return res;\n }\n\n static updateAccessPayload(data) {\n const res = KubernetesConfigMapConverter.createAccessPayload(data);\n res.metadata.uid = data.Id;\n return res;\n }\n\n /**\n * API ConfigMap to front ConfigMap\n */\n static apiToConfigMap(data, yaml) {\n const res = new KubernetesConfigMap();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.ConfigurationOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] : '';\n res.CreationDate = data.metadata.creationTimestamp;\n res.Yaml = yaml ? yaml.data : '';\n\n res.Data = _.concat(\n _.map(data.data, (value, key) => {\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.Value = value;\n return entry;\n }),\n _.map(data.binaryData, (value, key) => {\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.Value = value;\n entry.IsBinary = true;\n return entry;\n })\n );\n\n return res;\n }\n\n /**\n * Generate a default ConfigMap Model\n * with ID = 0 (showing it's a default)\n * but setting his Namespace and Name\n */\n static defaultConfigMap(namespace, name) {\n const res = new KubernetesConfigMap();\n res.Name = name;\n res.Namespace = namespace;\n return res;\n }\n\n /**\n * CREATE payload\n */\n static createPayload(data) {\n const res = new KubernetesConfigMapCreatePayload();\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n const configurationOwner = _.truncate(data.ConfigurationOwner, { length: 63, omission: '' });\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = configurationOwner;\n\n _.forEach(data.Data, (entry) => {\n if (entry.IsBinary) {\n res.binaryData[entry.Key] = entry.Value;\n } else {\n res.data[entry.Key] = entry.Value;\n }\n });\n\n return res;\n }\n\n /**\n * UPDATE payload\n */\n static updatePayload(data) {\n const res = new KubernetesConfigMapUpdatePayload();\n res.metadata.uid = data.Id;\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = data.ConfigurationOwner;\n _.forEach(data.Data, (entry) => {\n if (entry.IsBinary) {\n res.binaryData[entry.Key] = entry.Value;\n } else {\n res.data[entry.Key] = entry.Value;\n }\n });\n return res;\n }\n\n static configurationFormValuesToConfigMap(formValues) {\n const res = new KubernetesConfigMap();\n res.Id = formValues.Id;\n res.Name = formValues.Name;\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.ConfigurationOwner = formValues.ConfigurationOwner;\n res.Data = formValues.Data;\n return res;\n }\n}\n\nexport default KubernetesConfigMapConverter;\n","import _ from 'lodash-es';\nimport { KubernetesConfiguration, KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nclass KubernetesConfigurationConverter {\n static secretToConfiguration(secret) {\n const res = new KubernetesConfiguration();\n res.Type = KubernetesConfigurationTypes.SECRET;\n res.Id = secret.Id;\n res.Name = secret.Name;\n res.Namespace = secret.Namespace;\n res.CreationDate = secret.CreationDate;\n res.Yaml = secret.Yaml;\n _.forEach(secret.Data, (entry) => {\n res.Data[entry.Key] = entry.Value;\n });\n res.ConfigurationOwner = secret.ConfigurationOwner;\n res.IsRegistrySecret = secret.IsRegistrySecret;\n return res;\n }\n\n static configMapToConfiguration(configMap) {\n const res = new KubernetesConfiguration();\n res.Type = KubernetesConfigurationTypes.CONFIGMAP;\n res.Id = configMap.Id;\n res.Name = configMap.Name;\n res.Namespace = configMap.Namespace;\n res.CreationDate = configMap.CreationDate;\n res.Yaml = configMap.Yaml;\n _.forEach(configMap.Data, (entry) => {\n res.Data[entry.Key] = entry.Value;\n });\n res.ConfigurationOwner = configMap.ConfigurationOwner;\n return res;\n }\n}\n\nexport default KubernetesConfigurationConverter;\n","import * as JsonPatch from 'fast-json-patch';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\nimport { KubernetesDaemonSetCreatePayload } from 'Kubernetes/models/daemon-set/payloads';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationNote,\n KubernetesPortainerApplicationOwnerLabel,\n} from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport { buildImageFullURI } from 'Docker/helpers/imageHelper';\n\nclass KubernetesDaemonSetConverter {\n /**\n * Generate KubernetesDaemonSet from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToDaemonSet(formValues, volumeClaims) {\n const res = new KubernetesDaemonSet();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n res.ImageModel = formValues.ImageModel;\n res.CpuLimit = formValues.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);\n KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);\n KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.Configurations);\n KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);\n return res;\n }\n\n /**\n * Generate CREATE payload from DaemonSet\n * @param {KubernetesDaemonSetPayload} model DaemonSet to generate payload from\n */\n static createPayload(daemonSet) {\n const payload = new KubernetesDaemonSetCreatePayload();\n payload.metadata.name = daemonSet.Name;\n payload.metadata.namespace = daemonSet.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = daemonSet.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = daemonSet.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = daemonSet.ApplicationOwner;\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = daemonSet.Note;\n payload.spec.replicas = daemonSet.ReplicaCount;\n payload.spec.selector.matchLabels.app = daemonSet.Name;\n payload.spec.template.metadata.labels.app = daemonSet.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = daemonSet.ApplicationName;\n payload.spec.template.spec.containers[0].name = daemonSet.Name;\n payload.spec.template.spec.containers[0].image = buildImageFullURI(daemonSet.ImageModel);\n if (daemonSet.ImageModel.Registry && daemonSet.ImageModel.Registry.Authentication) {\n payload.spec.template.spec.imagePullSecrets = [{ name: `registry-${daemonSet.ImageModel.Registry.Id}` }];\n }\n payload.spec.template.spec.affinity = daemonSet.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', daemonSet.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', daemonSet.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', daemonSet.Volumes);\n if (daemonSet.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = daemonSet.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = daemonSet.MemoryLimit;\n }\n if (daemonSet.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = daemonSet.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = daemonSet.CpuLimit;\n }\n if (!daemonSet.CpuLimit && !daemonSet.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n }\n\n static patchPayload(oldDaemonSet, newDaemonSet) {\n const oldPayload = KubernetesDaemonSetConverter.createPayload(oldDaemonSet);\n const newPayload = KubernetesDaemonSetConverter.createPayload(newDaemonSet);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesDaemonSetConverter;\n","import * as JsonPatch from 'fast-json-patch';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesDeploymentCreatePayload } from 'Kubernetes/models/deployment/payloads';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationNote,\n} from 'Kubernetes/models/application/models';\n\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport { buildImageFullURI } from 'Docker/helpers/imageHelper';\n\nclass KubernetesDeploymentConverter {\n /**\n * Generate KubernetesDeployment from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToDeployment(formValues, volumeClaims) {\n const res = new KubernetesDeployment();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n res.ReplicaCount = formValues.ReplicaCount;\n res.ImageModel = formValues.ImageModel;\n res.CpuLimit = formValues.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);\n res.Containers = formValues.Containers;\n KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);\n KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.Configurations);\n KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);\n return res;\n }\n\n /**\n * Generate CREATE payload from Deployment\n * @param {KubernetesDeploymentPayload} model Deployment to genereate payload from\n */\n static createPayload(deployment) {\n const payload = new KubernetesDeploymentCreatePayload();\n payload.metadata.name = deployment.Name;\n payload.metadata.namespace = deployment.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = deployment.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = deployment.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = deployment.ApplicationOwner;\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = deployment.Note;\n payload.spec.replicas = deployment.ReplicaCount;\n payload.spec.selector.matchLabels.app = deployment.Name;\n payload.spec.template.metadata.labels.app = deployment.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = deployment.ApplicationName;\n payload.spec.template.spec.containers[0].name = deployment.Name;\n\n if (deployment.ImageModel) {\n payload.spec.template.spec.containers[0].image = buildImageFullURI(deployment.ImageModel);\n\n if (deployment.ImageModel.Registry && deployment.ImageModel.Registry.Authentication) {\n payload.spec.template.spec.imagePullSecrets = [{ name: `registry-${deployment.ImageModel.Registry.Id}` }];\n }\n }\n\n payload.spec.template.spec.affinity = deployment.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', deployment.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', deployment.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', deployment.Volumes);\n if (deployment.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = deployment.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = deployment.MemoryLimit;\n }\n if (deployment.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = deployment.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = deployment.CpuLimit;\n }\n if (!deployment.CpuLimit && !deployment.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n }\n\n static patchPayload(oldDeployment, newDeployment) {\n const oldPayload = KubernetesDeploymentConverter.createPayload(oldDeployment);\n const newPayload = KubernetesDeploymentConverter.createPayload(newDeployment);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesDeploymentConverter;\n","import { KubernetesEvent } from 'Kubernetes/models/event/models';\n\nclass KubernetesEventConverter {\n static apiToEvent(data) {\n const res = new KubernetesEvent();\n res.Id = data.metadata.uid;\n res.Date = data.lastTimestamp || data.eventTime;\n res.Type = data.type;\n res.Message = data.message;\n res.Involved = data.involvedObject;\n return res;\n }\n}\n\nexport default KubernetesEventConverter;\n","import _ from 'lodash-es';\nimport { KubernetesNamespace } from 'Kubernetes/models/namespace/models';\nimport { KubernetesNamespaceCreatePayload } from 'Kubernetes/models/namespace/payloads';\nimport {\n KubernetesPortainerResourcePoolNameLabel,\n KubernetesPortainerResourcePoolOwnerLabel,\n KubernetesPortainerNamespaceSystemLabel,\n} from 'Kubernetes/models/resource-pool/models';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nexport default class KubernetesNamespaceConverter {\n static apiToNamespace(data, yaml) {\n const res = new KubernetesNamespace();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.CreationDate = data.metadata.creationTimestamp;\n res.Status = data.status.phase;\n res.Yaml = yaml ? yaml.data : '';\n res.ResourcePoolName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolNameLabel] : '';\n res.ResourcePoolOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] : '';\n\n res.IsSystem = KubernetesNamespaceHelper.isDefaultSystemNamespace(data.metadata.name);\n if (data.metadata.labels) {\n const systemLabel = data.metadata.labels[KubernetesPortainerNamespaceSystemLabel];\n if (!_.isEmpty(systemLabel)) {\n res.IsSystem = systemLabel === 'true';\n }\n }\n return res;\n }\n\n static createPayload(namespace) {\n const res = new KubernetesNamespaceCreatePayload();\n res.metadata.name = namespace.Name;\n res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = namespace.ResourcePoolName;\n\n if (namespace.ResourcePoolOwner) {\n const resourcePoolOwner = _.truncate(namespace.ResourcePoolOwner, { length: 63, omission: '' });\n res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = resourcePoolOwner;\n }\n return res;\n }\n}\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesPersistentVolumeClaim } from 'Kubernetes/models/volume/models';\nimport { KubernetesPersistentVolumClaimCreatePayload } from 'Kubernetes/models/volume/payloads';\nimport { KubernetesPortainerApplicationOwnerLabel, KubernetesPortainerApplicationNameLabel } from 'Kubernetes/models/application/models';\n\nclass KubernetesPersistentVolumeClaimConverter {\n static apiToPersistentVolumeClaim(data, storageClasses, yaml) {\n const res = new KubernetesPersistentVolumeClaim();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.CreationDate = data.metadata.creationTimestamp;\n res.Storage = `${data.spec.resources.requests.storage}B`;\n res.StorageClass = _.find(storageClasses, { Name: data.spec.storageClassName });\n res.Yaml = yaml ? yaml.data : '';\n res.ApplicationOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationOwnerLabel] : '';\n res.ApplicationName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerApplicationNameLabel] : '';\n return res;\n }\n\n /**\n * Generate KubernetesPersistentVolumeClaim list from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToVolumeClaims(formValues) {\n _.remove(formValues.PersistedFolders, (item) => item.NeedsDeletion);\n const res = _.map(formValues.PersistedFolders, (item) => {\n const pvc = new KubernetesPersistentVolumeClaim();\n if (!_.isEmpty(item.ExistingVolume)) {\n const existantPVC = item.ExistingVolume.PersistentVolumeClaim;\n pvc.Name = existantPVC.Name;\n if (item.PersistentVolumeClaimName) {\n pvc.PreviousName = item.PersistentVolumeClaimName;\n }\n pvc.StorageClass = existantPVC.StorageClass;\n pvc.Storage = existantPVC.Storage.charAt(0);\n pvc.CreationDate = existantPVC.CreationDate;\n pvc.Id = existantPVC.Id;\n } else {\n if (item.PersistentVolumeClaimName) {\n pvc.Name = item.PersistentVolumeClaimName;\n pvc.PreviousName = item.PersistentVolumeClaimName;\n } else {\n pvc.Name = formValues.Name + '-' + pvc.Name;\n }\n pvc.Storage = '' + item.Size + item.SizeUnit.charAt(0);\n pvc.StorageClass = item.StorageClass;\n }\n pvc.MountPath = item.ContainerPath;\n pvc.Namespace = formValues.ResourcePool.Namespace.Name;\n pvc.ApplicationOwner = formValues.ApplicationOwner;\n pvc.ApplicationName = formValues.Name;\n return pvc;\n });\n return res;\n }\n\n static createPayload(pvc) {\n const res = new KubernetesPersistentVolumClaimCreatePayload();\n res.metadata.name = pvc.Name;\n res.metadata.namespace = pvc.Namespace;\n res.spec.resources.requests.storage = pvc.Storage;\n res.spec.storageClassName = pvc.StorageClass ? pvc.StorageClass.Name : '';\n res.metadata.labels.app = pvc.ApplicationName;\n res.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = pvc.ApplicationOwner;\n res.metadata.labels[KubernetesPortainerApplicationNameLabel] = pvc.ApplicationName;\n return res;\n }\n\n static patchPayload(oldPVC, newPVC) {\n const oldPayload = KubernetesPersistentVolumeClaimConverter.createPayload(oldPVC);\n const newPayload = KubernetesPersistentVolumeClaimConverter.createPayload(newPVC);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesPersistentVolumeClaimConverter;\n","import _ from 'lodash-es';\n\nimport { KubernetesResourcePool } from 'Kubernetes/models/resource-pool/models';\nimport { KubernetesNamespace } from 'Kubernetes/models/namespace/models';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesResourceQuotaConverter from './resourceQuota';\n\nclass KubernetesResourcePoolConverter {\n static apiToResourcePool(namespace) {\n const res = new KubernetesResourcePool();\n res.Namespace = namespace;\n res.Yaml = namespace.Yaml;\n return res;\n }\n\n static formValuesToResourcePool(formValues) {\n const namespace = new KubernetesNamespace();\n namespace.Name = formValues.Name;\n namespace.ResourcePoolName = formValues.Name;\n namespace.ResourcePoolOwner = formValues.Owner;\n namespace.IsSystem = formValues.IsSystem;\n\n const quota = KubernetesResourceQuotaConverter.resourcePoolFormValuesToResourceQuota(formValues);\n\n const ingMap = _.map(formValues.IngressClasses, (c) => {\n if (c.Selected) {\n c.Namespace = namespace.Name;\n return KubernetesIngressConverter.resourcePoolIngressClassFormValueToIngress(c);\n }\n });\n const ingresses = _.without(ingMap, undefined);\n const registries = _.map(formValues.Registries, (r) => {\n if (!r.RegistryAccesses[formValues.EndpointId]) {\n r.RegistryAccesses[formValues.EndpointId] = { Namespaces: [] };\n }\n if (!_.includes(r.RegistryAccesses[formValues.EndpointId].Namespaces, formValues.Name)) {\n r.RegistryAccesses[formValues.EndpointId].Namespaces = [...r.RegistryAccesses[formValues.EndpointId].Namespaces, formValues.Name];\n }\n return r;\n });\n return [namespace, quota, ingresses, registries];\n }\n}\n\nexport default KubernetesResourcePoolConverter;\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\nimport filesizeParser from 'filesize-parser';\n\nimport {\n KubernetesResourceQuota,\n KubernetesPortainerResourceQuotaCPULimit,\n KubernetesPortainerResourceQuotaMemoryLimit,\n KubernetesPortainerResourceQuotaCPURequest,\n KubernetesPortainerResourceQuotaMemoryRequest,\n KubernetesPortainerResourceQuotaLoadbalancers,\n KubernetesPortainerResourceQuotaStorageSuffix,\n KubernetesResourceQuotaDefaults,\n} from 'Kubernetes/models/resource-quota/models';\nimport { KubernetesResourceQuotaCreatePayload } from 'Kubernetes/models/resource-quota/payloads';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\nimport { KubernetesPortainerResourcePoolNameLabel, KubernetesPortainerResourcePoolOwnerLabel } from 'Kubernetes/models/resource-pool/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport { KubernetesResourcePoolStorageClassFormValue, KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';\n\nclass KubernetesResourceQuotaConverter {\n static apiToResourceQuota(data, yaml) {\n const res = new KubernetesResourceQuota();\n res.Id = data.metadata.uid;\n res.Namespace = data.metadata.namespace;\n res.Name = data.metadata.name;\n res.CpuLimit = 0;\n res.MemoryLimit = 0;\n if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]) {\n res.CpuLimit = KubernetesResourceReservationHelper.parseCPU(data.spec.hard[KubernetesPortainerResourceQuotaCPULimit]);\n }\n if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit]) {\n res.MemoryLimit = filesizeParser(data.spec.hard[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });\n }\n\n res.MemoryLimitUsed = 0;\n if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaMemoryLimit]) {\n res.MemoryLimitUsed = filesizeParser(data.status.used[KubernetesPortainerResourceQuotaMemoryLimit], { base: 10 });\n }\n\n res.CpuLimitUsed = 0;\n if (data.status.used && data.status.used[KubernetesPortainerResourceQuotaCPULimit]) {\n res.CpuLimitUsed = KubernetesResourceReservationHelper.parseCPU(data.status.used[KubernetesPortainerResourceQuotaCPULimit]);\n }\n\n res.LoadBalancers = null;\n if (data.spec.hard && data.spec.hard[KubernetesPortainerResourceQuotaLoadbalancers]) {\n res.LoadBalancers = parseInt(data.spec.hard[KubernetesPortainerResourceQuotaLoadbalancers], 10);\n }\n\n res.Yaml = yaml ? yaml.data : '';\n res.ResourcePoolName = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolNameLabel] : '';\n res.ResourcePoolOwner = data.metadata.labels ? data.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] : '';\n if (data.spec.hard) {\n const keys = _.filter(_.keys(data.spec.hard), (k) => _.endsWith(k, KubernetesPortainerResourceQuotaStorageSuffix));\n res.StorageRequests = _.map(keys, (k) => {\n const spec = data.spec.hard[k];\n const sr = new KubernetesResourcePoolStorageClassFormValue();\n sr.Name = _.replace(k, KubernetesPortainerResourceQuotaStorageSuffix, '');\n sr.Size = parseInt(spec, 10);\n sr.SizeUnit = sr.Size === 0 ? 'GB' : `${spec.slice(-1)}B`;\n sr.Selected = true;\n return sr;\n });\n }\n return res;\n }\n\n static createPayload(quota) {\n const res = new KubernetesResourceQuotaCreatePayload();\n res.metadata.name = KubernetesResourceQuotaHelper.generateResourceQuotaName(quota.Namespace);\n res.metadata.namespace = quota.Namespace;\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPURequest}']`, quota.CpuLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryRequest}']`, quota.MemoryLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaCPULimit}']`, quota.CpuLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmptyOrZero(res, `spec.hard['${KubernetesPortainerResourceQuotaMemoryLimit}']`, quota.MemoryLimit);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(res, `spec.hard['${KubernetesPortainerResourceQuotaLoadbalancers}']`, quota.LoadBalancers);\n if (quota.StorageRequests) {\n _.forEach(quota.StorageRequests, (sr) => {\n const key = KubernetesResourceQuotaHelper.generateResourceQuotaStorageKey(sr.Name);\n const value = `${sr.Size}${sr.SizeUnit.charAt(0)}`;\n res.spec.hard[key] = value;\n });\n }\n res.metadata.labels[KubernetesPortainerResourcePoolNameLabel] = quota.ResourcePoolName;\n if (quota.ResourcePoolOwner) {\n res.metadata.labels[KubernetesPortainerResourcePoolOwnerLabel] = quota.ResourcePoolOwner;\n }\n return res;\n }\n\n static updatePayload(quota) {\n const res = KubernetesResourceQuotaConverter.createPayload(quota);\n res.metadata.uid = quota.Id;\n return res;\n }\n\n static patchPayload(oldQuota, newQuota) {\n const oldPayload = KubernetesResourceQuotaConverter.createPayload(oldQuota);\n const newPayload = KubernetesResourceQuotaConverter.createPayload(newQuota);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n\n static quotaToResourcePoolFormValues(quota) {\n const res = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);\n res.Name = quota.Namespace;\n res.CpuLimit = quota.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimit);\n if (quota.LoadBalancers !== null) {\n res.LoadBalancers = quota.LoadBalancers;\n res.UseLoadBalancersQuota = true;\n }\n if (res.CpuLimit || res.MemoryLimit) {\n res.HasQuota = true;\n }\n res.StorageClasses = quota.StorageRequests;\n return res;\n }\n\n static resourcePoolFormValuesToResourceQuota(formValues) {\n const storages = _.filter(formValues.StorageClasses, { Selected: true });\n if (formValues.HasQuota || formValues.UseLoadBalancersQuota || storages.length) {\n const quota = new KubernetesResourceQuota(formValues.Name);\n if (formValues.HasQuota) {\n quota.CpuLimit = formValues.CpuLimit;\n quota.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n }\n quota.LoadBalancers = null;\n if (formValues.UseLoadBalancersQuota) {\n quota.LoadBalancers = formValues.LoadBalancers;\n }\n if (storages.length) {\n quota.StorageRequests = storages;\n }\n quota.ResourcePoolName = formValues.Name;\n quota.ResourcePoolOwner = formValues.Owner;\n return quota;\n }\n }\n}\n\nexport default KubernetesResourceQuotaConverter;\n","import _ from 'lodash-es';\nimport { KubernetesSecretCreatePayload, KubernetesSecretUpdatePayload } from 'Kubernetes/models/secret/payloads';\nimport { KubernetesApplicationSecret } from 'Kubernetes/models/secret/models';\nimport { KubernetesPortainerConfigurationDataAnnotation } from 'Kubernetes/models/configuration/models';\nimport { KubernetesPortainerConfigurationOwnerLabel } from 'Kubernetes/models/configuration/models';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesSecretConverter {\n static createPayload(secret) {\n const res = new KubernetesSecretCreatePayload();\n res.metadata.name = secret.Name;\n res.metadata.namespace = secret.Namespace;\n const configurationOwner = _.truncate(secret.ConfigurationOwner, { length: 63, omission: '' });\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = configurationOwner;\n\n let annotation = '';\n _.forEach(secret.Data, (entry) => {\n if (entry.IsBinary) {\n res.data[entry.Key] = entry.Value;\n annotation += annotation !== '' ? '|' + entry.Key : entry.Key;\n } else {\n res.stringData[entry.Key] = entry.Value;\n }\n });\n if (annotation !== '') {\n res.metadata.annotations[KubernetesPortainerConfigurationDataAnnotation] = annotation;\n }\n return res;\n }\n\n static updatePayload(secret) {\n const res = new KubernetesSecretUpdatePayload();\n res.metadata.name = secret.Name;\n res.metadata.namespace = secret.Namespace;\n res.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] = secret.ConfigurationOwner;\n\n let annotation = '';\n _.forEach(secret.Data, (entry) => {\n if (entry.IsBinary) {\n res.data[entry.Key] = entry.Value;\n annotation += annotation !== '' ? '|' + entry.Key : entry.Key;\n } else {\n res.stringData[entry.Key] = entry.Value;\n }\n });\n if (annotation !== '') {\n res.metadata.annotations[KubernetesPortainerConfigurationDataAnnotation] = annotation;\n }\n return res;\n }\n\n static apiToSecret(payload, yaml) {\n const res = new KubernetesApplicationSecret();\n res.Id = payload.metadata.uid;\n res.Name = payload.metadata.name;\n res.Namespace = payload.metadata.namespace;\n res.ConfigurationOwner = payload.metadata.labels ? payload.metadata.labels[KubernetesPortainerConfigurationOwnerLabel] : '';\n res.CreationDate = payload.metadata.creationTimestamp;\n\n res.IsRegistrySecret = payload.metadata.annotations && !!payload.metadata.annotations['portainer.io/registry.id'];\n\n res.Yaml = yaml ? yaml.data : '';\n\n res.Data = _.map(payload.data, (value, key) => {\n const annotations = payload.metadata.annotations ? payload.metadata.annotations[KubernetesPortainerConfigurationDataAnnotation] : '';\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.IsBinary = _.includes(annotations, entry.Key);\n\n if (!entry.IsBinary) {\n entry.Value = atob(value);\n } else {\n entry.Value = value;\n }\n return entry;\n });\n\n return res;\n }\n\n static configurationFormValuesToSecret(formValues) {\n const res = new KubernetesApplicationSecret();\n res.Name = formValues.Name;\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.ConfigurationOwner = formValues.ConfigurationOwner;\n res.Data = formValues.Data;\n return res;\n }\n}\n\nexport default KubernetesSecretConverter;\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesServiceCreatePayload } from 'Kubernetes/models/service/payloads';\nimport {\n KubernetesApplicationPublishingTypes,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationStackNameLabel,\n} from 'Kubernetes/models/application/models';\nimport { KubernetesService, KubernetesServiceHeadlessClusterIP, KubernetesServicePort, KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport KubernetesServiceHelper from 'Kubernetes/helpers/serviceHelper';\n\nfunction _publishedPortToServicePort(formValues, publishedPort, type) {\n if (publishedPort.IsNew || !publishedPort.NeedsDeletion) {\n const name = formValues.Name;\n const res = new KubernetesServicePort();\n res.name = _.toLower(name + '-' + publishedPort.ContainerPort + '-' + publishedPort.Protocol);\n res.port = type === KubernetesServiceTypes.LOAD_BALANCER ? publishedPort.LoadBalancerPort : publishedPort.ContainerPort;\n res.targetPort = publishedPort.ContainerPort;\n res.protocol = publishedPort.Protocol;\n if (type === KubernetesServiceTypes.NODE_PORT && publishedPort.NodePort) {\n res.nodePort = publishedPort.NodePort;\n } else if (type === KubernetesServiceTypes.LOAD_BALANCER && publishedPort.LoadBalancerNodePort) {\n res.nodePort = publishedPort.LoadBalancerNodePort;\n } else {\n delete res.nodePort;\n }\n return res;\n }\n}\n\nclass KubernetesServiceConverter {\n /**\n * Generate KubernetesService from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToService(formValues) {\n const res = new KubernetesService();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n if (formValues.PublishingType === KubernetesApplicationPublishingTypes.NODE_PORT) {\n res.Type = KubernetesServiceTypes.NODE_PORT;\n } else if (formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n res.Type = KubernetesServiceTypes.LOAD_BALANCER;\n }\n const ports = _.map(formValues.PublishedPorts, (item) => _publishedPortToServicePort(formValues, item, res.Type));\n res.Ports = _.uniqBy(_.without(ports, undefined), (p) => p.targetPort + p.protocol);\n return res;\n }\n\n static applicationFormValuesToServices(formValues) {\n let services = [];\n formValues.Services.forEach(function (service) {\n const res = new KubernetesService();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = service.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n if (service.Type === KubernetesApplicationPublishingTypes.NODE_PORT) {\n res.Type = KubernetesServiceTypes.NODE_PORT;\n } else if (service.Type === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n res.Type = KubernetesServiceTypes.LOAD_BALANCER;\n } else if (service.Type === KubernetesApplicationPublishingTypes.CLUSTER_IP) {\n res.Type = KubernetesServiceTypes.CLUSTER_IP;\n }\n res.Ingress = service.Ingress;\n\n if (service.Selector !== undefined) {\n res.Selector = service.Selector;\n } else {\n res.Selector = {\n app: formValues.Name,\n };\n }\n\n let ports = [];\n service.Ports.forEach(function (port, index) {\n const res = new KubernetesServicePort();\n res.name = 'port-' + index;\n res.port = port.port;\n if (port.nodePort) {\n res.nodePort = port.nodePort;\n }\n res.protocol = port.protocol;\n res.targetPort = port.targetPort;\n res.ingress = port.ingress;\n ports.push(res);\n });\n res.Ports = ports;\n\n services.push(res);\n });\n return services;\n }\n\n static applicationFormValuesToHeadlessService(formValues) {\n const res = KubernetesServiceConverter.applicationFormValuesToService(formValues);\n res.Name = KubernetesServiceHelper.generateHeadlessServiceName(formValues.Name);\n res.Headless = true;\n res.Selector = {\n app: formValues.Name,\n };\n return res;\n }\n\n /**\n * Generate CREATE payload from Service\n * @param {KubernetesService} model Service to genereate payload from\n */\n static createPayload(service) {\n const payload = new KubernetesServiceCreatePayload();\n payload.metadata.name = service.Name;\n payload.metadata.namespace = service.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = service.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = service.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = service.ApplicationOwner;\n\n const ports = [];\n service.Ports.forEach((port) => {\n const p = {};\n p.name = port.name;\n p.port = port.port;\n p.nodePort = port.nodePort;\n p.protocol = port.protocol;\n p.targetPort = port.targetPort;\n ports.push(p);\n });\n payload.spec.ports = ports;\n\n payload.spec.selector = service.Selector;\n if (service.Headless) {\n payload.spec.clusterIP = KubernetesServiceHeadlessClusterIP;\n delete payload.spec.ports;\n } else if (service.Type) {\n payload.spec.type = service.Type;\n }\n return payload;\n }\n\n static patchPayload(oldService, newService) {\n const oldPayload = KubernetesServiceConverter.createPayload(oldService);\n const newPayload = KubernetesServiceConverter.createPayload(newService);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesServiceConverter;\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesStatefulSetCreatePayload } from 'Kubernetes/models/stateful-set/payloads';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationNote,\n} from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport { buildImageFullURI } from 'Docker/helpers/imageHelper';\nimport KubernetesPersistentVolumeClaimConverter from './persistentVolumeClaim';\n\nclass KubernetesStatefulSetConverter {\n /**\n * Generate KubernetesStatefulSet from KubernetesApplicationFormValues\n * @param {KubernetesApplicationFormValues} formValues\n */\n static applicationFormValuesToStatefulSet(formValues, volumeClaims) {\n const res = new KubernetesStatefulSet();\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.Name = formValues.Name;\n res.StackName = formValues.StackName ? formValues.StackName : formValues.Name;\n res.ApplicationOwner = formValues.ApplicationOwner;\n res.ApplicationName = formValues.Name;\n res.ReplicaCount = formValues.ReplicaCount;\n res.ImageModel = formValues.ImageModel;\n res.CpuLimit = formValues.CpuLimit;\n res.MemoryLimit = KubernetesResourceReservationHelper.bytesValue(formValues.MemoryLimit);\n res.Env = KubernetesApplicationHelper.generateEnvFromEnvVariables(formValues.EnvironmentVariables);\n KubernetesApplicationHelper.generateVolumesFromPersistentVolumClaims(res, volumeClaims);\n KubernetesApplicationHelper.generateEnvOrVolumesFromConfigurations(res, formValues.Configurations);\n KubernetesApplicationHelper.generateAffinityFromPlacements(res, formValues);\n return res;\n }\n\n /**\n * Generate CREATE payload from StatefulSet\n * @param {KubernetesStatefulSetPayload} model StatefulSet to genereate payload from\n */\n static createPayload(statefulSet) {\n const payload = new KubernetesStatefulSetCreatePayload();\n payload.metadata.name = statefulSet.Name;\n payload.metadata.namespace = statefulSet.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = statefulSet.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = statefulSet.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = statefulSet.ApplicationOwner;\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = statefulSet.Note;\n payload.spec.replicas = statefulSet.ReplicaCount;\n payload.spec.serviceName = statefulSet.ServiceName;\n payload.spec.selector.matchLabels.app = statefulSet.Name;\n payload.spec.volumeClaimTemplates = _.map(statefulSet.VolumeClaims, (item) => KubernetesPersistentVolumeClaimConverter.createPayload(item));\n payload.spec.template.metadata.labels.app = statefulSet.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = statefulSet.ApplicationName;\n payload.spec.template.spec.containers[0].name = statefulSet.Name;\n if (statefulSet.ImageModel.Image) {\n payload.spec.template.spec.containers[0].image = buildImageFullURI(statefulSet.ImageModel);\n if (statefulSet.ImageModel.Registry && statefulSet.ImageModel.Registry.Authentication) {\n payload.spec.template.spec.imagePullSecrets = [{ name: `registry-${statefulSet.ImageModel.Registry.Id}` }];\n }\n }\n payload.spec.template.spec.affinity = statefulSet.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', statefulSet.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', statefulSet.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', statefulSet.Volumes);\n if (statefulSet.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = statefulSet.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = statefulSet.MemoryLimit;\n }\n if (statefulSet.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = statefulSet.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = statefulSet.CpuLimit;\n }\n if (!statefulSet.CpuLimit && !statefulSet.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n }\n\n static patchPayload(oldSFS, newSFS) {\n const oldPayload = KubernetesStatefulSetConverter.createPayload(oldSFS);\n const newPayload = KubernetesStatefulSetConverter.createPayload(newSFS);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesStatefulSetConverter;\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport { KubernetesStorageClass } from 'Kubernetes/models/storage-class/models';\nimport { KubernetesStorageClassCreatePayload } from 'Kubernetes/models/storage-class/payload';\nimport { KubernetesResourcePoolStorageClassFormValue } from 'Kubernetes/models/resource-pool/formValues';\n\nclass KubernetesStorageClassConverter {\n /**\n * API StorageClass to front StorageClass\n */\n static apiToStorageClass(data) {\n const res = new KubernetesStorageClass();\n res.Name = data.metadata.name;\n res.Provisioner = data.provisioner;\n res.AllowVolumeExpansion = data.allowVolumeExpansion;\n return res;\n }\n\n static storageClassesToResourcePoolFormValues(scs) {\n const res = _.map(scs, (sc) => {\n const fv = new KubernetesResourcePoolStorageClassFormValue();\n fv.Name = sc.Name;\n return fv;\n });\n return res;\n }\n\n static createPayload(storageClass) {\n const res = new KubernetesStorageClassCreatePayload();\n res.metadata.name = storageClass.Name;\n res.provisioner = storageClass.Provisioner;\n res.allowVolumeExpansion = storageClass.AllowVolumeExpansion;\n return res;\n }\n\n static patchPayload(oldStorageClass, newStorageClass) {\n const oldPayload = KubernetesStorageClassConverter.createPayload(oldStorageClass);\n const newPayload = KubernetesStorageClassConverter.createPayload(newStorageClass);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport default KubernetesStorageClassConverter;\n","import { KubernetesVolume } from 'Kubernetes/models/volume/models';\n\nclass KubernetesVolumeConverter {\n static pvcToVolume(claim, pool) {\n const res = new KubernetesVolume();\n res.PersistentVolumeClaim = claim;\n res.ResourcePool = pool;\n return res;\n }\n}\n\nexport default KubernetesVolumeConverter;\n","import angular from 'angular';\n\nimport { kubeCustomTemplatesView } from './kube-custom-templates-view';\nimport { kubeEditCustomTemplateView } from './kube-edit-custom-template-view';\nimport { kubeCreateCustomTemplateView } from './kube-create-custom-template-view';\n\nexport default angular\n .module('portainer.kubernetes.custom-templates', [])\n .config(config)\n .component('kubeCustomTemplatesView', kubeCustomTemplatesView)\n .component('kubeEditCustomTemplateView', kubeEditCustomTemplateView)\n .component('kubeCreateCustomTemplateView', kubeCreateCustomTemplateView).name;\n\nfunction config($stateRegistryProvider) {\n const templates = {\n name: 'kubernetes.templates',\n url: '/templates',\n abstract: true,\n };\n\n const customTemplates = {\n name: 'kubernetes.templates.custom',\n url: '/custom',\n\n views: {\n 'content@': {\n component: 'kubeCustomTemplatesView',\n },\n },\n };\n\n const customTemplatesNew = {\n name: 'kubernetes.templates.custom.new',\n url: '/new?fileContent',\n\n views: {\n 'content@': {\n component: 'kubeCreateCustomTemplateView',\n },\n },\n params: {\n fileContent: '',\n },\n };\n\n const customTemplatesEdit = {\n name: 'kubernetes.templates.custom.edit',\n url: '/:id',\n\n views: {\n 'content@': {\n component: 'kubeEditCustomTemplateView',\n },\n },\n };\n\n $stateRegistryProvider.register(templates);\n $stateRegistryProvider.register(customTemplates);\n $stateRegistryProvider.register(customTemplatesNew);\n $stateRegistryProvider.register(customTemplatesEdit);\n}\n","const autoNgTemplateLoaderTemplate1 = require('./kube-create-custom-template-view.html');\n\nimport controller from './kube-create-custom-template-view.controller.js';\n\nexport const kubeCreateCustomTemplateView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import { buildOption } from '@/portainer/components/BoxSelector';\nimport { AccessControlFormData } from '@/portainer/components/accessControlForm/porAccessControlFormModel';\n\nclass KubeCreateCustomTemplateViewController {\n /* @ngInject */\n constructor($async, $state, Authentication, CustomTemplateService, FormValidator, ModalService, Notifications, ResourceControlService) {\n Object.assign(this, { $async, $state, Authentication, CustomTemplateService, FormValidator, ModalService, Notifications, ResourceControlService });\n\n this.methodOptions = [\n buildOption('method_editor', 'fa fa-edit', 'Web editor', 'Use our Web editor', 'editor'),\n buildOption('method_upload', 'fa fa-upload', 'Upload', 'Upload from your computer', 'upload'),\n ];\n\n this.templates = null;\n\n this.state = {\n method: 'editor',\n actionInProgress: false,\n formValidationError: '',\n isEditorDirty: false,\n };\n\n this.formValues = {\n FileContent: '',\n File: null,\n Title: '',\n Description: '',\n Note: '',\n Logo: '',\n AccessControlData: new AccessControlFormData(),\n };\n\n this.onChangeFile = this.onChangeFile.bind(this);\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n this.onBeforeOnload = this.onBeforeOnload.bind(this);\n }\n\n onChangeMethod(method) {\n this.state.method = method;\n }\n\n onChangeFileContent(content) {\n this.formValues.FileContent = content;\n this.state.isEditorDirty = true;\n }\n\n onChangeFile(file) {\n return this.$async(async () => {\n this.formValues.File = file;\n });\n }\n\n async createCustomTemplate() {\n return this.$async(async () => {\n const { method } = this.state;\n\n if (!this.validateForm(method)) {\n return;\n }\n\n this.state.actionInProgress = true;\n try {\n const customTemplate = await this.createCustomTemplateByMethod(method, this.formValues);\n\n const accessControlData = this.formValues.AccessControlData;\n const userDetails = this.Authentication.getUserDetails();\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, customTemplate.ResourceControl);\n\n this.Notifications.success('Custom template successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.templates.custom');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed creating custom template');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n\n createCustomTemplateByMethod(method, template) {\n template.Type = 3;\n\n switch (method) {\n case 'editor':\n return this.createCustomTemplateFromFileContent(template);\n case 'upload':\n return this.createCustomTemplateFromFileUpload(template);\n }\n }\n\n createCustomTemplateFromFileContent(template) {\n return this.CustomTemplateService.createCustomTemplateFromFileContent(template);\n }\n\n createCustomTemplateFromFileUpload(template) {\n return this.CustomTemplateService.createCustomTemplateFromFileUpload(template);\n }\n\n validateForm(method) {\n this.state.formValidationError = '';\n\n if (method === 'editor' && this.formValues.FileContent === '') {\n this.state.formValidationError = 'Template file content must not be empty';\n return false;\n }\n\n const title = this.formValues.Title;\n const isNotUnique = this.templates.some((template) => template.Title === title);\n if (isNotUnique) {\n this.state.formValidationError = 'A template with the same name already exists';\n return false;\n }\n\n const isAdmin = this.Authentication.isAdmin();\n const accessControlData = this.formValues.AccessControlData;\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n\n return true;\n }\n\n async $onInit() {\n return this.$async(async () => {\n const { fileContent, type } = this.$state.params;\n\n this.formValues.FileContent = fileContent;\n if (type) {\n this.formValues.Type = +type;\n }\n\n try {\n this.templates = await this.CustomTemplateService.customTemplates(3);\n } catch (err) {\n this.Notifications.error('Failure loading', err, 'Failed loading custom templates');\n }\n\n this.state.loading = false;\n\n window.addEventListener('beforeunload', this.onBeforeOnload);\n });\n }\n\n $onDestroy() {\n window.removeEventListener('beforeunload', this.onBeforeOnload);\n }\n\n isEditorDirty() {\n return this.state.method === 'editor' && this.formValues.FileContent && this.state.isEditorDirty;\n }\n\n onBeforeOnload(event) {\n if (this.isEditorDirty()) {\n event.preventDefault();\n event.returnValue = '';\n }\n }\n\n uiCanExit() {\n if (this.isEditorDirty()) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n}\n\nexport default KubeCreateCustomTemplateViewController;\n","const autoNgTemplateLoaderTemplate1 = require('./kube-custom-templates-view.html');\n\nimport controller from './kube-custom-templates-view.controller.js';\n\nexport const kubeCustomTemplatesView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import _ from 'lodash-es';\n\nexport default class KubeCustomTemplatesViewController {\n /* @ngInject */\n constructor($async, $state, Authentication, CustomTemplateService, FormValidator, ModalService, Notifications) {\n Object.assign(this, { $async, $state, Authentication, CustomTemplateService, FormValidator, ModalService, Notifications });\n\n this.state = {\n selectedTemplate: null,\n formValidationError: '',\n actionInProgress: false,\n allowedDeployment: false,\n };\n\n this.currentUser = {\n isAdmin: false,\n id: null,\n };\n\n this.isEditAllowed = this.isEditAllowed.bind(this);\n this.getTemplates = this.getTemplates.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.confirmDelete = this.confirmDelete.bind(this);\n this.selectTemplate = this.selectTemplate.bind(this);\n }\n\n selectTemplate(template) {\n if (!this.state.allowedDeployment) {\n return;\n }\n\n this.$state.go('kubernetes.deploy', { templateId: template.Id });\n }\n\n isEditAllowed(template) {\n return this.currentUser.isAdmin || this.currentUser.id === template.CreatedByUserId;\n }\n\n getTemplates() {\n return this.$async(async () => {\n try {\n this.templates = await this.CustomTemplateService.customTemplates(3);\n } catch (err) {\n this.Notifications.error('Failed loading templates', err, 'Unable to load custom templates');\n }\n });\n }\n\n validateForm(accessControlData, isAdmin) {\n this.state.formValidationError = '';\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n confirmDelete(templateId) {\n return this.$async(async () => {\n const confirmed = await this.ModalService.confirmDeletionAsync('Are you sure that you want to delete this template?');\n if (!confirmed) {\n return;\n }\n\n try {\n await this.CustomTemplateService.remove(templateId);\n _.remove(this.templates, { Id: templateId });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to delete template');\n }\n });\n }\n\n $onInit() {\n this.getTemplates();\n\n this.currentUser.isAdmin = this.Authentication.isAdmin();\n const user = this.Authentication.getUserDetails();\n this.currentUser.id = user.ID;\n\n this.state.allowedDeployment = this.Authentication.hasAuthorizations(['K8sApplicationsAdvancedDeploymentRW']);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./kube-edit-custom-template-view.html');\n\nimport controller from './kube-edit-custom-template-view.controller.js';\n\nexport const kubeEditCustomTemplateView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import { AccessControlFormData } from '@/portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ResourceControlViewModel } from '@/portainer/models/resourceControl/resourceControl';\n\nclass KubeEditCustomTemplateViewController {\n /* @ngInject */\n constructor($async, $state, ModalService, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService) {\n Object.assign(this, { $async, $state, ModalService, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService });\n\n this.formValues = null;\n this.state = {\n formValidationError: '',\n isEditorDirty: false,\n };\n this.templates = [];\n\n this.getTemplate = this.getTemplate.bind(this);\n this.submitAction = this.submitAction.bind(this);\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.onBeforeUnload = this.onBeforeUnload.bind(this);\n }\n\n getTemplate() {\n return this.$async(async () => {\n try {\n const { id } = this.$state.params;\n\n const [template, file] = await Promise.all([this.CustomTemplateService.customTemplate(id), this.CustomTemplateService.customTemplateFile(id)]);\n template.FileContent = file;\n this.formValues = template;\n this.oldFileContent = this.formValues.FileContent;\n\n this.formValues.ResourceControl = new ResourceControlViewModel(template.ResourceControl);\n this.formValues.AccessControlData = new AccessControlFormData();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve custom template data');\n }\n });\n }\n\n validateForm() {\n this.state.formValidationError = '';\n\n if (!this.formValues.FileContent) {\n this.state.formValidationError = 'Template file content must not be empty';\n return false;\n }\n\n const title = this.formValues.Title;\n const id = this.$state.params.id;\n\n const isNotUnique = this.templates.some((template) => template.Title === title && template.Id != id);\n if (isNotUnique) {\n this.state.formValidationError = `A template with the name ${title} already exists`;\n return false;\n }\n\n const isAdmin = this.Authentication.isAdmin();\n const accessControlData = this.formValues.AccessControlData;\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n\n return true;\n }\n\n submitAction() {\n return this.$async(async () => {\n if (!this.validateForm()) {\n return;\n }\n\n this.actionInProgress = true;\n try {\n await this.CustomTemplateService.updateCustomTemplate(this.formValues.Id, this.formValues);\n\n const userDetails = this.Authentication.getUserDetails();\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, this.formValues.AccessControlData, this.formValues.ResourceControl);\n\n this.Notifications.success('Custom template successfully updated');\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.templates.custom');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update custom template');\n } finally {\n this.actionInProgress = false;\n }\n });\n }\n\n onChangeFileContent(value) {\n if (stripSpaces(this.formValues.FileContent) !== stripSpaces(value)) {\n this.formValues.FileContent = value;\n this.state.isEditorDirty = true;\n }\n }\n\n async $onInit() {\n this.$async(async () => {\n this.getTemplate();\n\n try {\n this.templates = await this.CustomTemplateService.customTemplates();\n } catch (err) {\n this.Notifications.error('Failure loading', err, 'Failed loading custom templates');\n }\n\n window.addEventListener('beforeunload', this.onBeforeUnload);\n });\n }\n\n isEditorDirty() {\n return this.formValues.FileContent !== this.oldFileContent && this.state.isEditorDirty;\n }\n\n uiCanExit() {\n if (this.isEditorDirty()) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n onBeforeUnload(event) {\n if (this.formValues.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n event.preventDefault();\n event.returnValue = '';\n\n return '';\n }\n }\n\n $onDestroy() {\n window.removeEventListener('beforeunload', this.onBeforeUnload);\n }\n}\n\nexport default KubeEditCustomTemplateViewController;\n\nfunction stripSpaces(str = '') {\n return str.replace(/(\\r\\n|\\n|\\r)/gm, '');\n}\n","import _ from 'lodash-es';\nimport { KubernetesEndpoint, KubernetesEndpointAnnotationLeader, KubernetesEndpointSubset } from 'Kubernetes/endpoint/models';\n\nclass KubernetesEndpointConverter {\n static apiToEndpoint(data) {\n const res = new KubernetesEndpoint();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n const leaderAnnotation = data.metadata.annotations ? data.metadata.annotations[KubernetesEndpointAnnotationLeader] : '';\n if (leaderAnnotation) {\n const parsedJson = JSON.parse(leaderAnnotation);\n const split = _.split(parsedJson.holderIdentity, '_');\n res.HolderIdentity = split[0];\n }\n\n if (data.subsets) {\n res.Subsets = _.map(data.subsets, (item) => {\n const subset = new KubernetesEndpointSubset();\n subset.Ips = _.map(item.addresses, 'ip');\n const port = _.find(item.ports, { name: 'https' });\n subset.Port = port ? port.port : undefined;\n return subset;\n });\n }\n return res;\n }\n}\n\nexport default KubernetesEndpointConverter;\n","export const KubernetesEndpointAnnotationLeader = 'control-plane.alpha.kubernetes.io/leader';\n\n/**\n * KubernetesEndpoint Model\n */\nconst _KubernetesEndpoint = Object.freeze({\n Id: '',\n Name: '',\n Namespace: '',\n HolderIdentity: '',\n Subsets: [],\n});\n\nexport class KubernetesEndpoint {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesEndpoint)));\n }\n}\n\nconst _KubernetesEndpointSubset = Object.freeze({\n Ips: [],\n Port: 0,\n});\n\nexport class KubernetesEndpointSubset {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesEndpointSubset)));\n }\n}\n","angular.module('portainer.kubernetes').factory('KubernetesEndpoints', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesEndpointsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/endpoints/:id';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n };\n },\n]);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport KubernetesEndpointConverter from 'Kubernetes/endpoint/converter';\n\nclass KubernetesEndpointService {\n /* @ngInject */\n constructor($async, KubernetesEndpoints) {\n this.$async = $async;\n this.KubernetesEndpoints = KubernetesEndpoints;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesEndpoints(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesEndpointConverter.apiToEndpoint(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve environments', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesEndpointService;\nangular.module('portainer.kubernetes').service('KubernetesEndpointService', KubernetesEndpointService);\n","import _ from 'lodash-es';\nimport { KubernetesApplicationDataAccessPolicies } from 'Kubernetes/models/application/models';\nimport { KubernetesApplicationTypes, KubernetesApplicationTypeStrings } from 'Kubernetes/models/application/models';\nimport { KubernetesPodNodeAffinityNodeSelectorRequirementOperators } from 'Kubernetes/pod/models';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\nangular\n .module('portainer.kubernetes')\n .filter('kubernetesApplicationServiceTypeIcon', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'loadbalancer':\n return 'fa-project-diagram';\n case 'clusterip':\n return 'fa-list-alt';\n case 'nodeport':\n return 'fa-list';\n }\n };\n })\n .filter('kubernetesApplicationServiceTypeText', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'loadbalancer':\n return 'LoadBalancer';\n case 'clusterip':\n return 'ClusterIP';\n case 'nodeport':\n return 'NodePort';\n }\n };\n })\n .filter('kubernetesApplicationTypeText', function () {\n 'use strict';\n return function (type) {\n switch (type) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n return KubernetesApplicationTypeStrings.DEPLOYMENT;\n case KubernetesApplicationTypes.DAEMONSET:\n return KubernetesApplicationTypeStrings.DAEMONSET;\n case KubernetesApplicationTypes.STATEFULSET:\n return KubernetesApplicationTypeStrings.STATEFULSET;\n case KubernetesApplicationTypes.POD:\n return KubernetesApplicationTypeStrings.POD;\n case KubernetesApplicationTypes.HELM:\n return KubernetesApplicationTypeStrings.HELM;\n default:\n return '-';\n }\n };\n })\n .filter('kubernetesApplicationCPUValue', function () {\n 'use strict';\n return function (value) {\n return _.round(value, 2);\n };\n })\n .filter('kubernetesApplicationDataAccessPolicyIcon', function () {\n 'use strict';\n return function (value) {\n switch (value) {\n case KubernetesApplicationDataAccessPolicies.ISOLATED:\n return 'fa-cubes';\n case KubernetesApplicationDataAccessPolicies.SHARED:\n return 'fa-cube';\n }\n };\n })\n .filter('kubernetesApplicationDataAccessPolicyText', function () {\n 'use strict';\n return function (value) {\n switch (value) {\n case KubernetesApplicationDataAccessPolicies.ISOLATED:\n return 'Isolated';\n case KubernetesApplicationDataAccessPolicies.SHARED:\n return 'Shared';\n }\n };\n })\n .filter('kubernetesApplicationDataAccessPolicyTooltip', function () {\n 'use strict';\n return function (value) {\n switch (value) {\n case KubernetesApplicationDataAccessPolicies.ISOLATED:\n return 'All the instances of this application are using their own data.';\n case KubernetesApplicationDataAccessPolicies.SHARED:\n return 'All the instances of this application are sharing the same data.';\n }\n };\n })\n .filter('kubernetesApplicationConstraintNodeAffinityValue', function () {\n 'use strict';\n return function (values, operator) {\n if (operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.IN || operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.NOT_IN) {\n return values;\n } else if (\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.EXISTS ||\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.DOES_NOT_EXIST\n ) {\n return '';\n } else if (\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.GREATER_THAN ||\n operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.LOWER_THAN\n ) {\n return values[0];\n }\n return '';\n };\n })\n .filter('kubernetesNodeLabelHumanReadbleText', function () {\n 'use strict';\n return function (text) {\n const values = {\n 'kubernetes.io/os': 'Operating system',\n 'kubernetes.io/arch': 'Architecture',\n 'kubernetes.io/hostname': 'Node',\n };\n return values[text] || text;\n };\n })\n .filter('kubernetesApplicationIngressEmptyHostname', function () {\n 'use strict';\n return function (value) {\n if (value === '') {\n return '';\n } else {\n return value;\n }\n };\n })\n .filter('kubernetesAppStorageRequestSizeHumanReadable', function () {\n 'use strict';\n return function (bytes) {\n const format = KubernetesResourceQuotaHelper.formatBytes(bytes, 3);\n return `${format.Size}${format.SizeUnit}`;\n };\n });\n","import { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nangular.module('portainer.kubernetes').filter('kubernetesConfigurationTypeText', function () {\n 'use strict';\n return function (type) {\n switch (type) {\n case KubernetesConfigurationTypes.SECRET:\n return 'Secret';\n case KubernetesConfigurationTypes.CONFIGMAP:\n return 'ConfigMap';\n }\n };\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.kubernetes').filter('kubernetesEventTypeColor', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'normal':\n return 'info';\n case 'warning':\n return 'warning';\n default:\n return 'danger';\n }\n };\n});\n","angular.module('portainer.kubernetes').filter('kubernetesUsageLevelInfo', function () {\n return function (usage) {\n if (usage >= 80) {\n return 'danger';\n } else if (usage > 50 && usage < 80) {\n return 'warning';\n } else {\n return 'success';\n }\n };\n});\n","import angular from 'angular';\n\nangular.module('portainer.kubernetes').factory('HelmFactory', HelmFactory);\n\n/* @ngInject */\nfunction HelmFactory($resource, API_ENDPOINT_ENDPOINTS) {\n const helmUrl = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/helm';\n const templatesUrl = '/api/templates/helm';\n\n return $resource(\n helmUrl,\n {},\n {\n templates: {\n url: templatesUrl,\n method: 'GET',\n params: { repo: '@repo' },\n cache: true,\n },\n show: {\n url: `${templatesUrl}/:type`,\n method: 'GET',\n params: { repo: '@repo', chart: '@chart' },\n transformResponse: function (data) {\n return { values: data };\n },\n },\n getHelmRepositories: {\n method: 'GET',\n url: `${helmUrl}/repositories`,\n },\n addHelmRepository: {\n method: 'POST',\n url: `${helmUrl}/repositories`,\n },\n list: {\n method: 'GET',\n isArray: true,\n params: { namespace: '@namespace', selector: '@selector', filter: '@filter', output: '@output' },\n },\n install: { method: 'POST' },\n uninstall: {\n url: `${helmUrl}/:release`,\n method: 'DELETE',\n params: { namespace: '@namespace' },\n },\n }\n );\n}\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nangular.module('portainer.kubernetes').factory('HelmService', HelmService);\n\n/* @ngInject */\nexport function HelmService(HelmFactory) {\n return {\n search,\n values,\n getHelmRepositories,\n addHelmRepository,\n install,\n uninstall,\n listReleases,\n };\n\n /**\n * @description: Searches for all helm charts in a helm repo\n * @param {string} repo - repo url to search charts for\n * @returns {Promise} - Resolves with `index.yaml` of helm charts for a repo\n * @throws {PortainerError} - Rejects with error if searching for the `index.yaml` fails\n */\n async function search(repo) {\n try {\n return await HelmFactory.templates({ repo }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to retrieve helm charts', err);\n }\n }\n\n /**\n * @description: Show values helm of a helm chart, this basically runs `helm show values`\n * @param {string} repo - repo url to search charts values for\n * @param {string} chart - chart within the repo to retrieve default values\n * @returns {Promise} - Resolves with `values.yaml` of helm chart values for a repo\n * @throws {PortainerError} - Rejects with error if helm show fails\n */\n async function values(repo, chart) {\n try {\n return await HelmFactory.show({ repo, chart, type: 'values' }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to retrieve values from chart', err);\n }\n }\n\n /**\n * @description: Get a list of all the helm repositories available for the current user\n * @returns {Promise} - Resolves with an object containing list of user helm repos and default/global settings helm repo\n * @throws {PortainerError} - Rejects with error if helm show fails\n */\n async function getHelmRepositories(endpointId) {\n return await HelmFactory.getHelmRepositories({ endpointId }).$promise;\n }\n\n /**\n * @description: Adds a helm repo for the calling user\n * @param {Object} payload - helm repo url to add for the user\n * @returns {Promise} - Resolves with `values.yaml` of helm chart values for a repo\n * @throws {PortainerError} - Rejects with error if helm show fails\n */\n async function addHelmRepository(endpointId, payload) {\n return await HelmFactory.addHelmRepository({ endpointId }, payload).$promise;\n }\n\n /**\n * @description: Installs a helm chart, this basically runs `helm install`\n * @returns {Promise} - Resolves with `values.yaml` of helm chart values for a repo\n * @throws {PortainerError} - Rejects with error if helm show fails\n */\n async function install(endpointId, payload) {\n return await HelmFactory.install({ endpointId }, payload).$promise;\n }\n\n /**\n * @description: Uninstall a helm chart, this basically runs `helm uninstall`\n * @param {Object} options - Options object, release `Name` is the only required option\n * @throws {PortainerError} - Rejects with error if helm show fails\n */\n async function uninstall(endpointId, { Name, ResourcePool }) {\n try {\n await HelmFactory.uninstall({ endpointId, release: Name, namespace: ResourcePool }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete release', err);\n }\n }\n\n /**\n * @description: List all helm releases based on passed in options, this basically runs `helm list`\n * @param {Object} options - Supported CLI flags to pass to Helm (binary) - flags to `helm list`\n * @returns {Promise} - Resolves with list of helm releases\n * @throws {PortainerError} - Rejects with error if helm list fails\n */\n async function listReleases(endpointId, { namespace, selector, filter, output }) {\n try {\n const releases = await HelmFactory.list({ endpointId, selector, namespace, filter, output }).$promise;\n return releases;\n } catch (err) {\n throw new PortainerError('Unable to retrieve release list', err);\n }\n }\n}\n","import _ from 'lodash-es';\nimport { KubernetesPortMapping, KubernetesPortMappingPort } from 'Kubernetes/models/port/models';\nimport { KubernetesService, KubernetesServicePort, KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport {\n KubernetesApplicationAutoScalerFormValue,\n KubernetesApplicationConfigurationFormValue,\n KubernetesApplicationConfigurationFormValueOverridenKey,\n KubernetesApplicationConfigurationFormValueOverridenKeyTypes,\n KubernetesApplicationEnvironmentVariableFormValue,\n KubernetesApplicationPersistedFolderFormValue,\n KubernetesApplicationPlacementFormValue,\n KubernetesApplicationPublishedPortFormValue,\n} from 'Kubernetes/models/application/formValues';\nimport {\n KubernetesApplicationEnvConfigMapPayload,\n KubernetesApplicationEnvPayload,\n KubernetesApplicationEnvSecretPayload,\n KubernetesApplicationVolumeConfigMapPayload,\n KubernetesApplicationVolumeEntryPayload,\n KubernetesApplicationVolumeMountPayload,\n KubernetesApplicationVolumePersistentPayload,\n KubernetesApplicationVolumeSecretPayload,\n} from 'Kubernetes/models/application/payloads';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport { KubernetesApplicationDeploymentTypes, KubernetesApplicationPlacementTypes, KubernetesApplicationTypes, HelmApplication } from 'Kubernetes/models/application/models';\nimport { KubernetesPodAffinity, KubernetesPodNodeAffinityNodeSelectorRequirementOperators } from 'Kubernetes/pod/models';\nimport {\n KubernetesNodeSelectorRequirementPayload,\n KubernetesNodeSelectorTermPayload,\n KubernetesPodNodeAffinityPayload,\n KubernetesPreferredSchedulingTermPayload,\n} from 'Kubernetes/pod/payloads/affinities';\n\nexport const PodKubernetesInstanceLabel = 'app.kubernetes.io/instance';\nexport const PodManagedByLabel = 'app.kubernetes.io/managed-by';\n\nclass KubernetesApplicationHelper {\n /* #region UTILITY FUNCTIONS */\n static isExternalApplication(application) {\n return !application.ApplicationOwner;\n }\n\n static associatePodsAndApplication(pods, selector) {\n return _.filter(pods, ['metadata.labels', selector.matchLabels]);\n }\n\n static associateContainerPersistedFoldersAndConfigurations(app, containers) {\n _.forEach(containers, (container) => {\n container.PersistedFolders = _.without(\n _.map(app.PersistedFolders, (pf) => {\n if (pf.MountPath && _.includes(_.map(container.VolumeMounts, 'mountPath'), pf.MountPath)) {\n return pf;\n }\n }),\n undefined\n );\n\n container.ConfigurationVolumes = _.without(\n _.map(app.ConfigurationVolumes, (cv) => {\n if (cv.rootMountPath && _.includes(_.map(container.VolumeMounts, 'mountPath'), cv.rootMountPath)) {\n return cv;\n }\n }),\n undefined\n );\n });\n }\n\n static associateContainersAndApplication(app) {\n if (!app.Pods || app.Pods.length === 0) {\n return [];\n }\n const containers = app.Pods[0].Containers;\n KubernetesApplicationHelper.associateContainerPersistedFoldersAndConfigurations(app, containers);\n return containers;\n }\n\n static associateAllContainersAndApplication(app) {\n const containers = _.flatMap(_.map(app.Pods, 'Containers'));\n KubernetesApplicationHelper.associateContainerPersistedFoldersAndConfigurations(app, containers);\n return containers;\n }\n\n static portMappingsFromApplications(applications) {\n const res = _.reduce(\n applications,\n (acc, app) => {\n if (app.PublishedPorts.length > 0) {\n const mapping = new KubernetesPortMapping();\n mapping.Name = app.Name;\n mapping.ResourcePool = app.ResourcePool;\n mapping.ServiceType = app.ServiceType;\n mapping.LoadBalancerIPAddress = app.LoadBalancerIPAddress;\n mapping.ApplicationOwner = app.ApplicationOwner;\n\n mapping.Ports = _.map(app.PublishedPorts, (item) => {\n const port = new KubernetesPortMappingPort();\n port.Port = mapping.ServiceType === KubernetesServiceTypes.NODE_PORT ? item.NodePort : item.Port;\n port.TargetPort = item.TargetPort;\n port.Protocol = item.Protocol;\n port.IngressRules = item.IngressRules;\n return port;\n });\n acc.push(mapping);\n }\n return acc;\n },\n []\n );\n return res;\n }\n /* #endregion */\n\n /* #region ENV VARIABLES FV <> ENV */\n static generateEnvFromEnvVariables(envVariables) {\n _.remove(envVariables, (item) => item.NeedsDeletion);\n const env = _.map(envVariables, (item) => {\n const res = new KubernetesApplicationEnvPayload();\n res.name = item.Name;\n if (item.Value === undefined) {\n delete res.value;\n } else {\n res.value = item.Value;\n }\n return res;\n });\n return env;\n }\n\n static generateEnvVariablesFromEnv(env) {\n const envVariables = _.map(env, (item) => {\n if (item.valueFrom) {\n return;\n }\n const res = new KubernetesApplicationEnvironmentVariableFormValue();\n res.Name = item.name;\n res.Value = item.value;\n res.IsNew = false;\n res.NameIndex = item.name;\n return res;\n });\n return _.without(envVariables, undefined);\n }\n /* #endregion */\n\n /* #region CONFIGURATIONS FV <> ENV & VOLUMES */\n static generateConfigurationFormValuesFromEnvAndVolumes(env, volumes, configurations) {\n const finalRes = _.flatMap(configurations, (cfg) => {\n const filterCondition = cfg.Type === KubernetesConfigurationTypes.CONFIGMAP ? 'valueFrom.configMapKeyRef.name' : 'valueFrom.secretKeyRef.name';\n\n const cfgEnv = _.filter(env, [filterCondition, cfg.Name]);\n const cfgVol = _.filter(volumes, { configurationName: cfg.Name });\n if (!cfgEnv.length && !cfgVol.length) {\n return;\n }\n const keys = _.reduce(\n _.keys(cfg.Data),\n (acc, k) => {\n const keyEnv = _.filter(cfgEnv, { name: k });\n const keyVol = _.filter(cfgVol, { configurationKey: k });\n const key = {\n Key: k,\n Count: keyEnv.length + keyVol.length,\n Sum: _.concat(keyEnv, keyVol),\n EnvCount: keyEnv.length,\n VolCount: keyVol.length,\n };\n acc.push(key);\n return acc;\n },\n []\n );\n\n const max = _.max(_.map(keys, 'Count'));\n const overrideThreshold = max - _.max(_.map(keys, 'VolCount'));\n const res = _.map(new Array(max), () => new KubernetesApplicationConfigurationFormValue());\n _.forEach(res, (item, index) => {\n item.SelectedConfiguration = cfg;\n const overriden = index >= overrideThreshold;\n if (overriden) {\n item.Overriden = true;\n item.OverridenKeys = _.map(keys, (k) => {\n const fvKey = new KubernetesApplicationConfigurationFormValueOverridenKey();\n fvKey.Key = k.Key;\n if (!k.Count) {\n // !k.Count indicates k.Key is new added to the configuration and has not been loaded to the application yet\n fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.NONE;\n } else if (index < k.EnvCount) {\n fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT;\n } else {\n fvKey.Type = KubernetesApplicationConfigurationFormValueOverridenKeyTypes.FILESYSTEM;\n fvKey.Path = k.Sum[index].rootMountPath;\n }\n return fvKey;\n });\n }\n });\n return res;\n });\n return _.without(finalRes, undefined);\n }\n\n static generateEnvOrVolumesFromConfigurations(app, configurations) {\n let finalEnv = [];\n let finalVolumes = [];\n let finalMounts = [];\n\n _.forEach(configurations, (config) => {\n const isBasic = config.SelectedConfiguration.Type === KubernetesConfigurationTypes.CONFIGMAP;\n\n if (!config.Overriden) {\n const envKeys = _.keys(config.SelectedConfiguration.Data);\n _.forEach(envKeys, (item) => {\n const res = isBasic ? new KubernetesApplicationEnvConfigMapPayload() : new KubernetesApplicationEnvSecretPayload();\n res.name = item;\n if (isBasic) {\n res.valueFrom.configMapKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.configMapKeyRef.key = item;\n } else {\n res.valueFrom.secretKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.secretKeyRef.key = item;\n }\n finalEnv.push(res);\n });\n } else {\n const envKeys = _.filter(config.OverridenKeys, (item) => item.Type === KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT);\n _.forEach(envKeys, (item) => {\n const res = isBasic ? new KubernetesApplicationEnvConfigMapPayload() : new KubernetesApplicationEnvSecretPayload();\n res.name = item.Key;\n if (isBasic) {\n res.valueFrom.configMapKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.configMapKeyRef.key = item.Key;\n } else {\n res.valueFrom.secretKeyRef.name = config.SelectedConfiguration.Name;\n res.valueFrom.secretKeyRef.key = item.Key;\n }\n finalEnv.push(res);\n });\n\n const volKeys = _.filter(config.OverridenKeys, (item) => item.Type === KubernetesApplicationConfigurationFormValueOverridenKeyTypes.FILESYSTEM);\n const groupedVolKeys = _.groupBy(volKeys, 'Path');\n _.forEach(groupedVolKeys, (items, path) => {\n const volumeName = KubernetesVolumeHelper.generatedApplicationConfigVolumeName(app.Name);\n const configurationName = config.SelectedConfiguration.Name;\n const itemsMap = _.map(items, (item) => {\n const entry = new KubernetesApplicationVolumeEntryPayload();\n entry.key = item.Key;\n entry.path = item.Key;\n return entry;\n });\n\n const mount = isBasic ? new KubernetesApplicationVolumeMountPayload() : new KubernetesApplicationVolumeMountPayload(true);\n const volume = isBasic ? new KubernetesApplicationVolumeConfigMapPayload() : new KubernetesApplicationVolumeSecretPayload();\n\n mount.name = volumeName;\n mount.mountPath = path;\n volume.name = volumeName;\n if (isBasic) {\n volume.configMap.name = configurationName;\n volume.configMap.items = itemsMap;\n } else {\n volume.secret.secretName = configurationName;\n volume.secret.items = itemsMap;\n }\n\n finalMounts.push(mount);\n finalVolumes.push(volume);\n });\n }\n });\n app.Env = _.concat(app.Env, finalEnv);\n app.Volumes = _.concat(app.Volumes, finalVolumes);\n app.VolumeMounts = _.concat(app.VolumeMounts, finalMounts);\n return app;\n }\n /* #endregion */\n\n /* #region SERVICES -> SERVICES FORM VALUES */\n static generateServicesFormValuesFromServices(app) {\n let services = [];\n if (app.Services) {\n app.Services.forEach(function (service) {\n //skip generate formValues if service = headless service ( clusterIp === \"None\" )\n if (service.spec.clusterIP !== 'None') {\n const svc = new KubernetesService();\n svc.Namespace = service.metadata.namespace;\n svc.Name = service.metadata.name;\n svc.StackName = service.StackName;\n svc.ApplicationOwner = app.ApplicationOwner;\n svc.ApplicationName = app.ApplicationName;\n svc.Type = service.spec.type;\n if (service.spec.type === KubernetesServiceTypes.CLUSTER_IP) {\n svc.Type = 1;\n } else if (service.spec.type === KubernetesServiceTypes.NODE_PORT) {\n svc.Type = 2;\n } else if (service.spec.type === KubernetesServiceTypes.LOAD_BALANCER) {\n svc.Type = 3;\n }\n\n let ports = [];\n service.spec.ports.forEach(function (port) {\n const svcport = new KubernetesServicePort();\n svcport.name = port.name;\n svcport.port = port.port;\n svcport.nodePort = port.nodePort;\n svcport.protocol = port.protocol;\n svcport.targetPort = port.targetPort;\n\n app.Ingresses.value.forEach((ingress) => {\n const ingressMatched = _.find(ingress.Paths, { ServiceName: service.metadata.name });\n if (ingressMatched) {\n svcport.ingress = {\n IngressName: ingressMatched.IngressName,\n Host: ingressMatched.Host,\n Path: ingressMatched.Path,\n };\n svc.Ingress = true;\n }\n });\n\n ports.push(svcport);\n });\n svc.Ports = ports;\n svc.Selector = app.Raw.spec.selector.matchLabels;\n services.push(svc);\n }\n });\n\n return services;\n }\n }\n /* #endregion */\n static generateSelectorFromService(app) {\n if (app.Raw.kind !== 'Pod') {\n const selector = app.Raw.spec.selector.matchLabels;\n return selector;\n }\n }\n\n /* #region PUBLISHED PORTS FV <> PUBLISHED PORTS */\n static generatePublishedPortsFormValuesFromPublishedPorts(serviceType, publishedPorts, ingress) {\n const generatePort = (port, rule) => {\n const res = new KubernetesApplicationPublishedPortFormValue();\n res.IsNew = false;\n if (rule) {\n res.IngressName = rule.IngressName;\n res.IngressRoute = rule.Path;\n res.IngressHost = rule.Host;\n res.IngressHosts = ingress && ingress.find((i) => i.Name === rule.IngressName).Hosts;\n }\n res.Protocol = port.Protocol;\n res.ContainerPort = port.TargetPort;\n if (serviceType === KubernetesServiceTypes.LOAD_BALANCER) {\n res.LoadBalancerPort = port.Port;\n res.LoadBalancerNodePort = port.NodePort;\n } else if (serviceType === KubernetesServiceTypes.NODE_PORT) {\n res.NodePort = port.NodePort;\n }\n return res;\n };\n\n const finalRes = _.flatMap(publishedPorts, (port) => {\n if (port.IngressRules.length) {\n return _.map(port.IngressRules, (rule) => generatePort(port, rule));\n }\n return generatePort(port);\n });\n return finalRes;\n }\n /* #endregion */\n\n /* #region AUTOSCALER FV <> HORIZONTAL POD AUTOSCALER */\n static generateAutoScalerFormValueFromHorizontalPodAutoScaler(autoScaler, replicasCount) {\n const res = new KubernetesApplicationAutoScalerFormValue();\n if (autoScaler) {\n res.IsUsed = true;\n res.MinReplicas = autoScaler.MinReplicas;\n res.MaxReplicas = autoScaler.MaxReplicas;\n res.TargetCPUUtilization = autoScaler.TargetCPUUtilization;\n res.ApiVersion = autoScaler.ApiVersion;\n } else {\n res.ApiVersion = 'apps/v1';\n res.MinReplicas = replicasCount;\n res.MaxReplicas = replicasCount;\n }\n return res;\n }\n\n /* #endregion */\n\n /* #region PERSISTED FOLDERS FV <> VOLUMES */\n static generatePersistedFoldersFormValuesFromPersistedFolders(persistedFolders, persistentVolumeClaims) {\n const finalRes = _.map(persistedFolders, (folder) => {\n const pvc = _.find(persistentVolumeClaims, (item) => _.startsWith(item.Name, folder.PersistentVolumeClaimName));\n const res = new KubernetesApplicationPersistedFolderFormValue(pvc.StorageClass);\n res.PersistentVolumeClaimName = folder.PersistentVolumeClaimName;\n res.Size = parseInt(pvc.Storage, 10);\n res.SizeUnit = pvc.Storage.slice(-2);\n res.ContainerPath = folder.MountPath;\n return res;\n });\n return finalRes;\n }\n\n static generateVolumesFromPersistentVolumClaims(app, volumeClaims) {\n app.VolumeMounts = [];\n app.Volumes = [];\n _.forEach(volumeClaims, (item) => {\n const volumeMount = new KubernetesApplicationVolumeMountPayload();\n const name = item.Name;\n volumeMount.name = name;\n volumeMount.mountPath = item.MountPath;\n app.VolumeMounts.push(volumeMount);\n\n const volume = new KubernetesApplicationVolumePersistentPayload();\n volume.name = name;\n volume.persistentVolumeClaim.claimName = name;\n app.Volumes.push(volume);\n });\n }\n\n static hasRWOOnly(formValues) {\n return _.find(formValues.PersistedFolders, (item) => item.StorageClass && _.isEqual(item.StorageClass.AccessModes, ['RWO']));\n }\n\n static hasRWX(claims) {\n return _.find(claims, (item) => item.StorageClass && _.includes(item.StorageClass.AccessModes, 'RWX')) !== undefined;\n }\n /* #endregion */\n\n /* #region PLACEMENTS FV <> AFFINITY */\n static generatePlacementsFormValuesFromAffinity(formValues, podAffinity, nodesLabels) {\n let placements = formValues.Placements;\n let type = formValues.PlacementType;\n const affinity = podAffinity.nodeAffinity;\n if (affinity && affinity.requiredDuringSchedulingIgnoredDuringExecution) {\n type = KubernetesApplicationPlacementTypes.MANDATORY;\n _.forEach(affinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms, (term) => {\n _.forEach(term.matchExpressions, (exp) => {\n const placement = new KubernetesApplicationPlacementFormValue();\n const label = _.find(nodesLabels, { Key: exp.key });\n placement.Label = label;\n placement.Value = exp.values[0];\n placement.IsNew = false;\n placements.push(placement);\n });\n });\n } else if (affinity && affinity.preferredDuringSchedulingIgnoredDuringExecution) {\n type = KubernetesApplicationPlacementTypes.PREFERRED;\n _.forEach(affinity.preferredDuringSchedulingIgnoredDuringExecution, (term) => {\n _.forEach(term.preference.matchExpressions, (exp) => {\n const placement = new KubernetesApplicationPlacementFormValue();\n const label = _.find(nodesLabels, { Key: exp.key });\n placement.Label = label;\n placement.Value = exp.values[0];\n placement.IsNew = false;\n placements.push(placement);\n });\n });\n }\n formValues.Placements = placements;\n formValues.PlacementType = type;\n }\n\n static generateAffinityFromPlacements(app, formValues) {\n if (formValues.DeploymentType === KubernetesApplicationDeploymentTypes.REPLICATED) {\n const placements = formValues.Placements;\n const res = new KubernetesPodNodeAffinityPayload();\n let expressions = _.map(placements, (p) => {\n if (!p.NeedsDeletion) {\n const exp = new KubernetesNodeSelectorRequirementPayload();\n exp.key = p.Label.Key;\n if (p.Value) {\n exp.operator = KubernetesPodNodeAffinityNodeSelectorRequirementOperators.IN;\n exp.values = [p.Value];\n } else {\n exp.operator = KubernetesPodNodeAffinityNodeSelectorRequirementOperators.EXISTS;\n delete exp.values;\n }\n return exp;\n }\n });\n expressions = _.without(expressions, undefined);\n if (expressions.length) {\n if (formValues.PlacementType === KubernetesApplicationPlacementTypes.MANDATORY) {\n const term = new KubernetesNodeSelectorTermPayload();\n term.matchExpressions = expressions;\n res.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.push(term);\n delete res.preferredDuringSchedulingIgnoredDuringExecution;\n } else if (formValues.PlacementType === KubernetesApplicationPlacementTypes.PREFERRED) {\n const term = new KubernetesPreferredSchedulingTermPayload();\n term.preference = new KubernetesNodeSelectorTermPayload();\n term.preference.matchExpressions = expressions;\n res.preferredDuringSchedulingIgnoredDuringExecution.push(term);\n delete res.requiredDuringSchedulingIgnoredDuringExecution;\n }\n app.Affinity = new KubernetesPodAffinity();\n app.Affinity.nodeAffinity = res;\n }\n }\n }\n /* #endregion */\n\n /**\n * Get Helm managed applications\n * @param {KubernetesApplication[]} applications Application list\n * @returns {Object} { [releaseName]: [app1, app2, ...], [releaseName2]: [app3, app4, ...] }\n */\n static getHelmApplications(applications) {\n // filter out all the applications that are managed by helm\n // to identify the helm managed applications, we need to check if the applications pod labels include\n // `app.kubernetes.io/instance` and `app.kubernetes.io/managed-by` = `helm`\n const helmManagedApps = applications.filter(\n (app) => app.Metadata.labels && app.Metadata.labels[PodKubernetesInstanceLabel] && app.Metadata.labels[PodManagedByLabel] === 'Helm'\n );\n\n // groups the helm managed applications by helm release name\n // the release name is retrieved from the `app.kubernetes.io/instance` label on the pods within the apps\n // `namespacedHelmReleases` object structure:\n // {\n // [namespace1]: {\n // [releaseName]: [app1, app2, ...],\n // },\n // [namespace2]: {\n // [releaseName2]: [app1, app2, ...],\n // }\n // }\n const namespacedHelmReleases = {};\n helmManagedApps.forEach((app) => {\n const namespace = app.ResourcePool;\n const instanceLabel = app.Metadata.labels[PodKubernetesInstanceLabel];\n if (namespacedHelmReleases[namespace]) {\n namespacedHelmReleases[namespace][instanceLabel] = [...(namespacedHelmReleases[namespace][instanceLabel] || []), app];\n } else {\n namespacedHelmReleases[namespace] = { [instanceLabel]: [app] };\n }\n });\n\n // `helmAppsEntriesList` object structure:\n // [\n // [\"airflow-test\", Array(5)],\n // [\"traefik\", Array(1)],\n // [\"airflow-test\", Array(2)],\n // ...,\n // ]\n const helmAppsEntriesList = Object.values(namespacedHelmReleases).flatMap((r) => Object.entries(r));\n const helmAppsList = helmAppsEntriesList.map(([helmInstance, applications]) => {\n const helmApp = new HelmApplication();\n helmApp.Name = helmInstance;\n helmApp.ApplicationType = KubernetesApplicationTypes.HELM;\n helmApp.ApplicationOwner = applications[0].ApplicationOwner;\n helmApp.KubernetesApplications = applications;\n\n // the status of helm app is `Ready` based on whether the underlying RunningPodsCount of the k8s app\n // reaches the TotalPodsCount of the app\n const appsNotReady = applications.some((app) => app.RunningPodsCount < app.TotalPodsCount);\n helmApp.Status = appsNotReady ? 'Not ready' : 'Ready';\n\n // use earliest date\n helmApp.CreationDate = applications.map((app) => app.CreationDate).sort((a, b) => new Date(a) - new Date(b))[0];\n\n // use first app namespace as helm app namespace\n helmApp.ResourcePool = applications[0].ResourcePool;\n\n // required for persisting table expansion state and differenting same named helm apps across different namespaces\n helmApp.Id = helmApp.ResourcePool + '-' + helmApp.Name.toLowerCase().replaceAll(' ', '-');\n\n return helmApp;\n });\n\n return helmAppsList;\n }\n\n /**\n * Get nested applications -\n * @param {KubernetesApplication[]} applications Application list\n * @returns {Object} { helmApplications: [app1, app2, ...], nonHelmApplications: [app3, app4, ...] }\n */\n static getNestedApplications(applications) {\n const helmApplications = KubernetesApplicationHelper.getHelmApplications(applications);\n\n // filter out helm managed applications\n const helmAppNames = [...new Set(helmApplications.map((hma) => hma.Name))]; // distinct helm app names\n const nonHelmApplications = applications.filter((app) => {\n if (app.Metadata.labels) {\n return !helmAppNames.includes(app.Metadata.labels[PodKubernetesInstanceLabel]);\n }\n return true;\n });\n\n return { helmApplications, nonHelmApplications };\n }\n}\nexport default KubernetesApplicationHelper;\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\n\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\nimport { KubernetesSystem_DefaultDeploymentUniqueLabelKey, KubernetesSystem_AnnotationsToSkip } from 'Kubernetes/models/history/models';\n\nclass KubernetesApplicationRollbackHelper {\n static getPatchPayload(application, targetRevision) {\n let result;\n\n switch (application.ApplicationType) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n result = KubernetesApplicationRollbackHelper._getDeploymentPayload(application, targetRevision);\n break;\n case KubernetesApplicationTypes.DAEMONSET:\n result = KubernetesApplicationRollbackHelper._getDaemonSetPayload(application, targetRevision);\n break;\n case KubernetesApplicationTypes.STATEFULSET:\n result = KubernetesApplicationRollbackHelper._getStatefulSetPayload(application, targetRevision);\n break;\n default:\n throw new PortainerError('Unable to determine which association to use to convert patch');\n }\n return result;\n }\n\n static _getDeploymentPayload(deploymentApp, targetRevision) {\n const target = angular.copy(targetRevision);\n const deployment = deploymentApp.Raw;\n\n // remove hash label before patching back into the deployment\n delete target.spec.template.metadata.labels[KubernetesSystem_DefaultDeploymentUniqueLabelKey];\n\n // compute deployment annotations\n const annotations = {};\n _.forEach(KubernetesSystem_AnnotationsToSkip, (_, k) => {\n const v = deployment.metadata.annotations[k];\n if (v) {\n annotations[k] = v;\n }\n });\n _.forEach(target.metadata.annotations, (v, k) => {\n if (!KubernetesSystem_AnnotationsToSkip[k]) {\n annotations[k] = v;\n }\n });\n // Create a patch of the Deployment that replaces spec.template\n const patch = [\n {\n op: 'replace',\n path: '/spec/template',\n value: target.spec.template,\n },\n {\n op: 'replace',\n path: '/metadata/annotations',\n value: annotations,\n },\n ];\n\n return patch;\n }\n\n static _getDaemonSetPayload(daemonSet, targetRevision) {\n void daemonSet;\n return targetRevision.data;\n }\n\n static _getStatefulSetPayload(statefulSet, targetRevision) {\n void statefulSet;\n return targetRevision.data;\n }\n}\n\nexport default KubernetesApplicationRollbackHelper;\n","import _ from 'lodash-es';\n\nclass KubernetesCommonHelper {\n static assignOrDeleteIfEmpty(obj, path, value) {\n if ((!value && value !== 0) || (value instanceof Array && !value.length)) {\n _.unset(obj, path);\n } else {\n _.set(obj, path, value);\n }\n }\n\n static assignOrDeleteIfEmptyOrZero(obj, path, value) {\n if (!value || value === 0 || (value instanceof Array && !value.length)) {\n _.unset(obj, path);\n } else {\n _.set(obj, path, value);\n }\n }\n\n static ownerToLabel(owner) {\n let label = _.replace(owner, /[^-A-Za-z0-9_.]/g, '.');\n label = _.truncate(label, { length: 63, omission: '' });\n label = _.replace(label, /^[-_.]*/g, '');\n label = _.replace(label, /[-_.]*$/g, '');\n return label;\n }\n}\nexport default KubernetesCommonHelper;\n","import _ from 'lodash-es';\n\nimport { KubernetesPortainerConfigMapAccessKey } from 'Kubernetes/models/config-map/models';\nimport { UserAccessViewModel, TeamAccessViewModel } from 'Portainer/models/access';\n\nclass KubernetesConfigMapHelper {\n static parseJSONData(configMap) {\n _.forIn(configMap.Data, (value, key) => {\n try {\n configMap.Data[key] = JSON.parse(value);\n } catch (err) {\n configMap.Data[key] = value;\n }\n });\n return configMap;\n }\n\n static modifiyNamespaceAccesses(configMap, namespace, accesses) {\n configMap.Data[KubernetesPortainerConfigMapAccessKey][namespace] = {\n UserAccessPolicies: {},\n TeamAccessPolicies: {},\n };\n _.forEach(accesses, (item) => {\n if (item instanceof UserAccessViewModel) {\n configMap.Data[KubernetesPortainerConfigMapAccessKey][namespace].UserAccessPolicies[item.Id] = { RoleId: 0 };\n } else if (item instanceof TeamAccessViewModel) {\n configMap.Data[KubernetesPortainerConfigMapAccessKey][namespace].TeamAccessPolicies[item.Id] = { RoleId: 0 };\n }\n });\n _.forIn(configMap.Data, (value, key) => {\n configMap.Data[key] = JSON.stringify(value);\n });\n return configMap;\n }\n}\nexport default KubernetesConfigMapHelper;\n","import _ from 'lodash-es';\nimport YAML from 'yaml';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport { KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\n\nclass KubernetesConfigurationHelper {\n static getUsingApplications(config, applications) {\n return _.filter(applications, (app) => {\n let envFind;\n let volumeFind;\n if (config.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n envFind = _.find(app.Env, { valueFrom: { configMapKeyRef: { name: config.Name } } });\n volumeFind = _.find(app.Volumes, { configMap: { name: config.Name } });\n } else {\n envFind = _.find(app.Env, { valueFrom: { secretKeyRef: { name: config.Name } } });\n volumeFind = _.find(app.Volumes, { secret: { secretName: config.Name } });\n }\n return envFind || volumeFind;\n });\n }\n\n static isSystemToken(config) {\n return _.startsWith(config.Name, 'default-token-');\n }\n\n static isBinary(encoding) {\n return encoding !== '' && !_.includes(encoding, 'ISO') && !_.includes(encoding, 'UTF');\n }\n\n static setConfigurationUsed(config) {\n config.Used = config.Applications && config.Applications.length !== 0;\n }\n\n static setConfigurationsUsed(configurations, applications) {\n _.forEach(configurations, (config) => {\n config.Applications = KubernetesConfigurationHelper.getUsingApplications(config, applications);\n KubernetesConfigurationHelper.setConfigurationUsed(config);\n });\n }\n\n static getApplicationConfigurations(applications, configurations) {\n const configurationsUsed = configurations.filter((config) => KubernetesConfigurationHelper.getUsingApplications(config, applications).length !== 0);\n // set the configurations used for each application in the list\n const configuredApps = applications.map((app) => {\n const configMappedByName = configurationsUsed.filter((config) => app.ApplicationName === config.Name && app.ResourcePool === config.Namespace);\n const configMappedByVolume = configurationsUsed\n .filter((config) => app.ConfigurationVolumes.some((cv) => cv.configurationName === config.Name))\n .filter((config) => !configMappedByName.some((c) => c.Name === config.Name)); // filter out duplicates that are mapped by name\n app.Configurations = [...configMappedByName, ...configMappedByVolume];\n return app;\n });\n return configuredApps;\n }\n\n static parseYaml(formValues) {\n YAML.defaultOptions.customTags = ['binary'];\n const data = _.map(YAML.parse(formValues.DataYaml), (value, key) => {\n const entry = new KubernetesConfigurationFormValuesEntry();\n entry.Key = key;\n entry.Value = value;\n const oldEntry = _.find(formValues.Data, { Key: entry.Key });\n entry.IsBinary = oldEntry ? oldEntry.IsBinary : false;\n return entry;\n });\n return data;\n }\n\n static parseData(formValues) {\n if (!formValues.Data.length) return '';\n\n const data = _.reduce(\n formValues.Data,\n (acc, entry) => {\n acc[entry.Key] = entry.Value;\n return acc;\n },\n {}\n );\n return YAML.stringify(data);\n }\n\n static isExternalConfiguration(configuration) {\n return !configuration.ConfigurationOwner;\n }\n}\n\nexport default KubernetesConfigurationHelper;\n","import _ from 'lodash-es';\n\nclass KubernetesEventHelper {\n static warningCount(events) {\n const warnings = _.filter(events, (event) => event.Type === 'Warning');\n return warnings.length;\n }\n}\n\nexport default KubernetesEventHelper;\n","import _ from 'lodash-es';\n\nclass KubernetesFormValidationHelper {\n static getInvalidKeys(names) {\n const res = {};\n _.forEach(names, (name, index) => {\n const valid = /^[-._a-zA-Z0-9]+$/.test(name);\n if (!valid) {\n res[index] = true;\n }\n });\n return res;\n }\n\n static getDuplicates(names) {\n const groupped = _.groupBy(names);\n const res = {};\n _.forEach(names, (name, index) => {\n if (name && groupped[name].length > 1) {\n res[index] = name;\n }\n });\n return res;\n }\n}\nexport default KubernetesFormValidationHelper;\n","import _ from 'lodash-es';\n\nclass KubernetesDaemonSetHistoryHelper {\n static _isControlledBy(daemonSet) {\n return (item) => _.find(item.metadata.ownerReferences, { uid: daemonSet.metadata.uid }) !== undefined;\n }\n\n static filterOwnedRevisions(crList, daemonSet) {\n // filter ControllerRevisions that has the same selector as the DaemonSet\n // NOTE : this should be done in HTTP request based on daemonSet.spec.selector.matchLabels\n // instead of getting all CR and filtering them here\n const sameLabelsCR = _.filter(crList, ['metadata.labels', daemonSet.spec.selector.matchLabels]);\n // Only include the RS whose ControllerRef matches the DaemonSet.\n const controlledCR = _.filter(sameLabelsCR, KubernetesDaemonSetHistoryHelper._isControlledBy(daemonSet));\n // sorts the list of ControllerRevisions by revision, using the creationTimestamp as a tie breaker (old to new)\n const sortedList = _.sortBy(controlledCR, ['revision', 'metadata.creationTimestamp']);\n return sortedList;\n }\n\n // getCurrentRS returns the newest CR the given daemonSet targets (latest version)\n static getCurrentRevision(crList) {\n const current = _.last(crList);\n return current;\n }\n}\n\nexport default KubernetesDaemonSetHistoryHelper;\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { KubernetesSystem_DefaultDeploymentUniqueLabelKey, KubernetesSystem_RevisionAnnotation } from 'Kubernetes/models/history/models';\n\nclass KubernetesDeploymentHistoryHelper {\n static _isControlledBy(deployment) {\n return (item) => _.find(item.metadata.ownerReferences, { uid: deployment.metadata.uid }) !== undefined;\n }\n\n static filterOwnedRevisions(rsList, deployment) {\n // filter RS that has the same selector as the Deployment\n // NOTE : this should be done in HTTP request based on deployment.spec.selector\n // instead of getting all RS and filtering them here\n const sameLabelsRS = _.filter(rsList, ['spec.selector', deployment.spec.selector]);\n // Only include the RS whose ControllerRef matches the Deployment.\n const controlledRS = _.filter(sameLabelsRS, KubernetesDeploymentHistoryHelper._isControlledBy(deployment));\n // sorts the list of ReplicaSet by creation timestamp, using the names as a tie breaker (old to new)\n const sortedList = _.sortBy(controlledRS, ['metadata.creationTimestamp', 'metadata.name']);\n return sortedList;\n }\n\n // getCurrentRS returns the new RS the given deployment targets (the one with the same pod template).\n static getCurrentRevision(rsListOriginal, deployment) {\n const rsList = angular.copy(rsListOriginal);\n\n // In rare cases, such as after cluster upgrades, Deployment may end up with\n // having more than one new ReplicaSets that have the same template as its template,\n // see https://github.com/kubernetes/kubernetes/issues/40415\n // We deterministically choose the oldest new ReplicaSet (first match)\n const current = _.find(rsList, (item) => {\n // returns true if two given template.spec are equal, ignoring the diff in value of Labels[pod-template-hash]\n // We ignore pod-template-hash because:\n // 1. The hash result would be different upon podTemplateSpec API changes\n // (e.g. the addition of a new field will cause the hash code to change)\n // 2. The deployment template won't have hash labels\n delete item.spec.template.metadata.labels[KubernetesSystem_DefaultDeploymentUniqueLabelKey];\n return _.isEqual(deployment.spec.template, item.spec.template);\n });\n current.revision = current.metadata.annotations[KubernetesSystem_RevisionAnnotation];\n return current;\n }\n\n // filters the RSList to drop all RS that have never been a version of the Deployment\n // also add the revision as a field inside the RS\n // Note: this should not impact rollback process as we only patch\n // metadata.annotations and spec.template\n static filterVersionedRevisions(rsList) {\n const filteredRS = _.filter(rsList, (item) => item.metadata.annotations[KubernetesSystem_RevisionAnnotation] !== undefined);\n return _.map(filteredRS, (item) => {\n item.revision = item.metadata.annotations[KubernetesSystem_RevisionAnnotation];\n return item;\n });\n }\n}\n\nexport default KubernetesDeploymentHistoryHelper;\n","import _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\n\nimport KubernetesDeploymentHistoryHelper from 'Kubernetes/helpers/history/deployment';\nimport KubernetesDaemonSetHistoryHelper from 'Kubernetes/helpers/history/daemonset';\nimport KubernetesStatefulSetHistoryHelper from 'Kubernetes/helpers/history/statefulset';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\n\nclass KubernetesHistoryHelper {\n static getRevisions(rawRevisions, application) {\n let currentRevision, revisionsList;\n\n switch (application.ApplicationType) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n [currentRevision, revisionsList] = KubernetesHistoryHelper._getDeploymentRevisions(rawRevisions, application.Raw);\n break;\n case KubernetesApplicationTypes.DAEMONSET:\n [currentRevision, revisionsList] = KubernetesHistoryHelper._getDaemonSetRevisions(rawRevisions, application.Raw);\n break;\n case KubernetesApplicationTypes.STATEFULSET:\n [currentRevision, revisionsList] = KubernetesHistoryHelper._getStatefulSetRevisions(rawRevisions, application.Raw);\n break;\n default:\n throw new PortainerError('Unable to determine which association to use to get revisions');\n }\n revisionsList = _.sortBy(revisionsList, 'revision');\n return [currentRevision, revisionsList];\n }\n\n static _getDeploymentRevisions(rsList, deployment) {\n const appRS = KubernetesDeploymentHistoryHelper.filterOwnedRevisions(rsList, deployment);\n const currentRS = KubernetesDeploymentHistoryHelper.getCurrentRevision(appRS, deployment);\n const versionedRS = KubernetesDeploymentHistoryHelper.filterVersionedRevisions(appRS);\n return [currentRS, versionedRS];\n }\n\n static _getDaemonSetRevisions(crList, daemonSet) {\n const appCR = KubernetesDaemonSetHistoryHelper.filterOwnedRevisions(crList, daemonSet);\n const currentCR = KubernetesDaemonSetHistoryHelper.getCurrentRevision(appCR, daemonSet);\n return [currentCR, appCR];\n }\n\n static _getStatefulSetRevisions(crList, statefulSet) {\n const appCR = KubernetesStatefulSetHistoryHelper.filterOwnedRevisions(crList, statefulSet);\n const currentCR = KubernetesStatefulSetHistoryHelper.getCurrentRevision(appCR, statefulSet);\n return [currentCR, appCR];\n }\n}\n\nexport default KubernetesHistoryHelper;\n","import _ from 'lodash-es';\n\nclass KubernetesStatefulSetHistoryHelper {\n static _isControlledBy(statefulSet) {\n return (item) => _.find(item.metadata.ownerReferences, { uid: statefulSet.metadata.uid }) !== undefined;\n }\n\n static filterOwnedRevisions(crList, statefulSet) {\n // filter ControllerRevisions that has the same selector as the StatefulSet\n // NOTE : this should be done in HTTP request based on statefulSet.spec.selector.matchLabels\n // instead of getting all CR and filtering them here\n const sameLabelsCR = _.filter(crList, ['metadata.labels', statefulSet.spec.selector.matchLabels]);\n // Only include the RS whose ControllerRef matches the StatefulSet.\n const controlledCR = _.filter(sameLabelsCR, KubernetesStatefulSetHistoryHelper._isControlledBy(statefulSet));\n // sorts the list of ControllerRevisions by revision, using the creationTimestamp as a tie breaker (old to new)\n const sortedList = _.sortBy(controlledCR, ['revision', 'metadata.creationTimestamp']);\n return sortedList;\n }\n\n // getCurrentRS returns the newest CR the given statefulSet targets (latest version)\n static getCurrentRevision(crList) {\n const current = _.last(crList);\n return current;\n }\n}\n\nexport default KubernetesStatefulSetHistoryHelper;\n","import _ from 'lodash-es';\n\nimport { KUBERNETES_DEFAULT_NAMESPACE, KUBERNETES_DEFAULT_SYSTEM_NAMESPACES } from 'Kubernetes/models/namespace/models';\nimport { isSystem } from 'Kubernetes/store/namespace';\n\nexport default class KubernetesNamespaceHelper {\n /**\n * Check if namespace is system or not\n * @param {String} namespace Namespace (string name) to evaluate\n * @returns Boolean\n */\n static isSystemNamespace(namespace) {\n return isSystem(namespace);\n }\n\n /**\n * Check if namespace is default or not\n * @param {String} namespace Namespace (string name) to evaluate\n * @returns Boolean\n */\n static isDefaultNamespace(namespace) {\n return namespace === KUBERNETES_DEFAULT_NAMESPACE;\n }\n\n /**\n * Check if namespace is one of the default system namespaces\n * @param {String} namespace Namespace (string name) to evaluate\n * @returns Boolean\n */\n static isDefaultSystemNamespace(namespace) {\n return _.includes(KUBERNETES_DEFAULT_SYSTEM_NAMESPACES, namespace);\n }\n}\n","import { KubernetesPortainerResourceQuotaPrefix, KubernetesPortainerResourceQuotaStorageSuffix } from 'Kubernetes/models/resource-quota/models';\n\nclass KubernetesResourceQuotaHelper {\n static generateResourceQuotaName(name) {\n return KubernetesPortainerResourceQuotaPrefix + name;\n }\n\n static generateResourceQuotaStorageKey(name) {\n return `${name}${KubernetesPortainerResourceQuotaStorageSuffix}`;\n }\n\n static formatBytes(bytes, decimals = 0, base10 = true) {\n const res = {\n Size: 0,\n SizeUnit: 'B',\n };\n\n if (bytes === 0) {\n return res;\n }\n\n const k = base10 ? 1000 : 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return {\n Size: parseFloat((bytes / Math.pow(k, i)).toFixed(dm)),\n SizeUnit: sizes[i],\n };\n }\n}\n\nexport default KubernetesResourceQuotaHelper;\n","import _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\n\nclass KubernetesResourceReservationHelper {\n static computeResourceReservation(pods) {\n const containers = _.reduce(pods, (acc, pod) => _.concat(acc, pod.Containers), []);\n\n return _.reduce(\n containers,\n (acc, container) => {\n if (container.Requests) {\n if (container.Requests.memory) {\n acc.Memory += filesizeParser(container.Requests.memory, { base: 10 });\n }\n\n if (container.Requests.cpu) {\n acc.CPU += KubernetesResourceReservationHelper.parseCPU(container.Requests.cpu);\n }\n }\n\n return acc;\n },\n new KubernetesResourceReservation()\n );\n }\n\n static parseCPU(cpu) {\n let res = parseInt(cpu, 10);\n if (_.endsWith(cpu, 'm')) {\n res /= 1000;\n } else if (_.endsWith(cpu, 'n')) {\n res /= 1000000000;\n }\n return res;\n }\n\n static megaBytesValue(value) {\n return Math.floor(filesizeParser(value) / 1000 / 1000);\n }\n\n static bytesValue(mem) {\n return filesizeParser(mem) * 1000 * 1000;\n }\n\n static computeSliderMaxResources(nodes, pools, name, resourceOverCommitEnabled, resourceOverCommitPercent) {\n let maxResources = { CPU: 0, Memory: 0 };\n _.forEach(nodes, (item) => {\n maxResources.CPU += item.CPU;\n maxResources.Memory += filesizeParser(item.Memory);\n });\n maxResources.CPU = Math.trunc(maxResources.CPU * 10) / 10;\n maxResources.Memory = KubernetesResourceReservationHelper.megaBytesValue(maxResources.Memory);\n\n if (!resourceOverCommitEnabled) {\n const reservedResources = _.reduce(\n pools,\n (acc, pool) => {\n if (pool.Quota && pool.Namespace.Name !== name) {\n acc.CPU += pool.Quota.CpuLimit;\n acc.Memory += pool.Quota.MemoryLimit;\n }\n return acc;\n },\n { CPU: 0, Memory: 0 }\n );\n if (reservedResources.Memory) {\n reservedResources.Memory = KubernetesResourceReservationHelper.megaBytesValue(reservedResources.Memory);\n }\n maxResources.CPU = Math.trunc(parseFloat(maxResources.CPU - (maxResources.CPU * resourceOverCommitPercent) / 100 - reservedResources.CPU) * 10) / 10;\n maxResources.Memory = parseInt(maxResources.Memory - (maxResources.Memory * resourceOverCommitPercent) / 100 - reservedResources.Memory, 10);\n }\n return maxResources;\n }\n}\nexport default KubernetesResourceReservationHelper;\n","import _ from 'lodash-es';\nimport { KubernetesServiceHeadlessPrefix } from 'Kubernetes/models/service/models';\n\nclass KubernetesServiceHelper {\n static generateHeadlessServiceName(name) {\n return KubernetesServiceHeadlessPrefix + name;\n }\n\n static findApplicationBoundService(services, rawApp) {\n if (!rawApp.spec.template) {\n return undefined;\n }\n return _.find(services, (item) => item.spec.selector && _.isMatch(rawApp.spec.template.metadata.labels, item.spec.selector));\n }\n\n static findApplicationBoundServices(services, rawApp) {\n if (!rawApp.spec.template) {\n return undefined;\n }\n return _.filter(services, (item) => item.spec.selector && _.isMatch(rawApp.spec.template.metadata.labels, item.spec.selector));\n }\n}\nexport default KubernetesServiceHelper;\n","import _ from 'lodash-es';\nimport { KubernetesStack } from 'Kubernetes/models/stack/models';\n\nclass KubernetesStackHelper {\n static stacksFromApplications(applications) {\n const res = _.reduce(\n applications,\n (acc, app) => {\n if (app.StackName) {\n let stack = _.find(acc, { Name: app.StackName, ResourcePool: app.ResourcePool });\n if (!stack) {\n stack = new KubernetesStack();\n stack.Name = app.StackName;\n stack.ResourcePool = app.ResourcePool;\n acc.push(stack);\n }\n stack.Applications.push(app);\n }\n return acc;\n },\n []\n );\n return res;\n }\n}\nexport default KubernetesStackHelper;\n","import KubernetesStackHelper from './stackHelper';\n\ndescribe('stacksFromApplications', () => {\n const { stacksFromApplications } = KubernetesStackHelper;\n test('should return an empty array when passed an empty array', () => {\n expect(stacksFromApplications([])).toHaveLength(0);\n });\n\n test('should return an empty array when passed a list of applications without stacks', () => {\n expect(stacksFromApplications([{ StackName: '' }, { StackName: '' }, { StackName: '' }, { StackName: '' }])).toHaveLength(0);\n });\n});\n","import _ from 'lodash-es';\nimport uuidv4 from 'uuid/v4';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\n\nclass KubernetesVolumeHelper {\n // TODO: review\n // the following condition\n // && (app.ApplicationType === KubernetesApplicationTypes.STATEFULSET ? _.includes(volume.PersistentVolumeClaim.Name, app.Name) : true);\n // is made to enforce finding the good SFS when multiple SFS in the same namespace\n // are referencing an internal PVC using the same internal name\n // (PVC are not exposed to other apps so they can have the same name in differents SFS)\n static getUsingApplications(volume, applications) {\n return _.filter(applications, (app) => {\n const names = _.without(_.map(app.Volumes, 'persistentVolumeClaim.claimName'), undefined);\n const matchingNames = _.filter(names, (name) => _.startsWith(volume.PersistentVolumeClaim.Name, name));\n return (\n volume.ResourcePool.Namespace.Name === app.ResourcePool &&\n matchingNames.length &&\n (app.ApplicationType === KubernetesApplicationTypes.STATEFULSET ? _.includes(volume.PersistentVolumeClaim.Name, app.Name) : true)\n );\n });\n }\n\n static isUsed(item) {\n return item.Applications.length !== 0;\n }\n\n static generatedApplicationConfigVolumeName(name) {\n return 'config-' + name + '-' + uuidv4();\n }\n\n static isExternalVolume(volume) {\n return !volume.PersistentVolumeClaim.ApplicationOwner;\n }\n}\n\nexport default KubernetesVolumeHelper;\n","import * as JsonPatch from 'fast-json-patch';\nimport { KubernetesHorizontalPodAutoScaler } from './models';\nimport { KubernetesHorizontalPodAutoScalerCreatePayload } from './payload';\n\nexport class KubernetesHorizontalPodAutoScalerConverter {\n /**\n * Convert API data to KubernetesHorizontalPodAutoScaler model\n */\n static apiToModel(data, yaml) {\n const res = new KubernetesHorizontalPodAutoScaler();\n res.Id = data.metadata.uid;\n res.Namespace = data.metadata.namespace;\n res.Name = data.metadata.name;\n res.MinReplicas = data.spec.minReplicas;\n res.MaxReplicas = data.spec.maxReplicas;\n res.TargetCPUUtilization = data.spec.targetCPUUtilizationPercentage;\n\n if (data.spec.scaleTargetRef) {\n res.TargetEntity.ApiVersion = data.spec.scaleTargetRef.apiVersion;\n res.TargetEntity.Kind = data.spec.scaleTargetRef.kind;\n res.TargetEntity.Name = data.spec.scaleTargetRef.name;\n }\n res.Yaml = yaml ? yaml.data : '';\n return res;\n }\n\n static createPayload(data) {\n const payload = new KubernetesHorizontalPodAutoScalerCreatePayload();\n payload.metadata.namespace = data.Namespace;\n payload.metadata.name = data.TargetEntity.Name;\n payload.spec.minReplicas = data.MinReplicas;\n payload.spec.maxReplicas = data.MaxReplicas;\n payload.spec.targetCPUUtilizationPercentage = data.TargetCPUUtilization;\n payload.spec.scaleTargetRef.apiVersion = data.TargetEntity.ApiVersion;\n payload.spec.scaleTargetRef.kind = data.TargetEntity.Kind;\n payload.spec.scaleTargetRef.name = data.TargetEntity.Name;\n return payload;\n }\n\n static patchPayload(oldScaler, newScaler) {\n const oldPayload = KubernetesHorizontalPodAutoScalerConverter.createPayload(oldScaler);\n const newPayload = KubernetesHorizontalPodAutoScalerConverter.createPayload(newScaler);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n\n static applicationFormValuesToModel(formValues, kind) {\n const res = new KubernetesHorizontalPodAutoScaler();\n res.Name = formValues.Name;\n res.Namespace = formValues.ResourcePool.Namespace.Name;\n res.MinReplicas = formValues.AutoScaler.MinReplicas;\n res.MaxReplicas = formValues.AutoScaler.MaxReplicas;\n res.TargetCPUUtilization = formValues.AutoScaler.TargetCPUUtilization;\n res.TargetEntity.Name = formValues.Name;\n res.TargetEntity.Kind = kind;\n res.TargetEntity.ApiVersion = formValues.AutoScaler.ApiVersion;\n return res;\n }\n\n /**\n * Convertion functions to use with v2beta2 model\n */\n\n // static apiToModel(data, yaml) {\n // const res = new KubernetesHorizontalPodAutoScaler();\n // res.Id = data.metadata.uid;\n // res.Namespace = data.metadata.namespace;\n // res.Name = data.metadata.name;\n // res.MinReplicas = data.spec.minReplicas;\n // res.MaxReplicas = data.spec.maxReplicas;\n // res.TargetCPUUtilization = data.spec.targetCPUUtilization;\n\n // _.forEach(data.spec.metrics, (metric) => {\n // if (metric.type === 'Resource') {\n // if (metric.resource.name === 'cpu') {\n // res.TargetCPUUtilization = metric.resource.target.averageUtilization;\n // }\n // if (metric.resource.name === 'memory') {\n // res.TargetMemoryValue = parseFloat(metric.resource.target.averageValue) / 1000;\n // }\n // }\n // });\n\n // if (data.spec.scaleTargetRef) {\n // res.TargetEntity.ApiVersion = data.spec.scaleTargetRef.apiVersion;\n // res.TargetEntity.Kind = data.spec.scaleTargetRef.kind;\n // res.TargetEntity.Name = data.spec.scaleTargetRef.name;\n // }\n // res.Yaml = yaml ? yaml.data : '';\n // return res;\n // }\n\n // static createPayload(data) {\n // const payload = new KubernetesHorizontalPodAutoScalerCreatePayload();\n // payload.metadata.namespace = data.Namespace;\n // payload.metadata.name = data.TargetEntity.Name;\n // payload.spec.minReplicas = data.MinReplicas;\n // payload.spec.maxReplicas = data.MaxReplicas;\n\n // if (data.TargetMemoryValue) {\n // const memoryMetric = new KubernetesHorizontalPodAutoScalerMemoryMetric();\n // memoryMetric.resource.target.averageValue = data.TargetMemoryValue;\n // payload.spec.metrics.push(memoryMetric);\n // }\n\n // if (data.TargetCPUUtilization) {\n // const cpuMetric = new KubernetesHorizontalPodAutoScalerCPUMetric();\n // cpuMetric.resource.target.averageUtilization = data.TargetCPUUtilization;\n // payload.spec.metrics.push(cpuMetric);\n // }\n\n // payload.spec.scaleTargetRef.apiVersion = data.TargetEntity.ApiVersion;\n // payload.spec.scaleTargetRef.kind = data.TargetEntity.Kind;\n // payload.spec.scaleTargetRef.name = data.TargetEntity.Name;\n\n // return payload;\n // }\n\n // static applicationFormValuesToModel(formValues, kind) {\n // const res = new KubernetesHorizontalPodAutoScaler();\n // res.Name = formValues.Name;\n // res.Namespace = formValues.ResourcePool.Namespace.Name;\n // res.MinReplicas = formValues.AutoScaler.MinReplicas;\n // res.MaxReplicas = formValues.AutoScaler.MaxReplicas;\n // res.TargetCPUUtilization = formValues.AutoScaler.TargetCPUUtilization;\n // if (formValues.AutoScaler.TargetMemoryValue) {\n // res.TargetMemoryValue = formValues.AutoScaler.TargetMemoryValue + 'M';\n // }\n // res.TargetEntity.Name = formValues.Name;\n // res.TargetEntity.Kind = kind;\n // return res;\n // }\n}\n","import _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesApplication, KubernetesApplicationTypes, KubernetesApplicationTypeStrings } from 'Kubernetes/models/application/models';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\n\nexport class KubernetesHorizontalPodAutoScalerHelper {\n static findApplicationBoundScaler(sList, app) {\n const kind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(app);\n return _.find(sList, (item) => item.TargetEntity.Kind === kind && item.TargetEntity.Name === app.Name);\n }\n\n static getApplicationTypeString(app) {\n if ((app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT) || app instanceof KubernetesDeployment) {\n return KubernetesApplicationTypeStrings.DEPLOYMENT;\n } else if ((app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DAEMONSET) || app instanceof KubernetesDaemonSet) {\n return KubernetesApplicationTypeStrings.DAEMONSET;\n } else if ((app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.STATEFULSET) || app instanceof KubernetesStatefulSet) {\n return KubernetesApplicationTypeStrings.STATEFULSET;\n } else if (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.POD) {\n return KubernetesApplicationTypeStrings.POD;\n } else {\n throw new PortainerError('Unable to determine application type');\n }\n }\n}\n","/**\n * KubernetesHorizontalPodAutoScaler Model\n */\nconst _KubernetesHorizontalPodAutoScaler = Object.freeze({\n Id: '',\n Namespace: '',\n Name: '',\n MinReplicas: 1,\n MaxReplicas: 1,\n TargetCPUUtilization: 0,\n TargetEntity: {\n ApiVersion: '',\n Kind: '',\n Name: '',\n },\n Yaml: '',\n});\n\nexport class KubernetesHorizontalPodAutoScaler {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScaler)));\n }\n}\n","/**\n * KubernetesHorizontalPodAutoScaler Create Payload Model\n */\nconst _KubernetesHorizontalPodAutoScalerCreatePayload = Object.freeze({\n metadata: {\n namespace: '',\n name: '',\n },\n spec: {\n maxReplicas: 0,\n minReplicas: 0,\n targetCPUUtilizationPercentage: 0,\n scaleTargetRef: {\n kind: '',\n name: '',\n },\n },\n});\n\nexport class KubernetesHorizontalPodAutoScalerCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerCreatePayload)));\n }\n}\n\n/**\n * KubernetesHorizontalPodAutoScaler Create Payload Model for v2beta2\n * Include support of memory usage\n */\n\n// const _KubernetesHorizontalPodAutoScalerCreatePayload = Object.freeze({\n// metadata: {\n// namespace: '',\n// name: ''\n// },\n// spec: {\n// maxReplicas: 0,\n// minReplicas: 0,\n// targetCPUUtilizationPercentage: 0,\n// scaleTargetRef: {\n// kind: '',\n// name: ''\n// },\n// metrics: []\n// }\n// });\n\n// export class KubernetesHorizontalPodAutoScalerCreatePayload {\n// constructor() {\n// Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerCreatePayload)));\n// }\n// }\n\n// const _KubernetesHorizontalPodAutoScalerCPUMetric = Object.freeze({\n// type: 'Resource',\n// resource: {\n// name: 'cpu',\n// target: {\n// type: 'Utilization',\n// averageUtilization: 0\n// }\n// }\n// });\n\n// export class KubernetesHorizontalPodAutoScalerCPUMetric {\n// constructor() {\n// Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerCPUMetric)));\n// }\n// }\n\n// const _KubernetesHorizontalPodAutoScalerMemoryMetric = Object.freeze({\n// type: 'Resource',\n// resource: {\n// name: 'memory',\n// target: {\n// type: 'AverageValue',\n// averageValue: ''\n// }\n// }\n// });\n\n// export class KubernetesHorizontalPodAutoScalerMemoryMetric {\n// constructor() {\n// Object.assign(this, JSON.parse(JSON.stringify(_KubernetesHorizontalPodAutoScalerMemoryMetric)));\n// }\n// }\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesHorizontalPodAutoScalers', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesHorizontalPodAutoScalersFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/autoscaling/v1' + (namespace ? '/namespaces/:namespace' : '') + '/horizontalpodautoscalers/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesHorizontalPodAutoScalerConverter } from './converter';\n\nclass KubernetesHorizontalPodAutoScalerService {\n /* @ngInject */\n constructor($async, KubernetesHorizontalPodAutoScalers) {\n this.$async = $async;\n this.KubernetesHorizontalPodAutoScalers = KubernetesHorizontalPodAutoScalers;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n // this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([\n this.KubernetesHorizontalPodAutoScalers(namespace).get(params).$promise,\n this.KubernetesHorizontalPodAutoScalers(namespace).getYaml(params).$promise,\n ]);\n const res = KubernetesHorizontalPodAutoScalerConverter.apiToModel(raw, yaml);\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve HorizontalPodAutoScaler', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesHorizontalPodAutoScalers(namespace).get().$promise;\n const res = _.map(data.items, (item) => KubernetesHorizontalPodAutoScalerConverter.apiToModel(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve HorizontalPodAutoScalers', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(horizontalPodAutoScaler) {\n try {\n const params = {};\n const payload = KubernetesHorizontalPodAutoScalerConverter.createPayload(horizontalPodAutoScaler);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesHorizontalPodAutoScalers(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create horizontalPodAutoScaler', err);\n }\n }\n\n create(horizontalPodAutoScaler) {\n return this.$async(this.createAsync, horizontalPodAutoScaler);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newHorizontalPodAutoScaler.Name;\n const namespace = newHorizontalPodAutoScaler.Namespace;\n const payload = KubernetesHorizontalPodAutoScalerConverter.patchPayload(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesHorizontalPodAutoScalers(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch horizontalPodAutoScaler', err);\n }\n }\n\n patch(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler) {\n return this.$async(this.patchAsync, oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(horizontalPodAutoScaler) {\n try {\n const params = new KubernetesCommonParams();\n params.id = horizontalPodAutoScaler.Name;\n const namespace = horizontalPodAutoScaler.Namespace;\n await this.KubernetesHorizontalPodAutoScalers(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove horizontalPodAutoScaler', err);\n }\n }\n\n delete(horizontalPodAutoScaler) {\n return this.$async(this.deleteAsync, horizontalPodAutoScaler);\n }\n\n // /**\n // * ROLLBACK\n // */\n // async rollbackAsync(namespace, name, payload) {\n // try {\n // const params = new KubernetesCommonParams();\n // params.id = name;\n // await this.KubernetesHorizontalPodAutoScalers(namespace).rollback(params, payload).$promise;\n // } catch (err) {\n // throw new PortainerError('Unable to rollback horizontalPodAutoScaler', err);\n // }\n // }\n\n // rollback(namespace, name, payload) {\n // return this.$async(this.rollbackAsync, namespace, name, payload);\n // }\n}\n\nexport default KubernetesHorizontalPodAutoScalerService;\nangular.module('portainer.kubernetes').service('KubernetesHorizontalPodAutoScalerService', KubernetesHorizontalPodAutoScalerService);\n","export const KubernetesIngressClassAnnotation = 'kubernetes.io/ingress.class';\n\n// keys must match KubernetesIngressClassTypes values to map them quickly using the ingress type\n// KubernetesIngressClassRewriteTargetAnnotations[KubernetesIngressClassTypes.NGINX] for example\nexport const KubernetesIngressClassRewriteTargetAnnotations = Object.freeze({\n nginx: { 'nginx.ingress.kubernetes.io/rewrite-target': '/' },\n traefik: { 'traefik.ingress.kubernetes.io/rewrite-target': '/' },\n});\n\nexport const KubernetesIngressClassTypes = Object.freeze({\n NGINX: 'nginx',\n TRAEFIK: 'traefik',\n});\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport {\n KubernetesResourcePoolIngressClassAnnotationFormValue,\n KubernetesResourcePoolIngressClassFormValue,\n KubernetesResourcePoolIngressClassHostFormValue,\n} from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesApplicationPublishingTypes } from '../models/application/models';\nimport { KubernetesIngress, KubernetesIngressRule } from './models';\nimport { KubernetesIngressCreatePayload, KubernetesIngressRuleCreatePayload, KubernetesIngressRulePathCreatePayload } from './payloads';\nimport { KubernetesIngressClassAnnotation, KubernetesIngressClassRewriteTargetAnnotations } from './constants';\n\nexport class KubernetesIngressConverter {\n static apiToModel(data) {\n const paths = _.flatMap(data.spec.rules, (rule) => {\n return !rule.http\n ? []\n : _.map(rule.http.paths, (path) => {\n const ingRule = new KubernetesIngressRule();\n ingRule.IngressName = data.metadata.name;\n ingRule.ServiceName = path.backend.service.name;\n ingRule.Host = rule.host || '';\n ingRule.IP = data.status.loadBalancer.ingress ? data.status.loadBalancer.ingress[0].ip : undefined;\n ingRule.Port = path.backend.service.port.number;\n ingRule.Path = path.path;\n return ingRule;\n });\n });\n\n const res = new KubernetesIngress();\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.Annotations = data.metadata.annotations || {};\n res.IngressClassName =\n data.metadata.annotations && data.metadata.annotations[KubernetesIngressClassAnnotation]\n ? data.metadata.annotations[KubernetesIngressClassAnnotation]\n : data.spec.ingressClassName;\n res.Paths = paths;\n res.Hosts = _.uniq(_.map(data.spec.rules, 'host'));\n const idx = _.findIndex(res.Hosts, (h) => h === undefined);\n if (idx >= 0) {\n res.Hosts.splice(idx, 1, '');\n }\n return res;\n }\n\n /**\n * Converts Application Form Value (from Create Application View) to Ingresses\n * @param {KubernetesApplicationFormValues} formValues\n * @param {string} serviceName\n * @returns {KubernetesIngressRule[]}\n */\n static applicationFormValuesToIngresses(formValues, serviceName) {\n const isPublishingToIngress = formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS;\n const ingresses = angular.copy(formValues.OriginalIngresses);\n _.forEach(formValues.PublishedPorts, (p) => {\n const ingress = _.find(ingresses, { Name: p.IngressName });\n if (ingress) {\n if (p.NeedsDeletion) {\n _.remove(ingress.Paths, (path) => path.Port === p.ContainerPort && path.ServiceName === serviceName && path.Path === p.IngressRoute);\n } else if (isPublishingToIngress && p.IsNew) {\n const rule = new KubernetesIngressRule();\n rule.IngressName = ingress.Name;\n rule.ServiceName = serviceName;\n rule.Port = p.ContainerPort;\n if (p.IngressRoute) {\n rule.Path = _.startsWith(p.IngressRoute, '/') ? p.IngressRoute : '/' + p.IngressRoute;\n }\n rule.Host = p.IngressHost;\n ingress.Paths.push(rule);\n }\n }\n });\n return ingresses;\n }\n\n static applicationFormValuesToDeleteIngresses(formValues, application) {\n const ingresses = angular.copy(formValues.OriginalIngresses);\n application.Services.forEach((service) => {\n ingresses.forEach((ingress) => {\n const path = _.find(ingress.Paths, { ServiceName: service.metadata.name });\n if (path) {\n _.remove(ingress.Paths, path);\n }\n });\n });\n return ingresses;\n }\n\n static deleteIngressByServiceName(formValues, service) {\n const ingresses = angular.copy(formValues.OriginalIngresses);\n ingresses.forEach((ingress) => {\n const path = _.find(ingress.Paths, { ServiceName: service.Name });\n if (path) {\n _.remove(ingress.Paths, path);\n }\n });\n return ingresses;\n }\n\n static newApplicationFormValuesToIngresses(formValues, serviceName, servicePorts) {\n const ingresses = angular.copy(formValues.OriginalIngresses);\n servicePorts.forEach((port) => {\n const ingress = _.find(ingresses, { Name: port.ingress.IngressName });\n if (ingress) {\n const rule = new KubernetesIngressRule();\n rule.ServiceName = serviceName;\n rule.IngressName = port.ingress.IngressName;\n rule.Host = port.ingress.Host;\n rule.Path = _.startsWith(port.ingress.Path, '/') ? port.ingress.Path : '/' + port.ingress.Path;\n rule.Port = port.port;\n\n ingress.Paths.push(rule);\n }\n });\n return ingresses;\n }\n\n static editingFormValuesToIngresses(formValues, serviceName, servicePorts) {\n const ingresses = angular.copy(formValues.OriginalIngresses);\n servicePorts.forEach((port) => {\n const ingressMatched = _.find(ingresses, { Name: port.ingress.IngressName });\n if (ingressMatched) {\n const pathMatched = _.find(ingressMatched.Paths, { ServiceName: serviceName });\n _.remove(ingressMatched.Paths, pathMatched);\n\n const rule = new KubernetesIngressRule();\n rule.ServiceName = serviceName;\n rule.IngressName = port.ingress.IngressName;\n rule.Host = port.ingress.Host;\n rule.Path = _.startsWith(port.ingress.Path, '/') ? port.ingress.Path : '/' + port.ingress.Path;\n rule.Port = port.port;\n\n ingressMatched.Paths.push(rule);\n }\n });\n return ingresses;\n }\n\n /**\n *\n * @param {KubernetesResourcePoolIngressClassFormValue[]} formValues\n * @returns {KubernetesIngress} Ingress\n */\n static resourcePoolIngressClassFormValueToIngress(formValues) {\n const res = new KubernetesIngress();\n res.Name = formValues.IngressClass.Name;\n res.Namespace = formValues.Namespace;\n const pairs = _.map(formValues.Annotations, (a) => [a.Key, a.Value]);\n res.Annotations = _.fromPairs(pairs);\n if (formValues.RewriteTarget) {\n _.extend(res.Annotations, KubernetesIngressClassRewriteTargetAnnotations[formValues.IngressClass.Type]);\n }\n res.Annotations[KubernetesIngressClassAnnotation] = formValues.IngressClass.Name;\n res.IngressClassName = formValues.IngressClass.Name;\n res.Hosts = formValues.Hosts;\n res.Paths = formValues.Paths;\n return res;\n }\n\n /**\n *\n * @param {KubernetesIngressClass} ics Ingress classes (saved in Portainer DB)\n * @param {KubernetesIngress[]} ingresses Existing Kubernetes ingresses. Must be empty for RP CREATE VIEW and filled for RP EDIT VIEW\n */\n static ingressClassesToFormValues(ics, ingresses) {\n const res = _.map(ics, (ic) => {\n const fv = new KubernetesResourcePoolIngressClassFormValue(ic);\n const ingress = _.find(ingresses, { Name: ic.Name });\n if (ingress) {\n fv.Selected = true;\n fv.WasSelected = true;\n fv.Hosts = _.map(ingress.Hosts, (host) => {\n const hfv = new KubernetesResourcePoolIngressClassHostFormValue();\n hfv.Host = host;\n hfv.PreviousHost = host;\n hfv.IsNew = false;\n return hfv;\n });\n const [[rewriteKey]] = _.toPairs(KubernetesIngressClassRewriteTargetAnnotations[ic.Type]);\n const annotations = _.map(_.toPairs(ingress.Annotations), ([key, value]) => {\n if (key === rewriteKey) {\n fv.RewriteTarget = true;\n } else if (key !== KubernetesIngressClassAnnotation) {\n const annotation = new KubernetesResourcePoolIngressClassAnnotationFormValue();\n annotation.Key = key;\n annotation.Value = value;\n return annotation;\n }\n });\n fv.Annotations = _.without(annotations, undefined);\n fv.AdvancedConfig = fv.Annotations.length > 0;\n fv.Paths = ingress.Paths;\n }\n return fv;\n });\n return res;\n }\n\n static createPayload(data) {\n const res = new KubernetesIngressCreatePayload();\n res.metadata.name = data.Name;\n res.metadata.namespace = data.Namespace;\n res.spec.ingressClassName = data.IngressClassName;\n if (data.Paths && data.Paths.length) {\n _.forEach(data.Paths, (p) => {\n if (p.Host === 'undefined' || p.Host === undefined) {\n p.Host = '';\n }\n });\n const hostsWithRules = [];\n const groups = _.groupBy(data.Paths, 'Host');\n let rules = _.map(groups, (paths, host) => {\n const updatedHost = _.find(data.Hosts, (h) => {\n return h === host || h.PreviousHost === host;\n });\n host = updatedHost.Host || updatedHost;\n if (updatedHost.NeedsDeletion) {\n return;\n }\n const rule = new KubernetesIngressRuleCreatePayload();\n KubernetesCommonHelper.assignOrDeleteIfEmpty(rule, 'host', host);\n rule.http.paths = _.map(paths, (p) => {\n const path = new KubernetesIngressRulePathCreatePayload();\n path.path = p.Path;\n path.backend.service.name = p.ServiceName;\n path.backend.service.port.number = p.Port;\n return path;\n });\n hostsWithRules.push(host);\n return rule;\n });\n rules = _.without(rules, undefined);\n const keptHosts = _.without(\n _.map(data.Hosts, (h) => (h.NeedsDeletion ? undefined : h.Host || h)),\n undefined\n );\n const hostsWithoutRules = _.without(keptHosts, ...hostsWithRules);\n const emptyRules = _.map(hostsWithoutRules, (host) => {\n return { host: host };\n });\n rules = _.concat(rules, emptyRules);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(res, 'spec.rules', rules);\n } else if (data.Hosts) {\n res.spec.rules = [];\n _.forEach(data.Hosts, (host) => {\n if (!host.NeedsDeletion) {\n res.spec.rules.push({ host: host.Host || host });\n }\n });\n } else {\n delete res.spec.rules;\n }\n return res;\n }\n\n static patchPayload(oldData, newData) {\n const oldPayload = KubernetesIngressConverter.createPayload(oldData);\n const newPayload = KubernetesIngressConverter.createPayload(newData);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n","import _ from 'lodash-es';\n\nexport class KubernetesIngressHelper {\n static findSBoundServiceIngressesRules(ingresses, serviceName) {\n const rules = _.flatMap(ingresses, 'Paths');\n return _.filter(rules, { ServiceName: serviceName });\n }\n}\n","export function KubernetesIngress() {\n return {\n Name: '',\n Namespace: '',\n Annotations: {},\n // Host: undefined,\n Hosts: [],\n // PreviousHost: undefined, // only use for RP ingress host edit\n Paths: [],\n IngressClassName: '',\n };\n}\n\n// TODO: refactor @LP\n// rename this model to KubernetesIngressPath (and all it's references)\n// as it's conceptually not an ingress rule (element of ingress.spec.rules)\n// but a path (element of ingress.spec.rules[].paths)\nexport function KubernetesIngressRule() {\n return {\n IngressName: '',\n ServiceName: '',\n Host: '',\n IP: '',\n Port: '',\n Path: '',\n };\n}\n\nexport function KubernetesIngressClass() {\n return {\n Name: '',\n Type: undefined,\n NeedsDeletion: false,\n IsNew: true,\n };\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\nexport function KubernetesIngressCreatePayload() {\n return {\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n ingressClassName: '',\n rules: [],\n },\n };\n}\n\nexport function KubernetesIngressRuleCreatePayload() {\n return {\n host: '',\n http: {\n paths: [],\n },\n };\n}\n\nexport function KubernetesIngressRulePathCreatePayload() {\n return {\n path: '',\n pathType: 'ImplementationSpecific',\n backend: {\n service: {\n name: '',\n port: {\n number: 0,\n },\n },\n },\n };\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesIngresses', factory);\n\nfunction factory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = `${API_ENDPOINT_ENDPOINTS}/:endpointId/kubernetes/apis/networking.k8s.io/v1${namespace ? '/namespaces/:namespace' : ''}/ingresses/:id/:action`;\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n}\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesIngressConverter } from './converter';\n\n/* @ngInject */\nexport function KubernetesIngressService($async, KubernetesIngresses) {\n return {\n get,\n create,\n patch,\n delete: _delete,\n };\n\n async function getOne(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([KubernetesIngresses(namespace).get(params).$promise, KubernetesIngresses(namespace).getYaml(params).$promise]);\n const res = {\n Raw: KubernetesIngressConverter.apiToModel(raw),\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Ingress', err);\n }\n }\n\n async function getAll(namespace) {\n try {\n const data = await KubernetesIngresses(namespace).get().$promise;\n const res = _.reduce(data.items, (arr, item) => _.concat(arr, KubernetesIngressConverter.apiToModel(item)), []);\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Ingresses', err);\n }\n }\n\n function get(namespace, name) {\n if (name) {\n return $async(getOne, namespace, name);\n }\n return $async(getAll, namespace);\n }\n\n function create(ingress) {\n return $async(async () => {\n try {\n const params = {};\n const payload = KubernetesIngressConverter.createPayload(ingress);\n const namespace = payload.metadata.namespace;\n const data = await KubernetesIngresses(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create ingress', err);\n }\n });\n }\n\n function patch(oldIngress, newIngress) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = newIngress.Name;\n const namespace = newIngress.Namespace;\n const payload = KubernetesIngressConverter.patchPayload(oldIngress, newIngress);\n if (!payload.length) {\n return;\n }\n const data = await KubernetesIngresses(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch ingress', err);\n }\n });\n }\n\n function _delete(namespace, ingressClassName) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = ingressClassName;\n await KubernetesIngresses(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete ingress', err);\n }\n });\n }\n}\n\nangular.module('portainer.kubernetes').service('KubernetesIngressService', KubernetesIngressService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesMetricsService {\n /* @ngInject */\n constructor($async, KubernetesMetrics) {\n this.$async = $async;\n this.KubernetesMetrics = KubernetesMetrics;\n\n this.capabilitiesAsync = this.capabilitiesAsync.bind(this);\n\n this.getPodAsync = this.getPodAsync.bind(this);\n this.getNodeAsync = this.getNodeAsync.bind(this);\n\n this.getPodsAsync = this.getPodsAsync.bind(this);\n this.getNodesAsync = this.getNodesAsync.bind(this);\n }\n\n /**\n * GET\n */\n async capabilitiesAsync(endpointID) {\n try {\n await this.KubernetesMetrics().capabilities({ endpointId: endpointID }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to retrieve metrics', err);\n }\n }\n\n capabilities(endpointID) {\n return this.$async(this.capabilitiesAsync, endpointID);\n }\n\n /**\n * Stats of Node\n *\n * @param {string} nodeName\n */\n async getNodeAsync(nodeName) {\n try {\n const params = new KubernetesCommonParams();\n params.id = nodeName;\n const data = await this.KubernetesMetrics().getNode(params).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to retrieve node stats', err);\n }\n }\n\n getNode(nodeName) {\n return this.$async(this.getNodeAsync, nodeName);\n }\n\n /**\n * Stats\n *\n * @param {string} namespace\n * @param {string} podName\n */\n async getPodAsync(namespace, podName) {\n try {\n const params = new KubernetesCommonParams();\n params.id = podName;\n const data = await this.KubernetesMetrics(namespace).getPod(params).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod stats', err);\n }\n }\n\n getPod(namespace, podName) {\n return this.$async(this.getPodAsync, namespace, podName);\n }\n\n /**\n * Stats of Nodes in cluster\n *\n * @param {string} endpointID\n */\n async getNodesAsync(endpointID) {\n try {\n const data = await this.KubernetesMetrics().getNodes({ endpointId: endpointID }).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to retrieve nodes stats', err);\n }\n }\n\n getNodes(endpointID) {\n return this.$async(this.getNodesAsync, endpointID);\n }\n\n /**\n * Stats of Pods in a namespace\n *\n * @param {string} namespace\n */\n async getPodsAsync(namespace) {\n try {\n const data = await this.KubernetesMetrics(namespace).getPods().$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod stats', err);\n }\n }\n\n getPods(namespace) {\n return this.$async(this.getPodsAsync, namespace);\n }\n}\n\nexport default KubernetesMetricsService;\nangular.module('portainer.kubernetes').service('KubernetesMetricsService', KubernetesMetricsService);\n","angular.module('portainer.kubernetes').factory('KubernetesMetrics', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesMetrics($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/metrics.k8s.io/v1beta1';\n const podUrl = `${url}${namespace ? '/namespaces/:namespace' : ''}/pods/:id`;\n\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n capabilities: { method: 'GET' },\n getPod: {\n method: 'GET',\n url: podUrl,\n },\n getNode: {\n method: 'GET',\n url: `${url}/nodes/:id`,\n },\n getPods: {\n method: 'GET',\n url: `${url}/namespaces/:namespace/pods`,\n },\n getNodes: {\n method: 'GET',\n url: `${url}/nodes`,\n },\n }\n );\n };\n },\n]);\n","import { PorImageRegistryModel } from '@/docker/models/porImageRegistry';\nimport { KubernetesApplicationDataAccessPolicies, KubernetesApplicationDeploymentTypes, KubernetesApplicationPublishingTypes, KubernetesApplicationPlacementTypes } from './models';\n\n/**\n * KubernetesApplicationFormValues Model\n */\nexport function KubernetesApplicationFormValues() {\n this.ApplicationType = undefined; // will only exist for formValues generated from Application (app edit situation;\n this.ResourcePool = {};\n this.Name = '';\n this.StackName = '';\n this.ApplicationOwner = '';\n this.ImageModel = new PorImageRegistryModel();\n this.Note = '';\n this.MemoryLimit = 0;\n this.CpuLimit = 0;\n this.DeploymentType = KubernetesApplicationDeploymentTypes.REPLICATED;\n this.ReplicaCount = 1;\n this.AutoScaler = {};\n this.Containers = [];\n this.Services = [];\n this.EnvironmentVariables = []; // KubernetesApplicationEnvironmentVariableFormValue lis;\n this.DataAccessPolicy = KubernetesApplicationDataAccessPolicies.ISOLATED;\n this.PersistedFolders = []; // KubernetesApplicationPersistedFolderFormValue lis;\n this.Configurations = []; // KubernetesApplicationConfigurationFormValue lis;\n this.PublishingType = KubernetesApplicationPublishingTypes.CLUSTER_IP;\n this.PublishedPorts = []; // KubernetesApplicationPublishedPortFormValue lis;\n this.PlacementType = KubernetesApplicationPlacementTypes.PREFERRED;\n this.Placements = []; // KubernetesApplicationPlacementFormValue lis;\n this.OriginalIngresses = undefined;\n this.IsPublishingService = false;\n}\n\nexport const KubernetesApplicationConfigurationFormValueOverridenKeyTypes = Object.freeze({\n NONE: 0,\n ENVIRONMENT: 1,\n FILESYSTEM: 2,\n});\n\n/**\n * KubernetesApplicationConfigurationFormValueOverridenKey Model\n */\nconst _KubernetesApplicationConfigurationFormValueOverridenKey = Object.freeze({\n Key: '',\n Path: '',\n Type: KubernetesApplicationConfigurationFormValueOverridenKeyTypes.ENVIRONMENT,\n});\n\nexport class KubernetesApplicationConfigurationFormValueOverridenKey {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationConfigurationFormValueOverridenKey)));\n }\n}\n\n/**\n * KubernetesApplicationConfigurationFormValue Model\n */\nconst _KubernetesApplicationConfigurationFormValue = Object.freeze({\n SelectedConfiguration: undefined,\n Overriden: false,\n OverridenKeys: [], // KubernetesApplicationConfigurationFormValueOverridenKey list\n});\n\nexport class KubernetesApplicationConfigurationFormValue {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationConfigurationFormValue)));\n }\n}\n\n/**\n * KubernetesApplicationEnvironmentVariableFormValue Model\n */\nconst _KubernetesApplicationEnvironmentVariableFormValue = Object.freeze({\n Name: '',\n Value: '',\n IsSecret: false,\n NeedsDeletion: false,\n IsNew: true,\n NameIndex: '', // keep the original name for sorting\n});\n\nexport class KubernetesApplicationEnvironmentVariableFormValue {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvironmentVariableFormValue)));\n }\n}\n\n/**\n * KubernetesApplicationPersistedFolderFormValue Model\n */\nconst _KubernetesApplicationPersistedFolderFormValue = Object.freeze({\n PersistentVolumeClaimName: '', // will be empty for new volumes (create/edit app) and filled for existing ones (edit)\n NeedsDeletion: false,\n ContainerPath: '',\n Size: '',\n SizeUnit: 'GB',\n StorageClass: {},\n ExistingVolume: null,\n UseNewVolume: true,\n});\n\nexport class KubernetesApplicationPersistedFolderFormValue {\n constructor(storageClass) {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationPersistedFolderFormValue)));\n this.StorageClass = storageClass;\n }\n}\n\n/**\n * KubernetesApplicationPublishedPortFormValue Model\n */\nexport function KubernetesApplicationPublishedPortFormValue() {\n return {\n NeedsDeletion: false,\n IsNew: true,\n ContainerPort: '',\n NodePort: '',\n LoadBalancerPort: '',\n LoadBalancerNodePort: undefined, // only filled to save existing loadbalancer nodePort and drop it when moving app exposure from LB to Internal/NodePort\n Protocol: 'TCP',\n IngressName: undefined,\n IngressRoute: undefined,\n IngressHost: undefined,\n IngressHosts: [],\n };\n}\n\nexport function KubernetesApplicationPlacementFormValue() {\n return {\n Label: {},\n Value: '',\n NeedsDeletion: false,\n IsNew: true,\n };\n}\n\n/**\n * KubernetesApplicationAutoScalerFormValue Model\n */\nconst _KubernetesApplicationAutoScalerFormValue = Object.freeze({\n MinReplicas: 0,\n MaxReplicas: 0,\n TargetCPUUtilization: 50,\n ApiVersion: '',\n IsUsed: false,\n});\n\nexport class KubernetesApplicationAutoScalerFormValue {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationAutoScalerFormValue)));\n }\n}\n\nexport function KubernetesFormValidationReferences() {\n return {\n refs: {},\n hasRefs: false,\n };\n}\n","export const KubernetesApplicationDeploymentTypes = Object.freeze({\n REPLICATED: 1,\n GLOBAL: 2,\n});\n\nexport const KubernetesApplicationDataAccessPolicies = Object.freeze({\n SHARED: 1,\n ISOLATED: 2,\n});\n\nexport const KubernetesApplicationTypes = Object.freeze({\n DEPLOYMENT: 1,\n DAEMONSET: 2,\n STATEFULSET: 3,\n POD: 4,\n HELM: 5,\n});\n\nexport const KubernetesApplicationTypeStrings = Object.freeze({\n HELM: 'Helm',\n DEPLOYMENT: 'Deployment',\n DAEMONSET: 'DaemonSet',\n STATEFULSET: 'StatefulSet',\n POD: 'Pod',\n});\n\nexport const KubernetesApplicationPublishingTypes = Object.freeze({\n CLUSTER_IP: 1,\n NODE_PORT: 2,\n LOAD_BALANCER: 3,\n INGRESS: 4,\n});\n\nexport const KubernetesApplicationPlacementTypes = Object.freeze({\n PREFERRED: 1,\n MANDATORY: 2,\n});\n\nexport const KubernetesApplicationQuotaDefaults = {\n CpuLimit: 0.1,\n MemoryLimit: 64, // MB\n};\n\nexport const KubernetesPortainerApplicationStackNameLabel = 'io.portainer.kubernetes.application.stack';\n\nexport const KubernetesPortainerApplicationStackIdLabel = 'io.portainer.kubernetes.application.stackid';\n\nexport const KubernetesPortainerApplicationKindLabel = 'io.portainer.kubernetes.application.kind';\n\nexport const KubernetesPortainerApplicationNameLabel = 'io.portainer.kubernetes.application.name';\n\nexport const KubernetesPortainerApplicationOwnerLabel = 'io.portainer.kubernetes.application.owner';\n\nexport const KubernetesPortainerApplicationNote = 'io.portainer.kubernetes.application.note';\n","export * from './constants';\n\n/**\n * KubernetesApplication Model (Composite)\n */\nconst _KubernetesApplication = Object.freeze({\n Id: '',\n Name: '',\n StackName: '',\n StackId: '',\n ApplicationKind: '',\n ApplicationOwner: '',\n ApplicationName: '',\n ResourcePool: '',\n Image: '',\n CreationDate: 0,\n Pods: [],\n Containers: [],\n Metadata: {},\n Limits: {},\n ServiceType: '',\n ServiceId: '',\n ServiceName: '',\n HeadlessServiceName: undefined, // only used for StatefulSet\n LoadBalancerIPAddress: undefined, // only filled when bound service is LoadBalancer and state is available\n PublishedPorts: [],\n Volumes: [],\n Env: [],\n PersistedFolders: [], // KubernetesApplicationPersistedFolder list\n ConfigurationVolumes: [], // KubernetesApplicationConfigurationVolume list\n DeploymentType: 'Unknown',\n DataAccessPolicy: 'Unknown',\n ApplicationType: 'Unknown',\n RunningPodsCount: 0,\n TotalPodsCount: 0,\n Yaml: '',\n Note: '',\n Revisions: undefined,\n CurrentRevision: undefined,\n Raw: undefined, // only filled when inspecting app details / create / edit view (never filled in multiple-apps views)\n AutoScaler: undefined, // only filled if the application has an HorizontalPodAutoScaler bound to it\n});\n\nexport class KubernetesApplication {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplication)));\n }\n}\n\n/**\n * HelmApplication Model (Composite)\n */\nexport class HelmApplication {\n constructor() {\n this.Id = '';\n this.Name = '';\n this.KubernetesApplications = [];\n this.ApplicationOwner = '';\n this.CreationDate = 0;\n this.ApplicationType = 'Unknown';\n this.Status = '';\n this.StackName = '-';\n this.ResourcePool = '-';\n this.Image = '-';\n this.PublishedPorts = [];\n }\n}\n\n/**\n * KubernetesApplicationPersistedFolder Model\n */\nconst _KubernetesApplicationPersistedFolder = Object.freeze({\n MountPath: '',\n PersistentVolumeClaimName: '',\n HostPath: '',\n});\n\nexport class KubernetesApplicationPersistedFolder {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationPersistedFolder)));\n }\n}\n\n/**\n * KubernetesApplicationConfigurationVolume Model\n */\nconst _KubernetesApplicationConfigurationVolume = Object.freeze({\n fileMountPath: '',\n rootMountPath: '',\n configurationKey: '',\n configurationName: '',\n});\n\nexport class KubernetesApplicationConfigurationVolume {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationConfigurationVolume)));\n }\n}\n\n/**\n * KubernetesApplicationPort Model\n */\nconst _KubernetesApplicationPort = Object.freeze({\n IngressRules: [], // KubernetesIngressRule[]\n NodePort: 0,\n TargetPort: 0,\n Port: 0,\n Protocol: '',\n});\n\nexport class KubernetesApplicationPort {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationPort)));\n }\n}\n\nexport const KubernetesDeploymentTypes = Object.freeze({\n GIT: 'git',\n CONTENT: 'content',\n APPLICATION_FORM: 'application form',\n URL: 'url',\n});\n","/////////////////////////// VOLUME MOUNT ///////////////////////////////\n/**\n * KubernetesApplicationVolumeMount Model\n */\nconst _KubernetesApplicationVolumeMount = Object.freeze({\n name: '',\n mountPath: '',\n readOnly: false,\n});\n\nexport class KubernetesApplicationVolumeMountPayload {\n constructor(readOnly) {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeMount)));\n if (readOnly) {\n this.readOnly = true;\n } else {\n delete this.readOnly;\n }\n }\n}\n\n///////////////////////////////// PVC /////////////////////////////////\n/**\n * KubernetesApplicationVolumePersistentPayload Model\n */\nconst _KubernetesApplicationVolumePersistentPayload = Object.freeze({\n name: '',\n persistentVolumeClaim: {\n claimName: '',\n },\n});\n\nexport class KubernetesApplicationVolumePersistentPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumePersistentPayload)));\n }\n}\n\n/////////////////////////////// CONFIG AS VOLUME ////////////////////////\n/**\n * KubernetesApplicationVolumeConfigMapPayload Model\n */\nconst _KubernetesApplicationVolumeConfigMapPayload = Object.freeze({\n name: '',\n configMap: {\n name: '',\n items: [], // KubernetesApplicationVolumeEntryPayload\n },\n});\n\nexport class KubernetesApplicationVolumeConfigMapPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeConfigMapPayload)));\n }\n}\n\n//////////////////// SECRET AS VOLUME /////////////////////////////////////\n/**\n * KubernetesApplicationVolumeSecretPayload Model\n */\nconst _KubernetesApplicationVolumeSecretPayload = Object.freeze({\n name: '',\n secret: {\n secretName: '',\n items: [], // KubernetesApplicationVolumeEntryPayload\n },\n});\n\nexport class KubernetesApplicationVolumeSecretPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeSecretPayload)));\n }\n}\n\n/**\n * KubernetesApplicationVolumeEntryPayload Model\n */\nconst _KubernetesApplicationVolumeEntryPayload = Object.freeze({\n key: '',\n path: '',\n});\n\nexport class KubernetesApplicationVolumeEntryPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationVolumeEntryPayload)));\n }\n}\n\n//////////////////////////// ENV ENTRY //////////////////////////////\n/**\n * KubernetesApplicationEnvPayload Model\n */\nconst _KubernetesApplicationEnvPayload = Object.freeze({\n name: '',\n value: '',\n});\n\nexport class KubernetesApplicationEnvPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvPayload)));\n }\n}\n\n///////////////////////// CONFIG AS ENV ////////////////////////////////\n/**\n * KubernetesApplicationEnvConfigMapPayload Model\n */\nconst _KubernetesApplicationEnvConfigMapPayload = Object.freeze({\n name: '',\n valueFrom: {\n configMapKeyRef: {\n name: '',\n key: '',\n },\n },\n});\n\nexport class KubernetesApplicationEnvConfigMapPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvConfigMapPayload)));\n }\n}\n\n//////////////////////// SECRET AS ENV //////////////////////////////////\n/**\n * KubernetesApplicationEnvSecretPayload Model\n */\nconst _KubernetesApplicationEnvSecretPayload = Object.freeze({\n name: '',\n valueFrom: {\n secretKeyRef: {\n name: '',\n key: '',\n },\n },\n});\n\nexport class KubernetesApplicationEnvSecretPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationEnvSecretPayload)));\n }\n}\n","/**\n * Generic params\n */\nexport function KubernetesCommonParams() {\n return {\n id: '',\n };\n}\n","/**\n * Generic metadata payload\n */\nconst _KubernetesCommonMetadataPayload = Object.freeze({\n uid: '',\n name: '',\n namespace: '',\n labels: {},\n annotations: {},\n});\nexport class KubernetesCommonMetadataPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesCommonMetadataPayload)));\n }\n}\n","export const KubernetesPortainerConfigMapNamespace = 'portainer';\nexport const KubernetesPortainerConfigMapConfigName = 'portainer-config';\nexport const KubernetesPortainerConfigMapAccessKey = 'NamespaceAccessPolicies';\n\nexport function KubernetesPortainerAccessConfigMap() {\n return {\n Id: 0,\n Name: KubernetesPortainerConfigMapConfigName,\n Namespace: KubernetesPortainerConfigMapNamespace,\n Data: {},\n };\n}\n\n/**\n * ConfigMap Model\n */\nconst _KubernetesConfigMap = Object.freeze({\n Id: 0,\n Name: '',\n Namespace: '',\n Yaml: '',\n ConfigurationOwner: '',\n Data: [],\n});\n\nexport class KubernetesConfigMap {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigMap)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * Payload for CREATE\n */\nconst _KubernetesConfigMapCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n data: {},\n binaryData: {},\n});\nexport class KubernetesConfigMapCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigMapCreatePayload)));\n }\n}\n\n/**\n * Payload for UPDATE\n */\nconst _KubernetesConfigMapUpdatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n data: {},\n binaryData: {},\n});\nexport class KubernetesConfigMapUpdatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigMapUpdatePayload)));\n }\n}\n","import { KubernetesConfigurationTypes } from './models';\n\n/**\n * KubernetesConfigurationFormValues Model\n */\nconst _KubernetesConfigurationFormValues = Object.freeze({\n Id: '',\n ResourcePool: '',\n Name: '',\n ConfigurationOwner: '',\n Type: KubernetesConfigurationTypes.CONFIGMAP,\n Data: [],\n DataYaml: '',\n IsSimple: true,\n});\n\nexport class KubernetesConfigurationFormValues {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigurationFormValues)));\n }\n}\n\nconst _KubernetesConfigurationFormValuesEntry = Object.freeze({\n Key: '',\n Value: '',\n IsBinary: false,\n});\n\nexport class KubernetesConfigurationFormValuesEntry {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfigurationFormValuesEntry)));\n }\n}\n","export const KubernetesPortainerConfigurationOwnerLabel = 'io.portainer.kubernetes.configuration.owner';\nexport const KubernetesPortainerConfigurationDataAnnotation = 'io.portainer.kubernetes.configuration.data';\n\n/**\n * Configuration Model (Composite)\n */\nconst _KubernetesConfiguration = Object.freeze({\n Id: 0,\n Name: '',\n Type: '',\n Namespace: '',\n CreationDate: '',\n ConfigurationOwner: '',\n Used: false,\n Applications: [],\n Data: {},\n});\n\nexport class KubernetesConfiguration {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesConfiguration)));\n }\n}\n\nexport const KubernetesConfigurationTypes = Object.freeze({\n CONFIGMAP: 1,\n SECRET: 2,\n});\n","/**\n * KubernetesDaemonSet Model\n */\nconst _KubernetesDaemonSet = Object.freeze({\n Namespace: '',\n Name: '',\n StackName: '',\n ImageModel: null,\n Env: [],\n CpuLimit: 0,\n MemoryLimit: 0,\n VoluemMounts: [],\n Volumes: [],\n Secret: undefined,\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Affinity: undefined, // KubernetesPodAffinity\n});\n\nexport class KubernetesDaemonSet {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDaemonSet)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesDaemonSetCreatePayload Model\n */\nconst _KubernetesDaemonSetCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n selector: {\n matchLabels: {\n app: '',\n },\n },\n updateStrategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n maxUnavailable: 1,\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n});\n\nexport class KubernetesDaemonSetCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDaemonSetCreatePayload)));\n }\n}\n","export const KubernetesDeployManifestTypes = Object.freeze({\n KUBERNETES: 1,\n COMPOSE: 2,\n});\n\nexport const KubernetesDeployBuildMethods = Object.freeze({\n GIT: 1,\n WEB_EDITOR: 2,\n CUSTOM_TEMPLATE: 3,\n URL: 4,\n});\n\nexport const KubernetesDeployRequestMethods = Object.freeze({\n REPOSITORY: 'repository',\n STRING: 'string',\n URL: 'url',\n});\n\nexport const RepositoryMechanismTypes = Object.freeze({\n WEBHOOK: 'Webhook',\n INTERVAL: 'Interval',\n});\n","/**\n * KubernetesDeployment Model\n */\nconst _KubernetesDeployment = Object.freeze({\n Namespace: '',\n Name: '',\n StackName: '',\n ReplicaCount: 0,\n ImageModel: null,\n Env: [],\n CpuLimit: 0,\n MemoryLimit: 0,\n VolumeMounts: [],\n Volumes: [],\n Secret: undefined,\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Affinity: undefined, // KubernetesPodAffinity\n});\n\nexport class KubernetesDeployment {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDeployment)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesDeploymentCreatePayload Model\n */\nconst _KubernetesDeploymentCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n selector: {\n matchLabels: {\n app: '',\n },\n },\n strategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n maxSurge: 0,\n maxUnavailable: '100%',\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n affinity: {},\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n});\n\nexport class KubernetesDeploymentCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesDeploymentCreatePayload)));\n }\n}\n","/**\n * KubernetesEvent Model\n */\nconst _KubernetesEvent = Object.freeze({\n Id: '',\n Date: 0,\n Type: '',\n Message: '',\n Involved: {},\n});\n\nexport class KubernetesEvent {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesEvent)));\n }\n}\n","export const KubernetesSystem_DefaultDeploymentUniqueLabelKey = 'pod-template-hash';\nexport const KubernetesSystem_RevisionAnnotation = 'deployment.kubernetes.io/revision';\nexport const KubernetesSystem_RevisionHistoryAnnotation = 'deployment.kubernetes.io/revision-history';\nexport const KubernetesSystem_ChangeCauseAnnotation = 'kubernetes.io/change-cause';\nexport const KubernetesSystem_DesiredReplicasAnnotation = 'deployment.kubernetes.io/desired-replicas';\nexport const KubernetesSystem_MaxReplicasAnnotation = 'deployment.kubernetes.io/max-replicas';\n\n// annotationsToSkip lists the annotations that should be preserved from the deployment and not\n// copied from the replicaset when rolling a deployment back\n// var annotationsToSkip = map[string]bool{\n// corev1.LastAppliedConfigAnnotation: true,\n// deploymentutil.RevisionAnnotation: true,\n// deploymentutil.RevisionHistoryAnnotation: true,\n// deploymentutil.DesiredReplicasAnnotation: true,\n// deploymentutil.MaxReplicasAnnotation: true,\n// appsv1.DeprecatedRollbackTo: true,\n// }\n\n// LastAppliedConfigAnnotation is the annotation used to store the previous\n// configuration of a resource for use in a three way diff by UpdateApplyAnnotation.\nconst LastAppliedConfigAnnotation = 'kubectl.kubernetes.io/last-applied-configuration';\n\nconst DeprecatedRollbackTo = 'deprecated.deployment.rollback.to';\n\nexport const KubernetesSystem_AnnotationsToSkip = {\n [LastAppliedConfigAnnotation]: true,\n [KubernetesSystem_RevisionAnnotation]: true,\n [KubernetesSystem_RevisionHistoryAnnotation]: true,\n [KubernetesSystem_DesiredReplicasAnnotation]: true,\n [KubernetesSystem_MaxReplicasAnnotation]: true,\n [DeprecatedRollbackTo]: true,\n};\n","export class KubernetesNamespace {\n constructor() {\n this.Id = '';\n this.Name = '';\n this.CreationDate = '';\n this.Status = '';\n this.Yaml = '';\n this.ResourcePoolName = '';\n this.ResourcePoolOwner = '';\n this.IsSystem = false;\n }\n}\n\nexport const KUBERNETES_DEFAULT_SYSTEM_NAMESPACES = ['kube-system', 'kube-public', 'kube-node-lease', 'portainer'];\nexport const KUBERNETES_DEFAULT_NAMESPACE = 'default';\n","import { KubernetesCommonMetadataPayload } from '../common/payloads';\n\n/**\n * KubernetesNamespaceCreatePayload Model\n */\nconst _KubernetesNamespaceCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n});\n\nexport class KubernetesNamespaceCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNamespaceCreatePayload)));\n }\n}\n","import _ from 'lodash-es';\n\n/**\n * NodesLimits Model\n */\nexport class KubernetesNodesLimits {\n constructor(nodesLimits) {\n this.MaxCPU = 0;\n this.MaxMemory = 0;\n this.nodesLimits = this.convertCPU(nodesLimits);\n\n this.calculateMaxCPUMemory();\n }\n\n convertCPU(nodesLimits) {\n _.forEach(nodesLimits, (value) => {\n if (value.CPU) {\n value.CPU /= 1000.0;\n }\n });\n return nodesLimits;\n }\n\n calculateMaxCPUMemory() {\n const nodesLimitsArray = Object.values(this.nodesLimits);\n this.MaxCPU = _.maxBy(nodesLimitsArray, 'CPU').CPU;\n this.MaxMemory = _.maxBy(nodesLimitsArray, 'Memory').Memory;\n }\n\n // check if there is enough cpu and memory to allocate containers in replica mode\n overflowForReplica(cpu, memory, instances) {\n _.forEach(this.nodesLimits, (value) => {\n instances -= Math.min(Math.floor(value.CPU / cpu), Math.floor(value.Memory / memory));\n });\n\n return instances > 0;\n }\n\n // check if there is enough cpu and memory to allocate containers in global mode\n overflowForGlobal(cpu, memory) {\n let overflow = false;\n\n _.forEach(this.nodesLimits, (value) => {\n if (cpu > value.CPU || memory > value.Memory) {\n overflow = true;\n }\n });\n\n return overflow;\n }\n\n excludesPods(pods, cpuLimit, memoryLimit) {\n const nodesLimits = this.nodesLimits;\n\n _.forEach(pods, (value) => {\n const node = value.Node;\n if (node && nodesLimits[node]) {\n nodesLimits[node].CPU += cpuLimit;\n nodesLimits[node].Memory += memoryLimit;\n }\n });\n\n this.calculateMaxCPUMemory();\n }\n}\n","/**\n * PortMappingPort Model\n */\nconst _KubernetesPortMappingPort = Object.freeze({\n Port: 0,\n TargetPort: 0,\n Protocol: '',\n IngressRules: [], // KubernetesIngressRule[]\n});\n\nexport class KubernetesPortMappingPort {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPortMappingPort)));\n }\n}\n\n/**\n * PortMapping Model\n */\nconst _KubernetesPortMapping = Object.freeze({\n Expanded: false,\n Highlighted: false,\n ResourcePool: '',\n ServiceType: '',\n ApplicationOwner: '',\n LoadBalancerIPAddress: '',\n Ports: [],\n});\n\nexport class KubernetesPortMapping {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPortMapping)));\n }\n}\n","export function KubernetesResourcePoolFormValues(defaults) {\n this.Name = '';\n this.MemoryLimit = defaults.MemoryLimit;\n this.CpuLimit = defaults.CpuLimit;\n this.LoadBalancers = defaults.LoadBalancers;\n this.UseLoadBalancersQuota = false;\n this.HasQuota = false;\n this.IngressClasses = []; // KubernetesResourcePoolIngressClassFormValue\n this.StorageClasses = []; // KubernetesResourcePoolStorageClassFormValue\n this.EndpointId = 0;\n this.Registries = []; // RegistryViewModel\n this.IsSystem = false;\n}\n\n/**\n * @param {KubernetesIngressClass} ingressClass\n */\nexport function KubernetesResourcePoolIngressClassFormValue(ingressClass) {\n return {\n Namespace: undefined, // will be filled inside ResourcePoolService.create\n IngressClass: ingressClass,\n RewriteTarget: false,\n Annotations: [], // KubernetesResourcePoolIngressClassAnnotationFormValue\n Hosts: [],\n Selected: false,\n WasSelected: false,\n AdvancedConfig: false,\n Paths: [], // will be filled to save IngressClass.Paths inside ingressClassesToFormValues() on RP EDIT\n };\n}\n\nexport function KubernetesResourcePoolIngressClassAnnotationFormValue() {\n return {\n Key: '',\n Value: '',\n };\n}\n\nexport function KubernetesResourcePoolIngressClassHostFormValue() {\n return {\n Host: '',\n PreviousHost: '',\n NeedsDeletion: false,\n IsNew: true,\n };\n}\n\nexport function KubernetesResourcePoolStorageClassFormValue(name) {\n return {\n Name: name,\n Size: 0,\n SizeUnit: 'GB',\n Selected: false,\n };\n}\n","export const KubernetesPortainerResourcePoolNameLabel = 'io.portainer.kubernetes.resourcepool.name';\n\nexport const KubernetesPortainerResourcePoolOwnerLabel = 'io.portainer.kubernetes.resourcepool.owner';\n\nexport const KubernetesPortainerNamespaceSystemLabel = 'io.portainer.kubernetes.namespace.system';\n\n/**\n * KubernetesResourcePool Model\n */\nexport function KubernetesResourcePool() {\n return {\n Namespace: {}, // KubernetesNamespace\n Quota: undefined, // KubernetesResourceQuota,\n Ingresses: [], // KubernetesIngress[]\n Yaml: '',\n };\n}\n","import KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\nexport const KubernetesPortainerResourceQuotaPrefix = 'portainer-rq-';\nexport const KubernetesPortainerResourceQuotaCPULimit = 'limits.cpu';\nexport const KubernetesPortainerResourceQuotaMemoryLimit = 'limits.memory';\nexport const KubernetesPortainerResourceQuotaCPURequest = 'requests.cpu';\nexport const KubernetesPortainerResourceQuotaMemoryRequest = 'requests.memory';\nexport const KubernetesPortainerResourceQuotaLoadbalancers = 'services.loadbalancers';\nexport const KubernetesPortainerResourceQuotaStorageSuffix = '.storageclass.storage.k8s.io/requests.storage';\n\nexport const KubernetesResourceQuotaDefaults = {\n CpuLimit: 0,\n MemoryLimit: 0,\n LoadBalancers: 0,\n};\n\nexport function KubernetesResourceQuota(namespace) {\n return {\n Id: '',\n Namespace: namespace ? namespace : '',\n Name: namespace ? KubernetesResourceQuotaHelper.generateResourceQuotaName(namespace) : '',\n CpuLimit: KubernetesResourceQuotaDefaults.CpuLimit,\n MemoryLimit: KubernetesResourceQuotaDefaults.MemoryLimit,\n CpuLimitUsed: KubernetesResourceQuotaDefaults.CpuLimit,\n MemoryLimitUsed: KubernetesResourceQuotaDefaults.MemoryLimit,\n LoadBalancers: KubernetesResourceQuotaDefaults.LoadBalancers,\n Yaml: '',\n ResourcePoolName: '',\n ResourcePoolOwner: '',\n StorageRequests: [], // []KubernetesResourcePoolStorageClassFormValue\n };\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\nimport {\n KubernetesPortainerResourceQuotaCPURequest,\n KubernetesPortainerResourceQuotaMemoryRequest,\n KubernetesPortainerResourceQuotaCPULimit,\n KubernetesPortainerResourceQuotaMemoryLimit,\n} from './models';\n\nexport function KubernetesResourceQuotaCreatePayload() {\n return {\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n hard: {\n [KubernetesPortainerResourceQuotaCPURequest]: 0,\n [KubernetesPortainerResourceQuotaMemoryRequest]: 0,\n [KubernetesPortainerResourceQuotaCPULimit]: 0,\n [KubernetesPortainerResourceQuotaMemoryLimit]: 0,\n },\n },\n };\n}\n","/**\n * KubernetesResourceReservation Model\n */\nconst _KubernetesResourceReservation = Object.freeze({\n Memory: 0,\n CPU: 0,\n});\n\nexport class KubernetesResourceReservation {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesResourceReservation)));\n }\n}\n","export const KubernetesResourceTypes = Object.freeze({\n NAMESPACE: 'Namespace',\n RESOURCEQUOTA: 'ResourceQuota',\n CONFIGMAP: 'ConfigMap',\n SECRET: 'Secret',\n DEPLOYMENT: 'Deployment',\n STATEFULSET: 'StatefulSet',\n DAEMONSET: 'Daemonset',\n PERSISTENT_VOLUME_CLAIM: 'PersistentVolumeClaim',\n SERVICE: 'Service',\n INGRESS: 'Ingress',\n HORIZONTAL_POD_AUTOSCALER: 'HorizontalPodAutoscaler',\n});\n\nexport const KubernetesResourceActions = Object.freeze({\n CREATE: 'Create',\n UPDATE: 'Update',\n DELETE: 'Delete',\n});\n","/**\n * KubernetesApplicationSecret Model\n */\nconst _KubernetesApplicationSecret = Object.freeze({\n Id: 0,\n Name: '',\n Namespace: '',\n CreationDate: '',\n ConfigurationOwner: '',\n Yaml: '',\n Data: [],\n});\n\nexport class KubernetesApplicationSecret {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesApplicationSecret)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesSecretCreatePayload Model\n */\nconst _KubernetesSecretCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n type: 'Opaque',\n data: {},\n stringData: {},\n});\n\nexport class KubernetesSecretCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesSecretCreatePayload)));\n }\n}\n\n/**\n * KubernetesSecretUpdatePayload Model\n */\nconst _KubernetesSecretUpdatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n type: 'Opaque',\n data: {},\n stringData: {},\n});\n\nexport class KubernetesSecretUpdatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesSecretUpdatePayload)));\n }\n}\n","export const KubernetesServiceHeadlessPrefix = 'headless-';\nexport const KubernetesServiceHeadlessClusterIP = 'None';\nexport const KubernetesServiceTypes = Object.freeze({\n LOAD_BALANCER: 'LoadBalancer',\n NODE_PORT: 'NodePort',\n CLUSTER_IP: 'ClusterIP',\n INGRESS: 'Ingress',\n});\n\n/**\n * KubernetesService Model\n */\nconst _KubernetesService = Object.freeze({\n Headless: false,\n Namespace: '',\n Name: '',\n StackName: '',\n Ports: [],\n Type: '',\n ClusterIP: '',\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Ingress: false,\n Selector: {},\n});\n\nexport class KubernetesService {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesService)));\n }\n}\n\nconst _KubernetesIngressService = Object.freeze({\n Headless: false,\n Namespace: '',\n Name: '',\n StackName: '',\n Ports: [],\n Type: '',\n ClusterIP: '',\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Ingress: true,\n IngressRoute: [],\n});\n\nexport class KubernetesIngressService {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesIngressService)));\n }\n}\n\nconst _KubernetesIngressServiceRoute = Object.freeze({\n Host: '',\n IngressName: '',\n Path: '',\n ServiceName: '',\n});\n\nexport class KubernetesIngressServiceRoute {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesIngressServiceRoute)));\n }\n}\n\n/**\n * KubernetesServicePort Model\n */\nconst _KubernetesServicePort = Object.freeze({\n name: '',\n port: 0,\n targetPort: 0,\n protocol: '',\n nodePort: 0,\n ingress: '',\n});\n\nexport class KubernetesServicePort {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesServicePort)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesServiceCreatePayload Model\n */\nconst _KubernetesServiceCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n ports: [],\n selector: {\n app: '',\n },\n type: '',\n clusterIP: '',\n },\n});\n\nexport class KubernetesServiceCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesServiceCreatePayload)));\n }\n}\n","/**\n * Stack Model\n */\nconst _KubernetesStack = Object.freeze({\n Name: '',\n ResourcePool: '',\n Applications: [],\n});\n\nexport class KubernetesStack {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStack)));\n }\n}\n","/**\n * KubernetesStatefulSet Model\n */\nconst _KubernetesStatefulSet = Object.freeze({\n Namespace: '',\n Name: '',\n StackName: '',\n ReplicaCount: 0,\n ImageModel: null,\n Env: [],\n CpuLimit: '',\n MemoryLimit: '',\n VolumeMounts: [],\n Volumes: [],\n Secret: undefined,\n VolumeClaims: [],\n ServiceName: '',\n ApplicationName: '',\n ApplicationOwner: '',\n Note: '',\n Affinity: undefined, // KubernetesPodAffinity\n});\n\nexport class KubernetesStatefulSet {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStatefulSet)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesStatefulSetCreatePayload Model\n */\nconst _KubernetesStatefulSetCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n serviceName: '',\n selector: {\n matchLabels: {\n app: '',\n },\n },\n volumeClaimTemplates: [],\n updateStrategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n partition: 0,\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n});\n\nexport class KubernetesStatefulSetCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStatefulSetCreatePayload)));\n }\n}\n","/**\n * KubernetesStorageClassAccessPolicies Model\n */\nconst _KubernetesStorageClassAccessPolicies = Object.freeze([\n {\n Name: 'RWO',\n Description: 'Allow read-write from a single pod only (RWO)',\n selected: true,\n },\n {\n Name: 'RWX',\n Description: 'Allow read-write access from one or more pods concurrently (RWX)',\n selected: false,\n },\n]);\n\nexport function KubernetesStorageClassAccessPolicies() {\n return JSON.parse(JSON.stringify(_KubernetesStorageClassAccessPolicies));\n}\n\n/**\n * KubernetesStorageClass Model\n */\nconst _KubernetesStorageClass = Object.freeze({\n Name: '',\n AccessModes: [],\n Provisioner: '',\n AllowVolumeExpansion: false,\n});\n\nexport class KubernetesStorageClass {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStorageClass)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesStorageClassCreatePayload Model\n */\nconst _KubernetesStorageClassCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n provisioner: '',\n allowVolumeExpansion: false,\n});\n\nexport class KubernetesStorageClassCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesStorageClassCreatePayload)));\n }\n}\n","import uuidv4 from 'uuid/v4';\n/**\n * KubernetesPersistentVolumeClaim Model\n */\nconst _KubernetesPersistentVolumeClaim = Object.freeze({\n Id: '',\n Name: '',\n PreviousName: '',\n Namespace: '',\n Storage: 0,\n StorageClass: {}, // KubernetesStorageClass\n CreationDate: '',\n ApplicationOwner: '',\n ApplicationName: '',\n MountPath: '', // used for Application creation from ApplicationFormValues | not used from API conversion\n Yaml: '',\n});\n\nexport class KubernetesPersistentVolumeClaim {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPersistentVolumeClaim)));\n this.Name = uuidv4();\n }\n}\n\n/**\n * KubernetesVolume Model (Composite)\n */\nconst _KubernetesVolume = Object.freeze({\n ResourcePool: {}, // KubernetesResourcePool\n PersistentVolumeClaim: {}, // KubernetesPersistentVolumeClaim\n Applications: [], // KubernetesApplication\n});\n\nexport class KubernetesVolume {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesVolume)));\n }\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\n/**\n * KubernetesPersistentVolumClaimCreatePayload Model\n */\nconst _KubernetesPersistentVolumClaimCreatePayload = Object.freeze({\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n accessModes: ['ReadWriteOnce'],\n resources: {\n requests: {\n storage: '',\n },\n },\n storageClassName: '',\n },\n});\n\nexport class KubernetesPersistentVolumClaimCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPersistentVolumClaimCreatePayload)));\n }\n}\n","import _ from 'lodash-es';\n\nimport * as JsonPatch from 'fast-json-patch';\nimport { KubernetesNode, KubernetesNodeDetails, KubernetesNodeTaint, KubernetesNodeAvailabilities, KubernetesPortainerNodeDrainLabel } from 'Kubernetes/node/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesNodeFormValues, KubernetesNodeTaintFormValues, KubernetesNodeLabelFormValues } from 'Kubernetes/node/formValues';\nimport { KubernetesNodeCreatePayload, KubernetesNodeTaintPayload } from 'Kubernetes/node/payload';\n\nclass KubernetesNodeConverter {\n static apiToNode(data, res) {\n if (!res) {\n res = new KubernetesNode();\n }\n res.Id = data.metadata.uid;\n const hostName = _.find(data.status.addresses, { type: 'Hostname' });\n res.Name = hostName ? hostName.address : data.metadata.Name;\n res.Labels = data.metadata.labels;\n res.Role = _.has(data.metadata.labels, 'node-role.kubernetes.io/master') ? 'Master' : 'Worker';\n\n const ready = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.READY });\n const memoryPressure = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.MEMORY_PRESSURE });\n const PIDPressure = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.PID_PRESSURE });\n const diskPressure = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.DISK_PRESSURE });\n const networkUnavailable = _.find(data.status.conditions, { type: KubernetesNodeConditionTypes.NETWORK_UNAVAILABLE });\n\n res.Conditions = {\n MemoryPressure: memoryPressure && memoryPressure.status === 'True',\n PIDPressure: PIDPressure && PIDPressure.status === 'True',\n DiskPressure: diskPressure && diskPressure.status === 'True',\n NetworkUnavailable: networkUnavailable && networkUnavailable.status === 'True',\n };\n\n res.Availability = KubernetesNodeAvailabilities.ACTIVE;\n if (data.spec.unschedulable === true) {\n res.Availability = _.has(data.metadata.labels, KubernetesPortainerNodeDrainLabel) ? KubernetesNodeAvailabilities.DRAIN : KubernetesNodeAvailabilities.PAUSE;\n }\n\n if (ready.status === 'False') {\n res.Status = 'Unhealthy';\n } else if (ready.status === 'Unknown' || res.Conditions.MemoryPressure || res.Conditions.PIDPressure || res.Conditions.DiskPressure || res.Conditions.NetworkUnavailable) {\n res.Status = 'Warning';\n } else {\n res.Status = 'Ready';\n }\n\n res.CPU = KubernetesResourceReservationHelper.parseCPU(data.status.allocatable.cpu);\n res.Memory = data.status.allocatable.memory;\n res.Version = data.status.nodeInfo.kubeletVersion;\n const internalIP = _.find(data.status.addresses, { type: 'InternalIP' });\n res.IPAddress = internalIP ? internalIP.address : '-';\n res.Taints = _.map(data.spec.taints, (taint) => {\n const res = new KubernetesNodeTaint();\n res.Key = taint.key;\n res.Value = taint.value;\n res.Effect = taint.effect;\n return res;\n });\n return res;\n }\n\n static apiToNodeDetails(data, yaml) {\n let res = new KubernetesNodeDetails();\n res = KubernetesNodeConverter.apiToNode(data, res);\n res.CreationDate = data.metadata.creationTimestamp;\n res.OS.Architecture = data.status.nodeInfo.architecture;\n res.OS.Platform = data.status.nodeInfo.operatingSystem;\n res.OS.Image = data.status.nodeInfo.osImage;\n res.Yaml = yaml ? yaml.data : '';\n return res;\n }\n\n static nodeToFormValues(node) {\n const res = new KubernetesNodeFormValues();\n\n res.Availability = node.Availability;\n\n res.Taints = _.map(node.Taints, (taint) => {\n const res = new KubernetesNodeTaintFormValues();\n res.Key = taint.Key;\n res.Value = taint.Value;\n res.Effect = taint.Effect;\n res.NeedsDeletion = false;\n res.IsNew = false;\n return res;\n });\n\n res.Labels = _.map(node.Labels, (value, key) => {\n const res = new KubernetesNodeLabelFormValues();\n res.Key = key;\n res.Value = value;\n res.NeedsDeletion = false;\n res.IsNew = false;\n return res;\n });\n\n return res;\n }\n\n static formValuesToNode(node, formValues) {\n const res = angular.copy(node);\n\n res.Availability = formValues.Availability;\n\n const filteredTaints = _.filter(formValues.Taints, (taint) => !taint.NeedsDeletion);\n res.Taints = _.map(filteredTaints, (item) => {\n const taint = new KubernetesNodeTaint();\n taint.Key = item.Key;\n taint.Value = item.Value;\n taint.Effect = item.Effect;\n return taint;\n });\n\n const filteredLabels = _.filter(formValues.Labels, (label) => !label.NeedsDeletion);\n res.Labels = _.reduce(\n filteredLabels,\n (acc, item) => {\n acc[item.Key] = item.Value ? item.Value : '';\n return acc;\n },\n {}\n );\n\n return res;\n }\n\n static createPayload(node) {\n const payload = new KubernetesNodeCreatePayload();\n payload.metadata.name = node.Name;\n\n const taints = _.map(node.Taints, (taint) => {\n const res = new KubernetesNodeTaintPayload();\n res.key = taint.Key;\n res.value = taint.Value;\n res.effect = taint.Effect;\n return res;\n });\n\n payload.spec.taints = taints.length ? taints : undefined;\n\n payload.metadata.labels = node.Labels;\n\n if (node.Availability !== KubernetesNodeAvailabilities.ACTIVE) {\n payload.spec.unschedulable = true;\n if (node.Availability === KubernetesNodeAvailabilities.DRAIN) {\n payload.metadata.labels[KubernetesPortainerNodeDrainLabel] = '';\n } else {\n delete payload.metadata.labels[KubernetesPortainerNodeDrainLabel];\n }\n }\n\n return payload;\n }\n\n static patchPayload(oldNode, newNode) {\n const oldPayload = KubernetesNodeConverter.createPayload(oldNode);\n const newPayload = KubernetesNodeConverter.createPayload(newNode);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nexport const KubernetesNodeConditionTypes = Object.freeze({\n READY: 'Ready',\n MEMORY_PRESSURE: 'MemoryPressure',\n PID_PRESSURE: 'PIDPressure',\n DISK_PRESSURE: 'DiskPressure',\n NETWORK_UNAVAILABLE: 'NetworkUnavailable',\n});\n\nexport default KubernetesNodeConverter;\n","import _ from 'lodash-es';\n\nangular\n .module('portainer.kubernetes')\n .filter('kubernetesNodeStatusColor', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'ready':\n return 'success';\n case 'warning':\n return 'warning';\n default:\n return 'danger';\n }\n };\n })\n .filter('kubernetesNodeConditionsMessage', function () {\n 'use strict';\n return function (conditions) {\n if (conditions.MemoryPressure) {\n return 'Node memory is running low';\n }\n if (conditions.PIDPressure) {\n return 'Too many processes running on the node';\n }\n if (conditions.DiskPressure) {\n return 'Node disk capacity is running low';\n }\n if (conditions.NetworkUnavailable) {\n return 'Incorrect node network configuration';\n }\n };\n });\n","const _KubernetesNodeFormValues = Object.freeze({\n Taints: [],\n Labels: [],\n Availability: '',\n});\n\nexport class KubernetesNodeFormValues {\n constructor() {\n Object.assign(JSON.parse(JSON.stringify(_KubernetesNodeFormValues)));\n }\n}\n\nconst _KubernetesNodeTaintFormValues = Object.freeze({\n Key: '',\n Values: '',\n Effect: '',\n NeedsDeletion: false,\n IsNew: false,\n IsChanged: false,\n});\n\nexport class KubernetesNodeTaintFormValues {\n constructor() {\n Object.assign(JSON.parse(JSON.stringify(_KubernetesNodeTaintFormValues)));\n }\n}\n\nconst _KubernetesNodeLabelFormValues = Object.freeze({\n Key: '',\n Values: '',\n NeedsDeletion: false,\n IsNew: false,\n IsUsed: false,\n IsChanged: false,\n});\n\nexport class KubernetesNodeLabelFormValues {\n constructor() {\n Object.assign(JSON.parse(JSON.stringify(_KubernetesNodeLabelFormValues)));\n }\n}\n","import _ from 'lodash-es';\n\nexport class KubernetesNodeHelper {\n static isSystemLabel(label) {\n return !label.IsNew && (_.startsWith(label.Key, 'beta.kubernetes.io') || _.startsWith(label.Key, 'kubernetes.io') || label.Key === 'node-role.kubernetes.io/master');\n }\n\n static reorderLabels(labels) {\n return _.sortBy(labels, (label) => {\n return !KubernetesNodeHelper.isSystemLabel(label);\n });\n }\n\n static computeUsedLabels(applications, labels) {\n const pods = _.flatten(_.map(applications, 'Pods'));\n const nodeSelectors = _.uniq(_.flatten(_.map(pods, 'NodeSelector')));\n\n return _.map(labels, (label) => {\n label.IsUsed = _.find(nodeSelectors, (ns) => ns && ns[label.Key] === label.Value) ? true : false;\n return label;\n });\n }\n\n static generateNodeLabelsFromNodes(nodes) {\n const pairs = _.flatMap(nodes, (node) => {\n return _.map(_.toPairs(node.Labels), ([k, v]) => {\n return { key: k, value: v };\n });\n });\n return _.map(_.groupBy(pairs, 'key'), (values, key) => {\n return { Key: key, Values: _.uniq(_.map(values, 'value')) };\n });\n }\n}\n","export const KubernetesPortainerNodeDrainLabel = 'io.portainer/node-status-drain';\n\n/**\n * KubernetesNode Model\n */\nconst _KubernetesNode = Object.freeze({\n Id: '',\n Name: '',\n Labels: {},\n Role: '',\n Status: '',\n CPU: 0,\n Memory: '',\n Version: '',\n IPAddress: '',\n Api: false,\n Taints: [],\n Port: 0,\n Availability: '',\n});\n\nexport class KubernetesNode {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNode)));\n }\n}\n\n/**\n * KubernetesNodeDetails Model\n */\nconst _KubernetesNodeDetails = Object.freeze({\n CreationDate: '',\n OS: {\n Architecture: '',\n Platform: '',\n Image: '',\n },\n Conditions: [],\n Yaml: '',\n});\n\nexport class KubernetesNodeDetails {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNode)));\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeDetails)));\n }\n}\n\n/**\n * KubernetesNodeTaint Model\n */\nconst _KubernetesNodeTaint = Object.freeze({\n Key: '',\n Value: '',\n Effect: '',\n});\n\nexport class KubernetesNodeTaint {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeTaint)));\n }\n}\n\nexport const KubernetesNodeAvailabilities = Object.freeze({\n ACTIVE: 'Active',\n PAUSE: 'Pause',\n DRAIN: 'Drain',\n});\n\nexport const KubernetesNodeTaintEffects = Object.freeze({\n NOSCHEDULE: 'NoSchedule',\n PREFERNOSCHEDULE: 'PreferNoSchedule',\n NOEXECUTE: 'NoExecute',\n});\n","/**\n * KubernetesNode Create Payload Model\n * Note: The current payload is here just to create patch payload.\n */\nconst _KubernetesNodeCreatePayload = Object.freeze({\n metadata: {\n name: '',\n labels: {},\n },\n spec: {\n taints: undefined,\n },\n});\n\nexport class KubernetesNodeCreatePayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeCreatePayload)));\n }\n}\n\nconst _KubernetesNodeTaintPayload = Object.freeze({\n key: '',\n value: '',\n effect: '',\n});\n\nexport class KubernetesNodeTaintPayload {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesNodeTaintPayload)));\n }\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesNodes', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesNodesFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1/nodes/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport PortainerError from 'Portainer/error';\nimport KubernetesNodeConverter from 'Kubernetes/node/converter';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesNodeService {\n /* @ngInject */\n constructor($async, KubernetesNodes) {\n this.$async = $async;\n this.KubernetesNodes = KubernetesNodes;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [details, yaml] = await Promise.all([this.KubernetesNodes().get(params).$promise, this.KubernetesNodes().getYaml(params).$promise]);\n return KubernetesNodeConverter.apiToNodeDetails(details, yaml);\n } catch (err) {\n // changing the structure of error message to fix [object, Object] issue\n const errData = err.data;\n throw new PortainerError('Unable to retrieve node details', errData);\n }\n }\n\n async getAllAsync() {\n try {\n const data = await this.KubernetesNodes().get().$promise;\n return _.map(data.items, (item) => KubernetesNodeConverter.apiToNode(item));\n } catch (err) {\n throw { msg: 'Unable to retrieve nodes', err: err };\n }\n }\n\n get(name) {\n if (name) {\n return this.$async(this.getAsync, name);\n }\n return this.$async(this.getAllAsync);\n }\n\n /**\n * PATCH\n */\n\n async patchAsync(node, nodeFormValues) {\n try {\n const params = new KubernetesCommonParams();\n params.id = node.Name;\n const newNode = KubernetesNodeConverter.formValuesToNode(node, nodeFormValues);\n const payload = KubernetesNodeConverter.patchPayload(node, newNode);\n const data = await this.KubernetesNodes().patch(params, payload).$promise;\n const patchedNode = KubernetesNodeConverter.apiToNodeDetails(data);\n return patchedNode;\n } catch (err) {\n throw { msg: 'Unable to patch node', err: err };\n }\n }\n\n patch(node, nodeFormValues) {\n return this.$async(this.patchAsync, node, nodeFormValues);\n }\n}\n\nexport default KubernetesNodeService;\nangular.module('portainer.kubernetes').service('KubernetesNodeService', KubernetesNodeService);\n","import * as JsonPatch from 'fast-json-patch';\nimport _ from 'lodash-es';\n\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\nimport {\n KubernetesPortainerApplicationStackNameLabel,\n KubernetesPortainerApplicationNameLabel,\n KubernetesPortainerApplicationOwnerLabel,\n KubernetesPortainerApplicationNote,\n} from 'Kubernetes/models/application/models';\n\nimport { KubernetesPod, KubernetesPodToleration, KubernetesPodAffinity, KubernetesPodContainer, KubernetesPodContainerTypes, KubernetesPodEviction } from 'Kubernetes/pod/models';\nimport { createPayloadFactory } from './payloads/create';\n\nfunction computeStatus(statuses) {\n const containerStatuses = _.map(statuses, 'state');\n const running = _.filter(containerStatuses, (s) => s.running).length;\n const waiting = _.filter(containerStatuses, (s) => s.waiting).length;\n if (waiting) {\n return 'Waiting';\n } else if (!running) {\n return 'Terminated';\n }\n return 'Running';\n}\n\nfunction computeContainerStatus(statuses, name) {\n const status = _.find(statuses, { name: name });\n if (!status) {\n return 'Terminated';\n }\n const state = status.state;\n if (state.waiting) {\n return 'Waiting';\n }\n if (!state.running) {\n return 'Terminated';\n }\n return 'Running';\n}\n\nfunction computeAffinity(affinity) {\n const res = new KubernetesPodAffinity();\n if (affinity) {\n res.nodeAffinity = affinity.nodeAffinity || {};\n }\n return res;\n}\n\nfunction computeTolerations(tolerations) {\n return _.map(tolerations, (item) => {\n const res = new KubernetesPodToleration();\n res.Key = item.key;\n res.Operator = item.operator;\n res.Value = item.value;\n res.TolerationSeconds = item.tolerationSeconds;\n res.Effect = item.effect;\n return res;\n });\n}\n\nfunction computeContainers(data) {\n const containers = data.spec.containers;\n const initContainers = data.spec.initContainers;\n\n return _.concat(\n _.map(containers, (item) => {\n const res = new KubernetesPodContainer();\n res.Type = KubernetesPodContainerTypes.APP;\n res.PodName = data.metadata.name;\n res.PodIP = data.status.podIP;\n res.Name = item.name;\n res.Image = item.image;\n res.ImagePullPolicy = item.imagePullPolicy;\n res.Node = data.spec.nodeName;\n res.CreationDate = data.status.startTime;\n res.Status = computeContainerStatus(data.status.containerStatuses, item.name);\n res.Limits = item.resources.limits;\n res.Requests = item.resources.requests;\n res.VolumeMounts = item.volumeMounts;\n res.Env = item.env;\n return res;\n }),\n _.map(initContainers, (item) => {\n const res = new KubernetesPodContainer();\n res.Type = KubernetesPodContainerTypes.INIT;\n res.PodName = data.metadata.name;\n res.Name = item.name;\n res.Image = item.image;\n res.Node = data.spec.nodeName;\n res.CreationDate = data.status.startTime;\n res.Status = computeContainerStatus(data.status.containerStatuses, item.name);\n res.Limits = item.resources.limits;\n res.Requests = item.resources.requests;\n res.VolumeMounts = item.volumeMounts;\n res.Env = item.env;\n return res;\n })\n );\n}\n\nexport default class KubernetesPodConverter {\n static apiToModel(data) {\n const res = new KubernetesPod();\n res.Id = data.metadata.uid;\n res.Name = data.metadata.name;\n res.Namespace = data.metadata.namespace;\n res.Images = _.map(data.spec.containers, 'image');\n res.Status = computeStatus(data.status.containerStatuses);\n res.Restarts = _.sumBy(data.status.containerStatuses, 'restartCount');\n res.Node = data.spec.nodeName;\n res.CreationDate = data.status.startTime;\n res.Containers = computeContainers(data);\n res.Labels = data.metadata.labels;\n res.Affinity = computeAffinity(data.spec.affinity);\n res.NodeSelector = data.spec.nodeSelector;\n res.Tolerations = computeTolerations(data.spec.tolerations);\n return res;\n }\n\n static evictionPayload(pod) {\n const res = new KubernetesPodEviction();\n res.metadata.name = pod.Name;\n res.metadata.namespace = pod.Namespace;\n return res;\n }\n\n static patchPayload(oldPod, newPod) {\n const oldPayload = createPayload(oldPod);\n const newPayload = createPayload(newPod);\n const payload = JsonPatch.compare(oldPayload, newPayload);\n return payload;\n }\n}\n\nfunction createPayload(pod) {\n const payload = createPayloadFactory();\n payload.metadata.name = pod.Name;\n payload.metadata.namespace = pod.Namespace;\n payload.metadata.labels[KubernetesPortainerApplicationStackNameLabel] = pod.StackName;\n payload.metadata.labels[KubernetesPortainerApplicationNameLabel] = pod.ApplicationName;\n payload.metadata.labels[KubernetesPortainerApplicationOwnerLabel] = pod.ApplicationOwner;\n if (pod.Note) {\n payload.metadata.annotations[KubernetesPortainerApplicationNote] = pod.Note;\n } else {\n payload.metadata.annotations = undefined;\n }\n\n payload.spec.replicas = pod.ReplicaCount;\n payload.spec.selector.matchLabels.app = pod.Name;\n payload.spec.template.metadata.labels.app = pod.Name;\n payload.spec.template.metadata.labels[KubernetesPortainerApplicationNameLabel] = pod.ApplicationName;\n payload.spec.template.spec.containers[0].name = pod.Name;\n payload.spec.template.spec.containers[0].image = pod.Image;\n payload.spec.template.spec.affinity = pod.Affinity;\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].env', pod.Env);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.containers[0].volumeMounts', pod.VolumeMounts);\n KubernetesCommonHelper.assignOrDeleteIfEmpty(payload, 'spec.template.spec.volumes', pod.Volumes);\n if (pod.MemoryLimit) {\n payload.spec.template.spec.containers[0].resources.limits.memory = pod.MemoryLimit;\n payload.spec.template.spec.containers[0].resources.requests.memory = pod.MemoryLimit;\n }\n if (pod.CpuLimit) {\n payload.spec.template.spec.containers[0].resources.limits.cpu = pod.CpuLimit;\n payload.spec.template.spec.containers[0].resources.requests.cpu = pod.CpuLimit;\n }\n if (!pod.CpuLimit && !pod.MemoryLimit) {\n delete payload.spec.template.spec.containers[0].resources;\n }\n return payload;\n}\n","import _ from 'lodash-es';\n\nangular\n .module('portainer.kubernetes')\n .filter('kubernetesPodStatusColor', function () {\n 'use strict';\n return function (text) {\n var status = _.toLower(text);\n switch (status) {\n case 'running':\n return 'success';\n case 'waiting':\n return 'warning';\n case 'terminated':\n return 'info';\n default:\n return 'danger';\n }\n };\n })\n .filter('kubernetesPodConditionStatusBadge', function () {\n 'use strict';\n return function (status, type) {\n switch (type) {\n case 'Unschedulable':\n switch (status) {\n case 'True':\n return 'fa-exclamation-triangle red-icon';\n case 'False':\n return 'fa-check green-icon';\n case 'Unknown':\n return 'fa-exclamation-circle orange-icon';\n }\n break;\n case 'PodScheduled':\n case 'Ready':\n case 'Initialized':\n case 'ContainersReady':\n switch (status) {\n case 'True':\n return 'fa-check green-icon';\n case 'False':\n return 'fa-exclamation-triangle red-icon';\n case 'Unknown':\n return 'fa-exclamation-circle orange-icon';\n }\n break;\n default:\n return 'fa-question-circle red-icon';\n }\n };\n })\n .filter('kubernetesPodConditionStatusText', function () {\n 'use strict';\n return function (status, type) {\n switch (type) {\n case 'Unschedulable':\n switch (status) {\n case 'True':\n return 'Alert';\n case 'False':\n return 'OK';\n case 'Unknown':\n return 'Warning';\n }\n break;\n case 'PodScheduled':\n case 'Ready':\n case 'Initialized':\n case 'ContainersReady':\n switch (status) {\n case 'True':\n return 'Ok';\n case 'False':\n return 'Alert';\n case 'Unknown':\n return 'Warning';\n }\n break;\n default:\n return 'Unknown';\n }\n };\n });\n","export const KubernetesPodNodeAffinityNodeSelectorRequirementOperators = Object.freeze({\n IN: 'In',\n NOT_IN: 'NotIn',\n EXISTS: 'Exists',\n DOES_NOT_EXIST: 'DoesNotExist',\n GREATER_THAN: 'Gt',\n LOWER_THAN: 'Lt',\n});\n\n/**\n * KubernetesPodAffinity Model\n */\n// this model will contain non transformed data (raw payload data)\n// either during creation flow (model > api)\n// than during reading flow (api > model)\nexport function KubernetesPodAffinity() {\n return {\n nodeAffinity: {}, // KubernetesPodNodeAffinityPayload\n // podAffinity: {},\n // podAntiAffinity: {},\n };\n}\n","export * from './affinities';\n\n/**\n * KubernetesPod Model\n */\nconst _KubernetesPod = Object.freeze({\n Id: '',\n Name: '',\n Namespace: '',\n Images: [],\n Status: '',\n Restarts: 0,\n Node: '',\n CreationDate: '',\n Containers: [],\n Labels: [],\n Affinity: {}, // KubernetesPodAffinity\n Tolerations: [], // KubernetesPodToleration[]\n NodeSelector: undefined,\n});\n\nexport class KubernetesPod {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPod)));\n }\n}\n\n/**\n * KubernetesPodToleration Model\n */\nconst _KubernetesPodToleration = Object.freeze({\n Key: '',\n Operator: '',\n Value: '',\n TolerationSeconds: 0,\n Effect: '',\n});\n\nexport class KubernetesPodToleration {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPodToleration)));\n }\n}\n\nconst _KubernetesPodContainer = Object.freeze({\n Type: 0,\n PodName: '',\n Name: '',\n Image: '',\n ImagePullPolicy: '',\n Node: '',\n CreationDate: '',\n Status: '',\n Limits: {},\n Requests: {},\n VolumeMounts: {},\n ConfigurationVolumes: [],\n PersistedFolders: [],\n Env: [],\n});\n\nexport class KubernetesPodContainer {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPodContainer)));\n }\n}\n\nconst _KubernetesPodEviction = Object.freeze({\n apiVersion: 'policy/v1beta1',\n kind: 'Eviction',\n metadata: {\n name: '',\n namespace: '',\n },\n});\n\nexport class KubernetesPodEviction {\n constructor() {\n Object.assign(this, JSON.parse(JSON.stringify(_KubernetesPodEviction)));\n }\n}\n\nexport const KubernetesPodContainerTypes = {\n INIT: 1,\n APP: 2,\n};\n","export function KubernetesPodNodeAffinityPayload() {\n return {\n requiredDuringSchedulingIgnoredDuringExecution: {\n nodeSelectorTerms: [], // []KubernetesNodeSelectorTermPayload\n },\n preferredDuringSchedulingIgnoredDuringExecution: [], // []KubernetesPreferredSchedulingTermPayload\n };\n}\n\nexport function KubernetesPreferredSchedulingTermPayload() {\n return {\n weight: 1,\n preference: {}, // KubernetesNodeSelectorTermPayload\n };\n}\n\nexport function KubernetesNodeSelectorTermPayload() {\n return {\n matchExpressions: [], // []KubernetesNodeSelectorRequirementPayload\n };\n}\n\nexport function KubernetesNodeSelectorRequirementPayload() {\n return {\n key: '', // string\n operator: '', // KubernetesPodNodeAffinityNodeSelectorRequirementOperators\n values: [], // []string\n };\n}\n","import { KubernetesCommonMetadataPayload } from 'Kubernetes/models/common/payloads';\n\nexport function createPayloadFactory() {\n return {\n metadata: new KubernetesCommonMetadataPayload(),\n spec: {\n replicas: 0,\n selector: {\n matchLabels: {\n app: '',\n },\n },\n strategy: {\n type: 'RollingUpdate',\n rollingUpdate: {\n maxSurge: 0,\n maxUnavailable: '100%',\n },\n },\n template: {\n metadata: {\n labels: {\n app: '',\n },\n },\n spec: {\n affinity: {},\n containers: [\n {\n name: '',\n image: '',\n env: [],\n resources: {\n limits: {},\n requests: {},\n },\n volumeMounts: [],\n },\n ],\n volumes: [],\n },\n },\n },\n };\n}\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesPodConverter from 'Kubernetes/pod/converter';\n\nclass KubernetesPodService {\n /* @ngInject */\n constructor($async, KubernetesPods) {\n this.$async = $async;\n this.KubernetesPods = KubernetesPods;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.logsAsync = this.logsAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.evictionAsync = this.evictionAsync.bind(this);\n }\n\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesPods(namespace).get(params).$promise, this.KubernetesPods(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod', err);\n }\n }\n\n /**\n * GET ALL\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesPods(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve pods', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * Logs\n *\n * @param {string} namespace\n * @param {string} podName\n * @param {string} containerName\n */\n async logsAsync(namespace, podName, containerName) {\n try {\n const params = new KubernetesCommonParams();\n params.id = podName;\n if (containerName) {\n params.container = containerName;\n }\n const data = await this.KubernetesPods(namespace).logs(params).$promise;\n return data.logs.length === 0 ? [] : data.logs.split('\\n');\n } catch (err) {\n throw new PortainerError('Unable to retrieve pod logs', err);\n }\n }\n\n logs(namespace, podName, containerName) {\n return this.$async(this.logsAsync, namespace, podName, containerName);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldPod, newPod) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newPod.Name;\n const namespace = newPod.Namespace;\n const payload = KubernetesPodConverter.patchPayload(oldPod, newPod);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesPods(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch pod', err);\n }\n }\n\n patch(oldPod, newPod) {\n return this.$async(this.patchAsync, oldPod, newPod);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(pod) {\n try {\n const params = new KubernetesCommonParams();\n params.id = pod.Name;\n const namespace = pod.Namespace;\n await this.KubernetesPods(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove pod', err);\n }\n }\n\n delete(pod) {\n return this.$async(this.deleteAsync, pod);\n }\n\n /**\n * EVICT\n */\n async evictionAsync(pod) {\n try {\n const params = new KubernetesCommonParams();\n params.id = pod.Name;\n params.action = 'eviction';\n const namespace = pod.Namespace;\n const podEvictionPayload = KubernetesPodConverter.evictionPayload(pod);\n await this.KubernetesPods(namespace).evict(params, podEvictionPayload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to evict pod', err);\n }\n }\n\n eviction(pod) {\n return this.$async(this.evictionAsync, pod);\n }\n}\n\nexport default KubernetesPodService;\nangular.module('portainer.kubernetes').service('KubernetesPodService', KubernetesPodService);\n","import angular from 'angular';\n\nimport { kubernetesRegistryAccessView } from './kube-registry-access-view';\n\nexport default angular.module('portainer.kubernetes.registries', []).component('kubernetesRegistryAccessView', kubernetesRegistryAccessView).name;\n","const autoNgTemplateLoaderTemplate1 = require('./kube-registry-access-view.html');\n\nimport controller from './kube-registry-access-view.controller';\n\nexport const kubernetesRegistryAccessView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n endpoint: '<',\n },\n};\n","import KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nexport default class KubernetesRegistryAccessController {\n /* @ngInject */\n constructor($async, $state, Authentication, ModalService, EndpointService, Notifications, KubernetesResourcePoolService) {\n this.$async = $async;\n this.$state = $state;\n this.Authentication = Authentication;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.EndpointService = EndpointService;\n\n this.state = {\n actionInProgress: false,\n };\n\n this.selectedResourcePools = [];\n this.resourcePools = [];\n this.savedResourcePools = [];\n\n this.handleRemove = this.handleRemove.bind(this);\n }\n\n async submit() {\n return this.updateNamespaces([...this.savedResourcePools.map(({ value }) => value), ...this.selectedResourcePools.map((pool) => pool.name)]);\n }\n\n handleRemove(namespaces) {\n const removeNamespaces = namespaces.map(({ value }) => value);\n const nsToUpdate = this.savedResourcePools.map(({ value }) => value).filter((value) => !removeNamespaces.includes(value));\n\n const displayedMessage =\n 'This registry might be used by one or more applications inside this environment. Removing the registry access could lead to a service interruption for these applications.

    Do you wish to continue?';\n this.ModalService.confirmDeletion(displayedMessage, (confirmed) => {\n if (confirmed) {\n return this.updateNamespaces(nsToUpdate);\n }\n });\n }\n\n updateNamespaces(namespaces) {\n return this.$async(async () => {\n try {\n await this.EndpointService.updateRegistryAccess(this.endpoint.Id, this.$state.params.id, {\n namespaces,\n });\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed saving registry access');\n }\n });\n }\n\n $onInit() {\n return this.$async(async () => {\n this.Authentication.redirectIfUnauthorized(['PortainerRegistryUpdateAccess']);\n try {\n this.registry = await this.EndpointService.registry(this.endpoint.Id, this.$state.params.id);\n if (this.registry.RegistryAccesses && this.registry.RegistryAccesses[this.endpoint.Id]) {\n this.savedResourcePools = this.registry.RegistryAccesses[this.endpoint.Id].Namespaces.map((value) => ({ value }));\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registry details');\n }\n\n try {\n const resourcePools = await this.KubernetesResourcePoolService.get();\n\n this.resourcePools = resourcePools\n .filter((pool) => !KubernetesNamespaceHelper.isSystemNamespace(pool.Namespace.Name) && !this.savedResourcePools.find(({ value }) => value === pool.Namespace.Name))\n .map((pool) => ({ name: pool.Namespace.Name, id: pool.Namespace.Id }));\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespaces');\n }\n });\n }\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesConfigMaps', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesConfigMapsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/configmaps/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesControllerRevisions', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesControllerRevisionsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/controllerrevisions/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesDaemonSets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesDaemonSetsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/daemonsets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/strategic-merge-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesDeployments', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesDeploymentsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/deployments/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","angular.module('portainer.kubernetes').factory('KubernetesEndpoints', function KubernetesEndpointsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/endpoints/:id';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n };\n});\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesEvents', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesEventsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/events/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","angular.module('portainer.kubernetes').factory('KubernetesHealth', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n function KubernetesHealthFactory($resource, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:id/kubernetes/healthz',\n {},\n {\n ping: { method: 'GET', params: { id: 'id' } },\n }\n );\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.kubernetes').factory('KubernetesConfig', KubernetesConfigFactory);\n\n/* @ngInject */\nfunction KubernetesConfigFactory($http, EndpointProvider, API_ENDPOINT_KUBERNETES) {\n return { get };\n\n async function get(environmentIDs) {\n return $http({\n method: 'GET',\n url: `${API_ENDPOINT_KUBERNETES}/config`,\n params: { ids: JSON.stringify(environmentIDs.map((x) => parseInt(x))) },\n responseType: 'blob',\n headers: {\n Accept: 'text/yaml',\n },\n });\n }\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesNamespaces', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesNamespacesFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1/namespaces/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n status: {\n method: 'GET',\n params: { action: 'status' },\n ignoreLoadingBar: true,\n },\n }\n );\n };\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.kubernetes').factory('KubernetesNodesLimits', KubernetesNodesLimitsFactory);\n\n/* @ngInject */\nfunction KubernetesNodesLimitsFactory($resource, API_ENDPOINT_KUBERNETES, EndpointProvider) {\n const url = API_ENDPOINT_KUBERNETES + '/:endpointId/nodes_limits';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n transformResponse: (data) => ({ data: JSON.parse(data) }),\n },\n }\n );\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesPersistentVolumeClaims', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesPersistentVolumeClaimsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/persistentvolumeclaims/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\nimport { logsHandler } from 'Docker/rest/response/handlers';\n\nangular.module('portainer.kubernetes').factory('KubernetesPods', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesPodsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/pods/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n logs: {\n method: 'GET',\n params: { action: 'log' },\n transformResponse: logsHandler,\n },\n evict: { method: 'POST' },\n }\n );\n };\n },\n]);\n","angular.module('portainer.kubernetes').factory('KubernetesPortainerNamespaces', KubernetesPortainerNamespacesFactory);\n\nfunction KubernetesPortainerNamespacesFactory($resource) {\n const url = '/api/kubernetes/:endpointId/namespaces/:namespaceName/:action';\n return $resource(\n url,\n {},\n {\n toggleSystem: { method: 'PUT', params: { action: 'system' } },\n }\n );\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesReplicaSets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesReplicaSetsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/replicasets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesResourceQuotas', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesResourceQuotasFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/resourcequotas/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","// Returns the raw response without JSON parsing\nexport function rawResponse(data) {\n const response = {\n data: data,\n };\n return response;\n}\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesSecrets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesSecretsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/secrets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesServices', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesServicesFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/api/v1' + (namespace ? '/namespaces/:namespace' : '') + '/services/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesStatefulSets', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesStatefulSetsFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function (namespace) {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/apps/v1' + (namespace ? '/namespaces/:namespace' : '') + '/statefulsets/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n namespace: namespace,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n rollback: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/strategic-merge-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import { rawResponse } from 'Kubernetes/rest/response/transform';\n\nangular.module('portainer.kubernetes').factory('KubernetesStorage', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n 'EndpointProvider',\n function KubernetesStorageFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {\n 'use strict';\n return function () {\n const url = API_ENDPOINT_ENDPOINTS + '/:endpointId/kubernetes/apis/storage.k8s.io/v1/storageclasses/:id/:action';\n return $resource(\n url,\n {\n endpointId: EndpointProvider.endpointID,\n },\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n getYaml: {\n method: 'GET',\n headers: {\n Accept: 'application/yaml',\n },\n transformResponse: rawResponse,\n ignoreLoadingBar: true,\n },\n create: { method: 'POST' },\n update: { method: 'PUT' },\n patch: {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json-patch+json',\n },\n },\n delete: { method: 'DELETE' },\n }\n );\n };\n },\n]);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nimport {\n KubernetesApplication,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationTypes,\n} from 'Kubernetes/models/application/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesApplicationRollbackHelper from 'Kubernetes/helpers/application/rollback';\nimport KubernetesApplicationConverter from 'Kubernetes/converters/application';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\nimport KubernetesServiceHelper from 'Kubernetes/helpers/serviceHelper';\nimport { KubernetesHorizontalPodAutoScalerHelper } from 'Kubernetes/horizontal-pod-auto-scaler/helper';\nimport { KubernetesHorizontalPodAutoScalerConverter } from 'Kubernetes/horizontal-pod-auto-scaler/converter';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesPodConverter from 'Kubernetes/pod/converter';\n\nclass KubernetesApplicationService {\n /* #region CONSTRUCTOR */\n /* @ngInject */\n constructor(\n $async,\n Authentication,\n KubernetesDeploymentService,\n KubernetesDaemonSetService,\n KubernetesStatefulSetService,\n KubernetesServiceService,\n KubernetesSecretService,\n KubernetesPersistentVolumeClaimService,\n KubernetesNamespaceService,\n KubernetesPodService,\n KubernetesHistoryService,\n KubernetesHorizontalPodAutoScalerService,\n KubernetesIngressService\n ) {\n this.$async = $async;\n this.Authentication = Authentication;\n this.KubernetesDeploymentService = KubernetesDeploymentService;\n this.KubernetesDaemonSetService = KubernetesDaemonSetService;\n this.KubernetesStatefulSetService = KubernetesStatefulSetService;\n this.KubernetesServiceService = KubernetesServiceService;\n this.KubernetesSecretService = KubernetesSecretService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n this.KubernetesNamespaceService = KubernetesNamespaceService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesHistoryService = KubernetesHistoryService;\n this.KubernetesHorizontalPodAutoScalerService = KubernetesHorizontalPodAutoScalerService;\n this.KubernetesIngressService = KubernetesIngressService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.patchPartialAsync = this.patchPartialAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n /* #endregion */\n\n /* #region UTILS */\n _getApplicationApiService(app) {\n let apiService;\n if (app instanceof KubernetesDeployment || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT)) {\n apiService = this.KubernetesDeploymentService;\n } else if (app instanceof KubernetesDaemonSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DAEMONSET)) {\n apiService = this.KubernetesDaemonSetService;\n } else if (app instanceof KubernetesStatefulSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.STATEFULSET)) {\n apiService = this.KubernetesStatefulSetService;\n } else if (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.POD) {\n apiService = this.KubernetesPodService;\n } else {\n throw new PortainerError('Unable to determine which association to use to retrieve API Service');\n }\n return apiService;\n }\n\n _generateIngressPatchPromises(oldIngresses, newIngresses) {\n return _.map(newIngresses, (newIng) => {\n const oldIng = _.find(oldIngresses, { Name: newIng.Name });\n return this.KubernetesIngressService.patch(oldIng, newIng);\n });\n }\n /* #endregion */\n\n /* #region GET */\n async getAsync(namespace, name) {\n const [deployment, daemonSet, statefulSet, pod, pods, autoScalers, ingresses] = await Promise.allSettled([\n this.KubernetesDeploymentService.get(namespace, name),\n this.KubernetesDaemonSetService.get(namespace, name),\n this.KubernetesStatefulSetService.get(namespace, name),\n this.KubernetesPodService.get(namespace, name),\n this.KubernetesPodService.get(namespace),\n this.KubernetesHorizontalPodAutoScalerService.get(namespace),\n this.KubernetesIngressService.get(namespace),\n ]);\n\n let rootItem;\n let converterFunc;\n if (deployment.status === 'fulfilled') {\n rootItem = deployment;\n converterFunc = KubernetesApplicationConverter.apiDeploymentToApplication;\n } else if (daemonSet.status === 'fulfilled') {\n rootItem = daemonSet;\n converterFunc = KubernetesApplicationConverter.apiDaemonSetToApplication;\n } else if (statefulSet.status === 'fulfilled') {\n rootItem = statefulSet;\n converterFunc = KubernetesApplicationConverter.apiStatefulSetToapplication;\n } else if (pod.status === 'fulfilled') {\n rootItem = pod;\n converterFunc = KubernetesApplicationConverter.apiPodToApplication;\n } else {\n throw new PortainerError('Unable to determine which association to use to convert application');\n }\n\n const services = await this.KubernetesServiceService.get(namespace);\n const boundService = KubernetesServiceHelper.findApplicationBoundService(services, rootItem.value.Raw);\n const service = boundService ? await this.KubernetesServiceService.get(namespace, boundService.metadata.name) : {};\n const boundServices = KubernetesServiceHelper.findApplicationBoundServices(services, rootItem.value.Raw);\n\n const application = converterFunc(rootItem.value.Raw, pods.value, service.Raw, ingresses.value);\n application.Yaml = rootItem.value.Yaml;\n application.Raw = rootItem.value.Raw;\n application.Pods = _.map(application.Pods, (item) => KubernetesPodConverter.apiToModel(item));\n application.Containers = KubernetesApplicationHelper.associateContainersAndApplication(application);\n application.Services = boundServices;\n\n const boundScaler = KubernetesHorizontalPodAutoScalerHelper.findApplicationBoundScaler(autoScalers.value, application);\n const scaler = boundScaler ? await this.KubernetesHorizontalPodAutoScalerService.get(namespace, boundScaler.Name) : undefined;\n application.AutoScaler = scaler;\n application.Ingresses = ingresses;\n\n await this.KubernetesHistoryService.get(application);\n\n if (service.Yaml) {\n application.Yaml += '---\\n' + service.Yaml;\n }\n if (scaler && scaler.Yaml) {\n application.Yaml += '---\\n' + scaler.Yaml;\n }\n // TODO: refactor @LP\n // append ingress yaml ?\n return application;\n }\n\n async getAllAsync(namespace) {\n const namespaces = namespace ? [namespace] : _.map(await this.KubernetesNamespaceService.get(), 'Name');\n\n const convertToApplication = (item, converterFunc, services, pods, ingresses) => {\n const service = KubernetesServiceHelper.findApplicationBoundService(services, item);\n const servicesFound = KubernetesServiceHelper.findApplicationBoundServices(services, item);\n const application = converterFunc(item, pods, service, ingresses);\n application.Containers = KubernetesApplicationHelper.associateContainersAndApplication(application);\n application.Services = servicesFound;\n return application;\n };\n\n const res = await Promise.all(\n _.map(namespaces, async (ns) => {\n const [deployments, daemonSets, statefulSets, services, pods, ingresses, autoScalers] = await Promise.all([\n this.KubernetesDeploymentService.get(ns),\n this.KubernetesDaemonSetService.get(ns),\n this.KubernetesStatefulSetService.get(ns),\n this.KubernetesServiceService.get(ns),\n this.KubernetesPodService.get(ns),\n this.KubernetesIngressService.get(ns),\n this.KubernetesHorizontalPodAutoScalerService.get(ns),\n ]);\n\n const deploymentApplications = _.map(deployments, (item) =>\n convertToApplication(item, KubernetesApplicationConverter.apiDeploymentToApplication, services, pods, ingresses)\n );\n const daemonSetApplications = _.map(daemonSets, (item) => convertToApplication(item, KubernetesApplicationConverter.apiDaemonSetToApplication, services, pods, ingresses));\n const statefulSetApplications = _.map(statefulSets, (item) =>\n convertToApplication(item, KubernetesApplicationConverter.apiStatefulSetToapplication, services, pods, ingresses)\n );\n\n const boundPods = _.concat(_.flatMap(deploymentApplications, 'Pods'), _.flatMap(daemonSetApplications, 'Pods'), _.flatMap(statefulSetApplications, 'Pods'));\n const unboundPods = _.without(pods, ...boundPods);\n const nakedPodsApplications = _.map(unboundPods, (item) => convertToApplication(item, KubernetesApplicationConverter.apiPodToApplication, services, pods, ingresses));\n\n const applications = _.concat(deploymentApplications, daemonSetApplications, statefulSetApplications, nakedPodsApplications);\n _.forEach(applications, (app) => {\n app.Pods = _.map(app.Pods, (item) => KubernetesPodConverter.apiToModel(item));\n });\n await Promise.all(\n _.forEach(applications, async (application) => {\n const boundScaler = KubernetesHorizontalPodAutoScalerHelper.findApplicationBoundScaler(autoScalers, application);\n const scaler = boundScaler ? await this.KubernetesHorizontalPodAutoScalerService.get(ns, boundScaler.Name) : undefined;\n application.AutoScaler = scaler;\n application.Ingresses = await this.KubernetesIngressService.get(ns);\n })\n );\n return applications;\n })\n );\n return _.flatten(res);\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n /* #endregion */\n\n /* #region CREATE */\n // TODO: review\n // resource creation flow\n // should we keep formValues > Resource_1 || Resource_2\n // or should we switch to formValues > Composite > Resource_1 || Resource_2\n /**\n * NOTE: Keep this method flow in sync with `getCreatedApplicationResources` method in the `applicationService` file\n * To synchronise with kubernetes resource creation summary output, any new resources created in this method should\n * also be displayed in the summary output (getCreatedApplicationResources)\n */\n async createAsync(formValues) {\n // formValues -> Application\n let [app, headlessService, services, service, claims] = KubernetesApplicationConverter.applicationFormValuesToApplication(formValues);\n\n if (services) {\n services.forEach(async (service) => {\n this.KubernetesServiceService.create(service);\n if (service.Ingress) {\n const ingresses = KubernetesIngressConverter.newApplicationFormValuesToIngresses(formValues, service.Name, service.Ports);\n await Promise.all(this._generateIngressPatchPromises(formValues.OriginalIngresses, ingresses));\n }\n });\n }\n\n if (service) {\n await this.KubernetesServiceService.create(service);\n if (formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(formValues, service.Name);\n await Promise.all(this._generateIngressPatchPromises(formValues.OriginalIngresses, ingresses));\n }\n }\n\n const apiService = this._getApplicationApiService(app);\n\n if (app instanceof KubernetesStatefulSet) {\n app.VolumeClaims = claims;\n headlessService = await this.KubernetesServiceService.create(headlessService);\n app.ServiceName = headlessService.metadata.name;\n } else {\n const claimPromises = _.map(claims, (item) => {\n if (!item.PreviousName && !item.Id) {\n return this.KubernetesPersistentVolumeClaimService.create(item);\n }\n });\n await Promise.all(_.without(claimPromises, undefined));\n }\n\n if (formValues.AutoScaler.IsUsed && formValues.DeploymentType !== KubernetesApplicationDeploymentTypes.GLOBAL) {\n const kind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(app);\n const autoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(formValues, kind);\n await this.KubernetesHorizontalPodAutoScalerService.create(autoScaler);\n }\n\n await apiService.create(app);\n }\n\n create(formValues) {\n return this.$async(this.createAsync, formValues);\n }\n /* #endregion */\n\n /* #region PATCH */\n // this function accepts KubernetesApplicationFormValues as parameters\n /**\n * NOTE: Keep this method flow in sync with `getUpdatedApplicationResources` method in the `applicationService` file\n * To synchronise with kubernetes resource creation, update and delete summary output, any new resources created\n * in this method should also be displayed in the summary output (getUpdatedApplicationResources)\n */\n async patchAsync(oldFormValues, newFormValues) {\n const [oldApp, oldHeadlessService, oldServices, oldService, oldClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(oldFormValues);\n const [newApp, newHeadlessService, newServices, newService, newClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(newFormValues);\n const oldApiService = this._getApplicationApiService(oldApp);\n const newApiService = this._getApplicationApiService(newApp);\n\n if (oldApiService !== newApiService) {\n await this.delete(oldApp);\n if (oldService) {\n await this.KubernetesServiceService.delete(oldService);\n }\n if (newService) {\n return '';\n }\n return await this.create(newFormValues);\n }\n\n if (newApp instanceof KubernetesStatefulSet) {\n await this.KubernetesServiceService.patch(oldHeadlessService, newHeadlessService);\n } else {\n const claimPromises = _.map(newClaims, (newClaim) => {\n if (!newClaim.PreviousName && !newClaim.Id) {\n return this.KubernetesPersistentVolumeClaimService.create(newClaim);\n } else if (!newClaim.Id) {\n const oldClaim = _.find(oldClaims, { Name: newClaim.PreviousName });\n return this.KubernetesPersistentVolumeClaimService.patch(oldClaim, newClaim);\n }\n });\n await Promise.all(claimPromises);\n }\n\n await newApiService.patch(oldApp, newApp);\n\n if (oldServices.length === 0 && newServices.length !== 0) {\n newServices.forEach(async (service) => {\n await this.KubernetesServiceService.create(service);\n if (service.Ingress) {\n const ingresses = KubernetesIngressConverter.newApplicationFormValuesToIngresses(oldFormValues, service.Name, service.Ports);\n await Promise.all(this._generateIngressPatchPromises(oldFormValues.OriginalIngresses, ingresses));\n }\n });\n }\n\n if (oldServices.length !== 0 && newServices.length === 0) {\n oldServices.forEach(async (oldService) => {\n if (oldService.Ingress) {\n const ingresses = KubernetesIngressConverter.deleteIngressByServiceName(oldFormValues, oldService);\n await Promise.all(this._generateIngressPatchPromises(oldFormValues.OriginalIngresses, ingresses));\n }\n });\n await this.KubernetesServiceService.deleteAll(oldServices);\n }\n\n if (oldServices.length !== 0 && newServices.length !== 0) {\n newServices.forEach(async (newService) => {\n const oldServiceMatched = _.find(oldServices, { Name: newService.Name });\n if (oldServiceMatched) {\n await this.KubernetesServiceService.patch(oldServiceMatched, newService);\n if (newService.Ingress) {\n const ingresses = KubernetesIngressConverter.editingFormValuesToIngresses(oldFormValues, newService.Name, newService.Ports);\n await Promise.all(this._generateIngressPatchPromises(oldFormValues.OriginalIngresses, ingresses));\n }\n } else {\n await this.KubernetesServiceService.create(newService);\n if (newService.Ingress) {\n const ingresses = KubernetesIngressConverter.newApplicationFormValuesToIngresses(oldFormValues, newService.Name, newService.Ports);\n await Promise.all(this._generateIngressPatchPromises(oldFormValues.OriginalIngresses, ingresses));\n }\n }\n });\n\n oldServices.forEach(async (oldService) => {\n const newServiceMatched = _.find(newServices, { Name: oldService.Name });\n if (!newServiceMatched) {\n await this.KubernetesServiceService.deleteSingle(oldService);\n if (oldService.Ingress) {\n const ingresses = KubernetesIngressConverter.deleteIngressByServiceName(oldFormValues, oldService);\n await Promise.all(this._generateIngressPatchPromises(oldFormValues.OriginalIngresses, ingresses));\n }\n }\n });\n }\n\n const newKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(newApp);\n const newAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(newFormValues, newKind);\n if (!oldFormValues.AutoScaler.IsUsed) {\n if (newFormValues.AutoScaler.IsUsed) {\n await this.KubernetesHorizontalPodAutoScalerService.create(newAutoScaler);\n }\n } else {\n const oldKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(oldApp);\n const oldAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(oldFormValues, oldKind);\n if (newFormValues.AutoScaler.IsUsed) {\n await this.KubernetesHorizontalPodAutoScalerService.patch(oldAutoScaler, newAutoScaler);\n } else {\n await this.KubernetesHorizontalPodAutoScalerService.delete(oldAutoScaler);\n }\n }\n }\n\n // this function accepts KubernetesApplication as parameters\n async patchPartialAsync(oldApp, newApp) {\n const oldAppPayload = {\n Name: oldApp.Name,\n Namespace: oldApp.ResourcePool,\n StackName: oldApp.StackName,\n Note: oldApp.Note,\n };\n const newAppPayload = {\n Name: newApp.Name,\n Namespace: newApp.ResourcePool,\n StackName: newApp.StackName,\n Note: newApp.Note,\n };\n const apiService = this._getApplicationApiService(oldApp);\n await apiService.patch(oldAppPayload, newAppPayload);\n }\n\n // accept either formValues or applications as parameters depending on partial value\n // true = KubernetesApplication\n // false = KubernetesApplicationFormValues\n //\n // e.g. signatures are\n //\n // patch(oldValues: KubernetesApplication, newValues: KubernetesApplication, partial: (undefined | false)): Promise\n // patch(oldValues: KubernetesApplicationFormValues, newValues: KubernetesApplicationFormValues, partial: true): Promise\n patch(oldValues, newValues, partial = false) {\n if (partial) {\n return this.$async(this.patchPartialAsync, oldValues, newValues);\n }\n return this.$async(this.patchAsync, oldValues, newValues);\n }\n /* #endregion */\n\n /* #region DELETE */\n async deleteAsync(application) {\n const payload = {\n Namespace: application.ResourcePool || application.Namespace,\n Name: application.Name,\n };\n const servicePayload = angular.copy(payload);\n servicePayload.Name = application.Name;\n\n const apiService = this._getApplicationApiService(application);\n await apiService.delete(payload);\n\n if (apiService === this.KubernetesStatefulSetService) {\n const headlessServicePayload = angular.copy(payload);\n headlessServicePayload.Name = application instanceof KubernetesStatefulSet ? application.ServiceName : application.HeadlessServiceName;\n }\n\n if (application.ServiceType) {\n // delete headless service && non-headless service\n await this.KubernetesServiceService.delete(application.Services);\n\n if (application.Ingresses.length) {\n const originalIngresses = await this.KubernetesIngressService.get(payload.Namespace);\n const formValues = {\n OriginalIngresses: originalIngresses,\n PublishedPorts: KubernetesApplicationHelper.generatePublishedPortsFormValuesFromPublishedPorts(application.ServiceType, application.PublishedPorts),\n };\n const ingresses = KubernetesIngressConverter.applicationFormValuesToDeleteIngresses(formValues, application);\n\n await Promise.all(this._generateIngressPatchPromises(formValues.OriginalIngresses, ingresses));\n }\n }\n if (!_.isEmpty(application.AutoScaler)) {\n await this.KubernetesHorizontalPodAutoScalerService.delete(application.AutoScaler);\n }\n }\n\n delete(application) {\n return this.$async(this.deleteAsync, application);\n }\n /* #endregion */\n\n /* #region ROLLBACK */\n async rollbackAsync(application, targetRevision) {\n const payload = KubernetesApplicationRollbackHelper.getPatchPayload(application, targetRevision);\n const apiService = this._getApplicationApiService(application);\n await apiService.rollback(application.ResourcePool, application.Name, payload);\n }\n\n rollback(application, targetRevision) {\n return this.$async(this.rollbackAsync, application, targetRevision);\n }\n /* #endregion */\n}\n\nexport default KubernetesApplicationService;\nangular.module('portainer.kubernetes').service('KubernetesApplicationService', KubernetesApplicationService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesConfigMapConverter from 'Kubernetes/converters/configMap';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport { KubernetesPortainerAccessConfigMap } from 'Kubernetes/models/config-map/models';\n\nclass KubernetesConfigMapService {\n /* @ngInject */\n constructor($async, KubernetesConfigMaps) {\n this.$async = $async;\n this.KubernetesConfigMaps = KubernetesConfigMaps;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n getAccess(namespace, name) {\n return this.$async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const raw = await this.KubernetesConfigMaps(namespace).get(params).$promise;\n return KubernetesConfigMapConverter.apiToPortainerAccessConfigMap(raw);\n } catch (err) {\n if (err.status === 404) {\n return new KubernetesPortainerAccessConfigMap();\n }\n throw new PortainerError('Unable to retrieve Portainer accesses', err);\n }\n });\n }\n\n createAccess(config) {\n return this.$async(async () => {\n try {\n const payload = KubernetesConfigMapConverter.createAccessPayload(config);\n const params = {};\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).create(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToPortainerAccessConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to create Portainer accesses', err);\n }\n });\n }\n\n updateAccess(config) {\n return this.$async(async () => {\n try {\n if (!config.Id) {\n return await this.createAccess(config);\n }\n const payload = KubernetesConfigMapConverter.updateAccessPayload(config);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).update(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToPortainerAccessConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to update Portainer accesses', err);\n }\n });\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [rawPromise, yamlPromise] = await Promise.allSettled([\n this.KubernetesConfigMaps(namespace).get(params).$promise,\n this.KubernetesConfigMaps(namespace).getYaml(params).$promise,\n ]);\n\n if (_.get(rawPromise, 'reason.status') === 404 && _.get(yamlPromise, 'reason.status') === 404) {\n return KubernetesConfigMapConverter.defaultConfigMap(namespace, name);\n }\n\n // Saving binary data to 'data' field in configMap Object is not allowed by kubernetes and getYaml() may get\n // an error. We should keep binary data to 'binaryData' field instead of 'data'. Before that, we\n // use response from get() and ignore 500 error as a workaround.\n if (rawPromise.value) {\n return KubernetesConfigMapConverter.apiToConfigMap(rawPromise.value, yamlPromise.value);\n }\n\n throw new PortainerError('Unable to retrieve config map ', name);\n } catch (err) {\n if (err.status === 404) {\n return KubernetesConfigMapConverter.defaultConfigMap(namespace, name);\n }\n throw new PortainerError('Unable to retrieve config map', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesConfigMaps(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesConfigMapConverter.apiToConfigMap(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve config maps', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(config) {\n try {\n const payload = KubernetesConfigMapConverter.createPayload(config);\n const params = {};\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).create(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to create config map', err);\n }\n }\n\n create(config) {\n return this.$async(this.createAsync, config);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(config) {\n try {\n if (!config.Id) {\n return await this.create(config);\n }\n const payload = KubernetesConfigMapConverter.updatePayload(config);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesConfigMaps(namespace).update(params, payload).$promise;\n return KubernetesConfigMapConverter.apiToConfigMap(data);\n } catch (err) {\n throw new PortainerError('Unable to update config map', err);\n }\n }\n update(config) {\n return this.$async(this.updateAsync, config);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(config) {\n try {\n const params = new KubernetesCommonParams();\n params.id = config.Name;\n const namespace = config.Namespace;\n await this.KubernetesConfigMaps(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete config map', err);\n }\n }\n\n delete(config) {\n return this.$async(this.deleteAsync, config);\n }\n}\n\nexport default KubernetesConfigMapService;\nangular.module('portainer.kubernetes').service('KubernetesConfigMapService', KubernetesConfigMapService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesConfigurationConverter from 'Kubernetes/converters/configuration';\nimport KubernetesConfigMapConverter from 'Kubernetes/converters/configMap';\nimport KubernetesSecretConverter from 'Kubernetes/converters/secret';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\nclass KubernetesConfigurationService {\n /* @ngInject */\n constructor($async, Authentication, KubernetesNamespaceService, KubernetesConfigMapService, KubernetesSecretService) {\n this.$async = $async;\n this.Authentication = Authentication;\n this.KubernetesNamespaceService = KubernetesNamespaceService;\n this.KubernetesConfigMapService = KubernetesConfigMapService;\n this.KubernetesSecretService = KubernetesSecretService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n const [configMap, secret] = await Promise.allSettled([this.KubernetesConfigMapService.get(namespace, name), this.KubernetesSecretService.get(namespace, name)]);\n let configuration;\n if (secret.status === 'fulfilled') {\n configuration = KubernetesConfigurationConverter.secretToConfiguration(secret.value);\n return configuration;\n }\n configuration = KubernetesConfigurationConverter.configMapToConfiguration(configMap.value);\n return configuration;\n }\n\n async getAllAsync(namespace) {\n const namespaces = namespace ? [namespace] : _.map(await this.KubernetesNamespaceService.get(), 'Name');\n const res = await Promise.all(\n _.map(namespaces, async (ns) => {\n const [configMaps, secrets] = await Promise.all([this.KubernetesConfigMapService.get(ns), this.KubernetesSecretService.get(ns)]);\n const secretsConfigurations = _.map(secrets, (secret) => KubernetesConfigurationConverter.secretToConfiguration(secret));\n const configMapsConfigurations = _.map(configMaps, (configMap) => KubernetesConfigurationConverter.configMapToConfiguration(configMap));\n return _.concat(configMapsConfigurations, secretsConfigurations);\n })\n );\n return _.flatten(res);\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(formValues) {\n formValues.ConfigurationOwner = KubernetesCommonHelper.ownerToLabel(formValues.ConfigurationOwner);\n\n if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n const configMap = KubernetesConfigMapConverter.configurationFormValuesToConfigMap(formValues);\n await this.KubernetesConfigMapService.create(configMap);\n } else {\n const secret = KubernetesSecretConverter.configurationFormValuesToSecret(formValues);\n await this.KubernetesSecretService.create(secret);\n }\n }\n\n create(formValues) {\n return this.$async(this.createAsync, formValues);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(formValues, configuration) {\n if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n const configMap = KubernetesConfigMapConverter.configurationFormValuesToConfigMap(formValues);\n configMap.ConfigurationOwner = configuration.ConfigurationOwner;\n await this.KubernetesConfigMapService.update(configMap);\n } else {\n const secret = KubernetesSecretConverter.configurationFormValuesToSecret(formValues);\n secret.ConfigurationOwner = configuration.ConfigurationOwner;\n await this.KubernetesSecretService.update(secret);\n }\n }\n\n update(formValues, configuration) {\n return this.$async(this.updateAsync, formValues, configuration);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(config) {\n if (config.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n await this.KubernetesConfigMapService.delete(config);\n } else {\n await this.KubernetesSecretService.delete(config);\n }\n }\n\n delete(config) {\n return this.$async(this.deleteAsync, config);\n }\n}\n\nexport default KubernetesConfigurationService;\nangular.module('portainer.kubernetes').service('KubernetesConfigurationService', KubernetesConfigurationService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nclass KubernetesControllerRevisionService {\n /* @ngInject */\n constructor($async, KubernetesControllerRevisions) {\n this.$async = $async;\n this.KubernetesControllerRevisions = KubernetesControllerRevisions;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesControllerRevisions(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve ControllerRevisions', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesControllerRevisionService;\nangular.module('portainer.kubernetes').service('KubernetesControllerRevisionService', KubernetesControllerRevisionService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesDaemonSetConverter from 'Kubernetes/converters/daemonSet';\n\nclass KubernetesDaemonSetService {\n /* @ngInject */\n constructor($async, KubernetesDaemonSets) {\n this.$async = $async;\n this.KubernetesDaemonSets = KubernetesDaemonSets;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesDaemonSets(namespace).get(params).$promise, this.KubernetesDaemonSets(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve DaemonSet', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesDaemonSets(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve DaemonSets', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(daemonSet) {\n try {\n const params = {};\n const payload = KubernetesDaemonSetConverter.createPayload(daemonSet);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesDaemonSets(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create daemonset', err);\n }\n }\n\n create(daemonSet) {\n return this.$async(this.createAsync, daemonSet);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldDaemonSet, newDaemonSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newDaemonSet.Name;\n const namespace = newDaemonSet.Namespace;\n const payload = KubernetesDaemonSetConverter.patchPayload(oldDaemonSet, newDaemonSet);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesDaemonSets(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch daemonSet', err);\n }\n }\n\n patch(oldDaemonSet, newDaemonSet) {\n return this.$async(this.patchAsync, oldDaemonSet, newDaemonSet);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(daemonSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = daemonSet.Name;\n const namespace = daemonSet.Namespace;\n await this.KubernetesDaemonSets(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove daemonset', err);\n }\n }\n\n delete(daemonSet) {\n return this.$async(this.deleteAsync, daemonSet);\n }\n\n /**\n * ROLLBACK\n */\n async rollbackAsync(namespace, name, payload) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesDaemonSets(namespace).rollback(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to rollback daemonset', err);\n }\n }\n\n rollback(namespace, name, payload) {\n return this.$async(this.rollbackAsync, namespace, name, payload);\n }\n}\n\nexport default KubernetesDaemonSetService;\nangular.module('portainer.kubernetes').service('KubernetesDaemonSetService', KubernetesDaemonSetService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesDeploymentConverter from 'Kubernetes/converters/deployment';\n\nclass KubernetesDeploymentService {\n /* @ngInject */\n constructor($async, KubernetesDeployments) {\n this.$async = $async;\n this.KubernetesDeployments = KubernetesDeployments;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesDeployments(namespace).get(params).$promise, this.KubernetesDeployments(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Deployment', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesDeployments(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve Deployments', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(deployment) {\n try {\n const params = {};\n const payload = KubernetesDeploymentConverter.createPayload(deployment);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesDeployments(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create deployment', err);\n }\n }\n\n create(deployment) {\n return this.$async(this.createAsync, deployment);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldDeployment, newDeployment) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newDeployment.Name;\n const namespace = newDeployment.Namespace;\n const payload = KubernetesDeploymentConverter.patchPayload(oldDeployment, newDeployment);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesDeployments(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch deployment', err);\n }\n }\n\n patch(oldDeployment, newDeployment) {\n return this.$async(this.patchAsync, oldDeployment, newDeployment);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(deployment) {\n try {\n const params = new KubernetesCommonParams();\n params.id = deployment.Name;\n const namespace = deployment.Namespace;\n await this.KubernetesDeployments(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove deployment', err);\n }\n }\n\n delete(deployment) {\n return this.$async(this.deleteAsync, deployment);\n }\n\n /**\n * ROLLBACK\n */\n async rollbackAsync(namespace, name, payload) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesDeployments(namespace).rollback(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to rollback deployment', err);\n }\n }\n\n rollback(namespace, name, payload) {\n return this.$async(this.rollbackAsync, namespace, name, payload);\n }\n}\n\nexport default KubernetesDeploymentService;\nangular.module('portainer.kubernetes').service('KubernetesDeploymentService', KubernetesDeploymentService);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport KubernetesEventConverter from 'Kubernetes/converters/event';\n\nclass KubernetesEventService {\n /* @ngInject */\n constructor($async, KubernetesEvents) {\n this.$async = $async;\n this.KubernetesEvents = KubernetesEvents;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesEvents(namespace).get().$promise;\n const res = _.map(data.items, (item) => KubernetesEventConverter.apiToEvent(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve events', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesEventService;\nangular.module('portainer.kubernetes').service('KubernetesEventService', KubernetesEventService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nclass KubernetesHealthService {\n /* @ngInject */\n constructor($async, KubernetesHealth) {\n this.$async = $async;\n this.KubernetesHealth = KubernetesHealth;\n\n this.pingAsync = this.pingAsync.bind(this);\n }\n\n /**\n * PING\n */\n async pingAsync(endpointID) {\n try {\n return await this.KubernetesHealth.ping({ id: endpointID }).$promise;\n } catch (err) {\n throw new PortainerError('Unable to retrieve environment health', err);\n }\n }\n\n ping(endpointID) {\n return this.$async(this.pingAsync, endpointID);\n }\n}\n\nexport default KubernetesHealthService;\nangular.module('portainer.kubernetes').service('KubernetesHealthService', KubernetesHealthService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nimport KubernetesHistoryHelper from 'Kubernetes/helpers/history';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\n\nclass KubernetesHistoryService {\n /* @ngInject */\n constructor($async, KubernetesReplicaSetService, KubernetesControllerRevisionService) {\n this.$async = $async;\n this.KubernetesReplicaSetService = KubernetesReplicaSetService;\n this.KubernetesControllerRevisionService = KubernetesControllerRevisionService;\n\n this.getAsync = this.getAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(application) {\n try {\n const namespace = application.ResourcePool;\n let rawRevisions;\n\n switch (application.ApplicationType) {\n case KubernetesApplicationTypes.DEPLOYMENT:\n rawRevisions = await this.KubernetesReplicaSetService.get(namespace);\n break;\n case KubernetesApplicationTypes.DAEMONSET:\n rawRevisions = await this.KubernetesControllerRevisionService.get(namespace);\n break;\n case KubernetesApplicationTypes.STATEFULSET:\n rawRevisions = await this.KubernetesControllerRevisionService.get(namespace);\n break;\n case KubernetesApplicationTypes.POD:\n rawRevisions = [];\n break;\n default:\n throw new PortainerError('Unable to determine which association to use for history');\n }\n if (rawRevisions.length) {\n const [currentRevision, revisionsList] = KubernetesHistoryHelper.getRevisions(rawRevisions, application);\n application.CurrentRevision = currentRevision;\n application.Revisions = revisionsList;\n }\n\n return application;\n } catch (err) {\n throw new PortainerError('', err);\n }\n }\n\n get(application) {\n return this.$async(this.getAsync, application);\n }\n}\n\nexport default KubernetesHistoryService;\nangular.module('portainer.kubernetes').service('KubernetesHistoryService', KubernetesHistoryService);\n","import angular from 'angular';\n\nclass KubernetesConfigService {\n /* @ngInject */\n constructor(KubernetesConfig, FileSaver, SettingsService) {\n this.KubernetesConfig = KubernetesConfig;\n this.FileSaver = FileSaver;\n this.SettingsService = SettingsService;\n }\n\n async downloadKubeconfigFile(environmentIDs) {\n const response = await this.KubernetesConfig.get(environmentIDs);\n const headers = response.headers();\n const contentDispositionHeader = headers['content-disposition'];\n const filename = contentDispositionHeader.replace('attachment;', '').trim();\n return this.FileSaver.saveAs(response.data, filename);\n }\n\n async expiryMessage() {\n const settings = await this.SettingsService.publicSettings();\n const expiryDays = settings.KubeconfigExpiry;\n const prefix = 'Kubeconfig file will ';\n switch (expiryDays) {\n case '0':\n return prefix + 'not expire.';\n case '24h':\n return prefix + 'expire in 1 day.';\n case '168h':\n return prefix + 'expire in 7 days.';\n case '720h':\n return prefix + 'expire in 30 days.';\n case '8640h':\n return prefix + 'expire in 1 year.';\n }\n return '';\n }\n}\n\nexport default KubernetesConfigService;\nangular.module('portainer.kubernetes').service('KubernetesConfigService', KubernetesConfigService);\n","import _ from 'lodash-es';\n\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesNamespaceConverter from 'Kubernetes/converters/namespace';\nimport { updateNamespaces } from 'Kubernetes/store/namespace';\nimport $allSettled from 'Portainer/services/allSettled';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nclass KubernetesNamespaceService {\n /* @ngInject */\n constructor($async, KubernetesNamespaces, Authentication) {\n this.$async = $async;\n this.KubernetesNamespaces = KubernetesNamespaces;\n this.Authentication = Authentication;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesNamespaces().status(params).$promise;\n const [raw, yaml] = await Promise.all([this.KubernetesNamespaces().get(params).$promise, this.KubernetesNamespaces().getYaml(params).$promise]);\n const ns = KubernetesNamespaceConverter.apiToNamespace(raw, yaml);\n updateNamespaces([ns]);\n return ns;\n } catch (err) {\n throw new PortainerError('Unable to retrieve namespace', err);\n }\n }\n\n async getAllAsync() {\n try {\n const data = await this.KubernetesNamespaces().get().$promise;\n const promises = _.map(data.items, (item) => this.KubernetesNamespaces().status({ id: item.metadata.name }).$promise);\n const namespaces = await $allSettled(promises);\n const hasK8sAccessSystemNamespaces = this.Authentication.hasAuthorizations(['K8sAccessSystemNamespaces']);\n const visibleNamespaces = _.map(namespaces.fulfilled, (item) => {\n const namespace = KubernetesNamespaceConverter.apiToNamespace(item);\n if (KubernetesNamespaceHelper.isSystemNamespace(namespace)) {\n if (hasK8sAccessSystemNamespaces) {\n return namespace;\n }\n } else {\n return namespace;\n }\n });\n const res = _.without(visibleNamespaces, undefined);\n updateNamespaces(res);\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve namespaces', err);\n }\n }\n\n get(name) {\n if (name) {\n return this.$async(this.getAsync, name);\n }\n return this.$async(this.getAllAsync);\n }\n\n /**\n * CREATE\n */\n async createAsync(namespace) {\n try {\n const payload = KubernetesNamespaceConverter.createPayload(namespace);\n const params = {};\n const data = await this.KubernetesNamespaces().create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create namespace', err);\n }\n }\n\n create(namespace) {\n return this.$async(this.createAsync, namespace);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(namespace) {\n try {\n const params = new KubernetesCommonParams();\n params.id = namespace.Name;\n await this.KubernetesNamespaces().delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete namespace', err);\n }\n }\n\n delete(namespace) {\n return this.$async(this.deleteAsync, namespace);\n }\n}\n\nexport default KubernetesNamespaceService;\nangular.module('portainer.kubernetes').service('KubernetesNamespaceService', KubernetesNamespaceService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesNodesLimits } from 'Kubernetes/models/nodes-limits/models';\n\nclass KubernetesNodesLimitsService {\n /* @ngInject */\n constructor(KubernetesNodesLimits) {\n this.KubernetesNodesLimits = KubernetesNodesLimits;\n }\n\n /**\n * GET\n */\n async get() {\n try {\n const nodesLimits = await this.KubernetesNodesLimits.get().$promise;\n return new KubernetesNodesLimits(nodesLimits.data);\n } catch (err) {\n throw new PortainerError('Unable to retrieve nodes limits', err);\n }\n }\n}\n\nexport default KubernetesNodesLimitsService;\nangular.module('portainer.kubernetes').service('KubernetesNodesLimitsService', KubernetesNodesLimitsService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesPersistentVolumeClaimService {\n /* @ngInject */\n constructor($async, EndpointProvider, KubernetesPersistentVolumeClaims) {\n this.$async = $async;\n this.EndpointProvider = EndpointProvider;\n this.KubernetesPersistentVolumeClaims = KubernetesPersistentVolumeClaims;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([\n this.KubernetesPersistentVolumeClaims(namespace).get(params).$promise,\n this.KubernetesPersistentVolumeClaims(namespace).getYaml(params).$promise,\n ]);\n const storageClasses = this.EndpointProvider.currentEndpoint().Kubernetes.Configuration.StorageClasses;\n return KubernetesPersistentVolumeClaimConverter.apiToPersistentVolumeClaim(raw, storageClasses, yaml);\n } catch (err) {\n throw new PortainerError('Unable to retrieve persistent volume claim', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesPersistentVolumeClaims(namespace).get().$promise;\n const storageClasses = this.EndpointProvider.currentEndpoint().Kubernetes.Configuration.StorageClasses;\n return _.map(data.items, (item) => KubernetesPersistentVolumeClaimConverter.apiToPersistentVolumeClaim(item, storageClasses));\n } catch (err) {\n throw new PortainerError('Unable to retrieve persistent volume claims', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(claim) {\n try {\n const params = {};\n const payload = KubernetesPersistentVolumeClaimConverter.createPayload(claim);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesPersistentVolumeClaims(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create persistent volume claim', err);\n }\n }\n\n create(claim) {\n return this.$async(this.createAsync, claim);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldPVC, newPVC) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newPVC.Name;\n const namespace = newPVC.Namespace;\n const payload = KubernetesPersistentVolumeClaimConverter.patchPayload(oldPVC, newPVC);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesPersistentVolumeClaims(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch persistent volume claim', err);\n }\n }\n\n patch(oldPVC, newPVC) {\n return this.$async(this.patchAsync, oldPVC, newPVC);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(pvc) {\n try {\n const params = new KubernetesCommonParams();\n params.id = pvc.Name;\n const namespace = pvc.Namespace;\n await this.KubernetesPersistentVolumeClaims(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete persistent volume claim', err);\n }\n }\n\n delete(pvc) {\n return this.$async(this.deleteAsync, pvc);\n }\n}\n\nexport default KubernetesPersistentVolumeClaimService;\nangular.module('portainer.kubernetes').service('KubernetesPersistentVolumeClaimService', KubernetesPersistentVolumeClaimService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\n\nclass KubernetesReplicaSetService {\n /* @ngInject */\n constructor($async, KubernetesReplicaSets) {\n this.$async = $async;\n this.KubernetesReplicaSets = KubernetesReplicaSets;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesReplicaSets(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve ReplicaSets', err);\n }\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesReplicaSetService;\nangular.module('portainer.kubernetes').service('KubernetesReplicaSetService', KubernetesReplicaSetService);\n","import _ from 'lodash-es';\n\nimport angular from 'angular';\nimport KubernetesResourcePoolConverter from 'Kubernetes/converters/resourcePool';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\nimport KubernetesCommonHelper from 'Kubernetes/helpers/commonHelper';\n\n/* @ngInject */\nexport function KubernetesResourcePoolService(\n $async,\n EndpointService,\n KubernetesNamespaceService,\n KubernetesResourceQuotaService,\n KubernetesIngressService,\n KubernetesPortainerNamespaces\n) {\n return {\n get,\n create,\n patch,\n delete: _delete,\n toggleSystem,\n };\n\n async function getOne(name) {\n const namespace = await KubernetesNamespaceService.get(name);\n const [quotaAttempt] = await Promise.allSettled([KubernetesResourceQuotaService.get(name, KubernetesResourceQuotaHelper.generateResourceQuotaName(name))]);\n const pool = KubernetesResourcePoolConverter.apiToResourcePool(namespace);\n if (quotaAttempt.status === 'fulfilled') {\n pool.Quota = quotaAttempt.value;\n pool.Yaml += '---\\n' + quotaAttempt.value.Yaml;\n }\n return pool;\n }\n\n async function getAll() {\n const namespaces = await KubernetesNamespaceService.get();\n const pools = await Promise.all(\n _.map(namespaces, async (namespace) => {\n const name = namespace.Name;\n const [quotaAttempt] = await Promise.allSettled([KubernetesResourceQuotaService.get(name, KubernetesResourceQuotaHelper.generateResourceQuotaName(name))]);\n const pool = KubernetesResourcePoolConverter.apiToResourcePool(namespace);\n if (quotaAttempt.status === 'fulfilled') {\n pool.Quota = quotaAttempt.value;\n pool.Yaml += '---\\n' + quotaAttempt.value.Yaml;\n }\n return pool;\n })\n );\n return pools;\n }\n\n function get(name) {\n if (name) {\n return $async(getOne, name);\n }\n return $async(getAll);\n }\n\n function create(formValues) {\n formValues.Owner = KubernetesCommonHelper.ownerToLabel(formValues.Owner);\n\n return $async(async () => {\n const [namespace, quota, ingresses, registries] = KubernetesResourcePoolConverter.formValuesToResourcePool(formValues);\n await KubernetesNamespaceService.create(namespace);\n\n if (quota) {\n await KubernetesResourceQuotaService.create(quota);\n }\n\n const ingressPromises = _.map(ingresses, (i) => KubernetesIngressService.create(i));\n await Promise.all(ingressPromises);\n\n const endpointId = formValues.EndpointId;\n const registriesPromises = _.map(registries, (r) => EndpointService.updateRegistryAccess(endpointId, r.Id, r.RegistryAccesses[endpointId]));\n await Promise.all(registriesPromises);\n });\n }\n\n function patch(oldFormValues, newFormValues) {\n return $async(async () => {\n const [, oldQuota, oldIngresses, oldRegistries] = KubernetesResourcePoolConverter.formValuesToResourcePool(oldFormValues);\n const [, newQuota, newIngresses, newRegistries] = KubernetesResourcePoolConverter.formValuesToResourcePool(newFormValues);\n\n if (oldQuota && newQuota) {\n await KubernetesResourceQuotaService.patch(oldQuota, newQuota);\n } else if (!oldQuota && newQuota) {\n await KubernetesResourceQuotaService.create(newQuota);\n } else if (oldQuota && !newQuota) {\n await KubernetesResourceQuotaService.delete(oldQuota);\n }\n\n const create = _.filter(newIngresses, (ing) => !_.find(oldIngresses, { Name: ing.Name }));\n const del = _.filter(oldIngresses, (ing) => !_.find(newIngresses, { Name: ing.Name }));\n const patch = _.without(newIngresses, ...create);\n\n const createPromises = _.map(create, (i) => KubernetesIngressService.create(i));\n const delPromises = _.map(del, (i) => KubernetesIngressService.delete(i.Namespace, i.Name));\n const patchPromises = _.map(patch, (ing) => {\n const old = _.find(oldIngresses, { Name: ing.Name });\n ing.Paths = angular.copy(old.Paths);\n ing.PreviousHost = old.Host;\n return KubernetesIngressService.patch(old, ing);\n });\n\n const promises = _.flatten([createPromises, delPromises, patchPromises]);\n await Promise.all(promises);\n\n const endpointId = newFormValues.EndpointId;\n const keptRegistries = _.intersectionBy(oldRegistries, newRegistries, 'Id');\n const removedRegistries = _.without(oldRegistries, ...keptRegistries);\n\n const newRegistriesPromises = _.map(newRegistries, (r) => EndpointService.updateRegistryAccess(endpointId, r.Id, r.RegistryAccesses[endpointId]));\n const removedRegistriesPromises = _.map(removedRegistries, (r) => {\n _.pull(r.RegistryAccesses[endpointId].Namespaces, newFormValues.Name);\n return EndpointService.updateRegistryAccess(endpointId, r.Id, r.RegistryAccesses[endpointId]);\n });\n\n await Promise.all(_.concat(newRegistriesPromises, removedRegistriesPromises));\n });\n }\n\n function _delete(pool) {\n return $async(async () => {\n await KubernetesNamespaceService.delete(pool.Namespace);\n });\n }\n\n function toggleSystem(endpointId, namespaceName, system) {\n return KubernetesPortainerNamespaces.toggleSystem({ namespaceName, endpointId }, { system }).$promise;\n }\n}\n\nangular.module('portainer.kubernetes').service('KubernetesResourcePoolService', KubernetesResourcePoolService);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesResourceQuotaConverter from 'Kubernetes/converters/resourceQuota';\n\n/* @ngInject */\nexport function KubernetesResourceQuotaService($async, KubernetesResourceQuotas) {\n return {\n get,\n create,\n patch,\n delete: _delete,\n };\n\n async function getOne(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([KubernetesResourceQuotas(namespace).get(params).$promise, KubernetesResourceQuotas(namespace).getYaml(params).$promise]);\n return KubernetesResourceQuotaConverter.apiToResourceQuota(raw, yaml);\n } catch (err) {\n throw new PortainerError('Unable to retrieve resource quota', err);\n }\n }\n\n async function getAll(namespace) {\n try {\n const data = await KubernetesResourceQuotas(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesResourceQuotaConverter.apiToResourceQuota(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve resource quotas', err);\n }\n }\n\n function get(namespace, name) {\n if (name) {\n return $async(getOne, namespace, name);\n }\n return $async(getAll, namespace);\n }\n\n function create(quota) {\n return $async(async () => {\n try {\n const payload = KubernetesResourceQuotaConverter.createPayload(quota);\n const namespace = payload.metadata.namespace;\n const params = {};\n const data = await KubernetesResourceQuotas(namespace).create(params, payload).$promise;\n return KubernetesResourceQuotaConverter.apiToResourceQuota(data);\n } catch (err) {\n throw new PortainerError('Unable to create quota', err);\n }\n });\n }\n\n function patch(oldQuota, newQuota) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = newQuota.Name;\n const namespace = newQuota.Namespace;\n const payload = KubernetesResourceQuotaConverter.patchPayload(oldQuota, newQuota);\n if (!payload.length) {\n return;\n }\n const data = await KubernetesResourceQuotas(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch quota', err);\n }\n });\n }\n\n function _delete(quota) {\n return $async(async () => {\n try {\n const params = new KubernetesCommonParams();\n params.id = quota.Name;\n await KubernetesResourceQuotas(quota.Namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete quota', err);\n }\n });\n }\n}\n\nangular.module('portainer.kubernetes').service('KubernetesResourceQuotaService', KubernetesResourceQuotaService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesSecretConverter from 'Kubernetes/converters/secret';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesSecretService {\n /* @ngInject */\n constructor($async, KubernetesSecrets) {\n this.$async = $async;\n this.KubernetesSecrets = KubernetesSecrets;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.updateAsync = this.updateAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesSecrets(namespace).get(params).$promise, this.KubernetesSecrets(namespace).getYaml(params).$promise]);\n const secret = KubernetesSecretConverter.apiToSecret(raw, yaml);\n return secret;\n } catch (err) {\n throw new PortainerError('Unable to retrieve secret', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesSecrets(namespace).get().$promise;\n return _.map(data.items, (item) => KubernetesSecretConverter.apiToSecret(item));\n } catch (err) {\n throw new PortainerError('Unable to retrieve secrets', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(secret) {\n try {\n const payload = KubernetesSecretConverter.createPayload(secret);\n const namespace = payload.metadata.namespace;\n const params = {};\n const data = await this.KubernetesSecrets(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create secret', err);\n }\n }\n\n create(secret) {\n return this.$async(this.createAsync, secret);\n }\n\n /**\n * UPDATE\n */\n async updateAsync(secret) {\n try {\n const payload = KubernetesSecretConverter.updatePayload(secret);\n const params = new KubernetesCommonParams();\n params.id = payload.metadata.name;\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesSecrets(namespace).update(params, payload).$promise;\n return KubernetesSecretConverter.apiToSecret(data);\n } catch (err) {\n throw new PortainerError('Unable to update secret', err);\n }\n }\n\n update(secret) {\n return this.$async(this.updateAsync, secret);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(secret) {\n try {\n const params = new KubernetesCommonParams();\n params.id = secret.Name;\n const namespace = secret.Namespace;\n await this.KubernetesSecrets(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to delete secret', err);\n }\n }\n\n delete(secret) {\n return this.$async(this.deleteAsync, secret);\n }\n}\n\nexport default KubernetesSecretService;\nangular.module('portainer.kubernetes').service('KubernetesSecretService', KubernetesSecretService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesServiceConverter from 'Kubernetes/converters/service';\n\nclass KubernetesServiceService {\n /* @ngInject */\n constructor($async, KubernetesServices) {\n this.$async = $async;\n this.KubernetesServices = KubernetesServices;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n this.deleteSingleAsync = this.deleteSingleAsync.bind(this);\n this.deleteAllAsync = this.deleteAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesServices(namespace).get(params).$promise, this.KubernetesServices(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve service', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesServices(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve services', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(service) {\n try {\n const params = {};\n const payload = KubernetesServiceConverter.createPayload(service);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesServices(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create service', err);\n }\n }\n\n create(service) {\n return this.$async(this.createAsync, service);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldService, newService) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newService.Name;\n const namespace = newService.Namespace;\n const payload = KubernetesServiceConverter.patchPayload(oldService, newService);\n if (!payload.length) {\n return;\n }\n const data = await this.KubernetesServices(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch service', err);\n }\n }\n\n patch(oldService, newService) {\n return this.$async(this.patchAsync, oldService, newService);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(services) {\n services.forEach(async (service) => {\n try {\n const params = new KubernetesCommonParams();\n params.id = service.metadata.name;\n const namespace = service.metadata.namespace;\n await this.KubernetesServices(namespace).delete(params).$promise;\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('unable to remove service', err);\n }\n });\n }\n\n delete(services) {\n return this.$async(this.deleteAsync, services);\n }\n\n async deleteAllAsync(formValuesServices) {\n formValuesServices.forEach(async (service) => {\n try {\n const params = new KubernetesCommonParams();\n params.id = service.Name;\n const namespace = service.Namespace;\n await this.KubernetesServices(namespace).delete(params).$promise;\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('unable to remove service', err);\n }\n });\n }\n\n deleteAll(formValuesServices) {\n return this.$async(this.deleteAllAsync, formValuesServices);\n }\n\n async deleteSingleAsync(service) {\n try {\n const params = new KubernetesCommonParams();\n params.id = service.Name;\n const namespace = service.Namespace;\n await this.KubernetesServices(namespace).delete(params).$promise;\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error('unable to remove service', err);\n }\n }\n\n deleteSingle(service) {\n return this.$async(this.deleteSingleAsync, service);\n }\n}\n\nexport default KubernetesServiceService;\nangular.module('portainer.kubernetes').service('KubernetesServiceService', KubernetesServiceService);\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass KubernetesStackService {\n /* @ngInject */\n constructor($async, KubernetesApplicationService) {\n this.$async = $async;\n this.KubernetesApplicationService = KubernetesApplicationService;\n\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAllAsync(namespace) {\n const applications = await this.KubernetesApplicationService.get(namespace);\n const stacks = _.map(applications, (item) => item.StackName);\n return _.uniq(_.without(stacks, '-', ''));\n }\n\n get(namespace) {\n return this.$async(this.getAllAsync, namespace);\n }\n}\n\nexport default KubernetesStackService;\nangular.module('portainer.kubernetes').service('KubernetesStackService', KubernetesStackService);\n","import angular from 'angular';\nimport PortainerError from 'Portainer/error';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\nimport KubernetesStatefulSetConverter from 'Kubernetes/converters/statefulSet';\n\nclass KubernetesStatefulSetService {\n /* @ngInject */\n constructor($async, KubernetesStatefulSets, KubernetesServiceService) {\n this.$async = $async;\n this.KubernetesStatefulSets = KubernetesStatefulSets;\n this.KubernetesServiceService = KubernetesServiceService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.createAsync = this.createAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n this.rollbackAsync = this.rollbackAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n const [raw, yaml] = await Promise.all([this.KubernetesStatefulSets(namespace).get(params).$promise, this.KubernetesStatefulSets(namespace).getYaml(params).$promise]);\n const res = {\n Raw: raw,\n Yaml: yaml.data,\n };\n const headlessServiceName = raw.spec.serviceName;\n if (headlessServiceName) {\n try {\n const headlessService = await this.KubernetesServiceService.get(namespace, headlessServiceName);\n res.Yaml += '---\\n' + headlessService.Yaml;\n } catch (error) {\n // if has error means headless service does not exist\n // skip error as we don't care in this case\n }\n }\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve StatefulSet', err);\n }\n }\n\n async getAllAsync(namespace) {\n try {\n const data = await this.KubernetesStatefulSets(namespace).get().$promise;\n return data.items;\n } catch (err) {\n throw new PortainerError('Unable to retrieve StatefulSets', err);\n }\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * CREATE\n */\n async createAsync(statefulSet) {\n try {\n const params = {};\n const payload = KubernetesStatefulSetConverter.createPayload(statefulSet);\n const namespace = payload.metadata.namespace;\n const data = await this.KubernetesStatefulSets(namespace).create(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to create statefulSet', err);\n }\n }\n\n create(statefulSet) {\n return this.$async(this.createAsync, statefulSet);\n }\n\n /**\n * PATCH\n */\n async patchAsync(oldStatefulSet, newStatefulSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newStatefulSet.Name;\n const namespace = newStatefulSet.Namespace;\n const payload = KubernetesStatefulSetConverter.patchPayload(oldStatefulSet, newStatefulSet);\n if (!payload.length) {\n return;\n }\n\n const data = await this.KubernetesStatefulSets(namespace).patch(params, payload).$promise;\n return data;\n } catch (err) {\n throw new PortainerError('Unable to patch statefulSet', err);\n }\n }\n\n patch(oldStatefulSet, newStatefulSet) {\n return this.$async(this.patchAsync, oldStatefulSet, newStatefulSet);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(statefulSet) {\n try {\n const params = new KubernetesCommonParams();\n params.id = statefulSet.Name;\n const namespace = statefulSet.Namespace;\n await this.KubernetesStatefulSets(namespace).delete(params).$promise;\n } catch (err) {\n throw new PortainerError('Unable to remove statefulSet', err);\n }\n }\n\n delete(statefulSet) {\n return this.$async(this.deleteAsync, statefulSet);\n }\n\n /**\n * ROLLBACK\n */\n async rollbackAsync(namespace, name, payload) {\n try {\n const params = new KubernetesCommonParams();\n params.id = name;\n await this.KubernetesStatefulSets(namespace).rollback(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to rollback statefulSet', err);\n }\n }\n\n rollback(namespace, name, payload) {\n return this.$async(this.rollbackAsync, namespace, name, payload);\n }\n}\n\nexport default KubernetesStatefulSetService;\nangular.module('portainer.kubernetes').service('KubernetesStatefulSetService', KubernetesStatefulSetService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerError from 'Portainer/error';\nimport KubernetesStorageClassConverter from 'Kubernetes/converters/storageClass';\nimport { KubernetesCommonParams } from 'Kubernetes/models/common/params';\n\nclass KubernetesStorageService {\n /* @ngInject */\n constructor($async, KubernetesStorage) {\n this.$async = $async;\n this.KubernetesStorage = KubernetesStorage;\n\n this.getAsync = this.getAsync.bind(this);\n this.patchAsync = this.patchAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(endpointId) {\n try {\n const params = {\n endpointId: endpointId,\n };\n const classes = await this.KubernetesStorage().get(params).$promise;\n const res = _.map(classes.items, (item) => KubernetesStorageClassConverter.apiToStorageClass(item));\n return res;\n } catch (err) {\n throw new PortainerError('Unable to retrieve storage classes', err);\n }\n }\n\n get(endpointId) {\n return this.$async(this.getAsync, endpointId);\n }\n\n /**\n * PATCH\n */\n async patchAsync(endpointId, oldStorageClass, newStorageClass) {\n try {\n const params = new KubernetesCommonParams();\n params.id = newStorageClass.Name;\n params.endpointId = endpointId;\n const payload = KubernetesStorageClassConverter.patchPayload(oldStorageClass, newStorageClass);\n await this.KubernetesStorage().patch(params, payload).$promise;\n } catch (err) {\n throw new PortainerError('Unable to patch storage class', err);\n }\n }\n\n patch(endpointId, oldStorageClass, newStorageClass) {\n return this.$async(this.patchAsync, endpointId, oldStorageClass, newStorageClass);\n }\n}\n\nexport default KubernetesStorageService;\nangular.module('portainer.kubernetes').service('KubernetesStorageService', KubernetesStorageService);\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport KubernetesVolumeConverter from 'Kubernetes/converters/volume';\n\nclass KubernetesVolumeService {\n /* @ngInject */\n constructor($async, KubernetesResourcePoolService, KubernetesApplicationService, KubernetesPersistentVolumeClaimService) {\n this.$async = $async;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n\n this.getAsync = this.getAsync.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n this.deleteAsync = this.deleteAsync.bind(this);\n }\n\n /**\n * GET\n */\n async getAsync(namespace, name) {\n const [pvc, pool] = await Promise.all([this.KubernetesPersistentVolumeClaimService.get(namespace, name), this.KubernetesResourcePoolService.get(namespace)]);\n return KubernetesVolumeConverter.pvcToVolume(pvc, pool);\n }\n\n async getAllAsync(namespace) {\n const data = await this.KubernetesResourcePoolService.get(namespace);\n const pools = data instanceof Array ? data : [data];\n const res = await Promise.all(\n _.map(pools, async (pool) => {\n const pvcs = await this.KubernetesPersistentVolumeClaimService.get(pool.Namespace.Name);\n return _.map(pvcs, (pvc) => KubernetesVolumeConverter.pvcToVolume(pvc, pool));\n })\n );\n return _.flatten(res);\n }\n\n get(namespace, name) {\n if (name) {\n return this.$async(this.getAsync, namespace, name);\n }\n return this.$async(this.getAllAsync, namespace);\n }\n\n /**\n * DELETE\n */\n async deleteAsync(volume) {\n await this.KubernetesPersistentVolumeClaimService.delete(volume.PersistentVolumeClaim);\n }\n\n delete(volume) {\n return this.$async(this.deleteAsync, volume);\n }\n}\n\nexport default KubernetesVolumeService;\nangular.module('portainer.kubernetes').service('KubernetesVolumeService', KubernetesVolumeService);\n","// singleton pattern as:\n// * we don't want to use AngularJS DI to fetch the single instance\n// * we need to use the Store in static functions / non-instanciated classes\nconst storeNamespaces = {};\n\n/**\n * Check if a namespace of the store is system or not\n * @param {String} name Namespace name\n * @returns Boolean\n */\nexport function isSystem(name) {\n return storeNamespaces[name] && storeNamespaces[name].IsSystem;\n}\n\n/**\n * Called from KubernetesNamespaceService.get()\n * @param {KubernetesNamespace[]} namespaces list of namespaces to update in Store\n */\nexport function updateNamespaces(namespaces) {\n namespaces.forEach((ns) => (storeNamespaces[ns.Name] = ns));\n}\n","const autoNgTemplateLoaderTemplate1 = require('./applications.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesStackHelper from 'Kubernetes/helpers/stackHelper';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport { KubernetesApplicationTypes } from 'Kubernetes/models/application/models';\nimport { KubernetesPortainerApplicationStackNameLabel } from 'Kubernetes/models/application/models';\nclass KubernetesApplicationsController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n KubernetesApplicationService,\n HelmService,\n KubernetesConfigurationService,\n ModalService,\n LocalStorage,\n EndpointProvider,\n StackService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.HelmService = HelmService;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n\n this.ModalService = ModalService;\n this.LocalStorage = LocalStorage;\n this.StackService = StackService;\n this.EndpointProvider = EndpointProvider;\n\n this.onInit = this.onInit.bind(this);\n this.getApplications = this.getApplications.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n this.removeStacksAction = this.removeStacksAction.bind(this);\n this.removeStacksActionAsync = this.removeStacksActionAsync.bind(this);\n this.onPublishingModeClick = this.onPublishingModeClick.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('applications', index);\n }\n\n async removeStacksActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const stack of selectedItems) {\n try {\n const isAppFormCreated = stack.Applications.some((x) => !x.ApplicationKind);\n\n if (isAppFormCreated) {\n const promises = _.map(stack.Applications, (app) => this.KubernetesApplicationService.delete(app));\n await Promise.all(promises);\n } else {\n const application = stack.Applications.find((x) => x.StackId !== null);\n if (application && application.StackId) {\n await this.StackService.remove({ Id: application.StackId }, false, this.endpoint.Id);\n }\n }\n\n this.Notifications.success('Stack successfully removed', stack.Name);\n _.remove(this.state.stacks, { Name: stack.Name });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove stack');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload(this.$state.current);\n }\n }\n }\n }\n\n removeStacksAction(selectedItems) {\n this.ModalService.confirmDeletion(\n 'Are you sure that you want to remove the selected stack(s) ? This will remove all the applications associated to the stack(s).',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeStacksActionAsync, selectedItems);\n }\n }\n );\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n\n for (const application of selectedItems) {\n try {\n if (application.ApplicationType === KubernetesApplicationTypes.HELM) {\n await this.HelmService.uninstall(this.endpoint.Id, application);\n } else {\n await this.KubernetesApplicationService.delete(application);\n\n if (application.Metadata.labels[KubernetesPortainerApplicationStackNameLabel]) {\n // Update applications in stack\n const stack = this.state.stacks.find((x) => x.Name === application.StackName);\n const index = stack.Applications.indexOf(application);\n stack.Applications.splice(index, 1);\n\n // remove stack if no app left in the stack\n if (stack.Applications.length === 0 && application.StackId) {\n await this.StackService.remove({ Id: application.StackId }, false, this.endpoint.Id);\n }\n }\n }\n this.Notifications.success('Application successfully removed', application.Name);\n const index = this.state.applications.indexOf(application);\n this.state.applications.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove application');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload(this.$state.current);\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected application(s)?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n });\n }\n\n onPublishingModeClick(application) {\n this.state.activeTab = 1;\n _.forEach(this.state.ports, (item) => {\n item.Expanded = false;\n item.Highlighted = false;\n if (item.Name === application.Name && item.Ports.length > 1) {\n item.Expanded = true;\n item.Highlighted = true;\n }\n });\n }\n\n async getApplicationsAsync() {\n try {\n const [applications, configurations] = await Promise.all([this.KubernetesApplicationService.get(), this.KubernetesConfigurationService.get()]);\n const configuredApplications = KubernetesConfigurationHelper.getApplicationConfigurations(applications, configurations);\n const { helmApplications, nonHelmApplications } = KubernetesApplicationHelper.getNestedApplications(configuredApplications);\n\n this.state.applications = [...helmApplications, ...nonHelmApplications];\n this.state.stacks = KubernetesStackHelper.stacksFromApplications(applications);\n this.state.ports = KubernetesApplicationHelper.portMappingsFromApplications(applications);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async onInit() {\n this.state = {\n activeTab: this.LocalStorage.getActiveTab('applications'),\n currentName: this.$state.$current.name,\n viewReady: false,\n endpointType: this.endpoint.Type,\n applications: [],\n stacks: [],\n ports: [],\n };\n\n await this.getApplications();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('applications', 0);\n }\n }\n}\n\nexport default KubernetesApplicationsController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationsController', KubernetesApplicationsController);\n","const autoNgTemplateLoaderTemplate1 = require('./console.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationConsoleView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationConsoleController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport { Terminal } from 'xterm';\nimport { baseHref } from '@/portainer/helpers/pathHelper';\n\nclass KubernetesApplicationConsoleController {\n /* @ngInject */\n constructor($async, $state, Notifications, Authentication, KubernetesApplicationService, LocalStorage) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.LocalStorage = LocalStorage;\n\n this.onInit = this.onInit.bind(this);\n }\n\n disconnect() {\n this.state.socket.close();\n this.state.term.dispose();\n this.state.connected = false;\n }\n\n configureSocketAndTerminal(socket, term) {\n socket.onopen = function () {\n const terminal_container = document.getElementById('terminal-container');\n term.open(terminal_container);\n term.setOption('cursorBlink', true);\n term.focus();\n };\n\n term.on('data', function (data) {\n socket.send(data);\n });\n\n socket.onmessage = function (msg) {\n term.write(msg.data);\n };\n\n socket.onerror = function (err) {\n this.disconnect();\n this.Notifications.error('Failure', err, 'Websocket connection error');\n }.bind(this);\n\n this.state.socket.onclose = function () {\n this.disconnect();\n }.bind(this);\n\n this.state.connected = true;\n }\n\n connectConsole() {\n const params = {\n token: this.LocalStorage.getJWT(),\n endpointId: this.endpoint.Id,\n namespace: this.application.ResourcePool,\n podName: this.podName,\n containerName: this.containerName,\n command: this.state.command,\n };\n\n let url =\n window.location.origin +\n baseHref() +\n 'api/websocket/pod?' +\n Object.keys(params)\n .map((k) => k + '=' + params[k])\n .join('&');\n if (url.indexOf('https') > -1) {\n url = url.replace('https://', 'wss://');\n } else {\n url = url.replace('http://', 'ws://');\n }\n\n this.state.socket = new WebSocket(url);\n this.state.term = new Terminal();\n\n this.configureSocketAndTerminal(this.state.socket, this.state.term);\n }\n\n async onInit() {\n this.Authentication.redirectIfUnauthorized(['K8sApplicationConsoleRW']);\n const availableCommands = ['/bin/bash', '/bin/sh'];\n\n this.state = {\n actionInProgress: false,\n availableCommands: availableCommands,\n command: availableCommands[1],\n connected: false,\n socket: null,\n term: null,\n viewReady: false,\n };\n\n const podName = this.$transition$.params().pod;\n const applicationName = this.$transition$.params().name;\n const namespace = this.$transition$.params().namespace;\n const containerName = this.$transition$.params().container;\n\n this.podName = podName;\n this.containerName = containerName;\n\n try {\n this.application = await this.KubernetesApplicationService.get(namespace, applicationName);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesApplicationConsoleController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationConsoleController', KubernetesApplicationConsoleController);\n","const autoNgTemplateLoaderTemplate1 = require('./createApplication.html');\n\nangular.module('portainer.kubernetes').component('kubernetesCreateApplicationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesCreateApplicationController',\n controllerAs: 'ctrl',\n bindings: {\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport * as JsonPatch from 'fast-json-patch';\nimport { RegistryTypes } from '@/portainer/models/registryTypes';\n\nimport {\n KubernetesApplicationDataAccessPolicies,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationQuotaDefaults,\n KubernetesApplicationTypes,\n KubernetesApplicationPlacementTypes,\n KubernetesDeploymentTypes,\n} from 'Kubernetes/models/application/models';\nimport {\n KubernetesApplicationConfigurationFormValue,\n KubernetesApplicationConfigurationFormValueOverridenKey,\n KubernetesApplicationConfigurationFormValueOverridenKeyTypes,\n KubernetesApplicationEnvironmentVariableFormValue,\n KubernetesApplicationFormValues,\n KubernetesApplicationPersistedFolderFormValue,\n KubernetesApplicationPublishedPortFormValue,\n KubernetesApplicationPlacementFormValue,\n KubernetesFormValidationReferences,\n} from 'Kubernetes/models/application/formValues';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport KubernetesApplicationConverter from 'Kubernetes/converters/application';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application/index';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\nimport { KubernetesNodeHelper } from 'Kubernetes/node/helper';\n\nclass KubernetesCreateApplicationController {\n /* #region CONSTRUCTOR */\n\n /* @ngInject */\n constructor(\n $scope,\n $async,\n $state,\n Notifications,\n Authentication,\n ModalService,\n KubernetesResourcePoolService,\n KubernetesApplicationService,\n KubernetesStackService,\n KubernetesConfigurationService,\n KubernetesNodeService,\n KubernetesIngressService,\n KubernetesPersistentVolumeClaimService,\n KubernetesVolumeService,\n RegistryService,\n StackService,\n KubernetesNodesLimitsService\n ) {\n this.$scope = $scope;\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.ModalService = ModalService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesStackService = KubernetesStackService;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesIngressService = KubernetesIngressService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n this.RegistryService = RegistryService;\n this.StackService = StackService;\n this.KubernetesNodesLimitsService = KubernetesNodesLimitsService;\n\n this.ApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.ApplicationDataAccessPolicies = KubernetesApplicationDataAccessPolicies;\n this.ApplicationPublishingTypes = KubernetesApplicationPublishingTypes;\n this.ApplicationPlacementTypes = KubernetesApplicationPlacementTypes;\n this.ApplicationTypes = KubernetesApplicationTypes;\n this.ApplicationConfigurationFormValueOverridenKeyTypes = KubernetesApplicationConfigurationFormValueOverridenKeyTypes;\n this.ServiceTypes = KubernetesServiceTypes;\n this.KubernetesDeploymentTypes = KubernetesDeploymentTypes;\n\n this.state = {\n appType: this.KubernetesDeploymentTypes.APPLICATION_FORM,\n updateWebEditorInProgress: false,\n actionInProgress: false,\n useLoadBalancer: false,\n useServerMetrics: false,\n storages: {\n quotasComputed: false,\n allRestricted: false,\n availabilities: {},\n quotaExceeded: false,\n },\n sliders: {\n cpu: {\n min: 0,\n max: 0,\n },\n memory: {\n min: 0,\n max: 0,\n },\n },\n nodes: {\n memory: 0,\n cpu: 0,\n },\n namespaceLimits: {\n memory: 0,\n cpu: 0,\n },\n maxLoadBalancers: null,\n maxLoadBalancersQuota: null,\n resourcePoolHasQuota: false,\n viewReady: false,\n availableSizeUnits: ['MB', 'GB', 'TB'],\n alreadyExists: false,\n duplicates: {\n environmentVariables: new KubernetesFormValidationReferences(),\n persistedFolders: new KubernetesFormValidationReferences(),\n configurationPaths: new KubernetesFormValidationReferences(),\n existingVolumes: new KubernetesFormValidationReferences(),\n publishedPorts: {\n containerPorts: new KubernetesFormValidationReferences(),\n nodePorts: new KubernetesFormValidationReferences(),\n ingressRoutes: new KubernetesFormValidationReferences(),\n loadBalancerPorts: new KubernetesFormValidationReferences(),\n },\n placements: new KubernetesFormValidationReferences(),\n },\n exceeded: {\n persistedFolders: new KubernetesFormValidationReferences(),\n },\n isEdit: false,\n persistedFoldersUseExistingVolumes: false,\n pullImageValidity: false,\n };\n\n this.isAdmin = false;\n\n this.editChanges = [];\n\n this.storageClasses = [];\n this.state.useLoadBalancer = false;\n this.state.useServerMetrics = false;\n\n this.formValues = new KubernetesApplicationFormValues();\n\n this.updateApplicationAsync = this.updateApplicationAsync.bind(this);\n this.deployApplicationAsync = this.deployApplicationAsync.bind(this);\n this.setPullImageValidity = this.setPullImageValidity.bind(this);\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.onServicePublishChange = this.onServicePublishChange.bind(this);\n }\n /* #endregion */\n\n onChangeFileContent(value) {\n if (this.stackFileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== value.replace(/(\\r\\n|\\n|\\r)/gm, '')) {\n this.state.isEditorDirty = true;\n this.stackFileContent = value;\n }\n }\n\n async updateApplicationViaWebEditor() {\n return this.$async(async () => {\n try {\n const confirmed = await this.ModalService.confirmAsync({\n title: 'Are you sure?',\n message: 'Any changes to this application will be overriden and may cause a service interruption. Do you wish to continue?',\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-warning',\n },\n },\n });\n if (!confirmed) {\n return;\n }\n this.state.updateWebEditorInProgress = true;\n await this.StackService.updateKubeStack({ EndpointId: this.endpoint.Id, Id: this.application.StackId }, this.stackFileContent, null);\n this.state.isEditorDirty = false;\n await this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed redeploying application');\n } finally {\n this.state.updateWebEditorInProgress = false;\n }\n });\n }\n\n async uiCanExit() {\n if (this.stackFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n setPullImageValidity(validity) {\n this.state.pullImageValidity = validity;\n }\n\n imageValidityIsValid() {\n return this.state.pullImageValidity || this.formValues.ImageModel.Registry.Type !== RegistryTypes.DOCKERHUB;\n }\n\n onChangeName() {\n const existingApplication = _.find(this.applications, { Name: this.formValues.Name });\n this.state.alreadyExists = (this.state.isEdit && existingApplication && this.application.Id !== existingApplication.Id) || (!this.state.isEdit && existingApplication);\n }\n\n /* #region AUTO SCALER UI MANAGEMENT */\n unselectAutoScaler() {\n if (this.formValues.DeploymentType === this.ApplicationDeploymentTypes.GLOBAL) {\n this.formValues.AutoScaler.IsUsed = false;\n }\n }\n /* #endregion */\n\n /* #region CONFIGURATION UI MANAGEMENT */\n addConfiguration() {\n let config = new KubernetesApplicationConfigurationFormValue();\n config.SelectedConfiguration = this.configurations[0];\n this.formValues.Configurations.push(config);\n }\n\n removeConfiguration(index) {\n this.formValues.Configurations.splice(index, 1);\n this.onChangeConfigurationPath();\n }\n\n overrideConfiguration(index) {\n const config = this.formValues.Configurations[index];\n config.Overriden = true;\n config.OverridenKeys = _.map(_.keys(config.SelectedConfiguration.Data), (key) => {\n const res = new KubernetesApplicationConfigurationFormValueOverridenKey();\n res.Key = key;\n return res;\n });\n }\n\n resetConfiguration(index) {\n const config = this.formValues.Configurations[index];\n config.Overriden = false;\n config.OverridenKeys = [];\n this.onChangeConfigurationPath();\n }\n\n clearConfigurations() {\n this.formValues.Configurations = [];\n }\n\n onChangeConfigurationPath() {\n this.state.duplicates.configurationPaths.refs = [];\n\n const paths = _.reduce(\n this.formValues.Configurations,\n (result, config) => {\n const uniqOverridenKeysPath = _.uniq(_.map(config.OverridenKeys, 'Path'));\n return _.concat(result, uniqOverridenKeysPath);\n },\n []\n );\n\n const duplicatePaths = KubernetesFormValidationHelper.getDuplicates(paths);\n\n _.forEach(this.formValues.Configurations, (config, index) => {\n _.forEach(config.OverridenKeys, (overridenKey, keyIndex) => {\n const findPath = _.find(duplicatePaths, (path) => path === overridenKey.Path);\n if (findPath) {\n this.state.duplicates.configurationPaths.refs[index + '_' + keyIndex] = findPath;\n }\n });\n });\n\n this.state.duplicates.configurationPaths.hasRefs = Object.keys(this.state.duplicates.configurationPaths.refs).length > 0;\n }\n /* #endregion */\n\n /* #region ENVIRONMENT UI MANAGEMENT */\n addEnvironmentVariable() {\n this.formValues.EnvironmentVariables.push(new KubernetesApplicationEnvironmentVariableFormValue());\n }\n\n restoreEnvironmentVariable(item) {\n item.NeedsDeletion = false;\n }\n\n removeEnvironmentVariable(item) {\n const index = this.formValues.EnvironmentVariables.indexOf(item);\n if (index !== -1) {\n const envVar = this.formValues.EnvironmentVariables[index];\n if (!envVar.IsNew) {\n envVar.NeedsDeletion = true;\n } else {\n this.formValues.EnvironmentVariables.splice(index, 1);\n }\n }\n this.onChangeEnvironmentName();\n }\n\n onChangeEnvironmentName() {\n this.state.duplicates.environmentVariables.refs = KubernetesFormValidationHelper.getDuplicates(_.map(this.formValues.EnvironmentVariables, 'Name'));\n this.state.duplicates.environmentVariables.hasRefs = Object.keys(this.state.duplicates.environmentVariables.refs).length > 0;\n }\n /* #endregion */\n\n /* #region PERSISTENT FOLDERS UI MANAGEMENT */\n addPersistedFolder() {\n let storageClass = {};\n if (this.storageClasses.length > 0) {\n storageClass = this.storageClasses[0];\n }\n\n const newPf = new KubernetesApplicationPersistedFolderFormValue(storageClass);\n if (this.allQuotasExhaustedAndVolumesAvailable()) {\n newPf.UseNewVolume = false;\n }\n this.formValues.PersistedFolders.push(newPf);\n this.resetDeploymentType();\n }\n\n restorePersistedFolder(index) {\n this.formValues.PersistedFolders[index].NeedsDeletion = false;\n this.validatePersistedFolders();\n }\n\n resetPersistedFolders() {\n if (this.allQuotasExhaustedAndNoVolumesAvailable()) {\n this.formValues.PersistedFolders = [];\n } else {\n _.forEach(this.formValues.PersistedFolders, (persistedFolder) => {\n persistedFolder.ExistingVolume = null;\n persistedFolder.UseNewVolume = this.allQuotasExhaustedAndVolumesAvailable() ? false : true;\n });\n this.validatePersistedFolders();\n }\n }\n\n removePersistedFolder(index) {\n if (this.state.isEdit && this.formValues.PersistedFolders[index].PersistentVolumeClaimName) {\n this.formValues.PersistedFolders[index].NeedsDeletion = true;\n } else {\n this.formValues.PersistedFolders.splice(index, 1);\n }\n this.validatePersistedFolders();\n }\n\n useNewVolume(index) {\n this.formValues.PersistedFolders[index].UseNewVolume = true;\n this.formValues.PersistedFolders[index].ExistingVolume = null;\n this.state.persistedFoldersUseExistingVolumes = !_.reduce(this.formValues.PersistedFolders, (acc, pf) => acc && pf.UseNewVolume, true);\n this.validatePersistedFolders();\n }\n\n useExistingVolume(index) {\n this.formValues.PersistedFolders[index].UseNewVolume = false;\n this.state.persistedFoldersUseExistingVolumes = _.find(this.formValues.PersistedFolders, { UseNewVolume: false }) ? true : false;\n if (this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED) {\n this.formValues.DataAccessPolicy = this.ApplicationDataAccessPolicies.SHARED;\n this.resetDeploymentType();\n }\n this.validatePersistedFolders();\n }\n /* #endregion */\n\n /* #region PERSISTENT FOLDERS ON CHANGE VALIDATION */\n validatePersistedFolders() {\n this.onChangePersistedFolderPath();\n this.onChangeVolumeRequestedSize();\n this.onChangeExistingVolumeSelection();\n }\n\n onChangePersistedFolderPath() {\n this.state.duplicates.persistedFolders.refs = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.PersistedFolders, (persistedFolder) => {\n if (persistedFolder.NeedsDeletion) {\n return undefined;\n }\n return persistedFolder.ContainerPath;\n })\n );\n this.state.duplicates.persistedFolders.hasRefs = Object.keys(this.state.duplicates.persistedFolders.refs).length > 0;\n }\n\n onChangeVolumeRequestedSize() {\n const quota = this.formValues.ResourcePool.Quota;\n this.state.storages.quotaExceeded = false;\n if (quota) {\n const pfs = this.formValues.PersistedFolders;\n const groups = _.groupBy(pfs, 'StorageClass.Name');\n const res = {};\n _.forOwn(groups, (storagePfs, storageClassName) => {\n const newPfs = _.filter(storagePfs, { PersistentVolumeClaimName: '' });\n const requestedSize = _.reduce(newPfs, (sum, pf) => (pf.UseNewVolume && pf.Size ? sum + filesizeParser(`${pf.Size}${pf.SizeUnit}`, { base: 10 }) : sum), 0);\n if (this.state.storages.availabilities[storageClassName] < requestedSize) {\n _.forEach(pfs, (pf, idx) => {\n if (_.includes(newPfs, pf) && pf.UseNewVolume && pf.Size) {\n res[idx] = true;\n }\n });\n }\n if (\n this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED &&\n this.state.storages.availabilities[storageClassName] < requestedSize * this.formValues.ReplicaCount\n ) {\n this.state.storages.quotaExceeded = true;\n }\n });\n this.state.exceeded.persistedFolders.refs = res;\n this.state.exceeded.persistedFolders.hasRefs = Object.keys(this.state.exceeded.persistedFolders.refs).length > 0;\n }\n }\n\n onChangeExistingVolumeSelection() {\n this.state.duplicates.existingVolumes.refs = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.PersistedFolders, (persistedFolder) => {\n if (persistedFolder.NeedsDeletion) {\n return undefined;\n }\n return persistedFolder.ExistingVolume ? persistedFolder.ExistingVolume.PersistentVolumeClaim.Name : '';\n })\n );\n this.state.duplicates.existingVolumes.hasRefs = Object.keys(this.state.duplicates.existingVolumes.refs).length > 0;\n }\n /* #endregion */\n\n /* #region PLACEMENT UI MANAGEMENT */\n addPlacement() {\n const placement = new KubernetesApplicationPlacementFormValue();\n const label = this.nodesLabels[0];\n placement.Label = label;\n placement.Value = label.Values[0];\n this.formValues.Placements.push(placement);\n this.onChangePlacement();\n }\n\n restorePlacement(index) {\n this.formValues.Placements[index].NeedsDeletion = false;\n this.onChangePlacement();\n }\n\n removePlacement(index) {\n if (this.state.isEdit && !this.formValues.Placements[index].IsNew) {\n this.formValues.Placements[index].NeedsDeletion = true;\n } else {\n this.formValues.Placements.splice(index, 1);\n }\n this.onChangePlacement();\n }\n\n // call all validation functions when a placement is added/removed/restored\n onChangePlacement() {\n this.onChangePlacementLabelValidate();\n }\n\n onChangePlacementLabel(index) {\n this.formValues.Placements[index].Value = this.formValues.Placements[index].Label.Values[0];\n this.onChangePlacementLabelValidate();\n }\n\n onChangePlacementLabelValidate() {\n const state = this.state.duplicates.placements;\n const source = _.map(this.formValues.Placements, (p) => (p.NeedsDeletion ? undefined : p.Label.Key));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n /* #endregion */\n\n /* #region PUBLISHED PORTS UI MANAGEMENT */\n onServicePublishChange() {\n // enable publishing with no previous ports exposed\n if (this.formValues.IsPublishingService && !this.formValues.PublishedPorts.length) {\n this.addPublishedPort();\n return;\n }\n\n // service update\n if (this.formValues.IsPublishingService) {\n this.formValues.PublishedPorts.forEach((port) => (port.NeedsDeletion = false));\n } else {\n // delete new ports, mark old ports to be deleted\n this.formValues.PublishedPorts = this.formValues.PublishedPorts.filter((port) => !port.IsNew).map((port) => ({ ...port, NeedsDeletion: true }));\n }\n }\n\n addPublishedPort() {\n const p = new KubernetesApplicationPublishedPortFormValue();\n const ingresses = this.ingresses;\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n p.IngressName = ingresses && ingresses.length ? ingresses[0].Name : undefined;\n p.IngressHost = ingresses && ingresses.length ? ingresses[0].Hosts[0] : undefined;\n p.IngressHosts = ingresses && ingresses.length ? ingresses[0].Hosts : undefined;\n }\n if (this.formValues.PublishedPorts.length) {\n p.Protocol = this.formValues.PublishedPorts[0].Protocol;\n }\n this.formValues.PublishedPorts.push(p);\n }\n\n resetPublishedPorts() {\n const ingresses = this.ingresses;\n _.forEach(this.formValues.PublishedPorts, (p) => {\n p.IngressName = ingresses && ingresses.length ? ingresses[0].Name : undefined;\n p.IngressHost = ingresses && ingresses.length ? ingresses[0].Hosts[0] : undefined;\n });\n }\n\n restorePublishedPort(index) {\n this.formValues.PublishedPorts[index].NeedsDeletion = false;\n this.onChangePublishedPorts();\n }\n\n removePublishedPort(index) {\n if (this.state.isEdit && !this.formValues.PublishedPorts[index].IsNew) {\n this.formValues.PublishedPorts[index].NeedsDeletion = true;\n } else {\n this.formValues.PublishedPorts.splice(index, 1);\n }\n this.onChangePublishedPorts();\n }\n /* #endregion */\n\n /* #region PUBLISHED PORTS ON CHANGE VALIDATION */\n onChangePublishedPorts() {\n this.onChangePortMappingContainerPort();\n this.onChangePortMappingNodePort();\n this.onChangePortMappingIngressRoute();\n this.onChangePortMappingLoadBalancer();\n this.onChangePortProtocol();\n }\n\n onChangePortMappingContainerPort() {\n const state = this.state.duplicates.publishedPorts.containerPorts;\n if (this.formValues.PublishingType !== KubernetesApplicationPublishingTypes.INGRESS) {\n const source = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion ? undefined : p.ContainerPort + p.Protocol));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortMappingNodePort() {\n const state = this.state.duplicates.publishedPorts.nodePorts;\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.NODE_PORT) {\n const source = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion ? undefined : p.NodePort));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortMappingIngress(index) {\n const publishedPort = this.formValues.PublishedPorts[index];\n const ingress = _.find(this.ingresses, { Name: publishedPort.IngressName });\n publishedPort.IngressHosts = ingress.Hosts;\n this.ingressHostnames = ingress.Hosts;\n publishedPort.IngressHost = this.ingressHostnames.length ? this.ingressHostnames[0] : [];\n this.onChangePublishedPorts();\n }\n\n onChangePortMappingIngressRoute() {\n const state = this.state.duplicates.publishedPorts.ingressRoutes;\n\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n const newRoutes = _.map(this.formValues.PublishedPorts, (p) => (p.IsNew && p.IngressRoute ? `${p.IngressHost || p.IngressName}${p.IngressRoute}` : undefined));\n const toDelRoutes = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion && p.IngressRoute ? `${p.IngressHost || p.IngressName}${p.IngressRoute}` : undefined));\n const allRoutes = _.flatMap(this.ingresses, (i) => _.map(i.Paths, (p) => `${p.Host || i.Name}${p.Path}`));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(newRoutes);\n _.forEach(newRoutes, (route, idx) => {\n if (_.includes(allRoutes, route) && !_.includes(toDelRoutes, route)) {\n duplicates[idx] = route;\n }\n });\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortMappingLoadBalancer() {\n const state = this.state.duplicates.publishedPorts.loadBalancerPorts;\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n const source = _.map(this.formValues.PublishedPorts, (p) => (p.NeedsDeletion ? undefined : p.LoadBalancerPort));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n } else {\n state.refs = {};\n state.hasRefs = false;\n }\n }\n\n onChangePortProtocol(index) {\n this.onChangePortMappingContainerPort();\n if (this.formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER) {\n const newPorts = _.filter(this.formValues.PublishedPorts, { IsNew: true });\n _.forEach(newPorts, (port) => {\n port.Protocol = index ? this.formValues.PublishedPorts[index].Protocol : newPorts[0].Protocol;\n });\n }\n }\n /* #endregion */\n\n /* #region STATE VALIDATION FUNCTIONS */\n isValid() {\n return (\n !this.state.alreadyExists &&\n !this.state.duplicates.environmentVariables.hasRefs &&\n !this.state.duplicates.persistedFolders.hasRefs &&\n !this.state.duplicates.configurationPaths.hasRefs &&\n !this.state.duplicates.existingVolumes.hasRefs &&\n !this.state.duplicates.publishedPorts.containerPorts.hasRefs &&\n !this.state.duplicates.publishedPorts.nodePorts.hasRefs &&\n !this.state.duplicates.publishedPorts.ingressRoutes.hasRefs &&\n !this.state.duplicates.publishedPorts.loadBalancerPorts.hasRefs &&\n !this.state.exceeded.persistedFolders.hasRefs\n );\n }\n\n storageClassAvailable() {\n return (\n this.storageClasses &&\n this.storageClasses.length > 0 &&\n this.state.storages.quotasComputed &&\n (!this.state.storages.allRestricted || (this.state.storages.allRestricted && this.formValues.PersistedFolders.length !== 0))\n );\n }\n\n hasMultipleStorageClassesAvailable() {\n return this.storageClasses && this.storageClasses.length > 1;\n }\n\n resetDeploymentType() {\n this.formValues.DeploymentType = this.ApplicationDeploymentTypes.REPLICATED;\n this.onChangeVolumeRequestedSize();\n }\n\n // The data access policy panel is not shown when:\n // * There is not persisted folder specified\n showDataAccessPolicySection() {\n return this.formValues.PersistedFolders.length !== 0;\n }\n\n // A global deployment is not available when either:\n // * For each persisted folder specified, if one of the storage object only supports the RWO access mode\n // * The data access policy is set to ISOLATED\n supportGlobalDeployment() {\n const hasFolders = this.formValues.PersistedFolders.length !== 0;\n const hasRWOOnly = KubernetesApplicationHelper.hasRWOOnly(this.formValues);\n const isIsolated = this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED;\n\n if (hasFolders && (hasRWOOnly || isIsolated)) {\n return false;\n }\n return true;\n }\n\n // A StatefulSet is defined by DataAccessPolicy === ISOLATED\n isEditAndStatefulSet() {\n return this.state.isEdit && this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED;\n }\n\n // A scalable deployment is available when either:\n // * No persisted folders are specified\n // * The access policy is set to shared and for each persisted folders specified, all the associated\n // storage objects support at least RWX access mode (no RWO only)\n // * The access policy is set to isolated\n supportScalableReplicaDeployment() {\n const hasFolders = this.formValues.PersistedFolders.length !== 0;\n const hasRWOOnly = KubernetesApplicationHelper.hasRWOOnly(this.formValues);\n const isIsolated = this.formValues.DataAccessPolicy === this.ApplicationDataAccessPolicies.ISOLATED;\n\n if (!hasFolders || isIsolated || (hasFolders && !hasRWOOnly)) {\n return true;\n }\n return false;\n }\n\n // For each persisted folders, returns the non scalable deployments options (storage class that only supports RWO)\n getNonScalableStorage() {\n let storageOptions = [];\n\n for (let i = 0; i < this.formValues.PersistedFolders.length; i++) {\n const folder = this.formValues.PersistedFolders[i];\n\n if (folder.StorageClass) {\n if (_.isEqual(folder.StorageClass.AccessModes, ['RWO'])) {\n storageOptions.push(folder.StorageClass.Name);\n }\n } else {\n storageOptions.push('');\n }\n }\n\n return _.uniq(storageOptions).join(', ');\n }\n\n enforceReplicaCountMinimum() {\n if (this.formValues.ReplicaCount === null) {\n this.formValues.ReplicaCount = 1;\n }\n }\n\n resourceQuotaCapacityExceeded() {\n return !this.state.sliders.memory.max || !this.state.sliders.cpu.max;\n }\n\n nodeLimitsOverflow() {\n const cpu = this.formValues.CpuLimit;\n const memory = KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit);\n\n const overflow = this.nodesLimits.overflowForReplica(cpu, memory, 1);\n\n return overflow;\n }\n\n effectiveInstances() {\n return this.formValues.DeploymentType === this.ApplicationDeploymentTypes.GLOBAL ? this.nodeNumber : this.formValues.ReplicaCount;\n }\n\n resourceReservationsOverflow() {\n const instances = this.effectiveInstances();\n const cpu = this.formValues.CpuLimit;\n const maxCpu = this.state.namespaceLimits.cpu;\n const memory = KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit);\n const maxMemory = this.state.namespaceLimits.memory;\n\n // multiply 1000 can avoid 0.1 * 3 > 0.3\n if (cpu * 1000 * instances > maxCpu * 1000) {\n return true;\n }\n\n if (memory * instances > maxMemory) {\n return true;\n }\n\n if (this.formValues.DeploymentType === this.ApplicationDeploymentTypes.REPLICATED) {\n return this.nodesLimits.overflowForReplica(cpu, memory, instances);\n }\n\n // DeploymentType == GLOBAL\n return this.nodesLimits.overflowForGlobal(cpu, memory);\n }\n\n autoScalerOverflow() {\n const instances = this.formValues.AutoScaler.MaxReplicas;\n const cpu = this.formValues.CpuLimit;\n const maxCpu = this.state.namespaceLimits.cpu;\n const memory = KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit);\n const maxMemory = this.state.namespaceLimits.memory;\n\n // multiply 1000 can avoid 0.1 * 3 > 0.3\n if (cpu * 1000 * instances > maxCpu * 1000) {\n return true;\n }\n\n if (memory * instances > maxMemory) {\n return true;\n }\n\n return this.nodesLimits.overflowForReplica(cpu, memory, instances);\n }\n\n publishViaLoadBalancerEnabled() {\n return this.state.useLoadBalancer && this.state.maxLoadBalancersQuota !== 0;\n }\n\n publishViaIngressEnabled() {\n return this.ingresses.length;\n }\n\n isEditAndNoChangesMade() {\n if (!this.state.isEdit) return false;\n const changes = JsonPatch.compare(this.savedFormValues, this.formValues);\n this.editChanges = _.filter(changes, (change) => !_.includes(change.path, '$$hashKey') && change.path !== '/ApplicationType');\n return !this.editChanges.length;\n }\n\n /* #region PERSISTED FOLDERS */\n /* #region BUTTONS STATES */\n isAddPersistentFolderButtonShowed() {\n return !this.isEditAndStatefulSet() && this.formValues.Containers.length <= 1;\n }\n\n isNewVolumeButtonDisabled(index) {\n return this.isEditAndExistingPersistedFolder(index) || this.allQuotasExhaustedAndVolumesAvailable();\n }\n\n isExistingVolumeButtonDisabled() {\n return !this.hasAvailableVolumes() || (this.isEdit && this.application.ApplicationType === this.ApplicationTypes.STATEFULSET);\n }\n /* #endregion */\n\n allQuotasExhausted() {\n if (!this.storageClassAvailable() || !this.state.storages.quotasComputed) {\n return true;\n }\n const total = _.reduce(\n _.map(this.storageClasses, 'Name'),\n (sum, key) => {\n const availableSize = this.state.storages.availabilities[key];\n return availableSize ? sum + availableSize : sum;\n },\n 0\n );\n return this.storageClasses.length === _.keys(this.state.storages.availabilities).length && total <= 0;\n }\n\n allQuotasExhaustedAndNoVolumesAvailable() {\n return this.allQuotasExhausted() && !this.hasAvailableVolumes();\n }\n\n allQuotasExhaustedAndVolumesAvailable() {\n return this.allQuotasExhausted() && this.hasAvailableVolumes();\n }\n\n hasAvailableVolumes() {\n return this.availableVolumes.length > 0;\n }\n\n isEditAndExistingPersistedFolder(index) {\n return this.state.isEdit && this.formValues.PersistedFolders[index].PersistentVolumeClaimName;\n }\n /* #endregion */\n\n isEditAndNotNewPublishedPort(index) {\n return this.state.isEdit && !this.formValues.PublishedPorts[index].IsNew;\n }\n\n hasNoPublishedPorts() {\n return this.formValues.PublishedPorts.filter((port) => !port.NeedsDeletion).length === 0;\n }\n\n isEditAndNotNewPlacement(index) {\n return this.state.isEdit && !this.formValues.Placements[index].IsNew;\n }\n\n isNewAndNotFirst(index) {\n return !this.state.isEdit && index !== 0;\n }\n\n showPlacementPolicySection() {\n const placements = _.filter(this.formValues.Placements, { NeedsDeletion: false });\n return placements.length !== 0;\n }\n\n isNonScalable() {\n const scalable = this.supportScalableReplicaDeployment();\n const global = this.supportGlobalDeployment();\n const replica = this.formValues.ReplicaCount > 1;\n const replicated = this.formValues.DeploymentType === this.ApplicationDeploymentTypes.REPLICATED;\n const res = (replicated && !scalable && replica) || (!replicated && !global);\n return res;\n }\n\n isMaxLoadBalancerOverflow() {\n if (!this.state.useLoadBalancer || this.formValues.PublishingType !== this.ApplicationPublishingTypes.LOAD_BALANCER) {\n return false;\n }\n if (this.state.maxLoadBalancers <= 0 && this.state.maxLoadBalancers !== null) {\n return true;\n }\n return false;\n }\n\n isDeployUpdateButtonDisabled() {\n const overflow = this.resourceReservationsOverflow();\n const autoScalerOverflow = this.autoScalerOverflow();\n const inProgress = this.state.actionInProgress;\n const invalid = !this.isValid();\n const hasNoChanges = this.isEditAndNoChangesMade();\n const nonScalable = this.isNonScalable();\n const isPublishingWithoutPorts = this.formValues.IsPublishingService && this.hasNoPublishedPorts();\n const noResourcePool = !this.formValues.ResourcePool;\n const maxLoadBalancersOverflow = this.isMaxLoadBalancerOverflow();\n return overflow || autoScalerOverflow || inProgress || invalid || hasNoChanges || nonScalable || isPublishingWithoutPorts || noResourcePool || maxLoadBalancersOverflow;\n }\n\n isExternalApplication() {\n if (this.application) {\n return KubernetesApplicationHelper.isExternalApplication(this.application);\n } else {\n return false;\n }\n }\n\n disableLoadBalancerEdit() {\n return (\n this.state.isEdit &&\n this.application.ServiceType === this.ServiceTypes.LOAD_BALANCER &&\n !this.application.LoadBalancerIPAddress &&\n this.formValues.PublishingType === this.ApplicationPublishingTypes.LOAD_BALANCER\n );\n }\n\n isPublishingTypeEditDisabled() {\n const ports = _.filter(this.formValues.PublishedPorts, { IsNew: false, NeedsDeletion: false });\n return this.state.isEdit && this.formValues.PublishedPorts.length > 0 && ports.length > 0;\n }\n\n isEditLBWithPorts() {\n return this.formValues.PublishingType === KubernetesApplicationPublishingTypes.LOAD_BALANCER && _.filter(this.formValues.PublishedPorts, { IsNew: false }).length === 0;\n }\n\n isProtocolOptionDisabled(index, protocol) {\n return (\n this.disableLoadBalancerEdit() ||\n (this.isEditAndNotNewPublishedPort(index) && this.formValues.PublishedPorts[index].Protocol !== protocol) ||\n (this.isEditLBWithPorts() && this.formValues.PublishedPorts[index].Protocol !== protocol && this.isNewAndNotFirst(index))\n );\n }\n\n /* #endregion */\n\n /* #region DATA AUTO REFRESH */\n updateSliders() {\n const quota = this.formValues.ResourcePool.Quota;\n let minCpu = 0,\n minMemory = 0,\n maxCpu = this.state.namespaceLimits.cpu,\n maxMemory = this.state.namespaceLimits.memory;\n\n if (quota) {\n if (quota.CpuLimit) {\n minCpu = KubernetesApplicationQuotaDefaults.CpuLimit;\n }\n if (quota.MemoryLimit) {\n minMemory = KubernetesResourceReservationHelper.bytesValue(KubernetesApplicationQuotaDefaults.MemoryLimit);\n }\n }\n\n maxCpu = Math.min(maxCpu, this.nodesLimits.MaxCPU);\n maxMemory = Math.min(maxMemory, this.nodesLimits.MaxMemory);\n\n if (maxMemory < minMemory) {\n minMemory = 0;\n maxMemory = 0;\n }\n\n this.state.sliders.memory.min = KubernetesResourceReservationHelper.megaBytesValue(minMemory);\n this.state.sliders.memory.max = KubernetesResourceReservationHelper.megaBytesValue(maxMemory);\n this.state.sliders.cpu.min = minCpu;\n this.state.sliders.cpu.max = _.floor(maxCpu, 2);\n if (!this.state.isEdit) {\n this.formValues.CpuLimit = minCpu;\n this.formValues.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(minMemory);\n }\n }\n\n updateNamespaceLimits() {\n let maxCpu = this.state.nodes.cpu;\n let maxMemory = this.state.nodes.memory;\n const quota = this.formValues.ResourcePool.Quota;\n\n this.state.resourcePoolHasQuota = false;\n\n if (quota) {\n if (quota.CpuLimit) {\n this.state.resourcePoolHasQuota = true;\n maxCpu = quota.CpuLimit - quota.CpuLimitUsed;\n if (this.state.isEdit && this.savedFormValues.CpuLimit) {\n maxCpu += this.savedFormValues.CpuLimit * this.effectiveInstances();\n }\n }\n\n if (quota.MemoryLimit) {\n this.state.resourcePoolHasQuota = true;\n maxMemory = quota.MemoryLimit - quota.MemoryLimitUsed;\n if (this.state.isEdit && this.savedFormValues.MemoryLimit) {\n maxMemory += KubernetesResourceReservationHelper.bytesValue(this.savedFormValues.MemoryLimit) * this.effectiveInstances();\n }\n }\n }\n\n this.state.namespaceLimits.cpu = maxCpu;\n this.state.namespaceLimits.memory = maxMemory;\n }\n\n refreshStacks(namespace) {\n return this.$async(async () => {\n try {\n this.stacks = await this.KubernetesStackService.get(namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stacks');\n }\n });\n }\n\n refreshConfigurations(namespace) {\n return this.$async(async () => {\n try {\n this.configurations = await this.KubernetesConfigurationService.get(namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n }\n });\n }\n\n refreshApplications(namespace) {\n return this.$async(async () => {\n try {\n this.applications = await this.KubernetesApplicationService.get(namespace);\n this.state.maxLoadBalancers = null;\n this.state.maxLoadBalancersQuota = null;\n if (this.formValues.ResourcePool.Quota) {\n this.state.maxLoadBalancersQuota = this.formValues.ResourcePool.Quota.LoadBalancers;\n if (this.state.maxLoadBalancersQuota !== null) {\n let appsUsingLoadBalancers = _.filter(this.applications, { ServiceType: 'LoadBalancer' });\n if (this.state.isEdit) {\n appsUsingLoadBalancers = _.filter(appsUsingLoadBalancers, (app) => {\n return app.Name !== this.formValues.Name;\n });\n }\n const appsUsingLoadBalancersLength = appsUsingLoadBalancers.length;\n this.state.maxLoadBalancers = this.state.maxLoadBalancersQuota - appsUsingLoadBalancersLength;\n }\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n }\n });\n }\n\n refreshVolumes(namespace) {\n return this.$async(async () => {\n try {\n const volumes = await this.KubernetesVolumeService.get(namespace);\n _.forEach(volumes, (volume) => {\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, this.applications);\n });\n this.volumes = volumes;\n const filteredVolumes = _.filter(this.volumes, (volume) => {\n const isUnused = !KubernetesVolumeHelper.isUsed(volume);\n const isRWX = volume.PersistentVolumeClaim.StorageClass && _.includes(volume.PersistentVolumeClaim.StorageClass.AccessModes, 'RWX');\n return isUnused || isRWX;\n });\n this.availableVolumes = filteredVolumes;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve volumes');\n }\n });\n }\n\n refreshStorageAvailabilities() {\n const quota = this.formValues.ResourcePool.Quota;\n this.state.storages.availabilities = {};\n this.state.storages.quotasComputed = false;\n this.state.storages.allRestricted = false;\n if (quota && quota.StorageRequests.length) {\n const availabilities = {};\n _.forEach(quota.StorageRequests, (sr) => {\n if (sr.Selected) {\n availabilities[sr.Name] = filesizeParser(`${sr.Size}${sr.SizeUnit}`, { base: 10 });\n }\n });\n\n const groups = _.groupBy(this.volumes, 'PersistentVolumeClaim.StorageClass.Name');\n _.forOwn(groups, (volumes, key) => {\n if (availabilities[key]) {\n const used = _.reduce(volumes, (sum, v) => sum + filesizeParser(v.PersistentVolumeClaim.Storage, { base: 10 }), 0);\n const available = availabilities[key] - used;\n availabilities[key] = available < 0 ? 0 : available;\n }\n });\n this.state.storages.availabilities = availabilities;\n\n const restricted = _.filter(quota.StorageRequests, { Selected: true, Size: 0 });\n this.state.storages.allRestricted = restricted.length === quota.StorageRequests.length;\n }\n this.state.storages.quotasComputed = true;\n }\n\n refreshIngresses(namespace) {\n return this.$async(async () => {\n try {\n this.ingresses = await this.KubernetesIngressService.get(namespace);\n this.ingressHostnames = this.ingresses.length ? this.ingresses[0].Hosts : [];\n if (!this.publishViaIngressEnabled()) {\n if (this.savedFormValues) {\n this.formValues.PublishingType = this.savedFormValues.PublishingType;\n } else {\n this.formValues.PublishingType = this.ApplicationPublishingTypes.CLUSTER_IP;\n }\n }\n this.formValues.OriginalIngresses = this.ingresses;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve ingresses');\n }\n });\n }\n\n refreshNamespaceData(namespace) {\n return this.$async(async () => {\n await Promise.all([\n this.refreshStacks(namespace),\n this.refreshConfigurations(namespace),\n this.refreshApplications(namespace),\n this.refreshIngresses(namespace),\n this.refreshVolumes(namespace),\n ]);\n this.onChangeName();\n });\n }\n\n resetFormValues() {\n this.clearConfigurations();\n this.resetPersistedFolders();\n this.resetPublishedPorts();\n }\n\n onResourcePoolSelectionChange() {\n return this.$async(async () => {\n const namespace = this.formValues.ResourcePool.Namespace.Name;\n this.updateNamespaceLimits();\n this.updateSliders();\n await this.refreshNamespaceData(namespace);\n this.refreshStorageAvailabilities();\n this.resetFormValues();\n });\n }\n /* #endregion */\n\n /* #region ACTIONS */\n async deployApplicationAsync() {\n this.state.actionInProgress = true;\n try {\n this.formValues.ApplicationOwner = this.Authentication.getUserDetails().username;\n _.remove(this.formValues.Configurations, (item) => item.SelectedConfiguration === undefined);\n await this.KubernetesApplicationService.create(this.formValues);\n this.Notifications.success('Application successfully deployed', this.formValues.Name);\n this.$state.go('kubernetes.applications');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create application');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n async updateApplicationAsync() {\n try {\n this.state.actionInProgress = true;\n await this.KubernetesApplicationService.patch(this.savedFormValues, this.formValues);\n this.Notifications.success('Application successfully updated');\n this.$state.go('kubernetes.applications.application', { name: this.application.Name, namespace: this.application.ResourcePool });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update application');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n deployApplication() {\n if (this.state.isEdit) {\n this.ModalService.confirmUpdate('Updating the application may cause a service interruption. Do you wish to continue?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateApplicationAsync);\n }\n });\n } else {\n return this.$async(this.deployApplicationAsync);\n }\n }\n /* #endregion */\n\n /* #region APPLICATION - used on edit context only */\n getApplication() {\n return this.$async(async () => {\n try {\n const namespace = this.$state.params.namespace;\n [this.application, this.persistentVolumeClaims] = await Promise.all([\n this.KubernetesApplicationService.get(namespace, this.$state.params.name),\n this.KubernetesPersistentVolumeClaimService.get(namespace),\n ]);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application details');\n }\n });\n }\n\n async parseImageConfiguration(imageModel) {\n return this.$async(async () => {\n try {\n return await this.RegistryService.retrievePorRegistryModelFromRepository(imageModel.Image, this.endpoint.Id, imageModel.Registry.Id, this.$state.params.namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registry');\n return imageModel;\n }\n });\n }\n /* #endregion */\n\n /* #region ON INIT */\n $onInit() {\n return this.$async(async () => {\n try {\n this.Authentication.redirectIfUnauthorized(['K8sApplicationDetailsW']);\n\n this.isAdmin = this.Authentication.isAdmin();\n\n this.state.isEdit = this.$state.params.namespace && this.$state.params.name;\n\n this.storageClasses = this.endpoint.Kubernetes.Configuration.StorageClasses;\n this.state.useLoadBalancer = this.endpoint.Kubernetes.Configuration.UseLoadBalancer;\n this.state.useServerMetrics = this.endpoint.Kubernetes.Configuration.UseServerMetrics;\n\n const [resourcePools, nodes, nodesLimits] = await Promise.all([\n this.KubernetesResourcePoolService.get(),\n this.KubernetesNodeService.get(),\n this.KubernetesNodesLimitsService.get(),\n ]);\n this.nodesLimits = nodesLimits;\n\n const nonSystemNamespaces = _.filter(resourcePools, (resourcePool) => !KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name));\n\n this.resourcePools = _.sortBy(nonSystemNamespaces, ({ Namespace }) => (Namespace.Name === 'default' ? 0 : 1));\n\n this.formValues.ResourcePool = this.resourcePools[0];\n if (!this.formValues.ResourcePool) {\n return;\n }\n\n _.forEach(nodes, (item) => {\n this.state.nodes.memory += filesizeParser(item.Memory);\n this.state.nodes.cpu += item.CPU;\n });\n this.nodesLabels = KubernetesNodeHelper.generateNodeLabelsFromNodes(nodes);\n this.nodeNumber = nodes.length;\n\n const namespace = this.state.isEdit ? this.$state.params.namespace : this.formValues.ResourcePool.Namespace.Name;\n await this.refreshNamespaceData(namespace);\n\n if (this.state.isEdit) {\n await this.getApplication();\n this.formValues = KubernetesApplicationConverter.applicationToFormValues(\n this.application,\n this.resourcePools,\n this.configurations,\n this.persistentVolumeClaims,\n this.nodesLabels,\n this.ingresses\n );\n\n if (this.application.ApplicationKind) {\n this.state.appType = KubernetesDeploymentTypes[this.application.ApplicationKind.toUpperCase()];\n if (this.application.ApplicationKind === KubernetesDeploymentTypes.URL) {\n this.state.appType = KubernetesDeploymentTypes.CONTENT;\n }\n\n if (this.application.StackId) {\n this.stack = await this.StackService.stack(this.application.StackId);\n if (this.state.appType === KubernetesDeploymentTypes.CONTENT) {\n this.stackFileContent = await this.StackService.getStackFile(this.application.StackId);\n }\n }\n }\n\n this.formValues.OriginalIngresses = this.ingresses;\n this.formValues.ImageModel = await this.parseImageConfiguration(this.formValues.ImageModel);\n this.savedFormValues = angular.copy(this.formValues);\n delete this.formValues.ApplicationType;\n\n if (this.application.ApplicationType !== KubernetesApplicationTypes.STATEFULSET) {\n _.forEach(this.formValues.PersistedFolders, (persistedFolder) => {\n const volume = _.find(this.availableVolumes, ['PersistentVolumeClaim.Name', persistedFolder.PersistentVolumeClaimName]);\n if (volume) {\n persistedFolder.UseNewVolume = false;\n persistedFolder.ExistingVolume = volume;\n }\n });\n }\n await this.refreshNamespaceData(namespace);\n } else {\n this.formValues.AutoScaler = KubernetesApplicationHelper.generateAutoScalerFormValueFromHorizontalPodAutoScaler(null, this.formValues.ReplicaCount);\n }\n\n if (this.state.isEdit) {\n this.nodesLimits.excludesPods(this.application.Pods, this.formValues.CpuLimit, KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit));\n }\n\n this.formValues.IsPublishingService = this.formValues.PublishedPorts.length > 0;\n\n this.updateNamespaceLimits();\n this.updateSliders();\n this.refreshStorageAvailabilities();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n });\n }\n\n /* #endregion */\n}\n\nexport default KubernetesCreateApplicationController;\nangular.module('portainer.kubernetes').controller('KubernetesCreateApplicationController', KubernetesCreateApplicationController);\n","const autoNgTemplateLoaderTemplate1 = require('./application.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\n\nimport {\n KubernetesApplicationDataAccessPolicies,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationTypes,\n KubernetesDeploymentTypes,\n} from 'Kubernetes/models/application/models';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport KubernetesApplicationHelper from 'Kubernetes/helpers/application';\nimport { KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport { KubernetesPodNodeAffinityNodeSelectorRequirementOperators } from 'Kubernetes/pod/models';\nimport { KubernetesPodContainerTypes } from 'Kubernetes/pod/models/index';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nfunction computeTolerations(nodes, application) {\n const pod = application.Pods[0];\n _.forEach(nodes, (n) => {\n n.AcceptsApplication = true;\n n.Expanded = false;\n if (!pod) {\n return;\n }\n n.UnmetTaints = [];\n _.forEach(n.Taints, (t) => {\n const matchKeyMatchValueMatchEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Equal', Value: t.Value, Effect: t.Effect });\n const matchKeyAnyValueMatchEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Exists', Effect: t.Effect });\n const matchKeyMatchValueAnyEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Equal', Value: t.Value, Effect: '' });\n const matchKeyAnyValueAnyEffect = _.find(pod.Tolerations, { Key: t.Key, Operator: 'Exists', Effect: '' });\n const anyKeyAnyValueAnyEffect = _.find(pod.Tolerations, { Key: '', Operator: 'Exists', Effect: '' });\n\n if (!matchKeyMatchValueMatchEffect && !matchKeyAnyValueMatchEffect && !matchKeyMatchValueAnyEffect && !matchKeyAnyValueAnyEffect && !anyKeyAnyValueAnyEffect) {\n n.AcceptsApplication = false;\n n.UnmetTaints.push(t);\n } else {\n n.AcceptsApplication = true;\n }\n });\n });\n return nodes;\n}\n\n// For node requirement format depending on operator value\n// see https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#nodeselectorrequirement-v1-core\n// Some operators require empty \"values\" field, some only one element in \"values\" field, etc\n\nfunction computeAffinities(nodes, application) {\n if (!application.Pods || application.Pods.length === 0) {\n return nodes;\n }\n\n const pod = application.Pods[0];\n _.forEach(nodes, (n) => {\n if (pod.NodeSelector) {\n const patch = JsonPatch.compare(n.Labels, pod.NodeSelector);\n _.remove(patch, { op: 'remove' });\n n.UnmatchedNodeSelectorLabels = _.map(patch, (i) => {\n return { key: _.trimStart(i.path, '/'), value: i.value };\n });\n if (n.UnmatchedNodeSelectorLabels.length) {\n n.AcceptsApplication = false;\n }\n }\n\n if (pod.Affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution) {\n const unmatchedTerms = _.map(pod.Affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms, (t) => {\n const unmatchedExpressions = _.map(t.matchExpressions, (e) => {\n const exists = {}.hasOwnProperty.call(n.Labels, e.key);\n const isIn = exists && _.includes(e.values, n.Labels[e.key]);\n if (\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.EXISTS && exists) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.DOES_NOT_EXIST && !exists) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.IN && isIn) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.NOT_IN && !isIn) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.GREATER_THAN && exists && parseInt(n.Labels[e.key], 10) > parseInt(e.values[0], 10)) ||\n (e.operator === KubernetesPodNodeAffinityNodeSelectorRequirementOperators.LOWER_THAN && exists && parseInt(n.Labels[e.key], 10) < parseInt(e.values[0], 10))\n ) {\n return;\n }\n return e;\n });\n return _.without(unmatchedExpressions, undefined);\n });\n _.remove(unmatchedTerms, (i) => i.length === 0);\n n.UnmatchedNodeAffinities = unmatchedTerms;\n if (n.UnmatchedNodeAffinities.length) {\n n.AcceptsApplication = false;\n }\n }\n });\n return nodes;\n}\n\nfunction computePlacements(nodes, application) {\n nodes = computeTolerations(nodes, application);\n nodes = computeAffinities(nodes, application);\n return nodes;\n}\n\nclass KubernetesApplicationController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n clipboard,\n Notifications,\n LocalStorage,\n ModalService,\n Authentication,\n KubernetesApplicationService,\n KubernetesEventService,\n KubernetesStackService,\n KubernetesPodService,\n KubernetesNodeService,\n StackService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.clipboard = clipboard;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.ModalService = ModalService;\n this.Authentication = Authentication;\n this.StackService = StackService;\n\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesStackService = KubernetesStackService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesNodeService = KubernetesNodeService;\n\n this.KubernetesApplicationDeploymentTypes = KubernetesApplicationDeploymentTypes;\n this.KubernetesApplicationTypes = KubernetesApplicationTypes;\n this.KubernetesDeploymentTypes = KubernetesDeploymentTypes;\n\n this.ApplicationDataAccessPolicies = KubernetesApplicationDataAccessPolicies;\n this.KubernetesServiceTypes = KubernetesServiceTypes;\n this.KubernetesPodContainerTypes = KubernetesPodContainerTypes;\n this.KubernetesDeploymentTypes = KubernetesDeploymentTypes;\n\n this.onInit = this.onInit.bind(this);\n this.getApplication = this.getApplication.bind(this);\n this.getApplicationAsync = this.getApplicationAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n this.updateApplicationKindText = this.updateApplicationKindText.bind(this);\n this.updateApplicationAsync = this.updateApplicationAsync.bind(this);\n this.redeployApplicationAsync = this.redeployApplicationAsync.bind(this);\n this.rollbackApplicationAsync = this.rollbackApplicationAsync.bind(this);\n this.copyLoadBalancerIP = this.copyLoadBalancerIP.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('application', index);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(3);\n }\n\n isSystemNamespace() {\n return KubernetesNamespaceHelper.isSystemNamespace(this.application.ResourcePool);\n }\n\n isExternalApplication() {\n return KubernetesApplicationHelper.isExternalApplication(this.application);\n }\n\n copyLoadBalancerIP() {\n this.clipboard.copyText(this.application.LoadBalancerIPAddress);\n $('#copyNotificationLB').show().fadeOut(2500);\n }\n\n copyApplicationName() {\n this.clipboard.copyText(this.application.Name);\n $('#copyNotificationApplicationName').show().fadeOut(2500);\n }\n\n hasPersistedFolders() {\n return this.application && this.application.PersistedFolders.length;\n }\n\n hasVolumeConfiguration() {\n return this.application && this.application.ConfigurationVolumes.length;\n }\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n buildIngressRuleURL(rule) {\n const hostname = rule.Host ? rule.Host : rule.IP;\n return 'http://' + hostname + rule.Path;\n }\n\n portHasIngressRules(port) {\n return port.IngressRules.length > 0;\n }\n\n ruleCanBeDisplayed(rule) {\n return !rule.Host && !rule.IP ? false : true;\n }\n\n isStack() {\n return this.application.StackId;\n }\n\n /**\n * ROLLBACK\n */\n async rollbackApplicationAsync() {\n try {\n // await this.KubernetesApplicationService.rollback(this.application, this.formValues.SelectedRevision);\n const revision = _.nth(this.application.Revisions, -2);\n await this.KubernetesApplicationService.rollback(this.application, revision);\n this.Notifications.success('Application successfully rolled back');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to rollback the application');\n }\n }\n\n rollbackApplication() {\n this.ModalService.confirmUpdate('Rolling back the application to a previous configuration may cause a service interruption. Do you wish to continue?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.rollbackApplicationAsync);\n }\n });\n }\n /**\n * REDEPLOY\n */\n async redeployApplicationAsync() {\n try {\n const promises = _.map(this.application.Pods, (item) => this.KubernetesPodService.delete(item));\n await Promise.all(promises);\n this.Notifications.success('Application successfully redeployed');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to redeploy the application');\n }\n }\n\n redeployApplication() {\n this.ModalService.confirmUpdate('Redeploying the application may cause a service interruption. Do you wish to continue?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.redeployApplicationAsync);\n }\n });\n }\n\n /**\n * UPDATE\n */\n async updateApplicationAsync() {\n try {\n const application = angular.copy(this.application);\n application.Note = this.formValues.Note;\n await this.KubernetesApplicationService.patch(this.application, application, true);\n this.Notifications.success('Application successfully updated');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update application');\n }\n }\n\n updateApplication() {\n return this.$async(this.updateApplicationAsync);\n }\n\n updateApplicationKindText() {\n if (this.application.ApplicationKind === this.KubernetesDeploymentTypes.GIT) {\n this.state.appType = `git repository`;\n } else if (this.application.ApplicationKind === this.KubernetesDeploymentTypes.CONTENT) {\n this.state.appType = `manifest`;\n } else if (this.application.ApplicationKind === this.KubernetesDeploymentTypes.URL) {\n this.state.appType = `manifest`;\n }\n }\n\n /**\n * EVENTS\n */\n async getEventsAsync() {\n try {\n this.state.eventsLoading = true;\n const events = await this.KubernetesEventService.get(this.state.params.namespace);\n this.events = _.filter(\n events,\n (event) =>\n event.Involved.uid === this.application.Id ||\n event.Involved.uid === this.application.ServiceId ||\n _.find(this.application.Pods, (pod) => pod.Id === event.Involved.uid) !== undefined\n );\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application related events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n\n /**\n * APPLICATION\n */\n async getApplicationAsync() {\n try {\n this.state.dataLoading = true;\n const [application, nodes] = await Promise.all([\n this.KubernetesApplicationService.get(this.state.params.namespace, this.state.params.name),\n this.KubernetesNodeService.get(),\n ]);\n this.application = application;\n this.allContainers = KubernetesApplicationHelper.associateAllContainersAndApplication(application);\n this.formValues.Note = this.application.Note;\n this.formValues.Services = this.application.Services;\n if (this.application.Note) {\n this.state.expandedNote = true;\n }\n if (this.application.CurrentRevision) {\n this.formValues.SelectedRevision = _.find(this.application.Revisions, { revision: this.application.CurrentRevision.revision });\n }\n\n this.state.useIngress = _.find(application.PublishedPorts, (p) => {\n return this.portHasIngressRules(p);\n });\n\n this.placements = computePlacements(nodes, this.application);\n this.state.placementWarning = _.find(this.placements, { AcceptsApplication: true }) ? false : true;\n\n if (application.StackId) {\n const file = await this.StackService.getStackFile(application.StackId);\n this.stackFileContent = file;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application details');\n } finally {\n this.state.dataLoading = false;\n }\n }\n\n getApplication() {\n return this.$async(this.getApplicationAsync);\n }\n\n async onInit() {\n const endpointId = this.LocalStorage.getEndpointID();\n const endpoints = this.LocalStorage.getEndpoints();\n const endpoint = _.find(endpoints, function (item) {\n return item.Id === endpointId;\n });\n\n this.state = {\n activeTab: 0,\n currentName: this.$state.$current.name,\n showEditorTab: false,\n DisplayedPanel: 'pods',\n eventsLoading: true,\n dataLoading: true,\n viewReady: false,\n params: {\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n },\n appType: this.KubernetesDeploymentTypes.APPLICATION_FORM,\n eventWarningCount: 0,\n placementWarning: false,\n expandedNote: false,\n useIngress: false,\n useServerMetrics: this.endpoint.Kubernetes.Configuration.UseServerMetrics,\n isAuthorized: this.Authentication.hasAuthorizations(['K8sApplicationDetailsW']),\n canAccessNode: this.Authentication.hasAuthorizations(['K8sClusterNodeR']),\n canShowConsole: this.Authentication.hasAuthorizations(['K8sApplicationConsoleRW']),\n publicUrl: endpoint.PublicURL,\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('application');\n\n this.formValues = {\n Note: '',\n SelectedRevision: undefined,\n };\n\n await this.getApplication();\n await this.getEvents();\n this.updateApplicationKindText();\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('application', 0);\n }\n }\n}\n\nexport default KubernetesApplicationController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationController', KubernetesApplicationController);\n","import _ from 'lodash-es';\n\nexport default class KubernetesApplicationIngressController {\n /* @ngInject */\n constructor($async, KubernetesIngressService) {\n this.$async = $async;\n this.KubernetesIngressService = KubernetesIngressService;\n }\n\n $onInit() {\n return this.$async(async () => {\n this.hasIngress;\n this.applicationIngress = [];\n const ingresses = await this.KubernetesIngressService.get(this.application.ResourcePool);\n const services = this.application.Services;\n\n _.forEach(services, (service) => {\n _.forEach(ingresses, (ingress) => {\n _.forEach(ingress.Paths, (path) => {\n if (path.ServiceName === service.metadata.name) {\n this.applicationIngress.push(path);\n this.hasIngress = true;\n }\n });\n });\n });\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ingress-table.html');\n\nimport angular from 'angular';\nimport controller from './ingress-table.controller';\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationIngressTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n application: '<',\n publicUrl: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.docker').controller('KubernetesApplicationPlacementsDatatableController', function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return !item.AcceptsApplication;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationPlacementsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationPlacementsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n loading: '<',\n removeAction: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./services-table.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationServicesTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n services: '<',\n application: '<',\n publicUrl: '<',\n },\n});\n","import PortainerError from 'Portainer/error';\n\nexport default class KubernetesHelmApplicationController {\n /* @ngInject */\n constructor($async, $state, Authentication, Notifications, HelmService) {\n this.$async = $async;\n this.$state = $state;\n this.Authentication = Authentication;\n this.Notifications = Notifications;\n this.HelmService = HelmService;\n }\n\n /**\n * APPLICATION\n */\n async getHelmApplication() {\n try {\n this.state.dataLoading = true;\n const releases = await this.HelmService.listReleases(this.endpoint.Id, { selector: `name=${this.state.params.name}`, namespace: this.state.params.namespace });\n if (releases.length > 0) {\n this.state.release = releases[0];\n } else {\n throw new PortainerError(`Release ${this.state.params.name} not found`);\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve helm application details');\n } finally {\n this.state.dataLoading = false;\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n dataLoading: true,\n viewReady: false,\n params: {\n name: this.$state.params.name,\n namespace: this.$state.params.namespace,\n },\n release: {\n name: undefined,\n chart: undefined,\n app_version: undefined,\n },\n };\n\n await this.getHelmApplication();\n this.state.viewReady = true;\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./helm.html');\n\nimport angular from 'angular';\nimport controller from './helm.controller';\nimport './helm.css';\n\nangular.module('portainer.kubernetes').component('kubernetesHelmApplicationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n endpoint: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./logs.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationLogsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationLogsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass KubernetesApplicationLogsController {\n /* @ngInject */\n constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService, Blob, FileSaver) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPodService = KubernetesPodService;\n this.Blob = Blob;\n this.FileSaver = FileSaver;\n\n this.onInit = this.onInit.bind(this);\n this.stopRepeater = this.stopRepeater.bind(this);\n this.getApplicationLogsAsync = this.getApplicationLogsAsync.bind(this);\n }\n\n updateAutoRefresh() {\n if (this.state.autoRefresh) {\n this.setUpdateRepeater();\n return;\n }\n\n this.stopRepeater();\n }\n\n stopRepeater() {\n if (angular.isDefined(this.repeater)) {\n this.$interval.cancel(this.repeater);\n this.repeater = null;\n }\n }\n\n setUpdateRepeater() {\n this.repeater = this.$interval(this.getApplicationLogsAsync, this.state.refreshRate);\n }\n\n downloadLogs() {\n const data = new this.Blob([_.reduce(this.applicationLogs, (acc, log) => acc + '\\n' + log, '')]);\n this.FileSaver.saveAs(data, this.podName + '_logs.txt');\n }\n\n async getApplicationLogsAsync() {\n try {\n this.applicationLogs = await this.KubernetesPodService.logs(this.application.ResourcePool, this.podName, this.containerName);\n } catch (err) {\n this.stopRepeater();\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n }\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: 5000, // 5 seconds\n search: '',\n viewReady: false,\n };\n\n const podName = this.$transition$.params().pod;\n const applicationName = this.$transition$.params().name;\n const namespace = this.$transition$.params().namespace;\n const containerName = this.$transition$.params().container;\n\n this.applicationLogs = [];\n this.podName = podName;\n this.containerName = containerName;\n\n try {\n const [application, applicationLogs] = await Promise.all([\n this.KubernetesApplicationService.get(namespace, applicationName),\n this.KubernetesPodService.logs(namespace, podName, containerName),\n ]);\n\n this.application = application;\n this.applicationLogs = applicationLogs;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n}\n\nexport default KubernetesApplicationLogsController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationLogsController', KubernetesApplicationLogsController);\n","const autoNgTemplateLoaderTemplate1 = require('./stats.html');\n\nangular.module('portainer.kubernetes').component('kubernetesApplicationStatsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesApplicationStatsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","import angular from 'angular';\nimport moment from 'moment';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport KubernetesPodConverter from 'Kubernetes/pod/converter';\n\nclass KubernetesApplicationStatsController {\n /* @ngInject */\n constructor($async, $state, $interval, $document, Notifications, KubernetesPodService, KubernetesNodeService, KubernetesMetricsService, ChartService) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.$document = $document;\n this.Notifications = Notifications;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n this.ChartService = ChartService;\n\n this.onInit = this.onInit.bind(this);\n }\n\n changeUpdateRepeater() {\n var cpuChart = this.cpuChart;\n var memoryChart = this.memoryChart;\n\n this.stopRepeater();\n this.setUpdateRepeater(cpuChart, memoryChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n }\n\n updateCPUChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n\n this.ChartService.UpdateCPUChart(label, this.stats.CPUUsage, this.cpuChart);\n }\n\n updateMemoryChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n\n this.ChartService.UpdateMemoryChart(label, this.stats.MemoryUsage, this.stats.MemoryCache, this.memoryChart);\n }\n\n stopRepeater() {\n var repeater = this.repeater;\n if (angular.isDefined(repeater)) {\n this.$interval.cancel(repeater);\n repeater = undefined;\n }\n }\n\n setUpdateRepeater() {\n const refreshRate = this.state.refreshRate;\n\n this.repeater = this.$interval(async () => {\n try {\n await this.getStats();\n\n this.updateCPUChart();\n this.updateMemoryChart();\n } catch (error) {\n this.stopRepeater();\n this.Notifications.error('Failure', error);\n }\n }, refreshRate * 1000);\n }\n\n initCharts() {\n const cpuChartCtx = $('#cpuChart');\n const cpuChart = this.ChartService.CreateCPUChart(cpuChartCtx);\n this.cpuChart = cpuChart;\n\n const memoryChartCtx = $('#memoryChart');\n const memoryChart = this.ChartService.CreateMemoryChart(memoryChartCtx);\n this.memoryChart = memoryChart;\n\n this.updateCPUChart();\n this.updateMemoryChart();\n this.setUpdateRepeater();\n }\n\n getStats() {\n return this.$async(async () => {\n try {\n const stats = await this.KubernetesMetricsService.getPod(this.state.transition.namespace, this.state.transition.podName);\n const container = _.find(stats.containers, { name: this.state.transition.containerName });\n if (container) {\n const memory = filesizeParser(container.usage.memory);\n const cpu = KubernetesResourceReservationHelper.parseCPU(container.usage.cpu);\n this.stats = {\n read: stats.timestamp,\n preread: '',\n MemoryCache: 0,\n MemoryUsage: memory,\n NumProcs: '',\n isWindows: false,\n PreviousCPUTotalUsage: 0,\n CPUUsage: (cpu / this.nodeCPU) * 100,\n CPUCores: 0,\n };\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application stats');\n }\n });\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: '30',\n viewReady: false,\n transition: {\n podName: this.$transition$.params().pod,\n containerName: this.$transition$.params().container,\n namespace: this.$transition$.params().namespace,\n applicationName: this.$transition$.params().name,\n },\n getMetrics: false,\n };\n\n try {\n await this.KubernetesMetricsService.getPod(this.state.transition.namespace, this.state.transition.podName);\n } catch (error) {\n this.state.getMetrics = false;\n this.state.viewReady = true;\n this.Notifications.error('Failure', error, 'Unable to retrieve pod stats');\n return;\n }\n\n try {\n const podRaw = await this.KubernetesPodService.get(this.state.transition.namespace, this.state.transition.podName);\n const pod = KubernetesPodConverter.apiToModel(podRaw.Raw);\n if (pod) {\n const node = await this.KubernetesNodeService.get(pod.Node);\n this.nodeCPU = node.CPU;\n } else {\n throw new Error('Unable to find pod');\n }\n await this.getStats();\n this.state.getMetrics = true;\n\n this.$document.ready(() => {\n this.initCharts();\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application stats');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesApplicationStatsController;\nangular.module('portainer.kubernetes').controller('KubernetesApplicationStatsController', KubernetesApplicationStatsController);\n","const autoNgTemplateLoaderTemplate1 = require('./cluster.html');\n\nangular.module('portainer.kubernetes').component('kubernetesClusterView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesClusterController',\n controllerAs: 'ctrl',\n bindings: {\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\n\nclass KubernetesClusterController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n LocalStorage,\n Authentication,\n KubernetesNodeService,\n KubernetesMetricsService,\n KubernetesApplicationService,\n KubernetesEndpointService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.Authentication = Authentication;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEndpointService = KubernetesEndpointService;\n\n this.onInit = this.onInit.bind(this);\n this.getNodes = this.getNodes.bind(this);\n this.getNodesAsync = this.getNodesAsync.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getEndpointsAsync = this.getEndpointsAsync.bind(this);\n this.hasResourceUsageAccess = this.hasResourceUsageAccess.bind(this);\n }\n\n async getEndpointsAsync() {\n try {\n const endpoints = await this.KubernetesEndpointService.get();\n const systemEndpoints = _.filter(endpoints, { Namespace: 'kube-system' });\n this.systemEndpoints = _.filter(systemEndpoints, (ep) => ep.HolderIdentity);\n\n const kubernetesEndpoint = _.find(endpoints, { Name: 'kubernetes' });\n if (kubernetesEndpoint && kubernetesEndpoint.Subsets) {\n const ips = _.flatten(_.map(kubernetesEndpoint.Subsets, 'Ips'));\n _.forEach(this.nodes, (node) => {\n node.Api = _.includes(ips, node.IPAddress);\n });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environments');\n }\n }\n\n getEndpoints() {\n return this.$async(this.getEndpointsAsync);\n }\n\n async getNodesAsync() {\n try {\n const nodes = await this.KubernetesNodeService.get();\n _.forEach(nodes, (node) => (node.Memory = filesizeParser(node.Memory)));\n this.nodes = nodes;\n this.CPULimit = Math.trunc(_.reduce(this.nodes, (acc, node) => node.CPU + acc, 0) * 10) / 10;\n this.CPULimit = Math.round(this.CPULimit * 10000) / 10000;\n this.MemoryLimit = _.reduce(this.nodes, (acc, node) => KubernetesResourceReservationHelper.megaBytesValue(node.Memory) + acc, 0);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve nodes');\n }\n }\n\n getNodes() {\n return this.$async(this.getNodesAsync);\n }\n\n async getApplicationsAsync() {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get();\n const nodeNames = _.map(this.nodes, (node) => node.Name);\n this.resourceReservation = _.reduce(\n this.applications,\n (acc, app) => {\n app.Pods = _.filter(app.Pods, (pod) => nodeNames.includes(pod.Node));\n const resourceReservation = KubernetesResourceReservationHelper.computeResourceReservation(app.Pods);\n acc.CPU += resourceReservation.CPU;\n acc.Memory += resourceReservation.Memory;\n return acc;\n },\n new KubernetesResourceReservation()\n );\n this.resourceReservation.Memory = KubernetesResourceReservationHelper.megaBytesValue(this.resourceReservation.Memory);\n\n if (this.hasResourceUsageAccess()) {\n await this.getResourceUsage(this.endpoint.Id);\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async getResourceUsage(endpointId) {\n try {\n const nodeMetrics = await this.KubernetesMetricsService.getNodes(endpointId);\n const resourceUsageList = nodeMetrics.items.map((i) => i.usage);\n const clusterResourceUsage = resourceUsageList.reduce((total, u) => {\n total.CPU += KubernetesResourceReservationHelper.parseCPU(u.cpu);\n total.Memory += KubernetesResourceReservationHelper.megaBytesValue(u.memory);\n return total;\n }, new KubernetesResourceReservation());\n this.resourceUsage = clusterResourceUsage;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve cluster resource usage');\n }\n }\n\n /**\n * Check if resource usage stats can be displayed\n * @returns {boolean}\n */\n hasResourceUsageAccess() {\n return this.state.useServerMetrics && this.state.hasK8sClusterNodeR;\n }\n\n async onInit() {\n const hasK8sClusterNodeR = this.Authentication.hasAuthorizations(['K8sClusterNodeR']) || false;\n this.state = {\n applicationsLoading: true,\n viewReady: false,\n hasK8sClusterNodeR,\n useServerMetrics: this.endpoint.Kubernetes.Configuration.UseServerMetrics,\n };\n\n await this.getNodes();\n if (hasK8sClusterNodeR) {\n await this.getEndpoints();\n }\n await this.getApplications();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesClusterController;\nangular.module('portainer.kubernetes').controller('KubernetesClusterController', KubernetesClusterController);\n","const autoNgTemplateLoaderTemplate1 = require('./node.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodeView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesNodeController',\n controllerAs: 'ctrl',\n bindings: {\n endpoint: '<',\n $transition$: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport KubernetesNodeConverter from 'Kubernetes/node/converter';\nimport { KubernetesNodeLabelFormValues, KubernetesNodeTaintFormValues } from 'Kubernetes/node/formValues';\nimport { KubernetesNodeTaintEffects, KubernetesNodeAvailabilities } from 'Kubernetes/node/models';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesNodeHelper } from 'Kubernetes/node/helper';\n\nclass KubernetesNodeController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n LocalStorage,\n ModalService,\n Authentication,\n KubernetesNodeService,\n KubernetesEventService,\n KubernetesPodService,\n KubernetesApplicationService,\n KubernetesEndpointService,\n KubernetesMetricsService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.ModalService = ModalService;\n this.Authentication = Authentication;\n this.getNodesAsync = this.getNodesAsync.bind(this);\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesPodService = KubernetesPodService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEndpointService = KubernetesEndpointService;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n\n this.onInit = this.onInit.bind(this);\n this.getNodesAsync = this.getNodesAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getEndpointsAsync = this.getEndpointsAsync.bind(this);\n this.updateNodeAsync = this.updateNodeAsync.bind(this);\n this.drainNodeAsync = this.drainNodeAsync.bind(this);\n this.hasResourceUsageAccess = this.hasResourceUsageAccess.bind(this);\n this.getNodeUsageAsync = this.getNodeUsageAsync.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('node', index);\n }\n\n /* #region taint */\n\n onChangeTaintKey(index) {\n this.state.duplicateTaintKeys = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.Taints, (taint) => {\n if (taint.NeedsDeletion) {\n return undefined;\n }\n return taint.Key;\n })\n );\n this.state.hasDuplicateTaintKeys = Object.keys(this.state.duplicateTaintKeys).length > 0;\n this.onChangeTaint(index);\n }\n\n onChangeTaint(index) {\n if (this.formValues.Taints[index]) {\n this.formValues.Taints[index].IsChanged = true;\n }\n }\n\n addTaint() {\n const taint = new KubernetesNodeTaintFormValues();\n taint.IsNew = true;\n taint.Effect = KubernetesNodeTaintEffects.NOSCHEDULE;\n this.formValues.Taints.push(taint);\n }\n\n removeTaint(index) {\n const taint = this.formValues.Taints[index];\n if (taint.IsNew) {\n this.formValues.Taints.splice(index, 1);\n } else {\n taint.NeedsDeletion = true;\n }\n this.onChangeTaintKey();\n }\n\n restoreTaint(index) {\n this.formValues.Taints[index].NeedsDeletion = false;\n this.onChangeTaintKey();\n }\n\n computeTaintsWarning() {\n return _.filter(this.formValues.Taints, (taint) => {\n return taint.Effect === KubernetesNodeTaintEffects.NOEXECUTE && (taint.IsNew || taint.IsChanged);\n }).length;\n }\n\n /* #endregion */\n\n /* #region label */\n\n onChangeLabelKey(index) {\n this.state.duplicateLabelKeys = KubernetesFormValidationHelper.getDuplicates(\n _.map(this.formValues.Labels, (label) => {\n if (label.NeedsDeletion) {\n return undefined;\n }\n return label.Key;\n })\n );\n this.state.hasDuplicateLabelKeys = Object.keys(this.state.duplicateLabelKeys).length > 0;\n this.onChangeLabel(index);\n }\n\n onChangeLabel(index) {\n if (this.formValues.Labels[index]) {\n this.formValues.Labels[index].IsChanged = true;\n }\n }\n\n addLabel() {\n const label = new KubernetesNodeLabelFormValues();\n label.IsNew = true;\n this.formValues.Labels.push(label);\n }\n\n removeLabel(index) {\n const label = this.formValues.Labels[index];\n if (label.IsNew) {\n this.formValues.Labels.splice(index, 1);\n } else {\n label.NeedsDeletion = true;\n }\n this.onChangeLabelKey();\n }\n\n restoreLabel(index) {\n this.formValues.Labels[index].NeedsDeletion = false;\n this.onChangeLabelKey();\n }\n\n isSystemLabel(index) {\n return KubernetesNodeHelper.isSystemLabel(this.formValues.Labels[index]);\n }\n\n computeLabelsWarning() {\n return _.filter(this.formValues.Labels, (label) => {\n return label.IsUsed && (label.NeedsDeletion || label.IsChanged);\n }).length;\n }\n\n /* #endregion */\n\n /* #region cordon */\n\n computeCordonWarning() {\n return this.formValues.Availability === this.availabilities.PAUSE;\n }\n\n /* #endregion */\n\n /* #region drain */\n\n computeDrainWarning() {\n return this.formValues.Availability === this.availabilities.DRAIN;\n }\n\n async drainNodeAsync() {\n const pods = _.flatten(_.map(this.applications, (app) => app.Pods));\n let actionCount = pods.length;\n for (const pod of pods) {\n try {\n await this.KubernetesPodService.eviction(pod);\n this.Notifications.success('Pod successfully evicted', pod.Name);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to evict pod');\n this.formValues.Availability = this.availabilities.PAUSE;\n await this.KubernetesNodeService.patch(this.node, this.formValues);\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.formValues.Availability = this.availabilities.PAUSE;\n await this.KubernetesNodeService.patch(this.node, this.formValues);\n }\n }\n }\n }\n\n drainNode() {\n return this.$async(this.drainNodeAsync);\n }\n\n /* #endregion */\n\n /* #region actions */\n\n isNoChangesMade() {\n const newNode = KubernetesNodeConverter.formValuesToNode(this.node, this.formValues);\n const payload = KubernetesNodeConverter.patchPayload(this.node, newNode);\n return !payload.length;\n }\n\n isDrainError() {\n return (this.state.isDrainOperation || this.state.isContainPortainer) && this.formValues.Availability === this.availabilities.DRAIN;\n }\n\n isFormValid() {\n return !this.state.hasDuplicateTaintKeys && !this.state.hasDuplicateLabelKeys && !this.isNoChangesMade() && !this.isDrainError();\n }\n\n resetFormValues() {\n this.formValues = KubernetesNodeConverter.nodeToFormValues(this.node);\n }\n\n /* #endregion */\n\n async getEndpointsAsync() {\n try {\n const endpoints = await this.KubernetesEndpointService.get();\n this.endpoint = _.find(endpoints, { Name: 'kubernetes' });\n if (this.endpoint && this.endpoint.Subsets) {\n _.forEach(this.endpoint.Subsets, (subset) => {\n return _.forEach(subset.Ips, (ip) => {\n if (ip === this.node.IPAddress) {\n this.node.Api = true;\n this.node.Port = subset.Port;\n return false;\n }\n });\n });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environments');\n }\n }\n\n getEndpoints() {\n return this.$async(this.getEndpointsAsync);\n }\n\n async updateNodeAsync() {\n try {\n this.node = await this.KubernetesNodeService.patch(this.node, this.formValues);\n if (this.formValues.Availability === this.availabilities.DRAIN) {\n await this.drainNode();\n }\n this.Notifications.success('Node updated successfully');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update node');\n }\n }\n\n updateNode() {\n const taintsWarning = this.computeTaintsWarning();\n const labelsWarning = this.computeLabelsWarning();\n const cordonWarning = this.computeCordonWarning();\n const drainWarning = this.computeDrainWarning();\n\n if (taintsWarning && !labelsWarning) {\n this.ModalService.confirmUpdate(\n 'Changes to taints will immediately deschedule applications running on this node without the corresponding tolerations. Do you wish to continue?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (!taintsWarning && labelsWarning) {\n this.ModalService.confirmUpdate(\n 'Removing or changing a label that is used might prevent applications from being scheduled on this node in the future. Do you wish to continue?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (taintsWarning && labelsWarning) {\n this.ModalService.confirmUpdate(\n 'Changes to taints will immediately deschedule applications running on this node without the corresponding tolerations.

    Removing or changing a label that is used might prevent applications from scheduling on this node in the future.\\n\\nDo you wish to continue?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (cordonWarning) {\n this.ModalService.confirmUpdate(\n 'Marking this node as unschedulable will effectively cordon the node and prevent any new workload from being scheduled on that node. Are you sure?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else if (drainWarning) {\n this.ModalService.confirmUpdate(\n 'Draining this node will cause all workloads to be evicted from that node. This might lead to some service interruption. Are you sure?',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateNodeAsync);\n }\n }\n );\n } else {\n return this.$async(this.updateNodeAsync);\n }\n }\n\n async getNodesAsync() {\n try {\n this.state.dataLoading = true;\n const nodeName = this.$transition$.params().name;\n this.nodes = await this.KubernetesNodeService.get();\n this.node = _.find(this.nodes, { Name: nodeName });\n this.state.isDrainOperation = _.find(this.nodes, { Availability: this.availabilities.DRAIN });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node');\n } finally {\n this.state.dataLoading = false;\n }\n }\n\n hasResourceUsageAccess() {\n return this.state.useServerMetrics && this.Authentication.hasAuthorizations(['K8sClusterNodeR']);\n }\n\n async getNodeUsageAsync() {\n try {\n const nodeName = this.$transition$.params().name;\n const node = await this.KubernetesMetricsService.getNode(nodeName);\n this.resourceUsage = new KubernetesResourceReservation();\n this.resourceUsage.CPU = KubernetesResourceReservationHelper.parseCPU(node.usage.cpu);\n this.resourceUsage.Memory = KubernetesResourceReservationHelper.megaBytesValue(node.usage.memory);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node resource usage');\n }\n }\n\n getNodeUsage() {\n return this.$async(this.getNodeUsageAsync);\n }\n\n getNodes() {\n return this.$async(this.getNodesAsync);\n }\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n async getEventsAsync() {\n try {\n this.state.eventsLoading = true;\n const events = await this.KubernetesEventService.get();\n this.events = events.filter((item) => item.Involved.kind === 'Node');\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n async getApplicationsAsync() {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get();\n\n this.resourceReservation = new KubernetesResourceReservation();\n this.applications = _.map(this.applications, (app) => {\n app.Pods = _.filter(app.Pods, (pod) => pod.Node === this.node.Name);\n return app;\n });\n this.applications = _.filter(this.applications, (app) => app.Pods.length !== 0);\n this.applications = _.map(this.applications, (app) => {\n const resourceReservation = KubernetesResourceReservationHelper.computeResourceReservation(app.Pods);\n app.CPU = resourceReservation.CPU;\n app.Memory = resourceReservation.Memory;\n this.resourceReservation.CPU += resourceReservation.CPU;\n this.resourceReservation.Memory += resourceReservation.Memory;\n return app;\n });\n this.resourceReservation.Memory = KubernetesResourceReservationHelper.megaBytesValue(this.resourceReservation.Memory);\n this.memoryLimit = KubernetesResourceReservationHelper.megaBytesValue(this.node.Memory);\n this.state.isContainPortainer = _.find(this.applications, { ApplicationName: 'portainer' });\n this.node.CPU = Math.trunc(this.node.CPU * 10) / 10;\n\n if (this.hasResourceUsageAccess()) {\n await this.getNodeUsage();\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async onInit() {\n this.state = {\n activeTab: 0,\n currentName: this.$state.$current.name,\n dataLoading: true,\n eventsLoading: true,\n applicationsLoading: true,\n showEditorTab: false,\n viewReady: false,\n eventWarningCount: 0,\n duplicateTaintKeys: [],\n hasDuplicateTaintKeys: false,\n duplicateLabelKeys: [],\n hasDuplicateLabelKeys: false,\n isDrainOperation: false,\n isContainPortainer: false,\n isAuthorized: this.Authentication.hasAuthorizations(['K8sClusterNodeW']),\n useServerMetrics: false,\n };\n\n this.availabilities = KubernetesNodeAvailabilities;\n\n this.state.useServerMetrics = this.endpoint.Kubernetes.Configuration.UseServerMetrics;\n\n this.state.activeTab = this.LocalStorage.getActiveTab('node');\n\n await this.getNodes();\n await this.getEvents();\n await this.getApplications();\n await this.getEndpoints();\n\n this.availableEffects = _.values(KubernetesNodeTaintEffects);\n this.formValues = KubernetesNodeConverter.nodeToFormValues(this.node);\n this.formValues.Labels = KubernetesNodeHelper.computeUsedLabels(this.applications, this.formValues.Labels);\n this.formValues.Labels = KubernetesNodeHelper.reorderLabels(this.formValues.Labels);\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('node', 0);\n }\n }\n}\n\nexport default KubernetesNodeController;\nangular.module('portainer.kubernetes').controller('KubernetesNodeController', KubernetesNodeController);\n","const autoNgTemplateLoaderTemplate1 = require('./stats.html');\n\nangular.module('portainer.kubernetes').component('kubernetesNodeStatsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesNodeStatsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","import angular from 'angular';\nimport moment from 'moment';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { PORTAINER_FADEOUT } from '@/constants';\n\nclass KubernetesNodeStatsController {\n /* @ngInject */\n constructor($async, $state, $interval, $document, Notifications, KubernetesNodeService, KubernetesMetricsService, ChartService) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.$document = $document;\n this.Notifications = Notifications;\n this.KubernetesNodeService = KubernetesNodeService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n this.ChartService = ChartService;\n\n this.onInit = this.onInit.bind(this);\n }\n\n changeUpdateRepeater() {\n var cpuChart = this.cpuChart;\n var memoryChart = this.memoryChart;\n\n this.stopRepeater();\n this.setUpdateRepeater(cpuChart, memoryChart);\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(PORTAINER_FADEOUT);\n }\n\n updateCPUChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n this.ChartService.UpdateCPUChart(label, this.stats.CPUUsage, this.cpuChart);\n }\n\n updateMemoryChart() {\n const label = moment(this.stats.read).format('HH:mm:ss');\n this.ChartService.UpdateMemoryChart(label, this.stats.MemoryUsage, 0, this.memoryChart);\n }\n\n stopRepeater() {\n var repeater = this.repeater;\n if (angular.isDefined(repeater)) {\n this.$interval.cancel(repeater);\n this.repeater = undefined;\n }\n }\n\n setUpdateRepeater() {\n const refreshRate = this.state.refreshRate;\n\n this.repeater = this.$interval(async () => {\n try {\n await this.getStats();\n this.updateCPUChart();\n this.updateMemoryChart();\n } catch (error) {\n this.stopRepeater();\n this.Notifications.error('Failure', error);\n }\n }, refreshRate * 1000);\n }\n\n initCharts() {\n const cpuChartCtx = $('#cpuChart');\n const cpuChart = this.ChartService.CreateCPUChart(cpuChartCtx);\n this.cpuChart = cpuChart;\n\n const memoryChartCtx = $('#memoryChart');\n const memoryChart = this.ChartService.CreateMemoryChart(memoryChartCtx);\n this.memoryChart = memoryChart;\n\n this.updateCPUChart();\n this.updateMemoryChart();\n this.setUpdateRepeater();\n }\n\n getStats() {\n return this.$async(async () => {\n try {\n const stats = await this.KubernetesMetricsService.getNode(this.state.transition.nodeName);\n if (stats) {\n const memory = filesizeParser(stats.usage.memory);\n const cpu = KubernetesResourceReservationHelper.parseCPU(stats.usage.cpu);\n this.stats = {\n read: stats.creationTimestamp,\n MemoryUsage: memory,\n CPUUsage: (cpu / this.nodeCPU) * 100,\n };\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve node stats');\n }\n });\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: '30',\n viewReady: false,\n transition: {\n nodeName: this.$transition$.params().name,\n },\n getMetrics: true,\n };\n\n try {\n const nodeMetrics = await this.KubernetesMetricsService.getNode(this.state.transition.nodeName);\n\n if (nodeMetrics) {\n const node = await this.KubernetesNodeService.get(this.state.transition.nodeName);\n this.nodeCPU = node.CPU || 1;\n\n await this.getStats();\n\n if (this.state.getMetrics) {\n this.$document.ready(() => {\n this.initCharts();\n });\n }\n } else {\n this.state.getMetrics = false;\n }\n } catch (err) {\n this.state.getMetrics = false;\n this.Notifications.error('Failure', err, 'Unable to retrieve node stats');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesNodeStatsController;\nangular.module('portainer.kubernetes').controller('KubernetesNodeStatsController', KubernetesNodeStatsController);\n","const autoNgTemplateLoaderTemplate1 = require('./configurations.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationsController',\n controllerAs: 'ctrl',\n});\n","import angular from 'angular';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\n\nclass KubernetesConfigurationsController {\n /* @ngInject */\n constructor($async, $state, Notifications, KubernetesConfigurationService, KubernetesApplicationService, ModalService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.ModalService = ModalService;\n\n this.onInit = this.onInit.bind(this);\n this.getConfigurations = this.getConfigurations.bind(this);\n this.getConfigurationsAsync = this.getConfigurationsAsync.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n this.refreshCallback = this.refreshCallback.bind(this);\n this.refreshCallbackAsync = this.refreshCallbackAsync.bind(this);\n }\n\n async getConfigurationsAsync() {\n try {\n this.state.configurationsLoading = true;\n this.configurations = await this.KubernetesConfigurationService.get();\n KubernetesConfigurationHelper.setConfigurationsUsed(this.configurations, this.applications);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n } finally {\n this.state.configurationsLoading = false;\n }\n }\n\n getConfigurations() {\n return this.$async(this.getConfigurationsAsync);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const configuration of selectedItems) {\n try {\n await this.KubernetesConfigurationService.delete(configuration);\n this.Notifications.success('Configurations successfully removed', configuration.Name);\n const index = this.configurations.indexOf(configuration);\n this.configurations.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove configuration');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload(this.$state.current);\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected configuration(s)?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n });\n }\n\n async getApplicationsAsync() {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications() {\n return this.$async(this.getApplicationsAsync);\n }\n\n async refreshCallbackAsync() {\n await this.getConfigurations();\n await this.getApplications();\n }\n\n refreshCallback() {\n return this.$async(this.refreshCallbackAsync);\n }\n\n async onInit() {\n this.state = {\n configurationsLoading: true,\n applicationsLoading: true,\n viewReady: false,\n };\n\n await this.getApplications();\n await this.getConfigurations();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesConfigurationsController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationsController', KubernetesConfigurationsController);\n","const autoNgTemplateLoaderTemplate1 = require('./createConfiguration.html');\n\nangular.module('portainer.kubernetes').component('kubernetesCreateConfigurationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesCreateConfigurationController',\n controllerAs: 'ctrl',\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport { KubernetesConfigurationFormValues, KubernetesConfigurationFormValuesEntry } from 'Kubernetes/models/configuration/formvalues';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nclass KubernetesCreateConfigurationController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, Notifications, Authentication, KubernetesConfigurationService, KubernetesResourcePoolService) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesConfigurationTypes = KubernetesConfigurationTypes;\n\n this.onInit = this.onInit.bind(this);\n this.createConfigurationAsync = this.createConfigurationAsync.bind(this);\n this.getConfigurationsAsync = this.getConfigurationsAsync.bind(this);\n }\n\n onChangeName() {\n const filteredConfigurations = _.filter(this.configurations, (config) => config.Namespace === this.formValues.ResourcePool.Namespace.Name);\n this.state.alreadyExist = _.find(filteredConfigurations, (config) => config.Name === this.formValues.Name) !== undefined;\n }\n\n onResourcePoolSelectionChange() {\n this.onChangeName();\n }\n\n isFormValid() {\n const uniqueCheck = !this.state.alreadyExist && this.state.isDataValid;\n if (this.formValues.IsSimple) {\n return this.formValues.Data.length > 0 && uniqueCheck && this.formValues.ResourcePool;\n }\n return uniqueCheck && this.formValues.ResourcePool;\n }\n\n async createConfigurationAsync() {\n try {\n this.state.actionInProgress = true;\n this.formValues.ConfigurationOwner = this.Authentication.getUserDetails().username;\n if (!this.formValues.IsSimple) {\n this.formValues.Data = KubernetesConfigurationHelper.parseYaml(this.formValues);\n }\n await this.KubernetesConfigurationService.create(this.formValues);\n this.Notifications.success('Configuration succesfully created');\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.configurations');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create configuration');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createConfiguration() {\n return this.$async(this.createConfigurationAsync);\n }\n\n async getConfigurationsAsync() {\n try {\n this.configurations = await this.KubernetesConfigurationService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n }\n }\n\n getConfigurations() {\n return this.$async(this.getConfigurationsAsync);\n }\n\n async uiCanExit() {\n if (!this.formValues.IsSimple && this.formValues.DataYaml && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async onInit() {\n this.Authentication.redirectIfUnauthorized(['K8sConfigurationsDetailsW']);\n this.state = {\n actionInProgress: false,\n viewReady: false,\n alreadyExist: false,\n isDataValid: true,\n isEditorDirty: false,\n };\n\n this.formValues = new KubernetesConfigurationFormValues();\n this.formValues.Data.push(new KubernetesConfigurationFormValuesEntry());\n\n try {\n const resourcePools = await this.KubernetesResourcePoolService.get();\n this.resourcePools = _.filter(resourcePools, (resourcePool) => !KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name));\n\n this.formValues.ResourcePool = this.resourcePools[0];\n if (!this.formValues.ResourcePool) {\n return;\n }\n await this.getConfigurations();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n\n this.$window.onbeforeunload = () => {\n if (!this.formValues.IsSimple && this.formValues.DataYaml && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesCreateConfigurationController;\nangular.module('portainer.kubernetes').controller('KubernetesCreateConfigurationController', KubernetesCreateConfigurationController);\n","const autoNgTemplateLoaderTemplate1 = require('./configuration.html');\n\nangular.module('portainer.kubernetes').component('kubernetesConfigurationView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesConfigurationController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport { KubernetesConfigurationFormValues } from 'Kubernetes/models/configuration/formvalues';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport KubernetesConfigurationConverter from 'Kubernetes/converters/configuration';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nclass KubernetesConfigurationController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n $window,\n clipboard,\n Notifications,\n LocalStorage,\n Authentication,\n KubernetesConfigurationService,\n KubernetesConfigMapService,\n KubernetesSecretService,\n KubernetesResourcePoolService,\n ModalService,\n KubernetesApplicationService,\n KubernetesEventService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.clipboard = clipboard;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.ModalService = ModalService;\n this.Authentication = Authentication;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesConfigMapService = KubernetesConfigMapService;\n this.KubernetesSecretService = KubernetesSecretService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesConfigurationTypes = KubernetesConfigurationTypes;\n\n this.onInit = this.onInit.bind(this);\n this.getConfigurationAsync = this.getConfigurationAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n this.getApplications = this.getApplications.bind(this);\n this.getApplicationsAsync = this.getApplicationsAsync.bind(this);\n this.getConfigurationsAsync = this.getConfigurationsAsync.bind(this);\n this.updateConfiguration = this.updateConfiguration.bind(this);\n this.updateConfigurationAsync = this.updateConfigurationAsync.bind(this);\n }\n\n isSystemNamespace() {\n return KubernetesNamespaceHelper.isSystemNamespace(this.configuration.Namespace);\n }\n\n isSystemConfig() {\n return this.isSystemNamespace() || this.configuration.IsRegistrySecret;\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('configuration', index);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n copyConfigurationValue(idx) {\n this.clipboard.copyText(this.formValues.Data[idx].Value);\n $('#copyValueNotification_' + idx)\n .show()\n .fadeOut(2500);\n }\n\n isFormValid() {\n if (this.formValues.IsSimple) {\n return this.formValues.Data.length > 0 && this.state.isDataValid;\n }\n return this.state.isDataValid;\n }\n\n // TODO: refactor\n // It looks like we're still doing a create/delete process but we've decided to get rid of this\n // approach.\n async updateConfigurationAsync() {\n try {\n this.state.actionInProgress = true;\n if (\n this.formValues.Type !== this.configuration.Type ||\n this.formValues.ResourcePool.Namespace.Name !== this.configuration.Namespace ||\n this.formValues.Name !== this.configuration.Name\n ) {\n await this.KubernetesConfigurationService.create(this.formValues);\n await this.KubernetesConfigurationService.delete(this.configuration);\n this.Notifications.success('Configuration succesfully updated');\n this.$state.go(\n 'kubernetes.configurations.configuration',\n {\n namespace: this.formValues.ResourcePool.Namespace.Name,\n name: this.formValues.Name,\n },\n { reload: true }\n );\n } else {\n await this.KubernetesConfigurationService.update(this.formValues, this.configuration);\n this.Notifications.success('Configuration succesfully updated');\n this.$state.reload(this.$state.current);\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update configuration');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n updateConfiguration() {\n if (this.configuration.Used) {\n const plural = this.configuration.Applications.length > 1 ? 's' : '';\n this.ModalService.confirmUpdate(\n `The changes will be propagated to ${this.configuration.Applications.length} running application${plural}. Are you sure you want to update this configuration?`,\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateConfigurationAsync);\n }\n }\n );\n } else {\n return this.$async(this.updateConfigurationAsync);\n }\n }\n\n async getConfigurationAsync() {\n try {\n this.state.configurationLoading = true;\n const name = this.$transition$.params().name;\n const namespace = this.$transition$.params().namespace;\n const [configMap, secret] = await Promise.allSettled([this.KubernetesConfigMapService.get(namespace, name), this.KubernetesSecretService.get(namespace, name)]);\n if (secret.status === 'rejected' && secret.reason.err.status === 403) {\n this.$state.go('kubernetes.configurations');\n throw new Error('Not authorized to edit secret');\n }\n\n if (secret.status === 'fulfilled') {\n this.configuration = KubernetesConfigurationConverter.secretToConfiguration(secret.value);\n this.formValues.Data = secret.value.Data;\n } else {\n this.configuration = KubernetesConfigurationConverter.configMapToConfiguration(configMap.value);\n this.formValues.Data = configMap.value.Data;\n }\n\n this.formValues.ResourcePool = _.find(this.resourcePools, (resourcePool) => resourcePool.Namespace.Name === this.configuration.Namespace);\n this.formValues.Id = this.configuration.Id;\n this.formValues.Name = this.configuration.Name;\n this.formValues.Type = this.configuration.Type;\n this.oldDataYaml = this.formValues.DataYaml;\n\n return this.configuration;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configuration');\n } finally {\n this.state.configurationLoading = false;\n }\n }\n\n getConfiguration() {\n return this.$async(this.getConfigurationAsync);\n }\n\n async getApplicationsAsync(namespace) {\n try {\n this.state.applicationsLoading = true;\n const applications = await this.KubernetesApplicationService.get(namespace);\n this.configuration.Applications = KubernetesConfigurationHelper.getUsingApplications(this.configuration, applications);\n KubernetesConfigurationHelper.setConfigurationUsed(this.configuration);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications');\n } finally {\n this.state.applicationsLoading = false;\n }\n }\n\n getApplications(namespace) {\n return this.$async(this.getApplicationsAsync, namespace);\n }\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n async getEventsAsync(namespace) {\n try {\n this.state.eventsLoading = true;\n this.events = await this.KubernetesEventService.get(namespace);\n this.events = _.filter(this.events, (event) => event.Involved.uid === this.configuration.Id);\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications('Failure', err, 'Unable to retrieve events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents(namespace) {\n return this.$async(this.getEventsAsync, namespace);\n }\n\n async getConfigurationsAsync() {\n try {\n this.configurations = await this.KubernetesConfigurationService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve configurations');\n }\n }\n\n getConfigurations() {\n return this.$async(this.getConfigurationsAsync);\n }\n\n tagUsedDataKeys() {\n const configName = this.$transition$.params().name;\n const usedDataKeys = _.uniq(\n this.configuration.Applications.flatMap((app) =>\n app.Env.filter((e) => e.valueFrom && e.valueFrom.configMapKeyRef && e.valueFrom.configMapKeyRef.name === configName).map((e) => e.name)\n )\n );\n\n this.formValues.Data = this.formValues.Data.map((variable) => {\n if (!usedDataKeys.includes(variable.Key)) {\n return variable;\n }\n\n return { ...variable, Used: true };\n });\n }\n\n async uiCanExit() {\n if (!this.formValues.IsSimple && this.formValues.DataYaml !== this.oldDataYaml && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async onInit() {\n try {\n this.state = {\n actionInProgress: false,\n configurationLoading: true,\n applicationsLoading: true,\n eventsLoading: true,\n showEditorTab: false,\n viewReady: false,\n eventWarningCount: 0,\n activeTab: 0,\n currentName: this.$state.$current.name,\n isDataValid: true,\n isAuthorized: this.Authentication.hasAuthorizations(['K8sConfigurationsDetailsW']),\n isEditorDirty: false,\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('configuration');\n\n this.formValues = new KubernetesConfigurationFormValues();\n\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n\n const configuration = await this.getConfiguration();\n if (configuration) {\n await this.getApplications(this.configuration.Namespace);\n await this.getEvents(this.configuration.Namespace);\n await this.getConfigurations();\n }\n this.tagUsedDataKeys();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n\n this.$window.onbeforeunload = () => {\n if (!this.formValues.IsSimple && this.formValues.DataYaml !== this.oldDataYaml && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('configuration', 0);\n }\n this.state.isEditorDirty = false;\n }\n}\n\nexport default KubernetesConfigurationController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigurationController', KubernetesConfigurationController);\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { KubernetesStorageClass, KubernetesStorageClassAccessPolicies } from 'Kubernetes/models/storage-class/models';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport { KubernetesIngressClass } from 'Kubernetes/ingress/models';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nclass KubernetesConfigureController {\n /* #region CONSTRUCTOR */\n\n /* @ngInject */\n constructor(\n $analytics,\n $async,\n $state,\n $scope,\n Notifications,\n KubernetesStorageService,\n EndpointService,\n EndpointProvider,\n ModalService,\n KubernetesResourcePoolService,\n KubernetesIngressService,\n KubernetesMetricsService\n ) {\n this.$analytics = $analytics;\n this.$async = $async;\n this.$state = $state;\n this.$scope = $scope;\n this.Notifications = Notifications;\n this.KubernetesStorageService = KubernetesStorageService;\n this.EndpointService = EndpointService;\n this.EndpointProvider = EndpointProvider;\n this.ModalService = ModalService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesIngressService = KubernetesIngressService;\n this.KubernetesMetricsService = KubernetesMetricsService;\n\n this.IngressClassTypes = KubernetesIngressClassTypes;\n\n this.onInit = this.onInit.bind(this);\n this.configureAsync = this.configureAsync.bind(this);\n this.limitedFeature = FeatureId.K8S_SETUP_DEFAULT;\n this.limitedFeatureAutoWindow = FeatureId.HIDE_AUTO_UPDATE_WINDOW;\n this.onToggleAutoUpdate = this.onToggleAutoUpdate.bind(this);\n this.onChangeEnableResourceOverCommit = this.onChangeEnableResourceOverCommit.bind(this);\n }\n /* #endregion */\n\n /* #region STORAGE CLASSES UI MANAGEMENT */\n storageClassAvailable() {\n return this.StorageClasses && this.StorageClasses.length > 0;\n }\n\n hasValidStorageConfiguration() {\n let valid = true;\n _.forEach(this.StorageClasses, (item) => {\n if (item.selected && item.AccessModes.length === 0) {\n valid = false;\n }\n });\n return valid;\n }\n /* #endregion */\n\n /* #region INGRESS CLASSES UI MANAGEMENT */\n addIngressClass() {\n this.formValues.IngressClasses.push(new KubernetesIngressClass());\n this.onChangeIngressClass();\n }\n\n restoreIngressClass(index) {\n this.formValues.IngressClasses[index].NeedsDeletion = false;\n this.onChangeIngressClass();\n }\n\n removeIngressClass(index) {\n if (!this.formValues.IngressClasses[index].IsNew) {\n this.formValues.IngressClasses[index].NeedsDeletion = true;\n } else {\n this.formValues.IngressClasses.splice(index, 1);\n }\n this.onChangeIngressClass();\n }\n\n onChangeIngressClass() {\n const state = this.state.duplicates.ingressClasses;\n const source = _.map(this.formValues.IngressClasses, (ic) => (ic.NeedsDeletion ? undefined : ic.Name));\n const duplicates = KubernetesFormValidationHelper.getDuplicates(source);\n state.refs = duplicates;\n state.hasRefs = Object.keys(duplicates).length > 0;\n }\n\n onChangeIngressClassName(index) {\n const fv = this.formValues.IngressClasses[index];\n if (_.includes(fv.Name, KubernetesIngressClassTypes.NGINX)) {\n fv.Type = KubernetesIngressClassTypes.NGINX;\n } else if (_.includes(fv.Name, KubernetesIngressClassTypes.TRAEFIK)) {\n fv.Type = KubernetesIngressClassTypes.TRAEFIK;\n }\n this.onChangeIngressClass();\n }\n\n hasTraefikIngress() {\n return _.find(this.formValues.IngressClasses, { Type: this.IngressClassTypes.TRAEFIK });\n }\n /* #endregion */\n\n /* #region RESOURCES AND METRICS */\n\n onChangeEnableResourceOverCommit(enabled) {\n this.$scope.$evalAsync(() => {\n this.formValues.EnableResourceOverCommit = enabled;\n if (enabled) {\n this.formValues.ResourceOverCommitPercentage = 20;\n }\n });\n }\n\n /* #endregion */\n\n /* #region CONFIGURE */\n assignFormValuesToEndpoint(endpoint, storageClasses, ingressClasses) {\n endpoint.Kubernetes.Configuration.StorageClasses = storageClasses;\n endpoint.Kubernetes.Configuration.UseLoadBalancer = this.formValues.UseLoadBalancer;\n endpoint.Kubernetes.Configuration.UseServerMetrics = this.formValues.UseServerMetrics;\n endpoint.Kubernetes.Configuration.EnableResourceOverCommit = this.formValues.EnableResourceOverCommit;\n endpoint.Kubernetes.Configuration.ResourceOverCommitPercentage = this.formValues.ResourceOverCommitPercentage;\n endpoint.Kubernetes.Configuration.IngressClasses = ingressClasses;\n endpoint.Kubernetes.Configuration.RestrictDefaultNamespace = this.formValues.RestrictDefaultNamespace;\n endpoint.ChangeWindow = this.state.autoUpdateSettings;\n }\n\n transformFormValues() {\n const storageClasses = _.map(this.StorageClasses, (item) => {\n if (item.selected) {\n const res = new KubernetesStorageClass();\n res.Name = item.Name;\n res.AccessModes = _.map(item.AccessModes, 'Name');\n res.Provisioner = item.Provisioner;\n res.AllowVolumeExpansion = item.AllowVolumeExpansion;\n return res;\n }\n });\n _.pull(storageClasses, undefined);\n\n const ingressClasses = _.without(\n _.map(this.formValues.IngressClasses, (ic) => (ic.NeedsDeletion ? undefined : ic)),\n undefined\n );\n _.pull(ingressClasses, undefined);\n\n return [storageClasses, ingressClasses];\n }\n\n async removeIngressesAcrossNamespaces() {\n const ingressesToDel = _.filter(this.formValues.IngressClasses, { NeedsDeletion: true });\n if (!ingressesToDel.length) {\n return;\n }\n const promises = [];\n const oldEndpointID = this.EndpointProvider.endpointID();\n this.EndpointProvider.setEndpointID(this.endpoint.Id);\n\n try {\n const allResourcePools = await this.KubernetesResourcePoolService.get();\n const resourcePools = _.filter(\n allResourcePools,\n (resourcePool) => !KubernetesNamespaceHelper.isSystemNamespace(resourcePool.Namespace.Name) && !KubernetesNamespaceHelper.isDefaultNamespace(resourcePool.Namespace.Name)\n );\n\n ingressesToDel.forEach((ingress) => {\n resourcePools.forEach((resourcePool) => {\n promises.push(this.KubernetesIngressService.delete(resourcePool.Namespace.Name, ingress.Name));\n });\n });\n } finally {\n this.EndpointProvider.setEndpointID(oldEndpointID);\n }\n\n const responses = await Promise.allSettled(promises);\n responses.forEach((respons) => {\n if (respons.status == 'rejected' && respons.reason.err.status != 404) {\n throw respons.reason;\n }\n });\n }\n\n enableMetricsServer() {\n if (this.formValues.UseServerMetrics) {\n this.state.metrics.userClick = true;\n this.state.metrics.pending = true;\n this.KubernetesMetricsService.capabilities(this.endpoint.Id)\n .then(() => {\n this.state.metrics.isServerRunning = true;\n this.state.metrics.pending = false;\n this.formValues.UseServerMetrics = true;\n })\n .catch(() => {\n this.state.metrics.isServerRunning = false;\n this.state.metrics.pending = false;\n this.formValues.UseServerMetrics = false;\n });\n } else {\n this.state.metrics.userClick = false;\n this.formValues.UseServerMetrics = false;\n }\n }\n\n async configureAsync() {\n try {\n this.state.actionInProgress = true;\n const [storageClasses, ingressClasses] = this.transformFormValues();\n\n await this.removeIngressesAcrossNamespaces();\n\n this.assignFormValuesToEndpoint(this.endpoint, storageClasses, ingressClasses);\n await this.EndpointService.updateEndpoint(this.endpoint.Id, this.endpoint);\n\n const storagePromises = _.map(storageClasses, (storageClass) => {\n const oldStorageClass = _.find(this.oldStorageClasses, { Name: storageClass.Name });\n if (oldStorageClass) {\n return this.KubernetesStorageService.patch(this.state.endpointId, oldStorageClass, storageClass);\n }\n });\n await Promise.all(storagePromises);\n\n const endpoints = this.EndpointProvider.endpoints();\n const modifiedEndpoint = _.find(endpoints, (item) => item.Id === this.endpoint.Id);\n if (modifiedEndpoint) {\n this.assignFormValuesToEndpoint(modifiedEndpoint, storageClasses, ingressClasses);\n this.EndpointProvider.setEndpoints(endpoints);\n }\n this.Notifications.success('Configuration successfully applied');\n this.$state.go('portainer.home');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to apply configuration');\n } finally {\n this.state.actionInProgress = false;\n\n // Timezone is only for Analytics, not for API payload\n this.$analytics.eventTrack('time-window-create', {\n category: 'kubernetes',\n metadata: {\n 'Start-time': this.state.autoUpdateSettings.StartTime,\n 'End-time': this.state.autoUpdateSettings.EndTime,\n 'Time-zone': this.state.timeZone,\n },\n });\n }\n }\n\n configure() {\n const toDel = _.filter(this.formValues.IngressClasses, { NeedsDeletion: true });\n if (toDel.length) {\n this.ModalService.confirmUpdate(\n `Removing ingress controllers may cause applications to be unaccessible. All ingress configurations from affected applications will be removed.

    Do you wish to continue?`,\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.configureAsync);\n }\n }\n );\n } else {\n return this.$async(this.configureAsync);\n }\n }\n /* #endregion */\n\n restrictDefaultToggledOn() {\n return this.formValues.RestrictDefaultNamespace && !this.oldFormValues.RestrictDefaultNamespace;\n }\n\n onToggleAutoUpdate(value) {\n return this.$scope.$evalAsync(() => {\n this.state.autoUpdateSettings.Enabled = value;\n });\n }\n\n /* #region ON INIT */\n async onInit() {\n this.state = {\n actionInProgress: false,\n displayConfigureClassPanel: {},\n viewReady: false,\n endpointId: this.$state.params.id,\n duplicates: {\n ingressClasses: new KubernetesFormValidationReferences(),\n },\n metrics: {\n pending: false,\n isServerRunning: false,\n userClick: false,\n },\n timeZone: '',\n };\n\n this.formValues = {\n UseLoadBalancer: false,\n UseServerMetrics: false,\n EnableResourceOverCommit: true,\n ResourceOverCommitPercentage: 20,\n IngressClasses: [],\n RestrictDefaultNamespace: false,\n enableAutoUpdateTimeWindow: false,\n };\n\n try {\n [this.StorageClasses, this.endpoint] = await Promise.all([this.KubernetesStorageService.get(this.state.endpointId), this.EndpointService.endpoint(this.state.endpointId)]);\n\n this.state.autoUpdateSettings = this.endpoint.ChangeWindow;\n\n _.forEach(this.StorageClasses, (item) => {\n item.availableAccessModes = new KubernetesStorageClassAccessPolicies();\n const storage = _.find(this.endpoint.Kubernetes.Configuration.StorageClasses, (sc) => sc.Name === item.Name);\n if (storage) {\n item.selected = true;\n _.forEach(storage.AccessModes, (access) => {\n const mode = _.find(item.availableAccessModes, { Name: access });\n if (mode) {\n mode.selected = true;\n }\n });\n }\n });\n\n this.oldStorageClasses = angular.copy(this.StorageClasses);\n\n this.formValues.UseLoadBalancer = this.endpoint.Kubernetes.Configuration.UseLoadBalancer;\n this.formValues.UseServerMetrics = this.endpoint.Kubernetes.Configuration.UseServerMetrics;\n this.formValues.EnableResourceOverCommit = this.endpoint.Kubernetes.Configuration.EnableResourceOverCommit;\n this.formValues.ResourceOverCommitPercentage = this.endpoint.Kubernetes.Configuration.ResourceOverCommitPercentage;\n this.formValues.RestrictDefaultNamespace = this.endpoint.Kubernetes.Configuration.RestrictDefaultNamespace;\n this.formValues.IngressClasses = _.map(this.endpoint.Kubernetes.Configuration.IngressClasses, (ic) => {\n ic.IsNew = false;\n ic.NeedsDeletion = false;\n return ic;\n });\n\n this.oldFormValues = Object.assign({}, this.formValues);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environment configuration');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n /* #endregion */\n}\n\nexport default KubernetesConfigureController;\nangular.module('portainer.kubernetes').controller('KubernetesConfigureController', KubernetesConfigureController);\n","const autoNgTemplateLoaderTemplate1 = require('./dashboard.html');\n\nangular.module('portainer.kubernetes').component('kubernetesDashboardView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesDashboardController',\n controllerAs: 'ctrl',\n bindings: {\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport KubernetesConfigurationHelper from 'Kubernetes/helpers/configurationHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nclass KubernetesDashboardController {\n /* @ngInject */\n constructor(\n $async,\n Notifications,\n EndpointService,\n KubernetesResourcePoolService,\n KubernetesApplicationService,\n KubernetesConfigurationService,\n KubernetesVolumeService,\n Authentication,\n TagService\n ) {\n this.$async = $async;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesConfigurationService = KubernetesConfigurationService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.Authentication = Authentication;\n this.TagService = TagService;\n\n this.onInit = this.onInit.bind(this);\n this.getAll = this.getAll.bind(this);\n this.getAllAsync = this.getAllAsync.bind(this);\n }\n\n async getAllAsync() {\n const isAdmin = this.Authentication.isAdmin();\n\n try {\n const [pools, applications, configurations, volumes, tags] = await Promise.all([\n this.KubernetesResourcePoolService.get(),\n this.KubernetesApplicationService.get(),\n this.KubernetesConfigurationService.get(),\n this.KubernetesVolumeService.get(),\n this.TagService.tags(),\n ]);\n this.applications = applications;\n this.volumes = volumes;\n\n this.endpointTags = this.endpoint.TagIds.length\n ? _.join(\n _.filter(\n _.map(this.endpoint.TagIds, (id) => {\n const tag = tags.find((tag) => tag.Id === id);\n return tag ? tag.Name : '';\n }),\n Boolean\n ),\n ', '\n )\n : '-';\n\n if (!isAdmin) {\n this.pools = _.filter(pools, (pool) => !KubernetesNamespaceHelper.isSystemNamespace(pool.Namespace.Name));\n this.configurations = _.filter(configurations, (config) => !KubernetesConfigurationHelper.isSystemToken(config));\n } else {\n this.pools = pools;\n this.configurations = configurations;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load dashboard data');\n }\n }\n\n getAll() {\n return this.$async(this.getAllAsync);\n }\n\n async onInit() {\n this.state = {\n viewReady: false,\n };\n\n await this.getAll();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesDashboardController;\nangular.module('portainer.kubernetes').controller('KubernetesDashboardController', KubernetesDashboardController);\n","const autoNgTemplateLoaderTemplate1 = require('./deploy.html');\n\nangular.module('portainer.kubernetes').component('kubernetesDeployView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesDeployController',\n controllerAs: 'ctrl',\n bindings: {\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport uuidv4 from 'uuid/v4';\nimport _ from 'lodash-es';\nimport stripAnsi from 'strip-ansi';\nimport PortainerError from 'Portainer/error';\n\nimport { KubernetesDeployManifestTypes, KubernetesDeployBuildMethods, KubernetesDeployRequestMethods, RepositoryMechanismTypes } from 'Kubernetes/models/deploy';\nimport { buildOption } from '@/portainer/components/BoxSelector';\n\nclass KubernetesDeployController {\n /* @ngInject */\n constructor($async, $state, $window, Authentication, CustomTemplateService, ModalService, Notifications, KubernetesResourcePoolService, StackService, WebhookHelper) {\n this.$async = $async;\n this.$state = $state;\n this.$window = $window;\n this.Authentication = Authentication;\n this.CustomTemplateService = CustomTemplateService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.StackService = StackService;\n this.WebhookHelper = WebhookHelper;\n this.DeployMethod = 'manifest';\n\n this.deployOptions = [\n buildOption('method_kubernetes', 'fa fa-cubes', 'Kubernetes', 'Kubernetes manifest format', KubernetesDeployManifestTypes.KUBERNETES),\n buildOption('method_compose', 'fab fa-docker', 'Compose', 'docker-compose format', KubernetesDeployManifestTypes.COMPOSE),\n ];\n\n this.methodOptions = [\n buildOption('method_repo', 'fab fa-github', 'Git Repository', 'Use a git repository', KubernetesDeployBuildMethods.GIT),\n buildOption('method_editor', 'fa fa-edit', 'Web editor', 'Use our Web editor', KubernetesDeployBuildMethods.WEB_EDITOR),\n buildOption('method_url', 'fa fa-globe', 'URL', 'Specify a URL to a file', KubernetesDeployBuildMethods.URL),\n buildOption('method_template', 'fa fa-rocket', 'Custom Template', 'Use a custom template', KubernetesDeployBuildMethods.CUSTOM_TEMPLATE),\n ];\n\n this.state = {\n DeployType: KubernetesDeployManifestTypes.KUBERNETES,\n BuildMethod: KubernetesDeployBuildMethods.GIT,\n tabLogsDisabled: true,\n activeTab: 0,\n viewReady: false,\n isEditorDirty: false,\n templateId: null,\n };\n\n this.formValues = {\n StackName: '',\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n AdditionalFiles: [],\n ComposeFilePathInRepository: '',\n RepositoryAutomaticUpdates: false,\n RepositoryAutomaticUpdatesForce: false,\n RepositoryMechanism: RepositoryMechanismTypes.INTERVAL,\n RepositoryFetchInterval: '5m',\n RepositoryWebhookURL: WebhookHelper.returnStackWebhookUrl(uuidv4()),\n };\n\n this.ManifestDeployTypes = KubernetesDeployManifestTypes;\n this.BuildMethods = KubernetesDeployBuildMethods;\n\n this.onChangeTemplateId = this.onChangeTemplateId.bind(this);\n this.deployAsync = this.deployAsync.bind(this);\n this.onChangeFileContent = this.onChangeFileContent.bind(this);\n this.getNamespacesAsync = this.getNamespacesAsync.bind(this);\n this.onChangeFormValues = this.onChangeFormValues.bind(this);\n this.buildAnalyticsProperties = this.buildAnalyticsProperties.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n this.onChangeDeployType = this.onChangeDeployType.bind(this);\n }\n\n buildAnalyticsProperties() {\n const metadata = {\n type: buildLabel(this.state.BuildMethod),\n format: formatLabel(this.state.DeployType),\n role: roleLabel(this.Authentication.isAdmin(), this.Authentication.hasAuthorizations(['EndpointResourcesAccess'])),\n 'automatic-updates': automaticUpdatesLabel(this.formValues.RepositoryAutomaticUpdates, this.formValues.RepositoryMechanism),\n };\n\n if (this.state.BuildMethod === KubernetesDeployBuildMethods.GIT) {\n metadata.auth = this.formValues.RepositoryAuthentication;\n }\n\n return { metadata };\n\n function automaticUpdatesLabel(repositoryAutomaticUpdates, repositoryMechanism) {\n switch (repositoryAutomaticUpdates && repositoryMechanism) {\n case RepositoryMechanismTypes.INTERVAL:\n return 'polling';\n case RepositoryMechanismTypes.WEBHOOK:\n return 'webhook';\n default:\n return 'off';\n }\n }\n\n function roleLabel(isAdmin, isEndpointAdmin) {\n if (isAdmin) {\n return 'admin';\n }\n\n if (isEndpointAdmin) {\n return 'endpoint-admin';\n }\n\n return 'standard';\n }\n\n function buildLabel(buildMethod) {\n switch (buildMethod) {\n case KubernetesDeployBuildMethods.GIT:\n return 'git';\n case KubernetesDeployBuildMethods.WEB_EDITOR:\n return 'web-editor';\n }\n }\n\n function formatLabel(format) {\n switch (format) {\n case KubernetesDeployManifestTypes.COMPOSE:\n return 'compose';\n case KubernetesDeployManifestTypes.KUBERNETES:\n return 'manifest';\n }\n }\n }\n\n onChangeMethod(method) {\n this.state.BuildMethod = method;\n }\n\n onChangeDeployType(type) {\n this.state.DeployType = type;\n if (type == this.ManifestDeployTypes.COMPOSE) {\n this.DeployMethod = 'compose';\n } else {\n this.DeployMethod = 'manifest';\n }\n }\n\n disableDeploy() {\n const isGitFormInvalid =\n this.state.BuildMethod === KubernetesDeployBuildMethods.GIT &&\n (!this.formValues.RepositoryURL || !this.formValues.FilePathInRepository || (this.formValues.RepositoryAuthentication && !this.formValues.RepositoryPassword)) &&\n _.isEmpty(this.formValues.Namespace);\n const isWebEditorInvalid =\n this.state.BuildMethod === KubernetesDeployBuildMethods.WEB_EDITOR && _.isEmpty(this.formValues.EditorContent) && _.isEmpty(this.formValues.Namespace);\n const isURLFormInvalid = this.state.BuildMethod == KubernetesDeployBuildMethods.WEB_EDITOR.URL && _.isEmpty(this.formValues.ManifestURL);\n\n const isNamespaceInvalid = _.isEmpty(this.formValues.Namespace);\n\n return !this.formValues.StackName || isGitFormInvalid || isWebEditorInvalid || isURLFormInvalid || this.state.actionInProgress || isNamespaceInvalid;\n }\n\n onChangeFormValues(values) {\n this.formValues = {\n ...this.formValues,\n ...values,\n };\n }\n\n onChangeTemplateId(templateId) {\n return this.$async(async () => {\n if (this.state.templateId === templateId) {\n return;\n }\n\n this.state.templateId = templateId;\n\n try {\n const fileContent = await this.CustomTemplateService.customTemplateFile(templateId);\n this.onChangeFileContent(fileContent);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load template file');\n }\n });\n }\n\n onChangeFileContent(value) {\n this.formValues.EditorContent = value;\n this.state.isEditorDirty = true;\n }\n\n displayErrorLog(log) {\n this.errorLog = stripAnsi(log);\n this.state.tabLogsDisabled = false;\n this.state.activeTab = 1;\n }\n\n async deployAsync() {\n this.errorLog = '';\n this.state.actionInProgress = true;\n\n try {\n let method;\n let composeFormat = this.state.DeployType === this.ManifestDeployTypes.COMPOSE;\n\n switch (this.state.BuildMethod) {\n case this.BuildMethods.GIT:\n method = KubernetesDeployRequestMethods.REPOSITORY;\n break;\n case this.BuildMethods.WEB_EDITOR:\n method = KubernetesDeployRequestMethods.STRING;\n break;\n case KubernetesDeployBuildMethods.CUSTOM_TEMPLATE:\n method = KubernetesDeployRequestMethods.STRING;\n composeFormat = false;\n break;\n case this.BuildMethods.URL:\n method = KubernetesDeployRequestMethods.URL;\n break;\n default:\n throw new PortainerError('Unable to determine build method');\n }\n\n let deployNamespace = '';\n\n if (this.formValues.Namespace !== 'default') {\n deployNamespace = this.formValues.Namespace;\n }\n const payload = {\n ComposeFormat: composeFormat,\n Namespace: deployNamespace,\n StackName: this.formValues.StackName,\n };\n\n if (method === KubernetesDeployRequestMethods.REPOSITORY) {\n payload.RepositoryURL = this.formValues.RepositoryURL;\n payload.RepositoryReferenceName = this.formValues.RepositoryReferenceName;\n payload.RepositoryAuthentication = this.formValues.RepositoryAuthentication ? true : false;\n if (payload.RepositoryAuthentication) {\n payload.RepositoryUsername = this.formValues.RepositoryUsername;\n payload.RepositoryPassword = this.formValues.RepositoryPassword;\n }\n payload.ManifestFile = this.formValues.ComposeFilePathInRepository;\n payload.AdditionalFiles = this.formValues.AdditionalFiles;\n if (this.formValues.RepositoryAutomaticUpdates) {\n payload.AutoUpdate = {\n ForceUpdate: this.formValues.RepositoryAutomaticUpdatesForce,\n };\n if (this.formValues.RepositoryMechanism === RepositoryMechanismTypes.INTERVAL) {\n payload.AutoUpdate.Interval = this.formValues.RepositoryFetchInterval;\n } else if (this.formValues.RepositoryMechanism === RepositoryMechanismTypes.WEBHOOK) {\n payload.AutoUpdate.Webhook = this.formValues.RepositoryWebhookURL.split('/').reverse()[0];\n }\n }\n } else if (method === KubernetesDeployRequestMethods.STRING) {\n payload.StackFileContent = this.formValues.EditorContent;\n } else {\n payload.ManifestURL = this.formValues.ManifestURL;\n }\n\n await this.StackService.kubernetesDeploy(this.endpoint.Id, method, payload);\n\n this.Notifications.success('Manifest successfully deployed');\n this.state.isEditorDirty = false;\n this.$state.go('kubernetes.applications');\n } catch (err) {\n this.Notifications.error('Unable to deploy manifest', err, 'Unable to deploy resources');\n this.displayErrorLog(err.err.data.details);\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n deploy() {\n return this.$async(this.deployAsync);\n }\n\n async getNamespacesAsync() {\n try {\n const pools = await this.KubernetesResourcePoolService.get();\n const namespaces = _.map(pools, 'Namespace').sort((a, b) => {\n if (a.Name === 'default') {\n return -1;\n }\n if (b.Name === 'default') {\n return 1;\n }\n return 0;\n });\n this.namespaces = namespaces;\n if (this.namespaces.length > 0) {\n this.formValues.Namespace = this.namespaces[0].Name;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load namespaces data');\n }\n }\n\n getNamespaces() {\n return this.$async(this.getNamespacesAsync);\n }\n\n async uiCanExit() {\n if (this.formValues.EditorContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n await this.getNamespaces();\n\n if (this.$state.params.templateId) {\n const templateId = parseInt(this.$state.params.templateId, 10);\n if (templateId && !Number.isNaN(templateId)) {\n this.state.BuildMethod = KubernetesDeployBuildMethods.CUSTOM_TEMPLATE;\n this.onChangeTemplateId(templateId);\n }\n }\n\n this.state.viewReady = true;\n\n this.$window.onbeforeunload = () => {\n if (this.formValues.EditorContent && this.state.isEditorDirty) {\n return '';\n }\n };\n });\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n}\n\nexport default KubernetesDeployController;\nangular.module('portainer.kubernetes').controller('KubernetesDeployController', KubernetesDeployController);\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePoolAccess.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolAccessView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolAccessController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport { KubernetesPortainerConfigMapConfigName, KubernetesPortainerConfigMapNamespace, KubernetesPortainerConfigMapAccessKey } from 'Kubernetes/models/config-map/models';\nimport { UserAccessViewModel, TeamAccessViewModel } from 'Portainer/models/access';\nimport KubernetesConfigMapHelper from 'Kubernetes/helpers/configMapHelper';\nimport { RoleTypes } from 'Portainer/rbac/models/role';\n\nclass KubernetesResourcePoolAccessController {\n /* @ngInject */\n constructor($async, $state, Notifications, EndpointService, KubernetesResourcePoolService, KubernetesConfigMapService, GroupService, AccessService, RoleService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.KubernetesConfigMapService = KubernetesConfigMapService;\n\n this.GroupService = GroupService;\n this.AccessService = AccessService;\n this.RoleService = RoleService;\n\n this.onInit = this.onInit.bind(this);\n this.authorizeAccessAsync = this.authorizeAccessAsync.bind(this);\n this.unauthorizeAccessAsync = this.unauthorizeAccessAsync.bind(this);\n\n this.unauthorizeAccess = this.unauthorizeAccess.bind(this);\n }\n\n initAccessConfigMap(configMap) {\n configMap.Name = KubernetesPortainerConfigMapConfigName;\n configMap.Namespace = KubernetesPortainerConfigMapNamespace;\n configMap.Data[KubernetesPortainerConfigMapAccessKey] = {};\n return configMap;\n }\n\n /**\n * Init\n */\n async onInit() {\n const endpoint = this.endpoint;\n this.state = {\n actionInProgress: false,\n viewReady: false,\n };\n\n this.formValues = {\n multiselectOutput: [],\n };\n\n try {\n const name = this.$transition$.params().id;\n let [pool, configMap] = await Promise.all([\n this.KubernetesResourcePoolService.get(name),\n this.KubernetesConfigMapService.getAccess(KubernetesPortainerConfigMapNamespace, KubernetesPortainerConfigMapConfigName),\n ]);\n const group = await this.GroupService.group(endpoint.GroupId);\n const roles = await this.RoleService.roles();\n const endpointAccesses = await this.AccessService.accesses(endpoint, group, roles);\n this.pool = pool;\n if (configMap.Id === 0) {\n configMap = this.initAccessConfigMap(configMap);\n }\n configMap = KubernetesConfigMapHelper.parseJSONData(configMap);\n\n this.authorizedUsersAndTeams = [];\n this.accessConfigMap = configMap;\n const poolAccesses = configMap.Data[KubernetesPortainerConfigMapAccessKey][name];\n if (poolAccesses) {\n this.authorizedUsersAndTeams = _.filter(endpointAccesses.authorizedUsersAndTeams, (item) => {\n if (item instanceof UserAccessViewModel && poolAccesses.UserAccessPolicies) {\n return poolAccesses.UserAccessPolicies[item.Id] !== undefined;\n } else if (item instanceof TeamAccessViewModel && poolAccesses.TeamAccessPolicies) {\n return poolAccesses.TeamAccessPolicies[item.Id] !== undefined;\n }\n return false;\n });\n }\n this.availableUsersAndTeams = _.without(endpointAccesses.authorizedUsersAndTeams, ...this.authorizedUsersAndTeams);\n this.availableUsersAndTeams = _.filter(this.availableUsersAndTeams, (item) => [RoleTypes.STANDARD, RoleTypes.READ_ONLY].includes(item.Role.Id));\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespace information');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * Authorize access\n */\n async authorizeAccessAsync() {\n try {\n this.state.actionInProgress = true;\n const newAccesses = _.concat(this.authorizedUsersAndTeams, this.formValues.multiselectOutput);\n const accessConfigMap = KubernetesConfigMapHelper.modifiyNamespaceAccesses(angular.copy(this.accessConfigMap), this.pool.Namespace.Name, newAccesses);\n const usersToAdd = [],\n teamsToAdd = [];\n for (const item of this.formValues.multiselectOutput || []) {\n if (item.Type === 'user') {\n usersToAdd.push(item.Id);\n } else if (item.Type === 'team') {\n teamsToAdd.push(item.Id);\n }\n }\n await this.KubernetesConfigMapService.updateAccess(accessConfigMap);\n await this.EndpointService.updatePoolAccess(this.endpoint.Id, this.pool.Namespace.Name, usersToAdd, teamsToAdd, [], []);\n this.Notifications.success('Access successfully created');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create accesses');\n }\n }\n\n authorizeAccess() {\n return this.$async(this.authorizeAccessAsync);\n }\n\n /**\n *\n */\n async unauthorizeAccessAsync(selectedItems) {\n try {\n this.state.actionInProgress = true;\n const newAccesses = _.without(this.authorizedUsersAndTeams, ...selectedItems);\n const accessConfigMap = KubernetesConfigMapHelper.modifiyNamespaceAccesses(angular.copy(this.accessConfigMap), this.pool.Namespace.Name, newAccesses);\n const usersToRemove = [],\n teamsToRemove = [];\n for (const item of selectedItems || []) {\n if (item.Type === 'user') {\n usersToRemove.push(item.Id);\n } else if (item.Type === 'team') {\n teamsToRemove.push(item.Id);\n }\n }\n await this.KubernetesConfigMapService.updateAccess(accessConfigMap);\n await this.EndpointService.updatePoolAccess(this.endpoint.Id, this.pool.Namespace.Name, [], [], usersToRemove, teamsToRemove);\n this.Notifications.success('Access successfully removed');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove accesses');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n unauthorizeAccess(selectedItems) {\n return this.$async(this.unauthorizeAccessAsync, selectedItems);\n }\n}\n\nexport default KubernetesResourcePoolAccessController;\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolAccessController', KubernetesResourcePoolAccessController);\n","const autoNgTemplateLoaderTemplate1 = require('./storage-class-switch.html');\n\nimport angular from 'angular';\nimport controller from './storage-class-switch.controller.js';\n\nexport const storageClassSwitch = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n value: '<',\n onChange: '<',\n name: '<',\n },\n};\n\nangular.module('portainer.kubernetes').component('storageClassSwitch', storageClassSwitch);\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nclass StorageClassSwitchController {\n /* @ngInject */\n constructor() {\n this.featureId = FeatureId.K8S_RESOURCE_POOL_STORAGE_QUOTA;\n\n this.handleChange = this.handleChange.bind(this);\n }\n\n handleChange(value) {\n this.onChange(this.name, value);\n }\n}\n\nexport default StorageClassSwitchController;\n","const autoNgTemplateLoaderTemplate1 = require('./createResourcePool.html');\n\nimport angular from 'angular';\nimport KubernetesCreateResourcePoolController from './createResourcePoolController';\n\nangular.module('portainer.kubernetes').component('kubernetesCreateResourcePoolView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: KubernetesCreateResourcePoolController,\n bindings: {\n endpoint: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { KubernetesResourceQuotaDefaults } from 'Kubernetes/models/resource-quota/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport {\n KubernetesResourcePoolFormValues,\n KubernetesResourcePoolIngressClassAnnotationFormValue,\n KubernetesResourcePoolIngressClassHostFormValue,\n} from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\nimport KubernetesStorageClassConverter from 'Kubernetes/converters/storageClass';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nclass KubernetesCreateResourcePoolController {\n /* #region CONSTRUCTOR */\n /* @ngInject */\n constructor($async, $state, $scope, Notifications, KubernetesNodeService, KubernetesResourcePoolService, KubernetesIngressService, Authentication, EndpointService) {\n Object.assign(this, {\n $async,\n $state,\n $scope,\n Notifications,\n KubernetesNodeService,\n KubernetesResourcePoolService,\n KubernetesIngressService,\n Authentication,\n EndpointService,\n });\n\n this.IngressClassTypes = KubernetesIngressClassTypes;\n this.LBQuotaFeatureId = FeatureId.K8S_RESOURCE_POOL_LB_QUOTA;\n\n this.onToggleStorageQuota = this.onToggleStorageQuota.bind(this);\n this.onToggleLoadBalancerQuota = this.onToggleLoadBalancerQuota.bind(this);\n }\n /* #endregion */\n\n onToggleStorageQuota(storageClassName, enabled) {\n this.$scope.$evalAsync(() => {\n this.formValues.StorageClasses = this.formValues.StorageClasses.map((sClass) => (sClass.Name !== storageClassName ? sClass : { ...sClass, Selected: enabled }));\n });\n }\n\n onToggleLoadBalancerQuota(enabled) {\n this.$scope.$evalAsync(() => {\n this.formValues.UseLoadBalancersQuota = enabled;\n });\n }\n\n onChangeIngressHostname() {\n const state = this.state.duplicates.ingressHosts;\n const hosts = _.flatMap(this.formValues.IngressClasses, 'Hosts');\n const hostnames = _.compact(hosts.map((h) => h.Host));\n const hostnamesWithoutRemoved = _.filter(hostnames, (h) => !h.NeedsDeletion);\n const allHosts = _.flatMap(this.allIngresses, 'Hosts');\n const formDuplicates = KubernetesFormValidationHelper.getDuplicates(hostnamesWithoutRemoved);\n _.forEach(hostnames, (host, idx) => {\n if (host !== undefined && _.includes(allHosts, host)) {\n formDuplicates[idx] = host;\n }\n });\n const duplicates = {};\n let count = 0;\n _.forEach(this.formValues.IngressClasses, (ic) => {\n duplicates[ic.IngressClass.Name] = {};\n _.forEach(ic.Hosts, (hostFV, hostIdx) => {\n if (hostFV.Host === formDuplicates[count]) {\n duplicates[ic.IngressClass.Name][hostIdx] = hostFV.Host;\n }\n count++;\n });\n });\n state.refs = duplicates;\n state.hasRefs = false;\n _.forIn(duplicates, (value) => {\n if (Object.keys(value).length > 0) {\n state.hasRefs = true;\n }\n });\n }\n\n addHostname(ingressClass) {\n ingressClass.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n\n removeHostname(ingressClass, index) {\n ingressClass.Hosts.splice(index, 1);\n this.onChangeIngressHostname();\n }\n\n /* #region ANNOTATIONS MANAGEMENT */\n addAnnotation(ingressClass) {\n ingressClass.Annotations.push(new KubernetesResourcePoolIngressClassAnnotationFormValue());\n }\n\n removeAnnotation(ingressClass, index) {\n ingressClass.Annotations.splice(index, 1);\n }\n /* #endregion */\n\n isCreateButtonDisabled() {\n return (\n this.state.actionInProgress ||\n (this.formValues.HasQuota && !this.isQuotaValid()) ||\n this.state.isAlreadyExist ||\n this.state.hasPrefixKube ||\n this.state.duplicates.ingressHosts.hasRefs\n );\n }\n\n onChangeName() {\n this.state.isAlreadyExist = _.find(this.resourcePools, (resourcePool) => resourcePool.Namespace.Name === this.formValues.Name) !== undefined;\n this.state.hasPrefixKube = /^kube-/.test(this.formValues.Name);\n }\n\n isQuotaValid() {\n if (\n this.state.sliderMaxCpu < this.formValues.CpuLimit ||\n this.state.sliderMaxMemory < this.formValues.MemoryLimit ||\n (this.formValues.CpuLimit === 0 && this.formValues.MemoryLimit === 0)\n ) {\n return false;\n }\n return true;\n }\n\n checkDefaults() {\n if (this.formValues.CpuLimit < this.defaults.CpuLimit) {\n this.formValues.CpuLimit = this.defaults.CpuLimit;\n }\n if (this.formValues.MemoryLimit < KubernetesResourceReservationHelper.megaBytesValue(this.defaults.MemoryLimit)) {\n this.formValues.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(this.defaults.MemoryLimit);\n }\n }\n\n /* #region CREATE NAMESPACE */\n createResourcePool() {\n return this.$async(async () => {\n this.state.actionInProgress = true;\n try {\n this.checkDefaults();\n const owner = this.Authentication.getUserDetails().username;\n this.formValues.Owner = owner;\n await this.KubernetesResourcePoolService.create(this.formValues);\n this.Notifications.success('Namespace successfully created', this.formValues.Name);\n this.$state.go('kubernetes.resourcePools');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create namespace');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n /* #endregion */\n\n /* #region GET INGRESSES */\n getIngresses() {\n return this.$async(async () => {\n try {\n this.allIngresses = await this.KubernetesIngressService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve ingresses.');\n }\n });\n }\n /* #endregion */\n\n /* #region GET NAMESPACES */\n getResourcePools() {\n return this.$async(async () => {\n try {\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespaces');\n }\n });\n }\n /* #endregion */\n\n /* #region GET REGISTRIES */\n getRegistries() {\n return this.$async(async () => {\n try {\n this.registries = await this.EndpointService.registries(this.endpoint.Id);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registries');\n }\n });\n }\n /* #endregion */\n\n /* #region ON INIT */\n $onInit() {\n return this.$async(async () => {\n try {\n this.Authentication.redirectIfUnauthorized(['K8sResourcePoolDetailsW']);\n const endpoint = this.endpoint;\n this.defaults = KubernetesResourceQuotaDefaults;\n this.formValues = new KubernetesResourcePoolFormValues(this.defaults);\n this.formValues.EndpointId = this.endpoint.Id;\n this.formValues.HasQuota = true;\n this.formValues.StorageClasses = KubernetesStorageClassConverter.storageClassesToResourcePoolFormValues(this.endpoint.Kubernetes.Configuration.StorageClasses);\n\n this.state = {\n actionInProgress: false,\n sliderMaxMemory: 0,\n sliderMaxCpu: 0,\n availableSizeUnits: ['MB', 'GB', 'TB'],\n viewReady: false,\n isAlreadyExist: false,\n hasPrefixKube: false,\n canUseIngress: endpoint.Kubernetes.Configuration.IngressClasses.length,\n resourceOverCommitEnabled: endpoint.Kubernetes.Configuration.EnableResourceOverCommit,\n resourceOverCommitPercentage: endpoint.Kubernetes.Configuration.ResourceOverCommitPercentage,\n useLoadBalancer: endpoint.Kubernetes.Configuration.UseLoadBalancer,\n duplicates: {\n ingressHosts: new KubernetesFormValidationReferences(),\n },\n isAdmin: this.Authentication.isAdmin(),\n };\n\n const nodes = await this.KubernetesNodeService.get();\n await this.getResourcePools();\n\n const sliderMaxResources = KubernetesResourceReservationHelper.computeSliderMaxResources(\n nodes,\n this.resourcePools,\n '',\n this.state.resourceOverCommitEnabled,\n this.state.resourceOverCommitPercentage\n );\n this.state.sliderMaxCpu = sliderMaxResources.CPU;\n this.state.sliderMaxMemory = sliderMaxResources.Memory;\n if (this.state.resourceOverCommitEnabled) {\n this.formValues.HasQuota = true;\n }\n\n if (this.state.canUseIngress) {\n await this.getIngresses();\n const ingressClasses = endpoint.Kubernetes.Configuration.IngressClasses;\n this.formValues.IngressClasses = KubernetesIngressConverter.ingressClassesToFormValues(ingressClasses);\n }\n\n _.forEach(this.formValues.IngressClasses, (ic) => {\n if (ic.Hosts.length === 0) {\n ic.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n });\n\n await this.getRegistries();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n });\n }\n\n /* #endregion */\n}\n\nexport default KubernetesCreateResourcePoolController;\n","import _ from 'lodash-es';\n\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolIngressesDatatableController', function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n this.onSettingsRepeaterChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Paths.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolIngressesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolIngressesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePool.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolController',\n controllerAs: 'ctrl',\n bindings: {\n endpoint: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport { KubernetesResourceQuotaDefaults } from 'Kubernetes/models/resource-quota/models';\nimport KubernetesResourceReservationHelper from 'Kubernetes/helpers/resourceReservationHelper';\nimport { KubernetesResourceReservation } from 'Kubernetes/models/resource-reservation/models';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport {\n KubernetesResourcePoolFormValues,\n KubernetesResourcePoolIngressClassAnnotationFormValue,\n KubernetesResourcePoolIngressClassHostFormValue,\n} from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport { KubernetesFormValidationReferences } from 'Kubernetes/models/application/formValues';\nimport KubernetesFormValidationHelper from 'Kubernetes/helpers/formValidationHelper';\nimport { KubernetesIngressClassTypes } from 'Kubernetes/ingress/constants';\nimport KubernetesResourceQuotaConverter from 'Kubernetes/converters/resourceQuota';\nimport KubernetesStorageClassConverter from 'Kubernetes/converters/storageClass';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nclass KubernetesResourcePoolController {\n /* #region CONSTRUCTOR */\n /* @ngInject */\n constructor(\n $async,\n $state,\n $scope,\n Authentication,\n Notifications,\n LocalStorage,\n ModalService,\n EndpointService,\n KubernetesNodeService,\n KubernetesMetricsService,\n KubernetesResourceQuotaService,\n KubernetesResourcePoolService,\n KubernetesEventService,\n KubernetesPodService,\n KubernetesApplicationService,\n KubernetesIngressService,\n KubernetesVolumeService\n ) {\n Object.assign(this, {\n $async,\n $state,\n $scope,\n Authentication,\n Notifications,\n LocalStorage,\n ModalService,\n EndpointService,\n KubernetesNodeService,\n KubernetesMetricsService,\n KubernetesResourceQuotaService,\n KubernetesResourcePoolService,\n KubernetesEventService,\n KubernetesPodService,\n KubernetesApplicationService,\n KubernetesIngressService,\n KubernetesVolumeService,\n });\n\n this.IngressClassTypes = KubernetesIngressClassTypes;\n this.ResourceQuotaDefaults = KubernetesResourceQuotaDefaults;\n\n this.LBQuotaFeatureId = FeatureId.K8S_RESOURCE_POOL_LB_QUOTA;\n this.StorageQuotaFeatureId = FeatureId.K8S_RESOURCE_POOL_STORAGE_QUOTA;\n\n this.updateResourcePoolAsync = this.updateResourcePoolAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.onToggleLoadBalancersQuota = this.onToggleLoadBalancersQuota.bind(this);\n this.onToggleStorageQuota = this.onToggleStorageQuota.bind(this);\n }\n /* #endregion */\n\n onToggleLoadBalancersQuota(checked) {\n return this.$scope.$evalAsync(() => {\n this.formValues.UseLoadBalancersQuota = checked;\n });\n }\n\n onToggleStorageQuota(storageClassName, enabled) {\n this.$scope.$evalAsync(() => {\n this.formValues.StorageClasses = this.formValues.StorageClasses.map((sClass) => (sClass.Name !== storageClassName ? sClass : { ...sClass, Selected: enabled }));\n });\n }\n\n /* #region INGRESS MANAGEMENT */\n onChangeIngressHostname() {\n const state = this.state.duplicates.ingressHosts;\n\n const otherIngresses = _.without(this.allIngresses, ...this.ingresses);\n const allHosts = _.flatMap(otherIngresses, 'Hosts');\n\n const hosts = _.flatMap(this.formValues.IngressClasses, 'Hosts');\n const hostsWithoutRemoved = _.filter(hosts, { NeedsDeletion: false });\n const hostnames = _.map(hostsWithoutRemoved, 'Host');\n const formDuplicates = KubernetesFormValidationHelper.getDuplicates(hostnames);\n _.forEach(hostnames, (host, idx) => {\n if (host !== undefined && _.includes(allHosts, host)) {\n formDuplicates[idx] = host;\n }\n });\n const duplicatedHostnames = Object.values(formDuplicates);\n state.hasRefs = false;\n _.forEach(this.formValues.IngressClasses, (ic) => {\n _.forEach(ic.Hosts, (hostFV) => {\n if (_.includes(duplicatedHostnames, hostFV.Host) && hostFV.NeedsDeletion === false) {\n hostFV.Duplicate = true;\n state.hasRefs = true;\n } else {\n hostFV.Duplicate = false;\n }\n });\n });\n }\n\n addHostname(ingressClass) {\n ingressClass.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n\n removeHostname(ingressClass, index) {\n if (!ingressClass.Hosts[index].IsNew) {\n ingressClass.Hosts[index].NeedsDeletion = true;\n } else {\n ingressClass.Hosts.splice(index, 1);\n }\n this.onChangeIngressHostname();\n }\n\n restoreHostname(host) {\n if (!host.IsNew) {\n host.NeedsDeletion = false;\n }\n }\n /* #endregion*/\n\n /* #region ANNOTATIONS MANAGEMENT */\n addAnnotation(ingressClass) {\n ingressClass.Annotations.push(new KubernetesResourcePoolIngressClassAnnotationFormValue());\n }\n\n removeAnnotation(ingressClass, index) {\n ingressClass.Annotations.splice(index, 1);\n }\n /* #endregion */\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('resourcePool', index);\n }\n\n isUpdateButtonDisabled() {\n return (\n this.state.actionInProgress ||\n (this.formValues.HasQuota && !this.isQuotaValid()) ||\n this.state.duplicates.ingressHosts.hasRefs ||\n this.state.loadBalancersUsed > this.formValues.LoadBalancers\n );\n }\n\n isQuotaValid() {\n if (\n this.state.sliderMaxCpu < this.formValues.CpuLimit ||\n this.state.sliderMaxMemory < this.formValues.MemoryLimit ||\n (this.formValues.CpuLimit === 0 && this.formValues.MemoryLimit === 0)\n ) {\n return false;\n }\n return true;\n }\n\n checkDefaults() {\n if (this.formValues.CpuLimit < KubernetesResourceQuotaDefaults.CpuLimit) {\n this.formValues.CpuLimit = KubernetesResourceQuotaDefaults.CpuLimit;\n }\n if (this.formValues.MemoryLimit < KubernetesResourceReservationHelper.megaBytesValue(KubernetesResourceQuotaDefaults.MemoryLimit)) {\n this.formValues.MemoryLimit = KubernetesResourceReservationHelper.megaBytesValue(KubernetesResourceQuotaDefaults.MemoryLimit);\n }\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n hasResourceQuotaBeenReduced() {\n if (this.formValues.HasQuota && this.oldQuota) {\n const cpuLimit = this.formValues.CpuLimit;\n const memoryLimit = KubernetesResourceReservationHelper.bytesValue(this.formValues.MemoryLimit);\n if (cpuLimit < this.oldQuota.CpuLimit || memoryLimit < this.oldQuota.MemoryLimit) {\n return true;\n }\n }\n return false;\n }\n\n /* #region UPDATE NAMESPACE */\n async updateResourcePoolAsync(oldFormValues, newFormValues) {\n this.state.actionInProgress = true;\n try {\n this.checkDefaults();\n await this.KubernetesResourcePoolService.patch(oldFormValues, newFormValues);\n this.Notifications.success('Namespace successfully updated', this.pool.Namespace.Name);\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create namespace');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n updateResourcePool() {\n const ingressesToDelete = _.filter(this.formValues.IngressClasses, { WasSelected: true, Selected: false });\n const registriesToDelete = _.filter(this.registries, { WasChecked: true, Checked: false });\n const warnings = {\n quota: this.hasResourceQuotaBeenReduced(),\n ingress: ingressesToDelete.length !== 0,\n registries: registriesToDelete.length !== 0,\n };\n\n if (warnings.quota || warnings.ingress || warnings.registries) {\n const messages = {\n quota:\n 'Reducing the quota assigned to an \"in-use\" namespace may have unintended consequences, including preventing running applications from functioning correctly and potentially even blocking them from running at all.',\n ingress: 'Deactivating ingresses may cause applications to be unaccessible. All ingress configurations from affected applications will be removed.',\n registries:\n 'Some registries you removed might be used by one or more applications inside this environment. Removing the registries access could lead to a service interruption for these applications.',\n };\n const displayedMessage = `${warnings.quota ? messages.quota + '

    ' : ''}\n ${warnings.ingress ? messages.ingress + '

    ' : ''}\n ${warnings.registries ? messages.registries + '

    ' : ''}\n Do you wish to continue?`;\n this.ModalService.confirmUpdate(displayedMessage, (confirmed) => {\n if (confirmed) {\n return this.$async(this.updateResourcePoolAsync, this.savedFormValues, this.formValues);\n }\n });\n } else {\n return this.$async(this.updateResourcePoolAsync, this.savedFormValues, this.formValues);\n }\n }\n\n async confirmMarkUnmarkAsSystem() {\n const message = this.isSystem\n ? 'Unmarking this namespace as system will allow non administrator users to manage it and the resources in contains depending on the access control settings. Are you sure?'\n : 'Marking this namespace as a system namespace will prevent non administrator users from managing it and the resources it contains. Are you sure?';\n\n return new Promise((resolve) => {\n this.ModalService.confirmUpdate(message, resolve);\n });\n }\n\n markUnmarkAsSystem() {\n return this.$async(async () => {\n try {\n const namespaceName = this.$state.params.id;\n this.state.actionInProgress = true;\n\n const confirmed = await this.confirmMarkUnmarkAsSystem();\n if (!confirmed) {\n return;\n }\n await this.KubernetesResourcePoolService.toggleSystem(this.endpoint.Id, namespaceName, !this.isSystem);\n\n this.Notifications.success('Namespace successfully updated', namespaceName);\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create namespace');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n /* #endregion */\n\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n /* #region GET EVENTS */\n getEvents() {\n return this.$async(async () => {\n try {\n this.state.eventsLoading = true;\n this.events = await this.KubernetesEventService.get(this.pool.Namespace.Name);\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespace related events');\n } finally {\n this.state.eventsLoading = false;\n }\n });\n }\n /* #endregion */\n\n /* #region GET APPLICATIONS */\n getApplications() {\n return this.$async(async () => {\n try {\n this.state.applicationsLoading = true;\n this.applications = await this.KubernetesApplicationService.get(this.pool.Namespace.Name);\n this.applications = _.map(this.applications, (app) => {\n const resourceReservation = KubernetesResourceReservationHelper.computeResourceReservation(app.Pods);\n app.CPU = resourceReservation.CPU;\n app.Memory = resourceReservation.Memory;\n if (this.formValues.LoadBalancers > 0 && app.ServiceType === 'LoadBalancer') {\n this.state.loadBalancersUsed++;\n }\n return app;\n });\n if (this.formValues.LoadBalancers > 0) {\n this.state.loadBalancersUsage = (this.state.loadBalancersUsed / this.formValues.LoadBalancers) * 100;\n }\n\n if (this.state.useServerMetrics) {\n await this.getResourceUsage(this.pool.Namespace.Name);\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve applications.');\n } finally {\n this.state.applicationsLoading = false;\n }\n });\n }\n /* #endregion */\n\n /* #region GET INGRESSES */\n getIngresses() {\n return this.$async(async () => {\n this.state.ingressesLoading = true;\n try {\n const namespace = this.pool.Namespace.Name;\n this.allIngresses = await this.KubernetesIngressService.get(this.state.hasWriteAuthorization ? '' : namespace);\n this.ingresses = _.filter(this.allIngresses, { Namespace: namespace });\n _.forEach(this.ingresses, (ing) => {\n ing.Namespace = namespace;\n _.forEach(ing.Paths, (path) => {\n const application = _.find(this.applications, { ServiceName: path.ServiceName });\n path.ApplicationName = application && application.Name ? application.Name : '-';\n });\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve ingresses.');\n } finally {\n this.state.ingressesLoading = false;\n }\n });\n }\n /* #endregion */\n\n /* #region GET VOLUMES */\n getVolumes() {\n return this.$async(async () => {\n try {\n const namespace = this.pool.Namespace.Name;\n this.volumes = await this.KubernetesVolumeService.get(namespace);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve volumes.');\n }\n });\n }\n /* #endregion */\n\n /* #region GET REGISTRIES */\n getRegistries() {\n return this.$async(async () => {\n try {\n const namespace = this.$state.params.id;\n\n if (this.canEdit) {\n this.registries = await this.EndpointService.registries(this.endpoint.Id);\n this.registries.forEach((reg) => {\n if (reg.RegistryAccesses && reg.RegistryAccesses[this.endpoint.Id] && reg.RegistryAccesses[this.endpoint.Id].Namespaces.includes(namespace)) {\n reg.Checked = true;\n reg.WasChecked = true;\n this.formValues.Registries.push(reg);\n }\n });\n\n this.selectedRegistries = this.formValues.Registries.map((r) => r.Name).join(', ');\n\n return;\n }\n\n const registries = await this.EndpointService.registries(this.endpoint.Id, namespace);\n this.selectedRegistries = registries.map((r) => r.Name).join(', ');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registries');\n }\n });\n }\n /* #endregion */\n\n computeStorageQuotaUsage(sc) {\n if (!sc.Size) {\n sc.Usage = 100;\n return;\n }\n const used = filesizeParser(`${sc.Used.Size}${sc.Used.SizeUnit}`, { base: 10 });\n const available = filesizeParser(`${sc.Size}${sc.SizeUnit}`, { base: 10 });\n sc.Usage = Math.round((used / available) * 100);\n }\n\n async getResourceUsage(namespace) {\n try {\n const namespaceMetrics = await this.KubernetesMetricsService.getPods(namespace);\n // extract resource usage of all containers within each pod of the namespace\n const containerResourceUsageList = namespaceMetrics.items.flatMap((i) => i.containers.map((c) => c.usage));\n const namespaceResourceUsage = containerResourceUsageList.reduce((total, u) => {\n total.CPU += KubernetesResourceReservationHelper.parseCPU(u.cpu);\n total.Memory += KubernetesResourceReservationHelper.megaBytesValue(u.memory);\n return total;\n }, new KubernetesResourceReservation());\n this.state.resourceUsage = namespaceResourceUsage;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespace resource usage');\n }\n }\n\n /* #region ON INIT */\n $onInit() {\n return this.$async(async () => {\n try {\n this.canEdit = this.Authentication.hasAuthorizations(['K8sResourcePoolDetailsW']);\n\n this.state = {\n actionInProgress: false,\n sliderMaxMemory: 0,\n sliderMaxCpu: 0,\n cpuUsage: 0,\n memoryUsage: 0,\n resourceReservation: { CPU: 0, Memory: 0 },\n activeTab: 0,\n currentName: this.$state.$current.name,\n showEditorTab: false,\n eventsLoading: true,\n applicationsLoading: true,\n ingressesLoading: true,\n viewReady: false,\n eventWarningCount: 0,\n canUseIngress: this.endpoint.Kubernetes.Configuration.IngressClasses.length,\n resourceOverCommitEnabled: this.endpoint.Kubernetes.Configuration.EnableResourceOverCommit,\n resourceOverCommitPercentage: this.endpoint.Kubernetes.Configuration.ResourceOverCommitPercentage,\n useLoadBalancer: this.endpoint.Kubernetes.Configuration.UseLoadBalancer,\n useServerMetrics: this.endpoint.Kubernetes.Configuration.UseServerMetrics,\n hasWriteAuthorization: this.Authentication.hasAuthorizations(['K8sResourcePoolDetailsW']),\n loadBalancersUsed: 0,\n loadBalancersUsage: 0,\n availableSizeUnits: ['MB', 'GB', 'TB'],\n duplicates: {\n ingressHosts: new KubernetesFormValidationReferences(),\n },\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('resourcePool');\n\n const name = this.$state.params.id;\n\n const [nodes, pools, pool] = await Promise.all([this.KubernetesNodeService.get(), this.KubernetesResourcePoolService.get(), this.KubernetesResourcePoolService.get(name)]);\n\n this.pool = pool;\n this.formValues = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);\n this.formValues.Name = this.pool.Namespace.Name;\n this.formValues.EndpointId = this.endpoint.Id;\n this.formValues.IsSystem = this.pool.Namespace.IsSystem;\n\n const sliderMaxResources = KubernetesResourceReservationHelper.computeSliderMaxResources(\n nodes,\n pools,\n name,\n this.state.resourceOverCommitEnabled,\n this.state.resourceOverCommitPercentage\n );\n this.state.sliderMaxCpu = sliderMaxResources.CPU;\n this.state.sliderMaxMemory = sliderMaxResources.Memory;\n\n const quota = this.pool.Quota;\n if (quota) {\n this.oldQuota = angular.copy(quota);\n this.formValues = KubernetesResourceQuotaConverter.quotaToResourcePoolFormValues(quota);\n this.formValues.EndpointId = this.endpoint.Id;\n\n this.state.resourceReservation.CPU = quota.CpuLimitUsed;\n this.state.resourceReservation.Memory = KubernetesResourceReservationHelper.megaBytesValue(quota.MemoryLimitUsed);\n }\n this.isSystem = KubernetesNamespaceHelper.isSystemNamespace(this.pool.Namespace.Name);\n this.isDefaultNamespace = KubernetesNamespaceHelper.isDefaultNamespace(this.pool.Namespace.Name);\n this.isEditable = !this.isSystem && !this.isDefaultNamespace;\n\n if (this.isEditable && !this.state.resourceOverCommitEnabled) {\n this.formValues.HasQuota = true;\n }\n await this.getEvents();\n await this.getApplications();\n\n if (this.state.canUseIngress) {\n await this.getIngresses();\n const ingressClasses = this.endpoint.Kubernetes.Configuration.IngressClasses;\n this.formValues.IngressClasses = KubernetesIngressConverter.ingressClassesToFormValues(ingressClasses, this.ingresses);\n _.forEach(this.formValues.IngressClasses, (ic) => {\n if (ic.Hosts.length === 0) {\n ic.Hosts.push(new KubernetesResourcePoolIngressClassHostFormValue());\n }\n });\n }\n await this.getVolumes();\n const storageClasses = KubernetesStorageClassConverter.storageClassesToResourcePoolFormValues(this.endpoint.Kubernetes.Configuration.StorageClasses);\n _.remove(storageClasses, (sc) => _.find(this.formValues.StorageClasses, { Name: sc.Name }));\n this.formValues.StorageClasses = _.concat(this.formValues.StorageClasses, storageClasses);\n _.forEach(this.formValues.StorageClasses, (sc) => {\n const volumes = _.filter(this.volumes, ['ResourcePool.Namespace.Name', this.pool.Namespace.Name]);\n const used = _.reduce(\n volumes,\n (sum, vol) => {\n return sum + filesizeParser(vol.PersistentVolumeClaim.Storage, { base: 10 });\n },\n 0\n );\n sc.Used = KubernetesResourceQuotaHelper.formatBytes(used);\n this.computeStorageQuotaUsage(sc);\n });\n\n await this.getRegistries();\n\n this.savedFormValues = angular.copy(this.formValues);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n });\n }\n\n /* #endregion */\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('resourcePool', 0);\n }\n }\n}\n\nexport default KubernetesResourcePoolController;\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolController', KubernetesResourcePoolController);\n","const autoNgTemplateLoaderTemplate1 = require('./resourcePools.html');\n\nangular.module('portainer.kubernetes').component('kubernetesResourcePoolsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesResourcePoolsController',\n controllerAs: 'ctrl',\n});\n","import angular from 'angular';\n\nclass KubernetesResourcePoolsController {\n /* @ngInject */\n constructor($async, $state, Notifications, ModalService, KubernetesResourcePoolService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.ModalService = ModalService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n\n this.onInit = this.onInit.bind(this);\n this.getResourcePools = this.getResourcePools.bind(this);\n this.getResourcePoolsAsync = this.getResourcePoolsAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const pool of selectedItems) {\n try {\n await this.KubernetesResourcePoolService.delete(pool);\n this.Notifications.success('Namespace successfully removed', pool.Namespace.Name);\n const index = this.resourcePools.indexOf(pool);\n this.resourcePools.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove namespace');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload(this.$state.current);\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion(\n 'Do you want to remove the selected namespace(s)? All the resources associated to the selected namespace(s) will be removed too.',\n (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n }\n );\n }\n\n async getResourcePoolsAsync() {\n try {\n this.resourcePools = await this.KubernetesResourcePoolService.get();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespaces');\n }\n }\n\n getResourcePools() {\n return this.$async(this.getResourcePoolsAsync);\n }\n\n async onInit() {\n this.state = {\n viewReady: false,\n };\n\n await this.getResourcePools();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n}\n\nexport default KubernetesResourcePoolsController;\nangular.module('portainer.kubernetes').controller('KubernetesResourcePoolsController', KubernetesResourcePoolsController);\n","const autoNgTemplateLoaderTemplate1 = require('./logs.html');\n\nangular.module('portainer.kubernetes').component('kubernetesStackLogsView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesStackLogsController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport $allSettled from 'Portainer/services/allSettled';\n\nconst colors = ['red', 'orange', 'lime', 'green', 'darkgreen', 'cyan', 'turquoise', 'teal', 'deepskyblue', 'blue', 'darkblue', 'slateblue', 'magenta', 'darkviolet'];\n\nclass KubernetesStackLogsController {\n /* @ngInject */\n constructor($async, $state, $interval, Notifications, KubernetesApplicationService, KubernetesPodService, FileSaver, Blob) {\n this.$async = $async;\n this.$state = $state;\n this.$interval = $interval;\n this.Notifications = Notifications;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPodService = KubernetesPodService;\n this.Blob = Blob;\n this.FileSaver = FileSaver;\n\n this.onInit = this.onInit.bind(this);\n this.stopRepeater = this.stopRepeater.bind(this);\n this.generateLogsPromise = this.generateLogsPromise.bind(this);\n this.generateAppPromise = this.generateAppPromise.bind(this);\n this.getStackLogsAsync = this.getStackLogsAsync.bind(this);\n }\n\n updateAutoRefresh() {\n if (this.state.autoRefresh) {\n this.setUpdateRepeater();\n return;\n }\n\n this.stopRepeater();\n }\n\n stopRepeater() {\n if (angular.isDefined(this.repeater)) {\n this.$interval.cancel(this.repeater);\n this.repeater = null;\n }\n }\n\n setUpdateRepeater() {\n this.repeater = this.$interval(this.getStackLogsAsync, this.state.refreshRate);\n }\n\n async generateLogsPromise(pod, container) {\n const res = {\n Pod: pod,\n Logs: [],\n };\n res.Logs = await this.KubernetesPodService.logs(pod.Namespace, pod.Name, container.Name);\n return res;\n }\n\n async generateAppPromise(app) {\n const res = {\n Application: app,\n Pods: [],\n };\n\n const promises = _.flatMap(_.map(app.Pods, (pod) => _.map(pod.Containers, (container) => this.generateLogsPromise(pod, container))));\n const result = await $allSettled(promises);\n res.Pods = result.fulfilled;\n return res;\n }\n\n async getStackLogsAsync() {\n try {\n const applications = await this.KubernetesApplicationService.get(this.state.transition.namespace);\n const filteredApplications = _.filter(applications, (app) => app.StackName === this.state.transition.name);\n const logsPromises = _.map(filteredApplications, this.generateAppPromise);\n const data = await Promise.all(logsPromises);\n const logs = _.flatMap(data, (app, index) => {\n return _.flatMap(app.Pods, (pod) => {\n return _.map(pod.Logs, (line) => {\n const res = {\n Color: colors[index % colors.length],\n Line: line,\n AppName: pod.Pod.Name,\n };\n return res;\n });\n });\n });\n this.stackLogs = logs;\n } catch (err) {\n this.stopRepeater();\n this.Notifications.error('Failure', err, 'Unable to retrieve application logs');\n }\n }\n\n downloadLogs() {\n const data = new this.Blob([(this.dataLogs = _.reduce(this.stackLogs, (acc, log) => acc + '\\n' + log.AppName + ' ' + log.Line, ''))]);\n this.FileSaver.saveAs(data, this.state.transition.name + '_logs.txt');\n }\n\n async onInit() {\n this.state = {\n autoRefresh: false,\n refreshRate: 30000, // 30 seconds\n search: '',\n viewReady: false,\n transition: {\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n },\n };\n\n this.stackLogs = [];\n try {\n await this.getStackLogsAsync();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve stack logs');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n this.stopRepeater();\n }\n}\n\nexport default KubernetesStackLogsController;\nangular.module('portainer.kubernetes').controller('KubernetesStackLogsController', KubernetesStackLogsController);\n","import _ from 'lodash-es';\nimport { KubernetesResourceTypes, KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';\nimport { KubernetesApplicationFormValues } from 'Kubernetes/models/application/formValues';\nimport { KubernetesDeployment } from 'Kubernetes/models/deployment/models';\nimport { KubernetesStatefulSet } from 'Kubernetes/models/stateful-set/models';\nimport { KubernetesDaemonSet } from 'Kubernetes/models/daemon-set/models';\nimport { KubernetesService, KubernetesServiceTypes } from 'Kubernetes/models/service/models';\nimport {\n KubernetesApplication,\n KubernetesApplicationDeploymentTypes,\n KubernetesApplicationPublishingTypes,\n KubernetesApplicationTypes,\n} from 'Kubernetes/models/application/models';\nimport { KubernetesHorizontalPodAutoScalerHelper } from 'Kubernetes/horizontal-pod-auto-scaler/helper';\nimport { KubernetesHorizontalPodAutoScalerConverter } from 'Kubernetes/horizontal-pod-auto-scaler/converter';\nimport KubernetesApplicationConverter from 'Kubernetes/converters/application';\nimport KubernetesServiceConverter from 'Kubernetes/converters/service';\nimport { KubernetesIngressConverter } from 'Kubernetes/ingress/converter';\nimport KubernetesPersistentVolumeClaimConverter from 'Kubernetes/converters/persistentVolumeClaim';\n\nconst { CREATE, UPDATE, DELETE } = KubernetesResourceActions;\n\n/**\n * Get summary of Kubernetes resources to be created, updated or deleted\n * @param {KubernetesApplicationFormValues} formValues\n */\nexport default function (formValues, oldFormValues = {}) {\n if (oldFormValues instanceof KubernetesApplicationFormValues) {\n const resourceSummary = getUpdatedApplicationResources(oldFormValues, formValues);\n return resourceSummary;\n }\n const resourceSummary = getCreatedApplicationResources(formValues);\n return resourceSummary;\n}\n\n/**\n * Get summary of Kubernetes resources to be created\n * @param {KubernetesApplicationFormValues} formValues\n */\nfunction getCreatedApplicationResources(formValues) {\n const resources = [];\n\n let [app, headlessService, services, service, claims] = KubernetesApplicationConverter.applicationFormValuesToApplication(formValues);\n\n if (services) {\n services.forEach((service) => {\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: service.Name, type: service.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (formValues.OriginalIngresses.length !== 0) {\n const ingresses = KubernetesIngressConverter.newApplicationFormValuesToIngresses(formValues, service.Name, service.Ports);\n resources.push(...getIngressUpdateSummary(formValues.OriginalIngresses, ingresses));\n }\n });\n }\n\n if (service) {\n // Service\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: service.Name, type: service.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (formValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(formValues, service.Name);\n resources.push(...getIngressUpdateSummary(formValues.OriginalIngresses, ingresses));\n }\n }\n\n if (app instanceof KubernetesStatefulSet) {\n // Service\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: headlessService.Name, type: headlessService.Type || KubernetesServiceTypes.CLUSTER_IP });\n } else {\n // Persistent volume claims\n const persistentVolumeClaimResources = claims\n .filter((pvc) => !pvc.PreviousName && !pvc.Id)\n .map((pvc) => ({ action: CREATE, kind: KubernetesResourceTypes.PERSISTENT_VOLUME_CLAIM, name: pvc.Name }));\n resources.push(...persistentVolumeClaimResources);\n }\n\n // Horizontal pod autoscalers\n if (formValues.AutoScaler.IsUsed && formValues.DeploymentType !== KubernetesApplicationDeploymentTypes.GLOBAL) {\n const kind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(app);\n const autoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(formValues, kind);\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: autoScaler.Name });\n }\n\n // Deployment\n const appResourceType = getApplicationResourceType(app);\n if (appResourceType !== null) {\n resources.push({ action: CREATE, kind: appResourceType, name: app.Name });\n }\n\n return resources;\n}\n\n/**\n * Get summary of Kubernetes resources to be created, updated and/or deleted\n * @param {KubernetesApplicationFormValues} oldFormValues\n * @param {KubernetesApplicationFormValues} newFormValues\n */\nfunction getUpdatedApplicationResources(oldFormValues, newFormValues) {\n const resources = [];\n\n const [oldApp, oldHeadlessService, oldServices, oldService, oldClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(oldFormValues);\n const [newApp, newHeadlessService, newServices, newService, newClaims] = KubernetesApplicationConverter.applicationFormValuesToApplication(newFormValues);\n const oldAppResourceType = getApplicationResourceType(oldApp);\n const newAppResourceType = getApplicationResourceType(newApp);\n\n if (oldAppResourceType !== newAppResourceType) {\n // Deployment\n resources.push({ action: DELETE, kind: oldAppResourceType, name: oldApp.Name });\n if (oldService && oldServices) {\n // Service\n resources.push({ action: DELETE, kind: KubernetesResourceTypes.SERVICE, name: oldService.Name, type: oldService.Type || KubernetesServiceTypes.CLUSTER_IP });\n }\n // re-creation of resources\n const createdApplicationResourceSummary = getCreatedApplicationResources(newFormValues);\n resources.push(...createdApplicationResourceSummary);\n return resources;\n }\n\n if (newApp instanceof KubernetesStatefulSet) {\n const headlessServiceUpdateResourceSummary = getServiceUpdateResourceSummary(oldHeadlessService, newHeadlessService);\n if (headlessServiceUpdateResourceSummary) {\n resources.push(headlessServiceUpdateResourceSummary);\n }\n } else {\n // Persistent volume claims\n const claimSummaries = newClaims\n .map((pvc) => {\n if (!pvc.PreviousName && !pvc.Id) {\n return { action: CREATE, kind: KubernetesResourceTypes.PERSISTENT_VOLUME_CLAIM, name: pvc.Name };\n } else if (!pvc.Id) {\n const oldClaim = _.find(oldClaims, { Name: pvc.PreviousName });\n return getVolumeClaimUpdateResourceSummary(oldClaim, pvc);\n }\n })\n .filter((pvc) => pvc); // remove nulls\n resources.push(...claimSummaries);\n }\n\n // Deployment\n resources.push({ action: UPDATE, kind: oldAppResourceType, name: oldApp.Name });\n\n if (oldServices && newServices) {\n // Service\n const serviceUpdateResourceSummary = getServiceUpdateResourceSummary(oldServices, newServices);\n if (serviceUpdateResourceSummary !== null) {\n serviceUpdateResourceSummary.forEach((updateSummary) => {\n resources.push(updateSummary);\n });\n }\n\n if (newFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS || oldFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const oldIngresses = KubernetesIngressConverter.applicationFormValuesToIngresses(oldFormValues, oldService.Name);\n const newIngresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, newService.Name);\n resources.push(...getIngressUpdateSummary(oldIngresses, newIngresses));\n }\n } else if (!oldService && newService) {\n // Service\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: newService.Name, type: newService.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (newFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, newService.Name);\n resources.push(...getIngressUpdateSummary(newFormValues.OriginalIngresses, ingresses));\n }\n } else if (oldService && !newService) {\n // Service\n resources.push({ action: DELETE, kind: KubernetesResourceTypes.SERVICE, name: oldService.Name, type: oldService.Type || KubernetesServiceTypes.CLUSTER_IP });\n if (oldFormValues.PublishingType === KubernetesApplicationPublishingTypes.INGRESS) {\n // Ingress\n const ingresses = KubernetesIngressConverter.applicationFormValuesToIngresses(newFormValues, oldService.Name);\n resources.push(...getIngressUpdateSummary(oldFormValues.OriginalIngresses, ingresses));\n }\n }\n\n const newKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(newApp);\n const newAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(newFormValues, newKind);\n if (!oldFormValues.AutoScaler.IsUsed) {\n if (newFormValues.AutoScaler.IsUsed) {\n // Horizontal pod autoscalers\n resources.push({ action: CREATE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: newAutoScaler.Name });\n }\n } else {\n // Horizontal pod autoscalers\n const oldKind = KubernetesHorizontalPodAutoScalerHelper.getApplicationTypeString(oldApp);\n const oldAutoScaler = KubernetesHorizontalPodAutoScalerConverter.applicationFormValuesToModel(oldFormValues, oldKind);\n if (newFormValues.AutoScaler.IsUsed) {\n const hpaUpdateSummary = getHorizontalPodAutoScalerUpdateResourceSummary(oldAutoScaler, newAutoScaler);\n if (hpaUpdateSummary) {\n resources.push(hpaUpdateSummary);\n }\n } else {\n resources.push({ action: DELETE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: oldAutoScaler.Name });\n }\n }\n\n return resources;\n}\n\nfunction getApplicationResourceType(app) {\n if (app instanceof KubernetesDeployment || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DEPLOYMENT)) {\n return KubernetesResourceTypes.DEPLOYMENT;\n } else if (app instanceof KubernetesDaemonSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.DAEMONSET)) {\n return KubernetesResourceTypes.DAEMONSET;\n } else if (app instanceof KubernetesStatefulSet || (app instanceof KubernetesApplication && app.ApplicationType === KubernetesApplicationTypes.STATEFULSET)) {\n return KubernetesResourceTypes.STATEFULSET;\n }\n return null;\n}\n\nfunction getIngressUpdateSummary(oldIngresses, newIngresses) {\n const ingressesSummaries = newIngresses\n .map((newIng) => {\n const oldIng = _.find(oldIngresses, { Name: newIng.Name });\n return getIngressUpdateResourceSummary(oldIng, newIng);\n })\n .filter((s) => s); // remove nulls\n return ingressesSummaries;\n}\n\n// getIngressUpdateResourceSummary replicates KubernetesIngressService.patch\nfunction getIngressUpdateResourceSummary(oldIngress, newIngress) {\n const payload = KubernetesIngressConverter.patchPayload(oldIngress, newIngress);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.INGRESS, name: oldIngress.Name };\n }\n return null;\n}\n\n// getVolumeClaimUpdateResourceSummary replicates KubernetesPersistentVolumeClaimService.patch\nfunction getVolumeClaimUpdateResourceSummary(oldPVC, newPVC) {\n const payload = KubernetesPersistentVolumeClaimConverter.patchPayload(oldPVC, newPVC);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.PERSISTENT_VOLUME_CLAIM, name: oldPVC.Name };\n }\n return null;\n}\n\n// getServiceUpdateResourceSummary replicates KubernetesServiceService.patch\nfunction getServiceUpdateResourceSummary(oldServices, newServices) {\n let summary = [];\n // skip update summary when service is headless service\n if (!oldServices.Headless) {\n newServices.forEach((newService) => {\n const oldServiceMatched = _.find(oldServices, { Name: newService.Name });\n if (oldServiceMatched) {\n const payload = KubernetesServiceConverter.patchPayload(oldServiceMatched, newService);\n if (payload.length) {\n const serviceUpdate = {\n action: UPDATE,\n kind: KubernetesResourceTypes.SERVICE,\n name: oldServiceMatched.Name,\n type: oldServiceMatched.Type || KubernetesServiceTypes.CLUSTER_IP,\n };\n summary.push(serviceUpdate);\n }\n } else {\n const emptyService = new KubernetesService();\n const payload = KubernetesServiceConverter.patchPayload(emptyService, newService);\n if (payload.length) {\n const serviceCreate = { action: CREATE, kind: KubernetesResourceTypes.SERVICE, name: newService.Name, type: newService.Type || KubernetesServiceTypes.CLUSTER_IP };\n summary.push(serviceCreate);\n }\n }\n });\n\n oldServices.forEach((oldService) => {\n const newServiceMatched = _.find(newServices, { Name: oldService.Name });\n if (!newServiceMatched) {\n const serviceDelete = { action: DELETE, kind: KubernetesResourceTypes.SERVICE, name: oldService.Name, type: oldService.Type || KubernetesServiceTypes.CLUSTER_IP };\n summary.push(serviceDelete);\n }\n });\n }\n if (summary.length !== 0) {\n return summary;\n }\n return null;\n}\n\n// getHorizontalPodAutoScalerUpdateResourceSummary replicates KubernetesHorizontalPodAutoScalerService.patch\nfunction getHorizontalPodAutoScalerUpdateResourceSummary(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler) {\n const payload = KubernetesHorizontalPodAutoScalerConverter.patchPayload(oldHorizontalPodAutoScaler, newHorizontalPodAutoScaler);\n if (payload.length) {\n return { action: UPDATE, kind: KubernetesResourceTypes.HORIZONTAL_POD_AUTOSCALER, name: oldHorizontalPodAutoScaler.Name };\n }\n return null;\n}\n","import { KubernetesResourceTypes, KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';\nimport { KubernetesConfigurationTypes } from 'Kubernetes/models/configuration/models';\n\nconst { CREATE, UPDATE } = KubernetesResourceActions;\n\nexport default function (formValues) {\n const action = formValues.Id ? UPDATE : CREATE;\n if (formValues.Type === KubernetesConfigurationTypes.CONFIGMAP) {\n return [{ action, kind: KubernetesResourceTypes.CONFIGMAP, name: formValues.Name }];\n } else if (formValues.Type === KubernetesConfigurationTypes.SECRET) {\n return [{ action, kind: KubernetesResourceTypes.SECRET, name: formValues.Name }];\n }\n}\n","import _ from 'lodash-es';\nimport * as JsonPatch from 'fast-json-patch';\nimport { KubernetesResourceActions } from 'Kubernetes/models/resource-types/models';\n\nfunction findCreateResources(newResources, oldResources) {\n return _.differenceBy(newResources, oldResources, 'Name');\n}\n\nfunction findDeleteResources(newResources, oldResources) {\n return _.differenceBy(oldResources, newResources, 'Name');\n}\n\nfunction findUpdateResources(newResources, oldResources) {\n const updateResources = _.intersectionWith(newResources, oldResources, (newResource, oldResource) => {\n // find out resources with same name but content changed\n if (newResource.Name != oldResource.Name) {\n return false;\n }\n return !isEqual(newResource, oldResource);\n });\n\n return updateResources;\n}\n\nfunction isEqual(newResource, oldResource) {\n let patches = JsonPatch.compare(newResource, oldResource);\n patches = _.filter(patches, (change) => {\n return !_.includes(change.path, '$$hashKey') && !_.includes(change.path, 'Duplicate');\n });\n\n return !patches.length;\n}\n\nfunction doGetResourcesSummary(newResources, oldResources, kind, action, actionFilter) {\n const filteredResources = actionFilter(newResources, oldResources);\n const summary = filteredResources.map((resource) => ({ name: resource.Name, action, kind }));\n\n return summary;\n}\n\nexport function getResourcesSummary(newResources, oldResources, kind) {\n if (!Array.isArray(newResources)) {\n newResources = newResources ? [newResources] : [];\n oldResources = oldResources ? [oldResources] : [];\n }\n\n const summary = [\n ...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.CREATE, findCreateResources),\n ...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.UPDATE, findUpdateResources),\n ...doGetResourcesSummary(newResources, oldResources, kind, KubernetesResourceActions.DELETE, findDeleteResources),\n ];\n\n return summary;\n}\n","import KubernetesResourcePoolConverter from 'Kubernetes/converters/resourcePool';\nimport { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesResourceQuotaDefaults } from 'Kubernetes/models/resource-quota/models';\nimport { KubernetesResourceTypes } from 'Kubernetes/models/resource-types/models';\nimport { getResourcesSummary } from 'Kubernetes/views/summary/resources/helpers';\n\nexport default function (newFormValues, oldFormValues) {\n const [newNamespace, newQuota, newIngresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(newFormValues);\n\n if (!(oldFormValues instanceof KubernetesResourcePoolFormValues)) {\n oldFormValues = new KubernetesResourcePoolFormValues(KubernetesResourceQuotaDefaults);\n }\n\n const [oldNamespace, oldQuota, oldIngresses] = KubernetesResourcePoolConverter.formValuesToResourcePool(oldFormValues);\n\n const resources = [\n ...getResourcesSummary(newNamespace, oldNamespace, KubernetesResourceTypes.NAMESPACE),\n ...getResourcesSummary(newQuota, oldQuota, KubernetesResourceTypes.RESOURCEQUOTA),\n ...getResourcesSummary(newIngresses, oldIngresses, KubernetesResourceTypes.INGRESS),\n ];\n\n return resources;\n}\n","const autoNgTemplateLoaderTemplate1 = require('./summary.html');\n\nangular.module('portainer.kubernetes').component('kubernetesSummaryView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesSummaryController',\n controllerAs: '$ctrl',\n bindings: {\n formValues: '<',\n oldFormValues: '<',\n },\n});\n","import angular from 'angular';\nimport { KubernetesConfigurationFormValues } from 'Kubernetes/models/configuration/formvalues';\nimport { KubernetesResourcePoolFormValues } from 'Kubernetes/models/resource-pool/formValues';\nimport { KubernetesApplicationFormValues } from 'Kubernetes/models/application/formValues';\nimport { KubernetesResourceActions, KubernetesResourceTypes } from 'Kubernetes/models/resource-types/models';\nimport getApplicationResources from './resources/applicationResources';\nimport getNamespaceResources from './resources/namespaceResources';\nimport getConfigurationResources from './resources/configurationResources';\n\nclass KubernetesSummaryController {\n /* @ngInject */\n constructor($scope, LocalStorage, KubernetesResourcePoolService) {\n this.LocalStorage = LocalStorage;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n\n this.toggleSummary = this.toggleSummary.bind(this);\n this.generateResourceSummaryList = this.generateResourceSummaryList.bind(this);\n\n // Deep-watch changes on formValues property\n $scope.$watch(\n '$ctrl.formValues',\n (formValues) => {\n this.state.resources = this.generateResourceSummaryList(angular.copy(formValues));\n },\n true\n );\n }\n\n getArticle(resourceType, resourceAction) {\n let article = 'a';\n if (resourceAction === KubernetesResourceActions.CREATE) {\n if (resourceType === KubernetesResourceTypes.INGRESS) {\n article = 'an';\n }\n } else {\n article = 'the';\n }\n\n return article;\n }\n\n /**\n * toggleSummary toggles the summary panel state and persists it to browser localstorage\n */\n toggleSummary() {\n this.state.expandedTemplate = !this.state.expandedTemplate;\n this.LocalStorage.storeKubernetesSummaryToggle(this.state.expandedTemplate);\n }\n\n /**\n * generateResourceSummaryList maps formValues to custom object\n * @param {object} formValues\n * @returns {object} => { action: \"string\", kind: \"string\", name: \"string\" }\n */\n generateResourceSummaryList(formValues) {\n const oldFormValues = this.oldFormValues;\n\n if (formValues instanceof KubernetesConfigurationFormValues) {\n // Configuration\n return getConfigurationResources(formValues);\n } else if (formValues instanceof KubernetesResourcePoolFormValues) {\n // Namespaces\n return getNamespaceResources(formValues, oldFormValues);\n } else if (formValues instanceof KubernetesApplicationFormValues) {\n // Applications\n\n // extract cpu and memory requests & limits for pod\n this.state.limits = { cpu: formValues.CpuLimit, memory: formValues.MemoryLimit };\n\n return getApplicationResources(formValues, oldFormValues);\n }\n\n return [];\n }\n\n $onInit() {\n const toggleValue = this.LocalStorage.getKubernetesSummaryToggle();\n const expanded = typeof toggleValue === 'boolean' ? toggleValue : true;\n\n this.state = {\n expandedTemplate: expanded,\n resources: [],\n limits: { cpu: null, memory: null },\n };\n }\n}\n\nexport default KubernetesSummaryController;\nangular.module('portainer.kubernetes').controller('KubernetesSummaryController', KubernetesSummaryController);\n","import _ from 'lodash-es';\n\nangular.module('portainer.kubernetes').controller('KubernetesVolumesStoragesDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state = Object.assign(this.state, {\n expandedItems: [],\n expandAll: false,\n });\n\n this.onSettingsRepeaterChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.expandItem = function (item, expanded) {\n if (!this.itemCanExpand(item)) {\n return;\n }\n\n item.Expanded = expanded;\n if (!expanded) {\n item.Highlighted = false;\n }\n };\n\n this.itemCanExpand = function (item) {\n return item.Volumes.length > 0;\n };\n\n this.hasExpandableItems = function () {\n return _.filter(this.state.filteredDataSet, (item) => this.itemCanExpand(item)).length;\n };\n\n this.expandAll = function () {\n this.state.expandAll = !this.state.expandAll;\n _.forEach(this.state.filteredDataSet, (item) => {\n if (this.itemCanExpand(item)) {\n this.expandItem(item, this.state.expandAll);\n }\n });\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumesStoragesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumesStoragesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n refreshCallback: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./volume.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumeView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumeController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport KubernetesEventHelper from 'Kubernetes/helpers/eventHelper';\nimport { KubernetesStorageClassAccessPolicies } from 'Kubernetes/models/storage-class/models';\nimport KubernetesNamespaceHelper from 'Kubernetes/helpers/namespaceHelper';\n\nclass KubernetesVolumeController {\n /* @ngInject */\n constructor(\n $async,\n $state,\n Notifications,\n LocalStorage,\n KubernetesVolumeService,\n KubernetesEventService,\n KubernetesApplicationService,\n KubernetesPersistentVolumeClaimService,\n KubernetesResourcePoolService,\n ModalService,\n KubernetesPodService\n ) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesEventService = KubernetesEventService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n this.KubernetesPersistentVolumeClaimService = KubernetesPersistentVolumeClaimService;\n this.KubernetesResourcePoolService = KubernetesResourcePoolService;\n this.ModalService = ModalService;\n this.KubernetesPodService = KubernetesPodService;\n\n this.onInit = this.onInit.bind(this);\n this.getVolume = this.getVolume.bind(this);\n this.getVolumeAsync = this.getVolumeAsync.bind(this);\n this.updateVolumeAsync = this.updateVolumeAsync.bind(this);\n this.getEvents = this.getEvents.bind(this);\n this.getEventsAsync = this.getEventsAsync.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('volume', index);\n }\n\n showEditor() {\n this.state.showEditorTab = true;\n this.selectTab(2);\n }\n\n isExternalVolume() {\n return KubernetesVolumeHelper.isExternalVolume(this.volume);\n }\n\n isSystemNamespace() {\n return KubernetesNamespaceHelper.isSystemNamespace(this.volume.ResourcePool.Namespace.Name);\n }\n\n isUsed() {\n return KubernetesVolumeHelper.isUsed(this.volume);\n }\n\n onChangeSize() {\n if (this.state.volumeSize) {\n const size = filesizeParser(this.state.volumeSize + this.state.volumeSizeUnit, { base: 10 });\n if (this.state.oldVolumeSize > size) {\n this.state.errors.volumeSize = true;\n this.state.errors.quotaExceeded = false;\n } else if (this.state.quota.hasQuota && size - this.state.oldVolumeSize > this.state.quota.availableSize) {\n this.state.errors.volumeSize = false;\n this.state.errors.quotaExceeded = true;\n } else {\n this.state.errors.volumeSize = false;\n this.state.errors.quotaExceeded = false;\n }\n } else {\n this.state.errors.volumeSize = false;\n this.state.errors.quotaExceeded = false;\n }\n }\n\n sizeIsValid() {\n return (\n !this.state.errors.quotaExceeded &&\n !this.state.errors.volumeSize &&\n this.state.volumeSize &&\n this.state.oldVolumeSize !== filesizeParser(this.state.volumeSize + this.state.volumeSizeUnit, { base: 10 })\n );\n }\n\n /**\n * VOLUME\n */\n\n async updateVolumeAsync(redeploy) {\n try {\n this.volume.PersistentVolumeClaim.Storage = this.state.volumeSize + this.state.volumeSizeUnit.charAt(0);\n await this.KubernetesPersistentVolumeClaimService.patch(this.oldVolume.PersistentVolumeClaim, this.volume.PersistentVolumeClaim);\n this.Notifications.success('Volume successfully updated');\n\n if (redeploy) {\n const promises = _.flatten(\n _.map(this.volume.Applications, (app) => {\n return _.map(app.Pods, (item) => this.KubernetesPodService.delete(item));\n })\n );\n await Promise.all(promises);\n this.Notifications.success('Applications successfully redeployed');\n }\n\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update volume.');\n }\n }\n\n updateVolume() {\n if (KubernetesVolumeHelper.isUsed(this.volume)) {\n this.ModalService.confirmRedeploy(\n 'One or multiple applications are currently using this volume.
    For the change to be taken into account these applications will need to be redeployed. Do you want us to reschedule it now?',\n (redeploy) => {\n return this.$async(this.updateVolumeAsync, redeploy);\n }\n );\n } else {\n return this.$async(this.updateVolumeAsync, false);\n }\n }\n\n async getVolumeAsync() {\n try {\n const [volume, applications, resourcePool, volumes] = await Promise.all([\n this.KubernetesVolumeService.get(this.state.namespace, this.state.name),\n this.KubernetesApplicationService.get(this.state.namespace),\n this.KubernetesResourcePoolService.get(this.state.namespace),\n this.KubernetesVolumeService.get(this.state.namespace),\n ]);\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, applications);\n\n const quota = resourcePool.Quota;\n this.state.quota = {\n availableSize: 0,\n hasQuota: false,\n maxSize: 0,\n };\n if (quota && volume.PersistentVolumeClaim.StorageClass) {\n const storageRequest = _.find(quota.StorageRequests, { Name: volume.PersistentVolumeClaim.StorageClass.Name });\n if (storageRequest) {\n this.state.quota.hasQuota = true;\n const sameStorageVolumes = _.filter(volumes, ['PersistentVolumeClaim.StorageClass.Name', volume.PersistentVolumeClaim.StorageClass.Name]);\n const used = _.reduce(sameStorageVolumes, (sum, v) => sum + filesizeParser(v.PersistentVolumeClaim.Storage, { base: 10 }), 0);\n const quotaLimitSize = filesizeParser(`${storageRequest.Size}${storageRequest.SizeUnit}`, { base: 10 });\n this.state.quota.availableSize = quotaLimitSize - used;\n }\n }\n\n this.volume = volume;\n this.oldVolume = angular.copy(volume);\n this.state.volumeSize = parseInt(volume.PersistentVolumeClaim.Storage.slice(0, -2), 10);\n this.state.volumeSizeUnit = volume.PersistentVolumeClaim.Storage.slice(-2);\n this.state.oldVolumeSize = filesizeParser(volume.PersistentVolumeClaim.Storage, { base: 10 });\n this.state.quota.maxSize = this.state.quota.availableSize + this.state.oldVolumeSize;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve volume');\n }\n }\n\n getVolume() {\n return this.$async(this.getVolumeAsync);\n }\n\n /**\n * EVENTS\n */\n hasEventWarnings() {\n return this.state.eventWarningCount;\n }\n\n async getEventsAsync() {\n try {\n this.state.eventsLoading = true;\n const events = await this.KubernetesEventService.get(this.state.namespace);\n this.events = _.filter(events, (event) => event.Involved.uid === this.volume.PersistentVolumeClaim.Id);\n this.state.eventWarningCount = KubernetesEventHelper.warningCount(this.events);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve application related events');\n } finally {\n this.state.eventsLoading = false;\n }\n }\n\n getEvents() {\n return this.$async(this.getEventsAsync);\n }\n\n /**\n * ON INIT\n */\n async onInit() {\n this.state = {\n activeTab: 0,\n currentName: this.$state.$current.name,\n showEditorTab: false,\n eventsLoading: true,\n viewReady: false,\n namespace: this.$transition$.params().namespace,\n name: this.$transition$.params().name,\n eventWarningCount: 0,\n availableSizeUnits: ['MB', 'GB', 'TB'],\n increaseSize: false,\n volumeSize: 0,\n volumeSizeUnit: 'GB',\n volumeSharedAccessPolicy: '',\n volumeSharedAccessPolicyTooltip: '',\n errors: {\n volumeSize: false,\n quotaExceeded: false,\n },\n };\n\n this.state.activeTab = this.LocalStorage.getActiveTab('volume');\n\n try {\n await this.getVolume();\n await this.getEvents();\n if (this.volume.PersistentVolumeClaim.StorageClass !== undefined) {\n this.state.volumeSharedAccessPolicy = this.volume.PersistentVolumeClaim.StorageClass.AccessModes[this.volume.PersistentVolumeClaim.StorageClass.AccessModes.length - 1];\n let policies = KubernetesStorageClassAccessPolicies();\n\n policies.forEach((policy) => {\n if (policy.Name == this.state.volumeSharedAccessPolicy) {\n this.state.volumeSharedAccessPolicyTooltip = policy.Description;\n }\n });\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to load view data');\n } finally {\n this.state.viewReady = true;\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('volume', 0);\n }\n }\n}\n\nexport default KubernetesVolumeController;\nangular.module('portainer.kubernetes').controller('KubernetesVolumeController', KubernetesVolumeController);\n","const autoNgTemplateLoaderTemplate1 = require('./volumes.html');\n\nangular.module('portainer.kubernetes').component('kubernetesVolumesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'KubernetesVolumesController',\n controllerAs: 'ctrl',\n bindings: {\n $transition$: '<',\n endpoint: '<',\n },\n});\n","import _ from 'lodash-es';\nimport filesizeParser from 'filesize-parser';\nimport angular from 'angular';\nimport KubernetesVolumeHelper from 'Kubernetes/helpers/volumeHelper';\nimport KubernetesResourceQuotaHelper from 'Kubernetes/helpers/resourceQuotaHelper';\n\nfunction buildStorages(storages, volumes) {\n _.forEach(storages, (s) => {\n const filteredVolumes = _.filter(volumes, ['PersistentVolumeClaim.StorageClass.Name', s.Name, 'PersistentVolumeClaim.StorageClass.Provisioner', s.Provisioner]);\n s.Volumes = filteredVolumes;\n s.Size = computeSize(filteredVolumes);\n });\n return storages;\n}\n\nfunction computeSize(volumes) {\n const size = _.sumBy(volumes, (v) => filesizeParser(v.PersistentVolumeClaim.Storage, { base: 10 }));\n const format = KubernetesResourceQuotaHelper.formatBytes(size);\n return `${format.Size}${format.SizeUnit}`;\n}\n\nclass KubernetesVolumesController {\n /* @ngInject */\n constructor($async, $state, Notifications, ModalService, LocalStorage, Authentication, KubernetesStorageService, KubernetesVolumeService, KubernetesApplicationService) {\n this.$async = $async;\n this.$state = $state;\n this.Notifications = Notifications;\n this.ModalService = ModalService;\n this.LocalStorage = LocalStorage;\n this.Authentication = Authentication;\n this.KubernetesStorageService = KubernetesStorageService;\n this.KubernetesVolumeService = KubernetesVolumeService;\n this.KubernetesApplicationService = KubernetesApplicationService;\n\n this.onInit = this.onInit.bind(this);\n this.getVolumes = this.getVolumes.bind(this);\n this.getVolumesAsync = this.getVolumesAsync.bind(this);\n this.removeAction = this.removeAction.bind(this);\n this.removeActionAsync = this.removeActionAsync.bind(this);\n }\n\n selectTab(index) {\n this.LocalStorage.storeActiveTab('volumes', index);\n }\n\n async removeActionAsync(selectedItems) {\n let actionCount = selectedItems.length;\n for (const volume of selectedItems) {\n try {\n await this.KubernetesVolumeService.delete(volume);\n this.Notifications.success('Volume successfully removed', volume.PersistentVolumeClaim.Name);\n const index = this.volumes.indexOf(volume);\n this.volumes.splice(index, 1);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to remove volume');\n } finally {\n --actionCount;\n if (actionCount === 0) {\n this.$state.reload(this.$state.current);\n }\n }\n }\n }\n\n removeAction(selectedItems) {\n this.ModalService.confirmDeletion('Do you want to remove the selected volume(s)?', (confirmed) => {\n if (confirmed) {\n return this.$async(this.removeActionAsync, selectedItems);\n }\n });\n }\n\n async getVolumesAsync() {\n try {\n const [volumes, applications, storages] = await Promise.all([\n this.KubernetesVolumeService.get(),\n this.KubernetesApplicationService.get(),\n this.KubernetesStorageService.get(this.endpoint.Id),\n ]);\n\n this.volumes = _.map(volumes, (volume) => {\n volume.Applications = KubernetesVolumeHelper.getUsingApplications(volume, applications);\n return volume;\n });\n const tempStorages = buildStorages(storages, volumes);\n const activatedStoragesClasses = this.endpoint.Kubernetes.Configuration.StorageClasses;\n this.storages = _.filter(tempStorages, (item) => {\n const storage = _.find(activatedStoragesClasses, (sc) => sc.Name === item.Name);\n if (storage || this.Authentication.hasAuthorizations(['K8sStorageClassDisabledR'])) {\n return item;\n }\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve namespaces');\n }\n }\n\n getVolumes() {\n return this.$async(this.getVolumesAsync);\n }\n\n async onInit() {\n this.state = {\n viewReady: false,\n currentName: this.$state.$current.name,\n activeTab: this.LocalStorage.getActiveTab('volumes'),\n };\n\n await this.getVolumes();\n\n this.state.viewReady = true;\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n $onDestroy() {\n if (this.state.currentName !== this.$state.$current.name) {\n this.LocalStorage.storeActiveTab('volumes', 0);\n }\n }\n}\n\nexport default KubernetesVolumesController;\nangular.module('portainer.kubernetes').controller('KubernetesVolumesController', KubernetesVolumesController);\n","const _paq = (window._paq = window._paq || []);\n/* tracker methods like \"setCustomDimension\" should be called before \"trackPageView\" */\n_paq.push(['enableLinkTracking']);\n\nvar u = 'https://portainer-ce.matomo.cloud/';\n_paq.push(['setTrackerUrl', u + 'matomo.php']);\n_paq.push(['setSiteId', '2']);\nvar d = document,\n g = d.createElement('script'),\n s = d.getElementsByTagName('script')[0];\ng.type = 'text/javascript';\ng.async = true;\ng.src = '//cdn.matomo.cloud/portainer-ce.matomo.cloud/matomo.js';\ns.parentNode.insertBefore(g, s);\n","import _ from 'lodash-es';\nimport { IAttributes, IDirective, IScope } from 'angular';\n\nimport { FeatureState } from '@/portainer/feature-flags/enums';\n\nimport { selectShow } from './feature-flags.service';\n\nconst BASENAME = 'limitedFeature';\n\n/* @ngInject */\nexport function limitedFeatureDirective(): IDirective {\n return {\n restrict: 'A',\n link,\n };\n\n function link(scope: IScope, elem: JQLite, attrs: IAttributes) {\n const { limitedFeatureDir: featureId } = attrs;\n\n if (!featureId) {\n return;\n }\n\n const limitedFeatureAttrs = Object.keys(attrs)\n .filter((attr) => attr.startsWith(BASENAME) && attr !== `${BASENAME}Dir`)\n .map((attr) => [_.kebabCase(attr.replace(BASENAME, '')), attrs[attr]]);\n\n const state = selectShow(featureId);\n\n if (state === FeatureState.HIDDEN) {\n elem.hide();\n return;\n }\n\n if (state === FeatureState.VISIBLE) {\n return;\n }\n\n limitedFeatureAttrs.forEach(([attr, value = attr]) => {\n const currentValue = elem.attr(attr) || '';\n elem.attr(attr, `${currentValue} ${value}`.trim());\n });\n }\n}\n","import angular from 'angular';\n\nimport { limitedFeatureDirective } from './limited-feature.directive';\nimport './feature-flags.css';\n\nexport default angular\n .module('portainer.feature-flags', [])\n .directive('limitedFeatureDir', limitedFeatureDirective).name;\n","import angular from 'angular';\n\nimport { UserService } from './userService';\n\nexport const apiServicesModule = angular\n .module('portainer.app.services.api', [])\n .factory('UserService', UserService).name;\n","import sanitize from 'sanitize-html';\nimport bootbox from 'bootbox';\n\nimport {\n cancelRegistryRepositoryAction,\n confirmAccessControlUpdate,\n confirmAsync,\n confirmDeassociate,\n confirmDeletion,\n confirmDetachment,\n confirmDeletionAsync,\n confirmEndpointSnapshot,\n confirmChangePassword,\n confirmImageExport,\n confirmImageForceRemoval,\n confirmRedeploy,\n confirmUpdate,\n confirmWebEditorDiscard,\n confirm,\n} from './confirm';\nimport {\n confirmContainerDeletion,\n confirmContainerRecreation,\n confirmServiceForceUpdate,\n confirmStackUpdate,\n confirmKubeconfigSelection,\n selectRegistry,\n} from './prompt';\n\nexport function enlargeImage(imageUrl: string) {\n const imageSanitized = sanitize(imageUrl);\n\n bootbox.dialog({\n message: ``,\n className: 'image-zoom-modal',\n onEscape: true,\n });\n}\n\n/* @ngInject */\nexport function ModalServiceAngular() {\n return {\n enlargeImage,\n confirmWebEditorDiscard,\n confirmAsync,\n confirm,\n confirmAccessControlUpdate,\n confirmImageForceRemoval,\n cancelRegistryRepositoryAction,\n confirmDeletion,\n confirmDetachment,\n confirmDeassociate,\n confirmUpdate,\n confirmRedeploy,\n confirmDeletionAsync,\n confirmContainerRecreation,\n confirmEndpointSnapshot,\n confirmChangePassword,\n confirmImageExport,\n confirmServiceForceUpdate,\n confirmStackUpdate,\n selectRegistry,\n confirmContainerDeletion,\n confirmKubeconfigSelection,\n };\n}\n","import angular from 'angular';\n\nimport { apiServicesModule } from './api';\nimport { Notifications } from './notifications';\nimport { ModalServiceAngular } from './modal.service';\nimport { HttpRequestHelperAngular } from './http-request.helper';\n\nexport default angular\n .module('portainer.app.services', [apiServicesModule])\n .factory('Notifications', Notifications)\n .factory('ModalService', ModalServiceAngular)\n .factory('HttpRequestHelper', HttpRequestHelperAngular).name;\n","import { r2a } from '@/react-tools/react2angular';\n\nimport { CreateTeamForm } from './CreateTeamForm';\n\nexport { CreateTeamForm };\n\nexport const CreateTeamFormAngular = r2a(CreateTeamForm, [\n 'users',\n 'actionInProgress',\n 'onSubmit',\n 'teams',\n]);\n","import { Formik, Field, Form } from 'formik';\n\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { Widget, WidgetBody, WidgetTitle } from '@/portainer/components/widget';\nimport { UserViewModel } from '@/portainer/models/user';\nimport { TeamViewModel } from '@/portainer/models/team';\nimport { Input } from '@/portainer/components/form-components/Input';\nimport { UsersSelector } from '@/portainer/components/UsersSelector';\nimport { LoadingButton } from '@/portainer/components/Button/LoadingButton';\n\nimport { validationSchema } from './CreateTeamForm.validation';\n\nexport interface FormValues {\n name: string;\n leaders: number[];\n}\n\ninterface Props {\n users: UserViewModel[];\n teams: TeamViewModel[];\n onSubmit(values: FormValues): void;\n}\n\nexport function CreateTeamForm({ users, teams, onSubmit }: Props) {\n const initialValues = {\n name: '',\n leaders: [],\n };\n\n return (\n
    \n
    \n \n \n \n validationSchema(teams)}\n onSubmit={onSubmit}\n validateOnMount\n >\n {({\n values,\n errors,\n handleSubmit,\n setFieldValue,\n isSubmitting,\n isValid,\n }) => (\n \n \n \n \n\n {users.length > 0 && (\n \n \n setFieldValue('leaders', leaders)\n }\n users={users}\n dataCy=\"team-teamLeaderSelect\"\n inputId=\"users-input\"\n placeholder=\"Select one or more team leaders\"\n />\n \n )}\n\n
    \n
    \n \n \n Create team\n \n
    \n
    \n \n )}\n \n
    \n
    \n
    \n
    \n );\n}\n","import { object, string, array, number } from 'yup';\n\nimport { TeamViewModel } from '@/portainer/models/team';\n\nexport function validationSchema(teams: TeamViewModel[]) {\n return object().shape({\n name: string()\n .required('This field is required.')\n .test(\n 'is-unique',\n 'This team already exists.',\n (name) => !!name && teams.every((team) => team.Name !== name)\n ),\n leaders: array().of(number()),\n });\n}\n","import angular from 'angular';\n\nimport { CreateTeamFormAngular } from './CreateTeamForm';\n\nexport default angular\n .module('portainer.app.teams', [])\n\n .component('createTeamForm', CreateTeamFormAngular).name;\n","const autoNgTemplateLoaderTemplate1 = require('./views/sidebar/sidebar.html');\nconst autoNgTemplateLoaderTemplate2 = require('./views/account/account.html');\nconst autoNgTemplateLoaderTemplate3 = require('./views/auth/auth.html');\nconst autoNgTemplateLoaderTemplate4 = require('./views/internal-auth/internal-auth.html');\nconst autoNgTemplateLoaderTemplate5 = require('./views/logout/logout.html');\nconst autoNgTemplateLoaderTemplate6 = require('./views/endpoints/endpoints.html');\nconst autoNgTemplateLoaderTemplate7 = require('./views/endpoints/edit/endpoint.html');\nconst autoNgTemplateLoaderTemplate8 = require('../kubernetes/views/configure/configure.html');\nconst autoNgTemplateLoaderTemplate9 = require('./views/endpoints/create/createendpoint.html');\nconst autoNgTemplateLoaderTemplate10 = require('./views/endpoints/create/createendpoint.html');\nconst autoNgTemplateLoaderTemplate11 = require('./views/devices/import/importDevice.html');\nconst autoNgTemplateLoaderTemplate12 = require('./views/endpoints/access/endpointAccess.html');\nconst autoNgTemplateLoaderTemplate13 = require('./views/endpoints/kvm/endpointKVM.html');\nconst autoNgTemplateLoaderTemplate14 = require('./views/groups/groups.html');\nconst autoNgTemplateLoaderTemplate15 = require('./views/groups/edit/group.html');\nconst autoNgTemplateLoaderTemplate16 = require('./views/groups/create/creategroup.html');\nconst autoNgTemplateLoaderTemplate17 = require('./views/groups/access/groupAccess.html');\nconst autoNgTemplateLoaderTemplate18 = require('./views/home/home.html');\nconst autoNgTemplateLoaderTemplate19 = require('./views/init/admin/initAdmin.html');\nconst autoNgTemplateLoaderTemplate20 = require('./views/init/endpoint/initEndpoint.html');\nconst autoNgTemplateLoaderTemplate21 = require('./views/registries/registries.html');\nconst autoNgTemplateLoaderTemplate22 = require('./views/registries/edit/registry.html');\nconst autoNgTemplateLoaderTemplate23 = require('./views/settings/settings.html');\nconst autoNgTemplateLoaderTemplate24 = require('./views/settings/authentication/settingsAuthentication.html');\nconst autoNgTemplateLoaderTemplate25 = require('./views/tags/tags.html');\nconst autoNgTemplateLoaderTemplate26 = require('./views/users/users.html');\nconst autoNgTemplateLoaderTemplate27 = require('./views/users/edit/user.html');\nconst autoNgTemplateLoaderTemplate28 = require('./views/teams/teams.html');\nconst autoNgTemplateLoaderTemplate29 = require('./views/teams/edit/team.html');\n\nimport _ from 'lodash-es';\n\nimport './rbac';\nimport './registry-management';\nimport licenseManagementModule from './license-management';\nimport settingsModule from './settings';\nimport userActivityModule from './user-activity';\nimport componentsModule from './components';\nimport featureFlagModule from './feature-flags';\nimport servicesModule from './services';\nimport teamsModule from './teams';\n\nasync function initAuthentication(authManager, Authentication, $rootScope, $state) {\n authManager.checkAuthOnRefresh();\n // The unauthenticated event is broadcasted by the jwtInterceptor when\n // hitting a 401. We're using this instead of the usual combination of\n // authManager.redirectWhenUnauthenticated() + unauthenticatedRedirector\n // to have more controls on which URL should trigger the unauthenticated state.\n $rootScope.$on('unauthenticated', function (event, data) {\n if (!_.includes(data.config.url, '/v2/') && !_.includes(data.config.url, '/api/v4/') && isTransitionRequiresAuthentication($state.transition)) {\n $state.go('portainer.logout', { error: 'Your session has expired' });\n }\n });\n\n return await Authentication.init();\n}\n\nangular\n .module('portainer.app', [\n 'portainer.oauth',\n 'portainer.rbac',\n 'portainer.registrymanagement',\n licenseManagementModule,\n componentsModule,\n settingsModule,\n userActivityModule,\n featureFlagModule,\n teamsModule,\n 'portainer.shared.datatable',\n servicesModule,\n ])\n .config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var root = {\n name: 'root',\n abstract: true,\n onEnter: /* @ngInject */ function onEnter($async, StateManager, Authentication, Notifications, authManager, $rootScope, $state) {\n return $async(async () => {\n const appState = StateManager.getState();\n if (!appState.loading) {\n return;\n }\n try {\n const loggedIn = await initAuthentication(authManager, Authentication, $rootScope, $state);\n await StateManager.initialize();\n if (!loggedIn && isTransitionRequiresAuthentication($state.transition)) {\n $state.go('portainer.logout');\n return Promise.reject('Unauthenticated');\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n throw err;\n }\n });\n },\n views: {\n 'sidebar@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'SidebarController',\n },\n },\n };\n\n var endpointRoot = {\n name: 'endpoint',\n url: '/:endpointId',\n parent: 'root',\n abstract: true,\n resolve: {\n endpoint: /* @ngInject */ function endpoint($async, $state, $transition$, EndpointService, Notifications) {\n return $async(async () => {\n try {\n const endpointId = +$transition$.params().endpointId;\n\n const endpoint = await EndpointService.endpoint(endpointId);\n if ((endpoint.Type === 4 || endpoint.Type === 7) && !endpoint.EdgeID) {\n $state.go('portainer.endpoints.endpoint', { id: endpoint.Id });\n return;\n }\n\n return endpoint;\n } catch (e) {\n Notifications.error('Failed loading environment', e);\n $state.go('portainer.home', {}, { reload: true });\n return;\n }\n });\n },\n },\n };\n\n var portainer = {\n name: 'portainer',\n parent: 'root',\n abstract: true,\n };\n\n var account = {\n name: 'portainer.account',\n url: '/account',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate2,\n controller: 'AccountController',\n },\n },\n };\n\n const tokenCreation = {\n name: 'portainer.account.new-access-token',\n url: '/tokens/new',\n views: {\n 'content@': {\n component: 'createUserAccessToken',\n },\n },\n };\n\n var authentication = {\n name: 'portainer.auth',\n url: '/auth',\n params: {\n reload: false,\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate3,\n controller: 'AuthenticationController',\n controllerAs: 'ctrl',\n },\n 'sidebar@': {},\n },\n };\n var internalAuthentication = {\n name: 'portainer.internal-auth',\n url: '/internal-auth',\n params: {\n reload: false,\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate4,\n controller: 'InternalAuthenticationController',\n controllerAs: 'ctrl',\n },\n 'sidebar@': {},\n },\n };\n const logout = {\n name: 'portainer.logout',\n url: '/logout',\n params: {\n error: '',\n performApiLogout: false,\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate5,\n controller: 'LogoutController',\n controllerAs: 'ctrl',\n },\n 'sidebar@': {},\n },\n };\n\n var endpoints = {\n name: 'portainer.endpoints',\n url: '/endpoints',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate6,\n controller: 'EndpointsController',\n },\n },\n };\n\n var endpoint = {\n name: 'portainer.endpoints.endpoint',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate7,\n controller: 'EndpointController',\n },\n },\n };\n\n var k8sendpoint = {\n name: 'portainer.k8sendpoint',\n url: '/:id',\n };\n\n const endpointKubernetesConfiguration = {\n name: 'portainer.k8sendpoint.kubernetesConfig',\n url: '/configure',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate8,\n controller: 'KubernetesConfigureController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var endpointCreation = {\n name: 'portainer.endpoints.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate9,\n controller: 'CreateEndpointController',\n },\n },\n };\n\n var edgeDeviceCreation = {\n name: 'portainer.endpoints.newEdgeDevice',\n url: '/newEdgeDevice',\n params: {\n isEdgeDevice: true,\n },\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate10,\n controller: 'CreateEndpointController',\n },\n },\n };\n\n var deviceImport = {\n name: 'portainer.endpoints.importDevice',\n url: '/device',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate11,\n controller: 'ImportDeviceController',\n },\n },\n };\n\n var addFDOProfile = {\n name: 'portainer.endpoints.profile',\n url: '/profile',\n views: {\n 'content@': {\n component: 'addProfileView',\n },\n },\n };\n\n var editFDOProfile = {\n name: 'portainer.endpoints.profile.edit',\n url: '/:id',\n views: {\n 'content@': {\n component: 'editProfileView',\n },\n },\n };\n\n var endpointAccess = {\n name: 'portainer.endpoints.endpoint.access',\n url: '/access',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate12,\n controller: 'EndpointAccessController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var endpointKVM = {\n name: 'portainer.endpoints.endpoint.kvm',\n url: '/kvm?deviceId&deviceName',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate13,\n controller: 'EndpointKVMController',\n },\n },\n };\n\n var groups = {\n name: 'portainer.groups',\n url: '/groups',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate14,\n controller: 'GroupsController',\n },\n },\n };\n\n var group = {\n name: 'portainer.groups.group',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate15,\n controller: 'GroupController',\n },\n },\n };\n\n var groupCreation = {\n name: 'portainer.groups.new',\n url: '/new',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate16,\n controller: 'CreateGroupController',\n },\n },\n };\n\n var groupAccess = {\n name: 'portainer.groups.group.access',\n url: '/access',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate17,\n controller: 'GroupAccessController',\n },\n },\n };\n\n var home = {\n name: 'portainer.home',\n url: '/home',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate18,\n controller: 'HomeController',\n },\n },\n };\n\n var init = {\n name: 'portainer.init',\n abstract: true,\n url: '/init',\n views: {\n 'sidebar@': {},\n },\n };\n\n var initAdmin = {\n name: 'portainer.init.admin',\n url: '/admin',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate19,\n controller: 'InitAdminController',\n },\n },\n };\n\n const wizard = {\n name: 'portainer.wizard',\n url: '/wizard',\n views: {\n 'content@': {\n component: 'wizardView',\n },\n },\n };\n\n const wizardEndpoints = {\n name: 'portainer.wizard.endpoints',\n url: '/endpoints',\n views: {\n 'content@': {\n component: 'wizardEndpoints',\n },\n },\n };\n\n const initLicense = {\n name: 'portainer.init.license',\n url: '/license',\n views: {\n 'content@': {\n component: 'initLicenseView',\n },\n },\n };\n\n var initEndpoint = {\n name: 'portainer.init.endpoint',\n url: '/endpoint',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate20,\n controller: 'InitEndpointController',\n controllerAs: 'ctrl',\n },\n },\n };\n\n var registries = {\n name: 'portainer.registries',\n url: '/registries',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate21,\n controller: 'RegistriesController',\n },\n },\n };\n\n var registry = {\n name: 'portainer.registries.registry',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate22,\n controller: 'RegistryController',\n },\n },\n };\n\n const registryCreation = {\n name: 'portainer.registries.new',\n url: '/new',\n views: {\n 'content@': {\n component: 'createRegistry',\n },\n },\n };\n\n var settings = {\n name: 'portainer.settings',\n url: '/settings',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate23,\n controller: 'SettingsController',\n },\n },\n };\n\n var settingsAuthentication = {\n name: 'portainer.settings.authentication',\n url: '/auth',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate24,\n controller: 'SettingsAuthenticationController',\n },\n },\n };\n\n var settingsEdgeCompute = {\n name: 'portainer.settings.edgeCompute',\n url: '/edge',\n views: {\n 'content@': {\n component: 'settingsEdgeComputeView',\n },\n },\n };\n\n var tags = {\n name: 'portainer.tags',\n url: '/tags',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate25,\n controller: 'TagsController',\n },\n },\n };\n\n var users = {\n name: 'portainer.users',\n url: '/users',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate26,\n controller: 'UsersController',\n },\n },\n };\n\n var user = {\n name: 'portainer.users.user',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate27,\n controller: 'UserController',\n },\n },\n };\n\n var teams = {\n name: 'portainer.teams',\n url: '/teams',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate28,\n controller: 'TeamsController',\n },\n },\n };\n\n var team = {\n name: 'portainer.teams.team',\n url: '/:id',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate29,\n controller: 'TeamController',\n },\n },\n };\n\n $stateRegistryProvider.register(root);\n $stateRegistryProvider.register(endpointRoot);\n $stateRegistryProvider.register(portainer);\n $stateRegistryProvider.register(account);\n $stateRegistryProvider.register(tokenCreation);\n $stateRegistryProvider.register(authentication);\n $stateRegistryProvider.register(internalAuthentication);\n $stateRegistryProvider.register(logout);\n $stateRegistryProvider.register(endpoints);\n $stateRegistryProvider.register(endpoint);\n $stateRegistryProvider.register(k8sendpoint);\n $stateRegistryProvider.register(endpointAccess);\n $stateRegistryProvider.register(endpointKVM);\n $stateRegistryProvider.register(edgeDeviceCreation);\n $stateRegistryProvider.register(endpointCreation);\n $stateRegistryProvider.register(deviceImport);\n $stateRegistryProvider.register(addFDOProfile);\n $stateRegistryProvider.register(editFDOProfile);\n $stateRegistryProvider.register(endpointKubernetesConfiguration);\n $stateRegistryProvider.register(groups);\n $stateRegistryProvider.register(group);\n $stateRegistryProvider.register(groupAccess);\n $stateRegistryProvider.register(groupCreation);\n $stateRegistryProvider.register(home);\n $stateRegistryProvider.register(init);\n $stateRegistryProvider.register(initEndpoint);\n $stateRegistryProvider.register(initAdmin);\n $stateRegistryProvider.register(wizard);\n $stateRegistryProvider.register(wizardEndpoints);\n $stateRegistryProvider.register(initLicense);\n $stateRegistryProvider.register(registries);\n $stateRegistryProvider.register(registry);\n $stateRegistryProvider.register(registryCreation);\n $stateRegistryProvider.register(settings);\n $stateRegistryProvider.register(settingsAuthentication);\n $stateRegistryProvider.register(settingsEdgeCompute);\n $stateRegistryProvider.register(tags);\n $stateRegistryProvider.register(users);\n $stateRegistryProvider.register(user);\n $stateRegistryProvider.register(teams);\n $stateRegistryProvider.register(team);\n },\n ])\n .run(run);\n\nconst UNAUTHENTICATED_ROUTES = ['portainer.logout', 'portainer.internal-auth', 'portainer.auth', 'portainer.init.admin'];\nfunction isTransitionRequiresAuthentication(transition) {\n if (!transition) {\n return true;\n }\n const nextTransition = transition && transition.to();\n const nextTransitionName = nextTransition ? nextTransition.name : '';\n return !UNAUTHENTICATED_ROUTES.some((route) => nextTransitionName.startsWith(route));\n}\n\n/* @ngInject */\nfunction run($transitions, UserService, Authentication, LicenseService, EndpointService, Notifications, $timeout) {\n $transitions.onBefore({ to: 'portainer.init.*' }, async function (transition) {\n const to = transition.to();\n const stateService = transition.router.stateService;\n\n try {\n const adminExists = await UserService.administratorExists();\n if (!adminExists) {\n return to.name !== 'portainer.init.admin' ? stateService.target('portainer.init.admin') : true;\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve admin');\n throw err;\n }\n\n if (!Authentication.isAuthenticated()) {\n return stateService.target('portainer.auth');\n }\n\n try {\n const licenseInfo = await LicenseService.info();\n if (!licenseInfo.valid) {\n return to.name !== 'portainer.init.license' ? stateService.target('portainer.init.license') : true;\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve license info');\n throw err;\n }\n\n try {\n const endpoints = await EndpointService.endpoints(0, 1);\n if (endpoints.value.length === 0) {\n return to.name !== 'portainer.init.endpoint' ? stateService.target('portainer.init.endpoint') : true;\n }\n\n return stateService.target('portainer.home');\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment info');\n throw err;\n }\n });\n\n $transitions.onBefore({ to: (state) => !state.name.startsWith('portainer.init') && !UNAUTHENTICATED_ROUTES.includes(state.name) }, function (transition) {\n const stateService = transition.router.stateService;\n\n async function licenseCheckAsync() {\n try {\n const licenseInfo = await LicenseService.info();\n if (!licenseInfo.valid) {\n $timeout(() => {\n stateService.go('portainer.init.license');\n }, 100);\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve license info');\n throw err;\n }\n }\n\n licenseCheckAsync();\n });\n}\n","export default class HeaderContentController {\n /* @ngInject */\n constructor(Authentication) {\n this.Authentication = Authentication;\n\n this.username = null;\n }\n\n $onInit() {\n const userDetails = this.Authentication.getUserDetails();\n if (userDetails) {\n this.username = userDetails.username;\n }\n }\n}\n","export default class HeaderTitle {\n /* @ngInject */\n constructor(Authentication) {\n this.Authentication = Authentication;\n\n this.username = null;\n }\n\n $onInit() {\n const userDetails = this.Authentication.getUserDetails();\n if (userDetails) {\n this.username = userDetails.username;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./accessDatatable.html');\n\nangular.module('portainer.app').component('accessDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'AccessDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n roles: '<',\n tableKey: '@',\n orderBy: '@',\n removeAction: '<',\n updateAction: '<',\n reverseOrder: '<',\n showWarning: '<',\n isUpdateEnabled: '<',\n showRoles: '<',\n inheritFrom: '<',\n },\n});\n","angular.module('portainer.app').controller('AccessDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.disableRemove = function (item) {\n return item.Inherited && this.inheritFrom;\n };\n\n this.allowSelection = function (item) {\n return !this.disableRemove(item);\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./accessTable.html');\n\nangular.module('portainer.app').component('accessTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: function () {\n this.state = {\n orderBy: 'Name',\n reverseOrder: false,\n paginatedItemLimit: '10',\n textFilter: '',\n };\n\n this.changeOrderBy = function (orderField) {\n this.state.reverseOrder = this.state.orderBy === orderField ? !this.state.reverseOrder : false;\n this.state.orderBy = orderField;\n };\n },\n bindings: {\n dataset: '<',\n entryClick: '<',\n emptyDatasetMessage: '@',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./porAccessControlForm.html');\n\nangular.module('portainer.app').component('porAccessControlForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porAccessControlFormController',\n bindings: {\n // This object will be populated with the form data.\n // Model reference in porAccessControlFromModel.js\n formData: '=',\n // Optional. An existing resource control object that will be used to set\n // the default values of the component.\n resourceControl: '<',\n hideTitle: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular.module('portainer.app').controller('porAccessControlFormController', [\n '$q',\n 'UserService',\n 'TeamService',\n 'Notifications',\n 'Authentication',\n 'ResourceControlService',\n function ($q, UserService, TeamService, Notifications, Authentication, ResourceControlService) {\n var ctrl = this;\n\n ctrl.RCO = RCO;\n\n ctrl.availableTeams = [];\n ctrl.availableUsers = [];\n\n function setOwnership(resourceControl, isAdmin) {\n if (isAdmin && resourceControl.Ownership === RCO.PRIVATE) {\n ctrl.formData.Ownership = RCO.RESTRICTED;\n } else {\n ctrl.formData.Ownership = resourceControl.Ownership;\n }\n\n if (ctrl.formData.Ownership === RCO.PUBLIC) {\n ctrl.formData.AccessControlEnabled = false;\n }\n }\n\n function setAuthorizedUsersAndTeams(authorizedUsers, authorizedTeams) {\n angular.forEach(ctrl.availableUsers, function (user) {\n var found = _.find(authorizedUsers, { Id: user.Id });\n if (found) {\n user.selected = true;\n }\n });\n\n angular.forEach(ctrl.availableTeams, function (team) {\n var found = _.find(authorizedTeams, { Id: team.Id });\n if (found) {\n team.selected = true;\n }\n });\n }\n\n this.$onInit = $onInit;\n function $onInit() {\n var isAdmin = Authentication.isAdmin();\n ctrl.isAdmin = isAdmin;\n\n if (isAdmin) {\n ctrl.formData.Ownership = ctrl.RCO.ADMINISTRATORS;\n }\n\n $q.all({\n availableTeams: TeamService.teams(),\n availableUsers: isAdmin ? UserService.users(false) : [],\n })\n .then(function success(data) {\n ctrl.availableUsers = _.orderBy(data.availableUsers, 'Username', 'asc');\n\n var availableTeams = _.orderBy(data.availableTeams, 'Name', 'asc');\n ctrl.availableTeams = availableTeams;\n if (!isAdmin && availableTeams.length === 1) {\n ctrl.formData.AuthorizedTeams = availableTeams;\n }\n\n return $q.when(ctrl.resourceControl && ResourceControlService.retrieveOwnershipDetails(ctrl.resourceControl));\n })\n .then(function success(data) {\n if (data) {\n var authorizedUsers = data.authorizedUsers;\n var authorizedTeams = data.authorizedTeams;\n setOwnership(ctrl.resourceControl, isAdmin);\n setAuthorizedUsersAndTeams(authorizedUsers, authorizedTeams);\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve access control information');\n });\n }\n },\n]);\n","import { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\n/**\n * @deprecated use only for angularjs components. For react components use ./model.ts\n */\nexport function AccessControlFormData() {\n this.AccessControlEnabled = true;\n this.Ownership = RCO.PRIVATE;\n this.AuthorizedUsers = [];\n this.AuthorizedTeams = [];\n}\n","const autoNgTemplateLoaderTemplate1 = require('./porAccessControlPanel.html');\n\nangular.module('portainer.app').component('porAccessControlPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porAccessControlPanelController',\n bindings: {\n // The component will use this identifier when updating the resource control object.\n resourceId: '<',\n // The component will display information about this resource control object.\n resourceControl: '=',\n // This component is usually displayed inside a resource-details view.\n // This variable specifies the type of the associated resource.\n // Accepted values: 'container', 'service' or 'volume'.\n resourceType: '<',\n // Allow to disable the Ownership edition based on non resource control data\n disableOwnershipChange: '<',\n },\n});\n","import _ from 'lodash-es';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\nimport { ResourceControlTypeInt as RCTI, ResourceControlTypeString as RCTS } from 'Portainer/models/resourceControl/resourceControlTypes';\nimport { AccessControlPanelData } from './porAccessControlPanelModel';\n\nangular.module('portainer.app').controller('porAccessControlPanelController', [\n '$q',\n '$state',\n 'UserService',\n 'TeamService',\n 'ResourceControlHelper',\n 'ResourceControlService',\n 'Notifications',\n 'Authentication',\n 'ModalService',\n 'FormValidator',\n function ($q, $state, UserService, TeamService, ResourceControlHelper, ResourceControlService, Notifications, Authentication, ModalService, FormValidator) {\n var ctrl = this;\n\n ctrl.RCO = RCO;\n ctrl.RCTS = RCTS;\n ctrl.RCTI = RCTI;\n ctrl.state = {\n displayAccessControlPanel: false,\n canEditOwnership: false,\n editOwnership: false,\n formValidationError: '',\n };\n\n ctrl.formValues = new AccessControlPanelData();\n\n ctrl.authorizedUsers = [];\n ctrl.availableUsers = [];\n ctrl.authorizedTeams = [];\n ctrl.availableTeams = [];\n\n ctrl.canEditOwnership = function () {\n const hasRC = ctrl.resourceControl;\n const inheritedVolume = hasRC && ctrl.resourceControl.Type === RCTI.CONTAINER && ctrl.resourceType === RCTS.VOLUME;\n const inheritedContainer = hasRC && ctrl.resourceControl.Type === RCTI.SERVICE && ctrl.resourceType === RCTS.CONTAINER;\n const inheritedFromStack = hasRC && ctrl.resourceControl.Type === RCTI.STACK && ctrl.resourceType !== RCTS.STACK;\n const hasSpecialDisable = ctrl.disableOwnershipChange;\n\n return !inheritedVolume && !inheritedContainer && !inheritedFromStack && !hasSpecialDisable && !ctrl.state.editOwnership && (ctrl.isAdmin || ctrl.state.canEditOwnership);\n };\n\n ctrl.confirmUpdateOwnership = function () {\n if (!validateForm()) {\n return;\n }\n ModalService.confirmAccessControlUpdate(function (confirmed) {\n if (!confirmed) {\n return;\n }\n updateOwnership();\n });\n };\n\n function validateForm() {\n ctrl.state.formValidationError = '';\n var error = '';\n\n var accessControlData = {\n AccessControlEnabled: ctrl.formValues.Ownership === RCO.PUBLIC ? false : true,\n Ownership: ctrl.formValues.Ownership,\n AuthorizedUsers: ctrl.formValues.Ownership_Users,\n AuthorizedTeams: ctrl.formValues.Ownership_Teams,\n };\n var isAdmin = ctrl.isAdmin;\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n if (error) {\n ctrl.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function updateOwnership() {\n ResourceControlService.applyResourceControlChange(ctrl.resourceType, ctrl.resourceId, ctrl.resourceControl, ctrl.formValues)\n .then(function success() {\n Notifications.success('Access control successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update access control');\n });\n }\n\n this.$onInit = $onInit;\n function $onInit() {\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n var userId = userDetails.ID;\n ctrl.isAdmin = isAdmin;\n var resourceControl = ctrl.resourceControl;\n\n if (isAdmin && resourceControl) {\n ctrl.formValues.Ownership = resourceControl.Ownership === RCO.PRIVATE ? RCO.RESTRICTED : resourceControl.Ownership;\n } else {\n ctrl.formValues.Ownership = RCO.ADMINISTRATORS;\n }\n\n ResourceControlService.retrieveOwnershipDetails(resourceControl)\n .then(function success(data) {\n ctrl.authorizedUsers = data.authorizedUsers;\n ctrl.authorizedTeams = data.authorizedTeams;\n return ResourceControlService.retrieveUserPermissionsOnResource(userId, isAdmin, resourceControl);\n })\n .then(function success(data) {\n ctrl.state.canEditOwnership = data.isPartOfRestrictedUsers || data.isLeaderOfAnyRestrictedTeams;\n ctrl.state.canChangeOwnershipToTeam = data.isPartOfRestrictedUsers;\n\n return $q.all({\n availableUsers: isAdmin ? UserService.users(false) : [],\n availableTeams: isAdmin || data.isPartOfRestrictedUsers ? TeamService.teams() : [],\n });\n })\n .then(function success(data) {\n ctrl.availableUsers = _.orderBy(data.availableUsers, 'Username', 'asc');\n angular.forEach(ctrl.availableUsers, function (user) {\n var found = _.find(ctrl.authorizedUsers, { Id: user.Id });\n if (found) {\n user.selected = true;\n }\n });\n ctrl.availableTeams = _.orderBy(data.availableTeams, 'Name', 'asc');\n angular.forEach(data.availableTeams, function (team) {\n var found = _.find(ctrl.authorizedTeams, { Id: team.Id });\n if (found) {\n team.selected = true;\n }\n });\n if (data.availableTeams.length === 1) {\n ctrl.formValues.Ownership_Teams.push(data.availableTeams[0]);\n }\n ctrl.state.displayAccessControlPanel = true;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve access control information');\n });\n }\n },\n]);\n","import { ResourceControlOwnership } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nexport function AccessControlPanelData() {\n this.Ownership = ResourceControlOwnership.ADMINISTRATORS;\n this.Ownership_Users = [];\n this.Ownership_Teams = [];\n}\n","import angular from 'angular';\n\nimport { porAccessManagement } from './por-access-management';\nimport { porAccessManagementUsersSelector } from './por-access-management-users-selector';\n\nexport default angular\n .module('portainer.app.component.access-management', [])\n .component('porAccessManagement', porAccessManagement)\n .component('porAccessManagementUsersSelector', porAccessManagementUsersSelector).name;\n","const autoNgTemplateLoaderTemplate1 = require('./por-access-management-users-selector.html');\n\nexport const porAccessManagementUsersSelector = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n options: '<',\n value: '=',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./porAccessManagement.html');\n\nexport const porAccessManagement = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porAccessManagementController',\n controllerAs: 'ctrl',\n bindings: {\n accessControlledEntity: '<',\n inheritFrom: '<',\n entityType: '@',\n updateAccess: '<',\n actionInProgress: '<',\n filterUsers: '<',\n limitedFeature: '<',\n },\n};\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nimport { RoleTypes } from '@/portainer/rbac/models/role';\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\n\nclass PorAccessManagementController {\n /* @ngInject */\n constructor(Notifications, AccessService, RoleService) {\n Object.assign(this, { Notifications, AccessService, RoleService });\n\n this.limitedToBE = false;\n\n this.unauthorizeAccess = this.unauthorizeAccess.bind(this);\n this.updateAction = this.updateAction.bind(this);\n }\n\n updateAction() {\n const entity = this.accessControlledEntity;\n const oldUserAccessPolicies = entity.UserAccessPolicies;\n const oldTeamAccessPolicies = entity.TeamAccessPolicies;\n const updatedUserAccesses = _.filter(this.authorizedUsersAndTeams, { Updated: true, Type: 'user', Inherited: false });\n const updatedTeamAccesses = _.filter(this.authorizedUsersAndTeams, { Updated: true, Type: 'team', Inherited: false });\n\n const accessPolicies = this.AccessService.generateAccessPolicies(oldUserAccessPolicies, oldTeamAccessPolicies, updatedUserAccesses, updatedTeamAccesses);\n this.accessControlledEntity.UserAccessPolicies = accessPolicies.userAccessPolicies;\n this.accessControlledEntity.TeamAccessPolicies = accessPolicies.teamAccessPolicies;\n this.updateAccess();\n }\n\n authorizeAccess() {\n const entity = this.accessControlledEntity;\n const oldUserAccessPolicies = entity.UserAccessPolicies;\n const oldTeamAccessPolicies = entity.TeamAccessPolicies;\n const selectedRoleId = this.formValues.selectedRole.Id;\n const selectedUserAccesses = _.filter(this.formValues.multiselectOutput, (access) => access.Type === 'user');\n const selectedTeamAccesses = _.filter(this.formValues.multiselectOutput, (access) => access.Type === 'team');\n\n const accessPolicies = this.AccessService.generateAccessPolicies(oldUserAccessPolicies, oldTeamAccessPolicies, selectedUserAccesses, selectedTeamAccesses, selectedRoleId);\n this.accessControlledEntity.UserAccessPolicies = accessPolicies.userAccessPolicies;\n this.accessControlledEntity.TeamAccessPolicies = accessPolicies.teamAccessPolicies;\n this.updateAccess();\n }\n\n unauthorizeAccess(selectedAccesses) {\n const entity = this.accessControlledEntity;\n const userAccessPolicies = entity.UserAccessPolicies;\n const teamAccessPolicies = entity.TeamAccessPolicies;\n const selectedUserAccesses = _.filter(selectedAccesses, (access) => access.Type === 'user');\n const selectedTeamAccesses = _.filter(selectedAccesses, (access) => access.Type === 'team');\n\n _.forEach(selectedUserAccesses, (access) => delete userAccessPolicies[access.Id]);\n _.forEach(selectedTeamAccesses, (access) => delete teamAccessPolicies[access.Id]);\n this.updateAccess();\n }\n\n isRoleLimitedToBE(role) {\n if (!this.limitedToBE) {\n return false;\n }\n\n return role.ID !== RoleTypes.STANDARD;\n }\n\n roleLabel(role) {\n if (!this.limitedToBE) {\n return role.Name;\n }\n\n if (this.isRoleLimitedToBE(role)) {\n return `${role.Name} (Business Edition Feature)`;\n }\n\n return `${role.Name} (Default)`;\n }\n\n async $onInit() {\n try {\n if (this.limitedFeature) {\n this.limitedToBE = isLimitedToBE(this.limitedFeature);\n }\n\n const entity = this.accessControlledEntity;\n const parent = this.inheritFrom;\n\n const roles = await this.RoleService.roles();\n this.roles = _.orderBy(roles, 'Priority', 'asc');\n this.formValues = {\n selectedRole: this.roles.find((role) => !this.isRoleLimitedToBE(role)),\n };\n\n const data = await this.AccessService.accesses(entity, parent, this.roles);\n\n if (this.filterUsers) {\n data.availableUsersAndTeams = this.filterUsers(data.availableUsersAndTeams);\n }\n\n this.availableUsersAndTeams = _.orderBy(data.availableUsersAndTeams, 'Name', 'asc');\n this.authorizedUsersAndTeams = data.authorizedUsersAndTeams;\n } catch (err) {\n this.availableUsersAndTeams = [];\n this.authorizedUsersAndTeams = [];\n this.Notifications.error('Failure', err, 'Unable to retrieve accesses');\n }\n }\n}\n\nexport default PorAccessManagementController;\nangular.module('portainer.app').controller('porAccessManagementController', PorAccessManagementController);\n","const autoNgTemplateLoaderTemplate1 = require('./associatedEndpointsSelector.html');\n\nimport angular from 'angular';\nimport AssociatedEndpointsSelectorController from './associatedEndpointsSelectorController';\n\nangular.module('portainer.app').component('associatedEndpointsSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: AssociatedEndpointsSelectorController,\n bindings: {\n endpointIds: '<',\n tags: '<',\n groups: '<',\n hasBackendPagination: '<',\n\n onAssociate: '<',\n onDissociate: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass AssoicatedEndpointsSelectorController {\n /* @ngInject */\n constructor($async, EndpointService) {\n this.$async = $async;\n this.EndpointService = EndpointService;\n\n this.state = {\n available: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n associated: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n };\n\n this.endpoints = {\n associated: [],\n available: null,\n };\n\n this.getEndpoints = this.getEndpoints.bind(this);\n this.getEndpointsAsync = this.getEndpointsAsync.bind(this);\n this.getAssociatedEndpoints = this.getAssociatedEndpoints.bind(this);\n this.getAssociatedEndpointsAsync = this.getAssociatedEndpointsAsync.bind(this);\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n }\n\n $onInit() {\n this.loadData();\n }\n\n $onChanges({ endpointIds }) {\n if (endpointIds && endpointIds.currentValue) {\n this.loadData();\n }\n }\n\n loadData() {\n this.getAssociatedEndpoints();\n this.getEndpoints();\n }\n\n getEndpoints() {\n return this.$async(this.getEndpointsAsync);\n }\n\n async getEndpointsAsync() {\n const { start, search, limit } = this.getPaginationData('available');\n const query = { search, types: [4, 7] };\n\n const response = await this.EndpointService.endpoints(start, limit, query);\n\n const endpoints = _.filter(response.value, (endpoint) => !_.includes(this.endpointIds, endpoint.Id));\n this.setTableData('available', endpoints, response.totalCount);\n this.noEndpoints = this.state.available.totalCount === 0;\n }\n\n getAssociatedEndpoints() {\n return this.$async(this.getAssociatedEndpointsAsync);\n }\n\n async getAssociatedEndpointsAsync() {\n let response = { value: [], totalCount: 0 };\n if (this.endpointIds.length > 0) {\n const { start, search, limit } = this.getPaginationData('associated');\n const query = { search, types: [4, 7], endpointIds: this.endpointIds };\n\n response = await this.EndpointService.endpoints(start, limit, query);\n }\n\n this.setTableData('associated', response.value, response.totalCount);\n }\n\n associateEndpoint(endpoint) {\n this.onAssociate(endpoint);\n }\n\n dissociateEndpoint(endpoint) {\n this.onDissociate(endpoint);\n }\n\n getPaginationData(tableType) {\n const { pageNumber, limit, search } = this.state[tableType];\n const start = (pageNumber - 1) * limit + 1;\n\n return { start, search, limit };\n }\n\n setTableData(tableType, endpoints, totalCount) {\n this.endpoints[tableType] = endpoints;\n this.state[tableType].totalCount = parseInt(totalCount, 10);\n }\n}\n\nangular.module('portainer.app').controller('AssoicatedEndpointsSelectorController', AssoicatedEndpointsSelectorController);\nexport default AssoicatedEndpointsSelectorController;\n","angular.module('portainer.app').directive('autoFocus', [\n '$timeout',\n function porAutoFocus($timeout) {\n var directive = {\n restrict: 'A',\n link: function (scope, element) {\n $timeout(function () {\n element[0].focus();\n });\n },\n };\n\n return directive;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./betaPanel.html');\n\nangular.module('portainer.app').component('betaPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n});\n","angular.module('portainer.app').directive('buttonSpinner', function buttonSpinner() {\n var directive = {\n restrict: 'A',\n scope: {\n spinning: '=buttonSpinner',\n },\n transclude: true,\n template: ' ',\n };\n\n return directive;\n});\n","const autoNgTemplateLoaderTemplate1 = require('./codeEditor.html');\n\nangular.module('portainer.app').component('codeEditor', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'CodeEditorController',\n bindings: {\n identifier: '@',\n placeholder: '@',\n yml: '<',\n readOnly: '<',\n onChange: '<',\n value: '<',\n },\n});\n","angular.module('portainer.app').controller('CodeEditorController', function CodeEditorController($document, CodeMirrorService, $scope) {\n var ctrl = this;\n\n this.$onChanges = function $onChanges({ value }) {\n if (value && value.currentValue && ctrl.editor && ctrl.editor.getValue() !== value.currentValue) {\n ctrl.editor.setValue(value.currentValue);\n }\n };\n\n this.$onInit = function () {\n $document.ready(function () {\n var editorElement = $document[0].getElementById(ctrl.identifier);\n ctrl.editor = CodeMirrorService.applyCodeMirrorOnElement(editorElement, ctrl.yml, ctrl.readOnly);\n if (ctrl.onChange) {\n ctrl.editor.on('change', (...args) => $scope.$evalAsync(() => ctrl.onChange(...args)));\n }\n if (ctrl.value) {\n ctrl.editor.setValue(ctrl.value);\n }\n });\n };\n});\n","export default class CopyButtonController {\n /* @ngInject */\n constructor(clipboard) {\n this.clipboard = clipboard;\n this.state = { isFading: false };\n }\n\n copyValueText() {\n this.clipboard.copyText(this.value);\n this.state.isFading = true;\n setTimeout(() => (this.state.isFading = false), 1000);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./copy-button.html');\n\nimport angular from 'angular';\nimport controller from './copy-button.controller';\nimport './copy-button.css';\n\nangular.module('portainer.app').component('copyButton', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n value: '<',\n },\n});\n","import { parseCronExpression } from 'cron-schedule';\n\nangular.module('portainer.app').directive('cronrule', function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function ($scope, $element, $attrs, ngModel) {\n ngModel.$validators.invalidCron = function (modelValue) {\n try {\n parseCronExpression(modelValue);\n return true;\n } catch (error) {\n return false;\n }\n };\n },\n };\n});\n","class CustomTemplateCommonFieldsController {\n /* @ngInject */\n constructor() {\n this.platformTypes = [\n { label: 'Linux', value: 1 },\n { label: 'Windows', value: 2 },\n ];\n\n this.templateTypes = [\n { label: 'Swarm', value: 1 },\n { label: 'Standalone', value: 2 },\n ];\n }\n}\n\nexport default CustomTemplateCommonFieldsController;\n","const autoNgTemplateLoaderTemplate1 = require('./customTemplateCommonFields.html');\n\nimport CustomTemplateCommonFieldsController from './customTemplateCommonFieldsController.js';\n\nangular.module('portainer.app').component('customTemplateCommonFields', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CustomTemplateCommonFieldsController,\n bindings: {\n formValues: '=',\n showPlatformField: '<',\n showTypeField: '<',\n nameRegex: '<',\n },\n});\n","class CustomTemplateSelectorController {\n /* @ngInject */\n constructor($async, CustomTemplateService, Notifications) {\n Object.assign(this, { $async, CustomTemplateService, Notifications });\n\n this.selectedTemplate = null;\n this.templates = null;\n }\n\n async handleChangeTemplate(templateId) {\n this.selectedTemplate = this.templates.find((t) => t.Id === templateId);\n this.onChange(templateId, this.selectedTemplate);\n }\n\n $onChanges({ value }) {\n if (value && value.currentValue && this.templates) {\n this.handleChangeTemplate(value.currentValue);\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n try {\n const templates = await this.CustomTemplateService.customTemplates(this.stackType);\n this.templates = templates.map((template) => ({ ...template, label: `${template.Title} - ${template.Description}` }));\n if (this.value) {\n this.handleChangeTemplate(this.value);\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Custom Templates');\n }\n });\n }\n}\n\nexport default CustomTemplateSelectorController;\n","const autoNgTemplateLoaderTemplate1 = require('./custom-template-selector.html');\n\nimport angular from 'angular';\nimport controller from './custom-template-selector.controller.js';\n\nexport const customTemplateSelector = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n newTemplatePath: '@',\n stackType: '<',\n\n value: '<',\n onChange: '<',\n },\n};\n\nangular.module('portainer.app').component('customTemplateSelector', customTemplateSelector);\n","const CUSTOM_TEMPLATES_TYPES = {\n SWARM: 1,\n STANDALONE: 2,\n KUBERNETES: 3,\n};\n\nangular.module('portainer.docker').controller('CustomTemplatesListController', function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.typeLabel = typeLabel;\n this.$onInit = $onInit;\n\n function typeLabel(type) {\n switch (type) {\n case CUSTOM_TEMPLATES_TYPES.SWARM:\n return 'swarm';\n case CUSTOM_TEMPLATES_TYPES.KUBERNETES:\n return 'manifest';\n case CUSTOM_TEMPLATES_TYPES.STANDALONE:\n default:\n return 'standalone';\n }\n }\n\n function $onInit() {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n }\n});\n","const autoNgTemplateLoaderTemplate1 = require('./customTemplatesList.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('customTemplatesList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'CustomTemplatesListController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n templates: '<',\n tableKey: '@',\n onSelectClick: '<',\n showSwarmStacks: '<',\n onDeleteClick: '<',\n isEditAllowed: '<',\n createPath: '@',\n editPath: '@',\n },\n});\n","export default class AccessTokensDatatableController {\n /* @ngInject*/\n constructor($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.onSettingsRepeaterChange();\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./access-tokens-datatable.html');\n\nimport angular from 'angular';\nimport controller from './access-tokens-datatable.controller';\n\nangular.module('portainer.app').component('accessTokensDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n removeAction: '<',\n },\n});\n","export default class DatatableColumnsVisibilityController {\n constructor() {\n this.state = {\n isOpen: false,\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./datatable-columns-visibility.html');\n\nimport angular from 'angular';\n\nimport controller from './datatable-columns-visibility.controller';\n\nangular.module('portainer.app').component('datatableColumnsVisibility', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n columns: '<',\n onChange: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./endpointsDatatable.html');\n\nangular.module('portainer.app').component('endpointsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n retrievePage: '<',\n },\n});\n","angular.module('portainer.app').controller('EndpointsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'PaginationService',\n 'Notifications',\n function ($scope, $controller, DatatableService, PaginationService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.state = Object.assign(this.state, {\n orderBy: this.orderBy,\n loading: true,\n filteredDataSet: [],\n totalFilteredDataset: 0,\n pageNumber: 1,\n });\n\n this.paginationChanged = function () {\n this.state.loading = true;\n this.state.filteredDataSet = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n this.retrievePage(start, this.state.paginatedItemLimit, this.state.textFilter)\n .then((data) => {\n this.state.filteredDataSet = data.endpoints;\n this.state.totalFilteredDataSet = data.totalCount;\n })\n .finally(() => {\n this.state.loading = false;\n });\n };\n\n this.onPageChange = function (newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChanged();\n };\n\n /**\n * Overridden\n */\n this.onTextFilterChange = function () {\n var filterValue = this.state.textFilter;\n DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n this.paginationChanged();\n };\n\n /**\n * Overridden\n */\n this.changePaginationLimit = function () {\n PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChanged();\n };\n\n /**\n * Overridden\n */\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n this.paginationChanged();\n };\n },\n]);\n","export default class DatatableFilterController {\n isEnabled() {\n return 0 < this.state.length && this.state.length < this.labels.length;\n }\n\n onChangeItem(filterValue) {\n if (this.isChecked(filterValue)) {\n return this.onChange(\n this.filterKey,\n this.state.filter((v) => v !== filterValue)\n );\n }\n return this.onChange(this.filterKey, [...this.state, filterValue]);\n }\n\n isChecked(filterValue) {\n return this.state.includes(filterValue);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./datatable-filter.html');\n\nimport controller from './datatable-filter.controller';\n\nexport const datatableFilter = {\n bindings: {\n labels: '<', // [{label, value}]\n state: '<', // [filterValue]\n filterKey: '@',\n onChange: '<',\n },\n controller,\n templateUrl: autoNgTemplateLoaderTemplate1,\n transclude: true,\n};\n","import _ from 'lodash-es';\nimport './datatable.css';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nfunction isBetween(value, a, b) {\n return (value >= a && value <= b) || (value >= b && value <= a);\n}\n\n// TODO: review - refactor to use a class that can be extended\nangular.module('portainer.app').controller('GenericDatatableController', [\n '$interval',\n 'PaginationService',\n 'DatatableService',\n 'PAGINATION_MAX_ITEMS',\n function ($interval, PaginationService, DatatableService, PAGINATION_MAX_ITEMS) {\n this.RCO = RCO;\n\n this.state = {\n selectAll: false,\n orderBy: this.orderBy,\n paginatedItemLimit: PAGINATION_MAX_ITEMS,\n displayTextFilter: false,\n get selectedItemCount() {\n return this.selectedItems.length || 0;\n },\n selectedItems: [],\n };\n\n this.settings = {\n open: false,\n repeater: {\n autoRefresh: false,\n refreshRate: '30',\n },\n };\n\n this.resetSelectionState = function () {\n this.state.selectAll = false;\n this.state.selectedItems = [];\n _.map(this.state.filteredDataSet, (item) => (item.Checked = false));\n };\n\n this.onTextFilterChange = function () {\n DatatableService.setDataTableTextFilters(this.tableKey, this.state.textFilter);\n };\n\n this.changeOrderBy = function changeOrderBy(orderField) {\n this.state.reverseOrder = this.state.orderBy === orderField ? !this.state.reverseOrder : false;\n this.state.orderBy = orderField;\n DatatableService.setDataTableOrder(this.tableKey, orderField, this.state.reverseOrder);\n };\n\n this.selectItem = function (item, event) {\n // Handle range select using shift\n if (event && event.originalEvent.shiftKey && this.state.firstClickedItem) {\n const firstItemIndex = this.state.filteredDataSet.indexOf(this.state.firstClickedItem);\n const lastItemIndex = this.state.filteredDataSet.indexOf(item);\n const itemsInRange = _.filter(this.state.filteredDataSet, (item, index) => {\n return isBetween(index, firstItemIndex, lastItemIndex);\n });\n const value = this.state.firstClickedItem.Checked;\n\n _.forEach(itemsInRange, (i) => {\n if (!this.allowSelection(i)) {\n return;\n }\n i.Checked = value;\n });\n this.state.firstClickedItem = item;\n } else if (event) {\n item.Checked = !item.Checked;\n this.state.firstClickedItem = item;\n }\n this.state.selectedItems = _.uniq(_.concat(this.state.selectedItems, this.state.filteredDataSet)).filter((i) => i.Checked);\n if (event && this.state.selectAll && this.state.selectedItems.length !== this.state.filteredDataSet.length) {\n this.state.selectAll = false;\n }\n this.onSelectionChanged();\n };\n\n this.selectAll = function () {\n this.state.firstClickedItem = null;\n for (var i = 0; i < this.state.filteredDataSet.length; i++) {\n var item = this.state.filteredDataSet[i];\n if (this.allowSelection(item) && item.Checked !== this.state.selectAll) {\n item.Checked = this.state.selectAll;\n this.selectItem(item);\n }\n }\n this.onSelectionChanged();\n };\n\n /**\n * Override this method to allow/deny selection\n */\n this.allowSelection = function (/*item*/) {\n return true;\n };\n\n /**\n * Override this method to prepare data table\n */\n this.prepareTableFromDataset = function () {\n return;\n };\n\n /**\n * Override this method to execute code after selection changed on datatable\n */\n this.onSelectionChanged = function () {\n return;\n };\n\n this.changePaginationLimit = function () {\n PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n };\n\n this.setDefaults = function () {\n this.showTextFilter = this.showTextFilter ? this.showTextFilter : false;\n this.state.reverseOrder = this.reverseOrder ? this.reverseOrder : false;\n this.state.paginatedItemLimit = PaginationService.getPaginationLimit(this.tableKey);\n };\n\n /**\n * Duplicate this function when extending GenericDatatableController\n * Extending-controller's bindings are not accessible there\n * For more details see the following comments\n * https://github.com/portainer/portainer/pull/2877#issuecomment-503333425\n * https://github.com/portainer/portainer/pull/2877#issuecomment-503537249\n */\n this.$onInit = function $onInit() {\n this.$onInitGeneric();\n };\n\n this.$onInitGeneric = function $onInitGeneric() {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n\n /**\n * REPEATER SECTION\n */\n this.repeater = undefined;\n\n this.$onDestroy = function () {\n this.stopRepeater();\n };\n\n this.stopRepeater = function () {\n if (angular.isDefined(this.repeater)) {\n $interval.cancel(this.repeater);\n this.repeater = undefined;\n }\n };\n\n this.startRepeater = function () {\n this.repeater = $interval(async () => {\n await this.refreshCallback();\n this.onDataRefresh();\n }, this.settings.repeater.refreshRate * 1000);\n };\n\n this.onSettingsRepeaterChange = function () {\n this.stopRepeater();\n if (angular.isDefined(this.refreshCallback) && this.settings.repeater.autoRefresh) {\n this.startRepeater();\n $('#refreshRateChange').show();\n $('#refreshRateChange').fadeOut(1500);\n }\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n /**\n * Override this method to execute code after calling the refresh callback\n */\n this.onDataRefresh = function () {\n return;\n };\n\n /**\n * !REPEATER SECTION\n */\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./groupsDatatable.html');\n\nangular.module('portainer.app').component('groupsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","import angular from 'angular';\nimport 'angular-utils-pagination';\n\nimport { datatableTitlebar } from './titlebar';\nimport { datatableSearchbar } from './searchbar';\nimport { datatableSortIcon } from './sort-icon';\nimport { datatablePagination } from './pagination';\nimport { datatableFilter } from './filter';\n\nexport default angular\n .module('portainer.shared.datatable', ['angularUtils.directives.dirPagination'])\n .component('datatableTitlebar', datatableTitlebar)\n .component('datatableSearchbar', datatableSearchbar)\n .component('datatableSortIcon', datatableSortIcon)\n .component('datatablePagination', datatablePagination)\n .component('datatableFilter', datatableFilter).name;\n","const autoNgTemplateLoaderTemplate1 = require('./pagination.html');\n\nexport const datatablePagination = {\n bindings: {\n onChangeLimit: '<',\n limit: '<',\n enableNoLimit: '<',\n onChangePage: '<',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./registriesDatatable.html');\n\nangular.module('portainer.app').component('registriesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'RegistriesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n canBrowse: '<',\n endpointType: '<',\n canManageAccess: '<',\n },\n});\n","import { PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\n\nangular.module('portainer.docker').controller('RegistriesDatatableController', RegistriesDatatableController);\n\n/* @ngInject */\nfunction RegistriesDatatableController($scope, $controller, $state, Authentication, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.allowSelection = function (item) {\n return item.Id;\n };\n\n this.enableGoToLink = (item) => {\n return this.isAdmin && item.Id && !this.endpointType;\n };\n\n this.goToRegistry = function (item) {\n if (\n this.endpointType === PortainerEndpointTypes.KubernetesLocalEnvironment ||\n this.endpointType === PortainerEndpointTypes.AgentOnKubernetesEnvironment ||\n this.endpointType === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment\n ) {\n $state.go('kubernetes.registries.registry', { id: item.Id });\n } else if (\n this.endpointType === PortainerEndpointTypes.DockerEnvironment ||\n this.endpointType === PortainerEndpointTypes.AgentOnDockerEnvironment ||\n this.endpointType === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment\n ) {\n $state.go('docker.registries.registry', { id: item.Id });\n } else {\n $state.go('portainer.registries.registry', { id: item.Id });\n }\n };\n\n this.redirectToManageAccess = function (item) {\n if (\n this.endpointType === PortainerEndpointTypes.KubernetesLocalEnvironment ||\n this.endpointType === PortainerEndpointTypes.AgentOnKubernetesEnvironment ||\n this.endpointType === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment\n ) {\n $state.go('kubernetes.registries.access', { id: item.Id });\n } else {\n $state.go('docker.registries.access', { id: item.Id });\n }\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n}\n","const autoNgTemplateLoaderTemplate1 = require('./datatable-searchbar.html');\n\nexport const datatableSearchbar = {\n bindings: {\n onChange: '<',\n ngModel: '<',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","export default class datatableSortIconController {\n isCurrentSortOrder() {\n return this.selectedSortKey === this.key;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./datatable-sort-icon.html');\n\nimport controller from './datatable-sort-icon.controller';\n\nexport const datatableSortIcon = {\n bindings: {\n key: '@',\n selectedSortKey: '@',\n reverseOrder: '<',\n },\n controller,\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./stacksDatatable.html');\n\nangular.module('portainer.app').component('stacksDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StacksDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n offlineMode: '<',\n refreshCallback: '<',\n createEnabled: '<',\n },\n});\n","angular.module('portainer.app').controller('StacksDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n 'Authentication',\n function ($scope, $controller, DatatableService, Authentication) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.filters = {\n state: {\n open: false,\n enabled: false,\n showActiveStacks: true,\n showUnactiveStacks: true,\n },\n };\n\n this.columnVisibility = {\n state: {\n open: false,\n },\n columns: {\n updated: {\n label: 'Updated',\n display: false,\n },\n },\n };\n\n this.onColumnVisibilityChange = onColumnVisibilityChange.bind(this);\n function onColumnVisibilityChange(columns) {\n this.columnVisibility.columns = columns;\n DatatableService.setColumnVisibilitySettings(this.tableKey, this.columnVisibility);\n }\n\n /**\n * Do not allow external items\n */\n this.allowSelection = function (item) {\n if (item.External && item.Type === 2) {\n return false;\n }\n\n if (item.Orphaned && !this.isAdmin) {\n return false;\n }\n\n return !(item.External && !this.isAdmin && !this.isEndpointAdmin);\n };\n\n this.applyFilters = applyFilters.bind(this);\n function applyFilters(stack) {\n const { showActiveStacks, showUnactiveStacks } = this.filters.state;\n if (stack.Orphaned) {\n return stack.OrphanedRunning || this.settings.allOrphanedStacks;\n } else {\n return (stack.Status === 1 && showActiveStacks) || (stack.Status === 2 && showUnactiveStacks) || stack.External || !stack.Status;\n }\n }\n\n this.onFilterChange = onFilterChange.bind(this);\n function onFilterChange() {\n const { showActiveStacks, showUnactiveStacks } = this.filters.state;\n this.filters.state.enabled = !showActiveStacks || !showUnactiveStacks;\n DatatableService.setDataTableFilters(this.tableKey, this.filters);\n }\n\n this.onSettingsAllOrphanedStacksChange = function () {\n DatatableService.setDataTableSettings(this.tableKey, this.settings);\n };\n\n this.$onInit = function () {\n this.isAdmin = Authentication.isAdmin();\n this.hasAccessToOrphanedStack = Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n this.isEndpointAdmin = Authentication.hasAuthorizations(['PortainerStackCreate', 'PortainerStackDelete']) && this.hasAccessToOrphanedStack;\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n this.settings.allOrphanedStacks = this.settings.allOrphanedStacks && this.isAdmin;\n }\n this.onSettingsRepeaterChange();\n\n var storedColumnVisibility = DatatableService.getColumnVisibilitySettings(this.tableKey);\n if (storedColumnVisibility !== null) {\n this.columnVisibility = storedColumnVisibility;\n }\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./strings-datatable.html');\n\nimport angular from 'angular';\n// import controller from './strings-datatable.controller.js';\n\nexport const stringsDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n emptyDatasetMessage: '@',\n\n columnHeader: '@',\n tableKey: '@',\n\n onRemove: '<',\n },\n};\n\nangular.module('portainer.app').component('stringsDatatable', stringsDatatable);\n","const autoNgTemplateLoaderTemplate1 = require('./tagsDatatable.html');\n\nangular.module('portainer.app').component('tagsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./teamsDatatable.html');\n\nangular.module('portainer.app').component('teamsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./datatable-titlebar.html');\n\nexport const datatableTitlebar = {\n bindings: {\n icon: '@',\n title: '@',\n feature: '@',\n },\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./usersDatatable.html');\n\nimport angular from 'angular';\nimport UsersDatatableController from './usersDatatableController';\n\nangular.module('portainer.app').component('usersDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: UsersDatatableController,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n authenticationMethod: '<',\n },\n});\n","export default class UsersDatatableController {\n /* @ngInject*/\n constructor($controller, $scope) {\n const allowSelection = this.allowSelection;\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.allowSelection = allowSelection.bind(this);\n }\n\n /**\n * Override this method to allow/deny selection\n */\n allowSelection(item) {\n return item.Id !== 1;\n }\n}\n","import moment from 'moment';\n\nconst applyEvent = 'apply.daterangepicker';\nconst cancelEvent = 'cancel.daterangepicker';\nconst hideEvent = 'hide.daterangepicker';\n\nexport class DateRangePickerApi {\n constructor(element, $scope, options) {\n this.el = element;\n this.$scope = $scope;\n this.options = options;\n\n this.startDate = null;\n this.endDate = null;\n this.maxDate = null;\n this.minDate = null;\n }\n\n build() {\n const { el, $scope } = this;\n\n return {\n setMinDate: (x) => {\n if (typeof x === 'object') {\n return;\n }\n\n const datePicker = el.data('daterangepicker');\n\n datePicker.minDate = x;\n datePicker.updateView();\n datePicker.updateCalendars();\n this.minDate = moment.unix(x);\n\n if (this.startDate && this.startDate.isBefore(this.minDate)) {\n this.startDate = this.minDate;\n $scope.startDate = x;\n }\n\n if (this.endDate && this.endDate.isBefore(this.minDate)) {\n this.endDate = this.minDate;\n $scope.endDate = x;\n }\n },\n\n setMaxDate: (x) => {\n if (typeof x === 'object') {\n return;\n }\n\n const datePicker = el.data('daterangepicker');\n\n datePicker.maxDate = x;\n datePicker.updateView();\n datePicker.updateCalendars();\n this.maxDate = moment.unix(x);\n\n if (this.startDate && this.startDate.isAfter(this.maxDate)) {\n $scope.startDate = 0;\n this.startDate = null;\n }\n\n if (this.endDate && this.endDate.isAfter(this.maxDate)) {\n $scope.endDate = 0;\n this.endDate = null;\n }\n\n this.clearInput();\n },\n\n setStartDate: (x) => {\n if (typeof x === 'object') {\n return;\n }\n\n el.data('daterangepicker').setStartDate(x);\n this.startDate = moment.unix(x);\n },\n\n setEndDate: (x) => {\n if (typeof x === 'object') {\n return;\n }\n\n el.data('daterangepicker').setEndDate(x);\n this.endDate = moment.unix(x);\n },\n\n isSingle: () => {\n el.data('daterangepicker').singleDatePicker;\n },\n\n show: () => {\n el.data('daterangepicker').show();\n },\n\n hide: () => {\n el.data('daterangepicker').hide();\n },\n };\n }\n\n onApply(event, api) {\n this.startDate = api.startDate;\n this.endDate = this.isSingle() ? api.startDate : api.endDate;\n\n if (this.$scope.formCtrl && this.$scope.ngRequired) {\n if (this.$scope.startDate && this.$scope.endDate) {\n this.$scope.formCtrl.$setValidity(this.$scope.dateRangePickerId, true);\n } else {\n this.$scope.formCtrl.$setValidity(this.$scope.dateRangePickerId, false);\n }\n }\n\n if (this.$scope.onChange) {\n this.$scope.$apply(() => {\n this.$scope.onChange({ startDate: api.startDate.unix(), endDate: api.endDate.unix() });\n });\n }\n }\n\n onCancel() {\n if (this.$scope.clearOnCancel) {\n return;\n }\n\n this.$scope.$apply(() => {\n if (this.$scope.formCtrl && this.$scope.ngRequired) {\n this.$scope.formCtrl.$setValidity(this.$scope.dateRangePickerId, false);\n }\n\n this.clearInput();\n if (this.$scope.onChange) {\n this.$scope.onChange({ startDate: 0, endDate: 0 });\n }\n });\n }\n\n onHide() {\n setInterval(() => {\n if ((this.isSingle() && !this.$scope.startDate) || (!this.$scope.startDate && !this.$scope.endDate)) {\n this.clearInput();\n }\n });\n }\n\n clearInput() {\n $(this.el).val('');\n }\n\n isSingle() {\n return this.options.singleDatePicker;\n }\n\n init() {\n this.el.on(applyEvent, (event, api) => {\n this.onApply(event, api);\n });\n\n this.el.on(cancelEvent, (event, api) => {\n this.onCancel(event, api);\n });\n\n this.el.on(hideEvent, (event, api) => {\n this.onHide(event, api);\n });\n }\n\n destroy() {\n this.el.off(applyEvent);\n this.el.off(cancelEvent);\n this.el.off(hideEvent);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./date-range-picker.html');\n\nimport _ from 'lodash-es';\n\nimport { DateRangePickerApi } from './date-range-picker-api';\n\nconst AVAILABLE_OPTIONS = [\n 'minDate',\n 'maxDate',\n 'dateLimit',\n 'showDropdowns',\n 'showWeekNumbers',\n 'showISOWeekNumbers',\n 'timePicker',\n 'timePickerIncrement',\n 'timePicker24Hour',\n 'timePickerSeconds',\n 'ranges',\n 'showCustomRangeLabel',\n 'alwaysShowCalendars',\n 'opens',\n 'drops',\n 'buttonClasses',\n 'applyClass',\n 'cancelClass',\n 'locale',\n 'singleDatePicker',\n 'autoApply',\n 'linkedCalendars',\n 'isInvalidDate',\n 'isCustomDate',\n 'autoUpdateInput',\n 'parentEl',\n];\n\n/* @ngInject */\nexport function dateRangePicker() {\n return {\n restrict: 'E',\n scope: {\n dateRangePickerOptions: '=',\n startDate: '<', //unix timestamp\n endDate: '= 0) {\n baseOptions[key] = $scope.dateRangePickerOptions[key];\n }\n }\n }\n\n $scope.$on('$destroy', function () {\n currentApiElement.remove();\n currentApi.destroy();\n if (destroyListener) {\n destroyListener();\n }\n });\n\n function initElement() {\n createElement();\n createController();\n destroyListener = openListener();\n }\n\n function openListener() {\n return $scope.$watchGroup(watchList, function (n) {\n if (!n || !n.length) {\n return;\n }\n\n const [startDate, endDate, minDate, maxDate] = n;\n\n if (minDate) {\n dpApi.setMinDate(minDate);\n }\n\n if (maxDate) {\n dpApi.setMaxDate(maxDate);\n }\n\n if (startDate) {\n dpApi.setStartDate(startDate);\n }\n\n if (endDate) {\n dpApi.setEndDate(endDate);\n }\n });\n }\n\n function createElement() {\n const tempOptions = angular.copy(baseOptions);\n tempOptions.startDate = $scope.startDate;\n tempOptions.endDate = $scope.endDate;\n currentApiElement = $(inputElement).daterangepicker(tempOptions);\n\n if (!isDataFound) {\n $(currentApiElement).val('');\n }\n }\n\n function createController() {\n currentApi = new DateRangePickerApi(currentApiElement, $scope, baseOptions);\n currentApi.init();\n dpApi = currentApi.build();\n }\n\n initElement();\n };\n },\n };\n}\n","import 'daterangepicker';\nimport 'daterangepicker/daterangepicker.css';\n\nimport { dateRangePicker } from './date-range-picker';\n\n// ported from https://github.com/emalikterzi/angularjs-daterangepicker/blob/master/src/angular-daterangepicker.js\n\nexport default angular.module('portainer.components.datarangepicker', []).directive('dateRangePicker', dateRangePicker).name;\n","import angular from 'angular';\nimport _ from 'lodash-es';\nimport PortainerEndpointTagHelper from 'Portainer/helpers/tagHelper';\n\nclass EndpointItemController {\n /* @ngInject */\n constructor() {\n this.editEndpoint = this.editEndpoint.bind(this);\n }\n\n editEndpoint(event) {\n event.stopPropagation();\n this.onEdit(this.model.Id);\n }\n\n joinTags() {\n if (!this.tags) {\n return 'Loading tags...';\n }\n\n if (!this.model.TagIds || !this.model.TagIds.length) {\n return '';\n }\n\n const tagNames = PortainerEndpointTagHelper.idsToTagNames(this.tags, this.model.TagIds);\n return _.join(tagNames, ',');\n }\n\n isEdgeEndpoint() {\n return this.model.Type === 4 || this.model.Type === 7;\n }\n\n calcIsCheckInValid() {\n if (!this.isEdgeEndpoint()) {\n return false;\n }\n const checkInInterval = this.model.EdgeCheckinInterval;\n // give checkIn some wiggle room\n return this.endpointInitTime - this.model.LastCheckInDate <= checkInInterval * 2 + 20;\n }\n\n $onInit() {\n this.endpointTags = this.joinTags();\n this.isCheckInValid = this.calcIsCheckInValid();\n }\n\n $onChanges({ tags, model }) {\n if ((!tags && !model) || (!tags.currentValue && !model.currentValue)) {\n return;\n }\n this.endpointTags = this.joinTags();\n\n if (model) {\n this.isCheckInValid = this.calcIsCheckInValid();\n }\n }\n}\n\nangular.module('portainer.app').controller('EndpointItemController', EndpointItemController);\nexport default EndpointItemController;\n","const autoNgTemplateLoaderTemplate1 = require('./endpointItem.html');\n\nimport angular from 'angular';\n\nimport EndpointItemController from './endpoint-item-controller';\n\nangular.module('portainer.app').component('endpointItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n onSelect: '<',\n onEdit: '<',\n isAdmin: '<',\n tags: '<',\n endpointInitTime: '<',\n },\n controller: EndpointItemController,\n});\n","import _ from 'lodash-es';\nimport { PortainerEndpointTypes } from '@/portainer/models/endpoint/models';\n\nconst ENDPOINTS_POLLING_INTERVAL = 30000; // in ms\nconst ENDPOINTS_CACHE_SIZE = 100;\n\nangular.module('portainer.app').controller('EndpointListController', [\n 'DatatableService',\n 'PaginationService',\n 'ModalService',\n 'KubernetesConfigService',\n 'Notifications',\n function EndpointListController(DatatableService, PaginationService, ModalService, KubernetesConfigService, Notifications) {\n this.state = {\n totalFilteredEndpoints: null,\n textFilter: '',\n filteredEndpoints: [],\n paginatedItemLimit: '10',\n pageNumber: 1,\n loading: true,\n pollingTimeout: null,\n };\n\n this.onTextFilterChange = function (init = false) {\n this.state.loading = true;\n var filterValue = this.state.textFilter;\n DatatableService.setDataTableTextFilters(this.tableKey, filterValue);\n if (!init && this.hasBackendPagination()) {\n this.paginationChangedAction();\n } else {\n this.state.filteredEndpoints = frontEndpointFilter(this.endpoints, this.tags, filterValue);\n this.state.loading = false;\n if (filterValue) {\n this.state.totalFilteredEndpoints = this.state.filteredEndpoints.length;\n } else {\n this.state.totalFilteredEndpoints = this.endpoints.length;\n }\n }\n };\n\n function frontEndpointFilter(endpoints, tags, filterValue) {\n if (!endpoints || !endpoints.length || !filterValue) {\n return endpoints;\n }\n var keywords = filterValue.split(' ');\n return _.filter(endpoints, function (endpoint) {\n var statusString = convertStatusToString(endpoint.Status);\n return _.every(keywords, function (keyword) {\n var lowerCaseKeyword = keyword.toLowerCase();\n return (\n _.includes(endpoint.Name.toLowerCase(), lowerCaseKeyword) ||\n _.includes(endpoint.GroupName.toLowerCase(), lowerCaseKeyword) ||\n _.includes(endpoint.URL.toLowerCase(), lowerCaseKeyword) ||\n _.some(endpoint.TagIds, (tagId) => {\n const tag = tags.find((t) => t.Id === tagId);\n if (!tag) {\n return false;\n }\n return _.includes(tag.Name.toLowerCase(), lowerCaseKeyword);\n }) ||\n _.includes(statusString, keyword)\n );\n });\n });\n }\n\n this.hasBackendPagination = function () {\n return this.totalCount && this.totalCount > ENDPOINTS_CACHE_SIZE;\n };\n\n this.clearPollTimeout = function () {\n if (this.state.pollingTimeout) {\n clearTimeout(this.state.pollingTimeout);\n this.state.pollingTimeout = 0;\n }\n };\n\n this.$onDestory = function () {\n this.clearPollTimeout();\n };\n\n this.getCurrentPage = async function (start, paginatedItemLimit, textFilter, init = false) {\n try {\n const { totalCount, endpoints } = await this.retrievePage(start, paginatedItemLimit, textFilter);\n if (init) {\n this.totalCount = totalCount;\n this.endpoints = endpoints;\n this.onTextFilterChange(init);\n } else {\n this.state.filteredEndpoints = endpoints;\n this.state.totalFilteredEndpoints = totalCount;\n }\n this.state.loading = false;\n\n const hasOfflineEndpoint = endpoints.some((e) => e.Status !== 1);\n if (hasOfflineEndpoint) {\n this.state.pollingTimeout = setTimeout(() => this.getCurrentPage(start, paginatedItemLimit, textFilter), ENDPOINTS_POLLING_INTERVAL);\n }\n } catch (err) {\n Notifications.error('Failed loading page data', err);\n }\n };\n\n this.paginationChangedAction = async function (init = false) {\n this.clearPollTimeout();\n if (init || this.hasBackendPagination()) {\n this.state.loading = true;\n this.state.filteredEndpoints = [];\n const start = (this.state.pageNumber - 1) * this.state.paginatedItemLimit + 1;\n if (init) {\n await this.getCurrentPage(start, ENDPOINTS_CACHE_SIZE, null, init);\n } else {\n await this.getCurrentPage(start, this.state.paginatedItemLimit, this.state.textFilter);\n }\n }\n };\n\n this.pageChangeHandler = function (newPageNumber) {\n this.state.pageNumber = newPageNumber;\n this.paginationChangedAction();\n };\n\n this.changePaginationLimit = function () {\n PaginationService.setPaginationLimit(this.tableKey, this.state.paginatedItemLimit);\n this.paginationChangedAction();\n };\n\n function convertStatusToString(status) {\n return status === 1 ? 'up' : 'down';\n }\n\n this.showKubeconfigButton = function () {\n if (window.location.protocol !== 'https:') {\n return false;\n }\n return _.some(this.endpoints, (endpoint) => isKubernetesMode(endpoint));\n };\n\n function isKubernetesMode(endpoint) {\n return [\n PortainerEndpointTypes.KubernetesLocalEnvironment,\n PortainerEndpointTypes.AgentOnKubernetesEnvironment,\n PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment,\n ].includes(endpoint.Type);\n }\n\n this.showKubeconfigModal = async function () {\n const kubeEnvironments = _.filter(this.endpoints, (endpoint) => isKubernetesMode(endpoint));\n const options = kubeEnvironments.map(function (environment) {\n return {\n text: `${environment.Name} (${environment.URL})`,\n value: environment.Id,\n };\n });\n\n let expiryMessage = '';\n try {\n expiryMessage = await KubernetesConfigService.expiryMessage();\n } catch (e) {\n Notifications.error('Failed fetching kubeconfig expiry time', e);\n }\n\n ModalService.confirmKubeconfigSelection(options, expiryMessage, async function (selectedEnvironmentIDs) {\n if (selectedEnvironmentIDs.length === 0) {\n Notifications.warning('No environment was selected');\n return;\n }\n try {\n await KubernetesConfigService.downloadKubeconfigFile(selectedEnvironmentIDs);\n } catch (e) {\n Notifications.error('Failed downloading kubeconfig file', e);\n }\n });\n };\n\n this.$onInit = function () {\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n this.state.paginatedItemLimit = PaginationService.getPaginationLimit(this.tableKey);\n if (textFilter) {\n this.state.textFilter = textFilter;\n }\n this.paginationChangedAction(true);\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./endpointList.html');\n\nangular.module('portainer.app').component('endpointList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointListController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tags: '<',\n tableKey: '@',\n dashboardAction: '<',\n snapshotAction: '<',\n showSnapshotAction: '<',\n editAction: '<',\n isAdmin: '<',\n retrievePage: '<',\n endpointInitTime: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./endpointSelector.html');\n\nangular.module('portainer.app').component('endpointSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointSelectorController',\n bindings: {\n model: '=',\n endpoints: '<',\n groups: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('EndpointSelectorController', function () {\n var ctrl = this;\n\n this.sortGroups = function (groups) {\n return _.sortBy(groups, ['name']);\n };\n\n this.groupEndpoints = function (endpoint) {\n for (var i = 0; i < ctrl.availableGroups.length; i++) {\n var group = ctrl.availableGroups[i];\n\n if (endpoint.GroupId === group.Id) {\n return group.Name;\n }\n }\n };\n\n this.$onInit = function () {\n this.availableGroups = filterEmptyGroups(this.groups, this.endpoints);\n };\n\n function filterEmptyGroups(groups, endpoints) {\n return groups.filter(function f(group) {\n for (var i = 0; i < endpoints.length; i++) {\n var endpoint = endpoints[i];\n if (endpoint.GroupId === group.Id) {\n return true;\n }\n }\n return false;\n });\n }\n});\n","const autoNgTemplateLoaderTemplate1 = require('./porEndpointSecurity.html');\n\nangular.module('portainer.app').component('porEndpointSecurity', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'porEndpointSecurityController',\n bindings: {\n // This object will be populated with the form data.\n // Model reference in endpointSecurityModel.js\n formData: '=',\n // The component will use this object to initialize the default values\n // if present.\n endpoint: '<',\n },\n});\n","angular.module('portainer.app').controller('porEndpointSecurityController', [\n function () {\n var ctrl = this;\n\n this.$onInit = $onInit;\n function $onInit() {\n if (ctrl.endpoint) {\n var endpoint = ctrl.endpoint;\n var TLS = endpoint.TLSConfig.TLS;\n ctrl.formData.TLS = TLS;\n var CACert = endpoint.TLSConfig.TLSCACert;\n ctrl.formData.TLSCACert = CACert;\n var cert = endpoint.TLSConfig.TLSCert;\n ctrl.formData.TLSCert = cert;\n var key = endpoint.TLSConfig.TLSKey;\n ctrl.formData.TLSKey = key;\n\n if (TLS) {\n if (CACert && cert && key) {\n ctrl.formData.TLSMode = 'tls_client_ca';\n } else if (cert && key) {\n ctrl.formData.TLSMode = 'tls_client_noca';\n } else if (CACert) {\n ctrl.formData.TLSMode = 'tls_ca';\n } else {\n ctrl.formData.TLSMode = 'tls_only';\n }\n }\n }\n }\n },\n]);\n","export function EndpointSecurityFormData() {\n this.TLS = false;\n this.TLSMode = 'tls_client_ca';\n this.TLSCACert = null;\n this.TLSCert = null;\n this.TLSKey = null;\n}\n","import { parseDotEnvFile, convertToArrayOfStrings } from '@/portainer/helpers/env-vars';\n\nexport default class EnvironmentVariablesPanelController {\n /* @ngInject */\n constructor() {\n this.mode = 'simple';\n this.editorText = '';\n\n this.switchEnvMode = this.switchEnvMode.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.handleSimpleChange = this.handleSimpleChange.bind(this);\n }\n\n switchEnvMode() {\n if (this.mode === 'simple') {\n const editorText = convertToArrayOfStrings(this.ngModel).join('\\n');\n\n this.editorText = editorText;\n\n this.mode = 'advanced';\n } else {\n this.mode = 'simple';\n }\n }\n\n handleSimpleChange(value) {\n this.onChange(value);\n }\n\n editorUpdate(cm) {\n this.editorText = cm.getValue();\n this.onChange(parseDotEnvFile(this.editorText));\n }\n}\n","class EnvironmentVariablesSimpleModeItemController {\n onChangeName(name) {\n const fieldIsInvalid = typeof name === 'undefined';\n if (fieldIsInvalid) {\n return;\n }\n\n this.onChange(this.index, { ...this.variable, name });\n }\n\n onChangeValue(value) {\n const fieldIsInvalid = typeof value === 'undefined';\n if (fieldIsInvalid) {\n return;\n }\n\n this.onChange(this.index, { ...this.variable, value });\n }\n\n hasValue() {\n return typeof this.variable.value !== 'undefined';\n }\n\n removeValue() {\n this.onChange(this.index, { name: this.variable.name });\n }\n\n $onInit() {\n this.formName = `variableForm${this.index}`;\n }\n}\n\nexport default EnvironmentVariablesSimpleModeItemController;\n","const autoNgTemplateLoaderTemplate1 = require('./environment-variables-simple-mode-item.html');\n\nimport angular from 'angular';\nimport controller from './environment-variables-simple-mode-item.controller.js';\n\nexport const environmentVariablesSimpleModeItem = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n variable: '<',\n index: '<',\n\n onChange: '<',\n onRemove: '<',\n },\n};\n\nangular.module('portainer.app').component('environmentVariablesSimpleModeItem', environmentVariablesSimpleModeItem);\n","import { parseDotEnvFile } from '@/portainer/helpers/env-vars';\n\nexport default class EnvironmentVariablesSimpleModeController {\n /* @ngInject */\n constructor($async) {\n this.$async = $async;\n\n this.onChangeVariable = this.onChangeVariable.bind(this);\n this.remove = this.remove.bind(this);\n }\n\n add() {\n this.onChange([...this.ngModel, { name: '', value: '' }]);\n }\n\n remove(index) {\n this.onChange(this.ngModel.filter((_, i) => i !== index));\n }\n\n addFromFile(file) {\n return this.$async(async () => {\n if (!file) {\n return;\n }\n const text = await this.getTextFromFile(file);\n const parsed = parseDotEnvFile(text);\n this.onChange(this.ngModel.concat(parsed));\n });\n }\n\n getTextFromFile(file) {\n return new Promise((resolve, reject) => {\n const temporaryFileReader = new FileReader();\n temporaryFileReader.readAsText(file);\n temporaryFileReader.onload = (event) => resolve(event.target.result);\n temporaryFileReader.onerror = (error) => reject(error);\n });\n }\n\n onChangeVariable(index, variable) {\n this.onChange(this.ngModel.map((v, i) => (i !== index ? v : variable)));\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./environment-variables-simple-mode.html');\n\nimport angular from 'angular';\n\nimport './environment-variables-simple-mode.css';\n\nimport controller from './environment-variables-simple-mode.controller';\n\nangular.module('portainer.app').component('environmentVariablesSimpleMode', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n ngModel: '<',\n onSwitchModeClick: '<',\n onChange: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./environment-variables-panel.html');\n\nimport angular from 'angular';\n\nimport './environment-variables-panel.css';\n\nimport controller from './environment-variables-panel.controller.js';\n\nangular.module('portainer.app').component('environmentVariablesPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n ngModel: '<',\n explanation: '@',\n onChange: '<',\n },\n});\n","import angular from 'angular';\n// ng-focus-if pkg from: https://github.com/hiebj/ng-focus-if\nangular.module('portainer.app').directive('focusIf', function ($timeout) {\n return {\n restrict: 'A',\n link: function ($scope, $element, $attrs) {\n var dom = $element[0];\n if ($attrs.focusIf) {\n $scope.$watch($attrs.focusIf, focus);\n } else {\n focus(true);\n }\n function focus(condition) {\n if (condition) {\n $timeout(function () {\n dom.focus();\n }, $scope.$eval($attrs.focusDelay) || 0);\n }\n }\n },\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./file-upload-form.html');\n\nexport const fileUploadForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n\n bindings: {\n file: '<',\n ngRequired: '<',\n onChange: '<',\n },\n\n transclude: {\n description: '?fileUploadDescription',\n },\n};\n","import angular from 'angular';\n\nimport { webEditorForm } from './web-editor-form';\nimport { fileUploadForm } from './file-upload-form';\n\nimport { SwitchFieldAngular } from './SwitchField';\n\nimport { FileUploadFieldAngular } from './FileUpload';\n\nexport default angular\n .module('portainer.app.components.form', [])\n .component('webEditorForm', webEditorForm)\n .component('fileUploadForm', fileUploadForm)\n .component('fileUploadField', FileUploadFieldAngular)\n .component('porSwitchField', SwitchFieldAngular).name;\n","const autoNgTemplateLoaderTemplate1 = require('./web-editor-form.html');\n\nimport controller from './web-editor-form.controller.js';\n\nexport const webEditorForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n identifier: '@',\n placeholder: '@',\n yml: '<',\n value: '<',\n\n onChange: '<',\n },\n\n transclude: {\n description: '?editorDescription',\n },\n};\n","class WebEditorFormController {\n /* @ngInject */\n constructor() {\n this.editorUpdate = this.editorUpdate.bind(this);\n }\n\n editorUpdate(cm) {\n this.onChange(cm.getValue());\n }\n}\n\nexport default WebEditorFormController;\n","class GitFormAdditionalFileItemController {\n onChangePath(value) {\n const fieldIsInvalid = typeof value === 'undefined';\n if (fieldIsInvalid) {\n return;\n }\n this.onChange(this.index, { value });\n }\n\n removeValue() {\n this.onChange(this.index);\n }\n\n $onInit() {\n this.formName = `variableForm${this.index}`;\n }\n}\n\nexport default GitFormAdditionalFileItemController;\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-additional-file-item.html');\n\nimport controller from './git-form-additional-file-item.controller.js';\n\nexport const gitFormAdditionalFileItem = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n\n bindings: {\n variable: '<',\n index: '<',\n\n onChange: '<',\n onRemove: '<',\n },\n};\n","class GitFormAutoUpdateFieldsetController {\n /* @ngInject */\n constructor() {\n this.add = this.add.bind(this);\n this.onChangeVariable = this.onChangeVariable.bind(this);\n }\n\n add() {\n this.model.AdditionalFiles.push('');\n }\n\n onChangeVariable(index, variable) {\n if (!variable) {\n this.model.AdditionalFiles.splice(index, 1);\n } else {\n this.model.AdditionalFiles[index] = variable.value;\n }\n\n this.onChange({\n ...this.model,\n AdditionalFiles: this.model.AdditionalFiles,\n });\n }\n}\n\nexport default GitFormAutoUpdateFieldsetController;\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-additional-files-panel.html');\n\nimport controller from './git-form-additional-files-panel.controller.js';\n\nexport const gitFormAdditionalFilesPanel = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n onChange: '<',\n },\n};\n","class GitFormComposeAuthFieldsetController {\n /* @ngInject */\n constructor($scope) {\n Object.assign(this, { $scope });\n\n this.authValues = {\n username: '',\n password: '',\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.onChangeField = this.onChangeField.bind(this);\n this.onChangeAuth = this.onChangeAuth.bind(this);\n this.onChangeUsername = this.onChangeField('RepositoryUsername');\n this.onChangePassword = this.onChangeField('RepositoryPassword');\n }\n\n handleChange(...args) {\n this.$scope.$evalAsync(() => {\n this.onChange(...args);\n });\n }\n\n onChangeField(field) {\n return (value) => {\n this.handleChange({\n ...this.model,\n [field]: value,\n });\n };\n }\n\n onChangeAuth(auth) {\n if (!auth) {\n this.authValues.username = this.model.RepositoryUsername;\n this.authValues.password = this.model.RepositoryPassword;\n }\n\n this.handleChange({\n ...this.model,\n RepositoryAuthentication: auth,\n RepositoryUsername: auth ? this.authValues.username : '',\n RepositoryPassword: auth ? this.authValues.password : '',\n });\n }\n\n $onInit() {\n if (this.model.RepositoryAuthentication) {\n this.authValues.username = this.model.RepositoryUsername;\n this.authValues.password = this.model.RepositoryPassword;\n }\n }\n}\n\nexport default GitFormComposeAuthFieldsetController;\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-auth-fieldset.html');\n\nimport controller from './git-form-auth-fieldset.controller.js';\nimport './git-form-auth-fieldset.css';\n\nexport const gitFormAuthFieldset = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n onChange: '<',\n showAuthExplanation: '<',\n isEdit: '<',\n },\n};\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nclass GitFormAutoUpdateFieldsetController {\n /* @ngInject */\n constructor($scope, clipboard) {\n Object.assign(this, { $scope, clipboard });\n\n this.onChangeAutoUpdate = this.onChangeField('RepositoryAutomaticUpdates');\n this.onChangeAutoUpdateForce = this.onChangeField('RepositoryAutomaticUpdatesForce');\n this.onChangeMechanism = this.onChangeField('RepositoryMechanism');\n this.onChangeInterval = this.onChangeField('RepositoryFetchInterval');\n this.onChangeForcePullImage = this.onChangeField('ForcePullImage');\n\n this.limitedFeature = FeatureId.FORCE_REDEPLOYMENT;\n this.limitedFeaturePullImage = FeatureId.STACK_PULL_IMAGE;\n }\n\n copyWebhook() {\n this.clipboard.copyText(this.model.RepositoryWebhookURL);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n }\n\n onChangeField(field) {\n return (value) => {\n this.$scope.$evalAsync(() => {\n this.onChange({\n ...this.model,\n [field]: value,\n });\n });\n };\n }\n}\n\nexport default GitFormAutoUpdateFieldsetController;\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-auto-update-fieldset.html');\n\nimport controller from './git-form-auto-update-fieldset.controller.js';\n\nexport const gitFormAutoUpdateFieldset = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n onChange: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-compose-path-field.html');\n\nexport const gitFormComposePathField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n deployMethod: '@',\n value: '<',\n onChange: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-info-panel.html');\n\nexport const gitFormInfoPanel = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n url: '<',\n configFilePath: '<',\n additionalFiles: '<',\n className: '@',\n type: '@',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-ref-field.html');\n\nexport const gitFormRefField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n value: '<',\n onChange: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./git-form-url-field.html');\n\nexport const gitFormUrlField = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n value: '<',\n onChange: '<',\n },\n};\n","export default class GitFormController {\n /* @ngInject */\n constructor() {\n this.onChangeField = this.onChangeField.bind(this);\n this.onChangeURL = this.onChangeField('RepositoryURL');\n this.onChangeRefName = this.onChangeField('RepositoryReferenceName');\n this.onChangeComposePath = this.onChangeField('ComposeFilePathInRepository');\n }\n\n onChangeField(field) {\n return (value) => {\n this.onChange({\n ...this.model,\n [field]: value,\n });\n };\n }\n\n $onInit() {\n this.deployMethod = this.deployMethod || 'compose';\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./git-form.html');\n\nimport controller from './git-form.controller.js';\n\nexport const gitForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n deployMethod: '@',\n model: '<',\n onChange: '<',\n additionalFile: '<',\n autoUpdate: '<',\n showAuthExplanation: '<',\n },\n};\n","import angular from 'angular';\n\nimport { gitForm } from './git-form';\nimport { gitFormAuthFieldset } from './git-form-auth-fieldset';\nimport { gitFormAdditionalFilesPanel } from './git-form-additional-files-panel';\nimport { gitFormAdditionalFileItem } from './/git-form-additional-files-panel/git-form-additional-file-item';\nimport { gitFormAutoUpdateFieldset } from './git-form-auto-update-fieldset';\nimport { gitFormComposePathField } from './git-form-compose-path-field';\nimport { gitFormRefField } from './git-form-ref-field';\nimport { gitFormUrlField } from './git-form-url-field';\nimport { gitFormInfoPanel } from './git-form-info-panel';\n\nexport default angular\n .module('portainer.app.components.forms.git', [])\n .component('gitFormComposePathField', gitFormComposePathField)\n .component('gitFormRefField', gitFormRefField)\n .component('gitForm', gitForm)\n .component('gitFormUrlField', gitFormUrlField)\n .component('gitFormInfoPanel', gitFormInfoPanel)\n .component('gitFormAdditionalFilesPanel', gitFormAdditionalFilesPanel)\n .component('gitFormAdditionalFileItem', gitFormAdditionalFileItem)\n .component('gitFormAutoUpdateFieldset', gitFormAutoUpdateFieldset)\n .component('gitFormAuthFieldset', gitFormAuthFieldset).name;\n","const autoNgTemplateLoaderTemplate1 = require('./groupForm.html');\n\nimport angular from 'angular';\nimport GroupFormController from './groupFormController';\n\nangular.module('portainer.app').component('groupForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: GroupFormController,\n bindings: {\n loaded: '<',\n pageType: '@',\n model: '=',\n availableEndpoints: '=',\n availableTags: '<',\n associatedEndpoints: '=',\n addLabelAction: '<',\n removeLabelAction: '<',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n onCreateTag: '<',\n },\n});\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass GroupFormController {\n /* @ngInject */\n constructor($q, EndpointService, GroupService, Notifications, Authentication) {\n this.$q = $q;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.Notifications = Notifications;\n this.Authentication = Authentication;\n\n this.associateEndpoint = this.associateEndpoint.bind(this);\n this.dissociateEndpoint = this.dissociateEndpoint.bind(this);\n this.getPaginatedEndpointsByGroup = this.getPaginatedEndpointsByGroup.bind(this);\n }\n\n $onInit() {\n this.state = {\n available: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n associated: {\n limit: '10',\n filter: '',\n pageNumber: 1,\n totalCount: 0,\n },\n allowCreateTag: this.Authentication.isAdmin(),\n };\n }\n associateEndpoint(endpoint) {\n if (this.pageType === 'create' && !_.includes(this.associatedEndpoints, endpoint)) {\n this.associatedEndpoints.push(endpoint);\n } else if (this.pageType === 'edit') {\n this.GroupService.addEndpoint(this.model.Id, endpoint)\n .then(() => {\n this.Notifications.success('Success', 'Environment successfully added to group');\n this.reloadTablesContent();\n })\n .catch((err) => this.Notifications.error('Error', err, 'Unable to add environment to group'));\n }\n }\n\n dissociateEndpoint(endpoint) {\n if (this.pageType === 'create') {\n _.remove(this.associatedEndpoints, (item) => item.Id === endpoint.Id);\n } else if (this.pageType === 'edit') {\n this.GroupService.removeEndpoint(this.model.Id, endpoint.Id)\n .then(() => {\n this.Notifications.success('Success', 'Environment successfully removed from group');\n this.reloadTablesContent();\n })\n .catch((err) => this.Notifications.error('Error', err, 'Unable to remove environment from group'));\n }\n }\n\n reloadTablesContent() {\n this.getPaginatedEndpointsByGroup(this.pageType, 'available');\n this.getPaginatedEndpointsByGroup(this.pageType, 'associated');\n this.GroupService.group(this.model.Id).then((data) => {\n this.model = data;\n });\n }\n\n getPaginatedEndpointsByGroup(pageType, tableType) {\n if (tableType === 'available') {\n const context = this.state.available;\n const start = (context.pageNumber - 1) * context.limit + 1;\n this.EndpointService.endpointsByGroup(start, context.limit, context.filter, 1).then((data) => {\n this.availableEndpoints = data.value;\n this.state.available.totalCount = data.totalCount;\n });\n } else if (tableType === 'associated' && pageType === 'edit') {\n const groupId = this.model.Id ? this.model.Id : 1;\n const context = this.state.associated;\n const start = (context.pageNumber - 1) * context.limit + 1;\n this.EndpointService.endpointsByGroup(start, context.limit, context.filter, groupId).then((data) => {\n this.associatedEndpoints = data.value;\n this.state.associated.totalCount = data.totalCount;\n });\n }\n // ignore (associated + create) group as there is no backend pagination for this table\n }\n}\n\nangular.module('portainer.app').controller('GroupFormController', GroupFormController);\nexport default GroupFormController;\n","class KubernetesAppGitFormController {\n /* @ngInject */\n constructor($async, $state, StackService, ModalService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.StackService = StackService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n\n this.state = {\n saveGitSettingsInProgress: false,\n redeployInProgress: false,\n showConfig: true,\n isEdit: false,\n };\n\n this.formValues = {\n RefName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n };\n\n this.onChange = this.onChange.bind(this);\n this.onChangeRef = this.onChangeRef.bind(this);\n }\n\n onChangeRef(value) {\n this.onChange({ RefName: value });\n }\n\n onChange(values) {\n this.formValues = {\n ...this.formValues,\n ...values,\n };\n }\n\n async pullAndRedeployApplication() {\n return this.$async(async () => {\n try {\n const confirmed = await this.ModalService.confirmAsync({\n title: 'Are you sure?',\n message: 'Any changes to this application will be overriden by the definition in git and may cause a service interruption. Do you wish to continue?',\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-warning',\n },\n },\n });\n if (!confirmed) {\n return;\n }\n this.state.redeployInProgress = true;\n await this.StackService.updateKubeGit(this.stack.Id, this.stack.EndpointId, this.namespace, this.formValues);\n this.Notifications.success('Pulled and redeployed stack successfully');\n await this.$state.reload(this.$state.current);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed redeploying application');\n } finally {\n this.state.redeployInProgress = false;\n }\n });\n }\n\n async saveGitSettings() {\n return this.$async(async () => {\n try {\n this.state.saveGitSettingsInProgress = true;\n await this.StackService.updateKubeStack({ EndpointId: this.stack.EndpointId, Id: this.stack.Id }, null, this.formValues);\n this.Notifications.success('Save stack settings successfully');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to save application settings');\n } finally {\n this.state.saveGitSettingsInProgress = false;\n }\n });\n }\n\n isSubmitButtonDisabled() {\n return this.state.saveGitSettingsInProgress || this.state.redeployInProgress;\n }\n\n $onInit() {\n this.formValues.RefName = this.stack.GitConfig.ReferenceName;\n if (this.stack.GitConfig && this.stack.GitConfig.Authentication) {\n this.formValues.RepositoryUsername = this.stack.GitConfig.Authentication.Username;\n this.formValues.RepositoryAuthentication = true;\n this.state.isEdit = true;\n }\n }\n}\n\nexport default KubernetesAppGitFormController;\n","const autoNgTemplateLoaderTemplate1 = require('./kubernetes-app-git-form.html');\n\nimport angular from 'angular';\nimport controller from './kubernetes-app-git-form.controller';\n\nconst kubernetesAppGitForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n stack: '<',\n namespace: '<',\n },\n};\n\nangular.module('portainer.app').component('kubernetesAppGitForm', kubernetesAppGitForm);\n","import uuidv4 from 'uuid/v4';\nimport { RepositoryMechanismTypes } from 'Kubernetes/models/deploy';\nclass KubernetesRedeployAppGitFormController {\n /* @ngInject */\n constructor($async, $state, $analytics, StackService, ModalService, Notifications, WebhookHelper) {\n this.$async = $async;\n this.$state = $state;\n this.$analytics = $analytics;\n this.StackService = StackService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.WebhookHelper = WebhookHelper;\n\n this.state = {\n saveGitSettingsInProgress: false,\n redeployInProgress: false,\n showConfig: false,\n isEdit: false,\n hasUnsavedChanges: false,\n };\n\n this.formValues = {\n RefName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n // auto update\n AutoUpdate: {\n RepositoryAutomaticUpdates: false,\n RepositoryAutomaticUpdatesForce: false,\n RepositoryMechanism: RepositoryMechanismTypes.INTERVAL,\n RepositoryFetchInterval: '5m',\n RepositoryWebhookURL: '',\n },\n };\n\n this.onChange = this.onChange.bind(this);\n this.onChangeRef = this.onChangeRef.bind(this);\n this.onChangeAutoUpdate = this.onChangeAutoUpdate.bind(this);\n }\n\n onChangeRef(value) {\n this.onChange({ RefName: value });\n }\n\n onChange(values) {\n this.formValues = {\n ...this.formValues,\n ...values,\n };\n\n this.state.hasUnsavedChanges = angular.toJson(this.savedFormValues) !== angular.toJson(this.formValues);\n }\n\n onChangeAutoUpdate(values) {\n this.onChange({\n AutoUpdate: {\n ...this.formValues.AutoUpdate,\n ...values,\n },\n });\n }\n\n buildAnalyticsProperties() {\n const metadata = {\n 'automatic-updates': automaticUpdatesLabel(this.formValues.AutoUpdate.RepositoryAutomaticUpdates, this.formValues.AutoUpdate.RepositoryMechanism),\n };\n\n return { metadata };\n\n function automaticUpdatesLabel(repositoryAutomaticUpdates, repositoryMechanism) {\n switch (repositoryAutomaticUpdates && repositoryMechanism) {\n case RepositoryMechanismTypes.INTERVAL:\n return 'polling';\n case RepositoryMechanismTypes.WEBHOOK:\n return 'webhook';\n default:\n return 'off';\n }\n }\n }\n\n async pullAndRedeployApplication() {\n return this.$async(async () => {\n try {\n const confirmed = await this.ModalService.confirmAsync({\n title: 'Are you sure?',\n message: 'Any changes to this application will be overriden by the definition in git and may cause a service interruption. Do you wish to continue?',\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-warning',\n },\n },\n });\n if (!confirmed) {\n return;\n }\n this.state.redeployInProgress = true;\n await this.StackService.updateKubeGit(this.stack.Id, this.stack.EndpointId, this.namespace, this.formValues);\n this.Notifications.success('Pulled and redeployed stack successfully');\n await this.$state.reload();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed redeploying application');\n } finally {\n this.state.redeployInProgress = false;\n }\n });\n }\n\n async saveGitSettings() {\n return this.$async(async () => {\n try {\n this.state.saveGitSettingsInProgress = true;\n\n await this.StackService.updateKubeStack({ EndpointId: this.stack.EndpointId, Id: this.stack.Id }, null, this.formValues);\n this.savedFormValues = angular.copy(this.formValues);\n this.state.hasUnsavedChanges = false;\n this.Notifications.success('Save stack settings successfully');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to save application settings');\n } finally {\n this.state.saveGitSettingsInProgress = false;\n }\n });\n }\n\n isSubmitButtonDisabled() {\n return this.state.saveGitSettingsInProgress || this.state.redeployInProgress;\n }\n\n $onInit() {\n this.formValues.RefName = this.stack.GitConfig.ReferenceName;\n // Init auto update\n if (this.stack.AutoUpdate && (this.stack.AutoUpdate.Interval || this.stack.AutoUpdate.Webhook)) {\n this.formValues.AutoUpdate.RepositoryAutomaticUpdates = true;\n\n this.formValues.AutoUpdate.RepositoryAutomaticUpdatesForce = this.stack.AutoUpdate.ForceUpdate;\n\n if (this.stack.AutoUpdate.Interval) {\n this.formValues.AutoUpdate.RepositoryMechanism = RepositoryMechanismTypes.INTERVAL;\n this.formValues.AutoUpdate.RepositoryFetchInterval = this.stack.AutoUpdate.Interval;\n } else if (this.stack.AutoUpdate.Webhook) {\n this.formValues.AutoUpdate.RepositoryMechanism = RepositoryMechanismTypes.WEBHOOK;\n this.formValues.AutoUpdate.RepositoryWebhookURL = this.WebhookHelper.returnStackWebhookUrl(this.stack.AutoUpdate.Webhook);\n }\n }\n\n if (!this.formValues.AutoUpdate.RepositoryWebhookURL) {\n this.formValues.AutoUpdate.RepositoryWebhookURL = this.WebhookHelper.returnStackWebhookUrl(uuidv4());\n }\n\n if (this.stack.GitConfig && this.stack.GitConfig.Authentication) {\n this.formValues.RepositoryUsername = this.stack.GitConfig.Authentication.Username;\n this.formValues.RepositoryAuthentication = true;\n this.state.isEdit = true;\n }\n\n this.savedFormValues = angular.copy(this.formValues);\n }\n}\n\nexport default KubernetesRedeployAppGitFormController;\n","const autoNgTemplateLoaderTemplate1 = require('./kubernetes-redeploy-app-git-form.html');\n\nimport angular from 'angular';\nimport controller from './kubernetes-redeploy-app-git-form.controller';\n\nconst kubernetesRedeployAppGitForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n stack: '<',\n namespace: '<',\n },\n};\n\nangular.module('portainer.app').component('kubernetesRedeployAppGitForm', kubernetesRedeployAppGitForm);\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-ecr.html');\n\nangular.module('portainer.app').component('registryFormEcr', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-azure.html');\n\nangular.module('portainer.app').component('registryFormAzure', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-custom.html');\n\nangular.module('portainer.app').component('registryFormCustom', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-dockerhub.html');\n\nangular.module('portainer.app').component('registryFormDockerhub', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./gitlabProjectsDatatable.html');\n\nangular.module('portainer.app').component('gitlabProjectsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GitlabProjectsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n state: '=',\n },\n});\n","angular.module('portainer.app').controller('GitlabProjectsDatatableController', [\n '$scope',\n '$controller',\n 'DatatableService',\n function ($scope, $controller, DatatableService) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n\n this.disableSelection = function (item) {\n return !this.allowSelection(item);\n };\n\n // based on RegistryGitlabProject model\n this.allowSelection = function (item) {\n return item.RegistryEnabled;\n };\n\n this.$onInit = function () {\n this.setDefaults();\n this.prepareTableFromDataset();\n\n this.state.orderBy = this.orderBy;\n var storedOrder = DatatableService.getDataTableOrder(this.tableKey);\n if (storedOrder !== null) {\n this.state.reverseOrder = storedOrder.reverse;\n this.state.orderBy = storedOrder.orderBy;\n }\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n this.onTextFilterChange();\n }\n\n var storedFilters = DatatableService.getDataTableFilters(this.tableKey);\n if (storedFilters !== null) {\n this.filters = storedFilters;\n }\n if (this.filters && this.filters.state) {\n this.filters.state.open = false;\n }\n\n var storedSettings = DatatableService.getDataTableSettings(this.tableKey);\n if (storedSettings !== null) {\n this.settings = storedSettings;\n this.settings.open = false;\n }\n this.onSettingsRepeaterChange();\n };\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-gitlab.html');\n\nangular.module('portainer.app').component('registryFormGitlab', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n retrieveRegistries: '<',\n createRegistries: '<',\n actionInProgress: '<',\n projects: '=',\n state: '=',\n resetDefaults: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-proget.html');\n\nangular.module('portainer.app').component('registryFormProget', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registry-form-quay.html');\n\nangular.module('portainer.app').component('registryFormQuay', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '=',\n formAction: '<',\n formActionLabel: '@',\n actionInProgress: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./stackFromTemplateForm.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('stackFromTemplateForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n template: '=',\n formValues: '=',\n state: '=',\n createTemplate: '<',\n unselectTemplate: '<',\n nameRegex: '<',\n },\n transclude: {\n advanced: '?advancedForm',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./stack-redeploy-git-form.html');\n\nimport angular from 'angular';\nimport controller from './stack-redeploy-git-form.controller.js';\n\nexport const stackRedeployGitForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n model: '<',\n stack: '<',\n },\n};\n\nangular.module('portainer.app').component('stackRedeployGitForm', stackRedeployGitForm);\n","import uuidv4 from 'uuid/v4';\nimport { RepositoryMechanismTypes } from 'Kubernetes/models/deploy';\nclass StackRedeployGitFormController {\n /* @ngInject */\n constructor($async, $state, StackService, ModalService, Notifications, WebhookHelper, FormHelper) {\n this.$async = $async;\n this.$state = $state;\n this.StackService = StackService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.WebhookHelper = WebhookHelper;\n this.FormHelper = FormHelper;\n\n this.state = {\n inProgress: false,\n redeployInProgress: false,\n showConfig: false,\n isEdit: false,\n hasUnsavedChanges: false,\n };\n\n this.formValues = {\n RefName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n Env: [],\n PullImage: false,\n // auto update\n AutoUpdate: {\n RepositoryAutomaticUpdates: false,\n RepositoryAutomaticUpdatesForce: false,\n RepositoryMechanism: RepositoryMechanismTypes.INTERVAL,\n RepositoryFetchInterval: '5m',\n RepositoryWebhookURL: '',\n ForcePullImage: false,\n ShowForcePullImage: false,\n },\n };\n\n this.onChange = this.onChange.bind(this);\n this.onChangeRef = this.onChangeRef.bind(this);\n this.onChangeAutoUpdate = this.onChangeAutoUpdate.bind(this);\n this.onChangeEnvVar = this.onChangeEnvVar.bind(this);\n }\n\n buildAnalyticsProperties() {\n const metadata = {};\n\n if (this.formValues.RepositoryAutomaticUpdates) {\n metadata.automaticUpdates = autoSyncLabel(this.formValues.RepositoryMechanism);\n }\n return { metadata };\n\n function autoSyncLabel(type) {\n switch (type) {\n case RepositoryMechanismTypes.INTERVAL:\n return 'polling';\n case RepositoryMechanismTypes.WEBHOOK:\n return 'webhook';\n }\n return 'off';\n }\n }\n\n onChange(values) {\n this.formValues = {\n ...this.formValues,\n ...values,\n };\n\n this.state.hasUnsavedChanges = angular.toJson(this.savedFormValues) !== angular.toJson(this.formValues);\n }\n\n onChangeRef(value) {\n this.onChange({ RefName: value });\n }\n\n onChangeAutoUpdate(values) {\n this.onChange({\n AutoUpdate: {\n ...this.formValues.AutoUpdate,\n ...values,\n },\n });\n }\n\n onChangeEnvVar(value) {\n this.onChange({ Env: value });\n }\n\n async submit() {\n const isSwarmStack = this.stack.Type === 1;\n const that = this;\n this.ModalService.confirmStackUpdate(\n 'Any changes to this stack or application made locally in Portainer will be overridden, which may cause service interruption. Do you wish to continue',\n isSwarmStack,\n 'btn-warning',\n async function (result) {\n if (!result) {\n return;\n }\n try {\n that.state.redeployInProgress = true;\n await that.StackService.updateGit(that.stack.Id, that.stack.EndpointId, that.FormHelper.removeInvalidEnvVars(that.formValues.Env), false, that.formValues, !!result[0]);\n that.Notifications.success('Pulled and redeployed stack successfully');\n that.$state.reload();\n } catch (err) {\n that.Notifications.error('Failure', err, 'Failed redeploying stack');\n } finally {\n that.state.redeployInProgress = false;\n }\n }\n );\n }\n\n async saveGitSettings() {\n return this.$async(async () => {\n try {\n this.state.inProgress = true;\n const stack = await this.StackService.updateGitStackSettings(\n this.stack.Id,\n this.stack.EndpointId,\n this.FormHelper.removeInvalidEnvVars(this.formValues.Env),\n this.formValues\n );\n this.savedFormValues = angular.copy(this.formValues);\n this.state.hasUnsavedChanges = false;\n this.Notifications.success('Save stack settings successfully');\n\n this.stack = stack;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to save stack settings');\n } finally {\n this.state.inProgress = false;\n }\n });\n }\n\n isSubmitButtonDisabled() {\n return this.state.inProgress || this.state.redeployInProgress;\n }\n\n isAutoUpdateChanged() {\n const wasEnabled = !!(this.stack.AutoUpdate && (this.stack.AutoUpdate.Interval || this.stack.AutoUpdate.Webhook));\n const isEnabled = this.formValues.AutoUpdate.RepositoryAutomaticUpdates;\n return isEnabled !== wasEnabled;\n }\n\n $onInit() {\n this.formValues.RefName = this.model.ReferenceName;\n this.formValues.Env = this.stack.Env;\n // Init auto update\n if (this.stack.AutoUpdate && (this.stack.AutoUpdate.Interval || this.stack.AutoUpdate.Webhook)) {\n this.formValues.AutoUpdate.RepositoryAutomaticUpdates = true;\n this.formValues.AutoUpdate.RepositoryAutomaticUpdatesForce = this.stack.AutoUpdate.ForceUpdate;\n this.formValues.AutoUpdate.ForcePullImage = this.stack.AutoUpdate.ForcePullImage;\n this.formValues.AutoUpdate.ShowForcePullImage = this.stack.Type !== 3;\n\n if (this.stack.AutoUpdate.Interval) {\n this.formValues.AutoUpdate.RepositoryMechanism = RepositoryMechanismTypes.INTERVAL;\n this.formValues.AutoUpdate.RepositoryFetchInterval = this.stack.AutoUpdate.Interval;\n } else if (this.stack.AutoUpdate.Webhook) {\n this.formValues.AutoUpdate.RepositoryMechanism = RepositoryMechanismTypes.WEBHOOK;\n this.formValues.AutoUpdate.RepositoryWebhookURL = this.WebhookHelper.returnStackWebhookUrl(this.stack.AutoUpdate.Webhook);\n }\n }\n\n if (!this.formValues.AutoUpdate.RepositoryWebhookURL) {\n this.formValues.AutoUpdate.RepositoryWebhookURL = this.WebhookHelper.returnStackWebhookUrl(uuidv4());\n }\n\n if (this.stack.GitConfig && this.stack.GitConfig.Authentication) {\n this.formValues.RepositoryUsername = this.stack.GitConfig.Authentication.Username;\n this.formValues.RepositoryAuthentication = true;\n this.state.isEdit = true;\n }\n\n this.savedFormValues = angular.copy(this.formValues);\n }\n}\n\nexport default StackRedeployGitFormController;\n","const autoNgTemplateLoaderTemplate1 = require('./groupAssociationTable.html');\n\nimport _ from 'lodash-es';\nimport PortainerEndpointTagHelper from 'Portainer/helpers/tagHelper';\n\nangular.module('portainer.app').component('groupAssociationTable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: function () {\n this.state = {\n orderBy: 'Name',\n reverseOrder: false,\n paginatedItemLimit: '10',\n textFilter: '',\n loading: true,\n pageNumber: 1,\n };\n\n this.changeOrderBy = function (orderField) {\n this.state.reverseOrder = this.state.orderBy === orderField ? !this.state.reverseOrder : false;\n this.state.orderBy = orderField;\n };\n\n this.onTextFilterChange = function () {\n this.paginationChangedAction();\n };\n\n this.onPageChanged = function (newPageNumber) {\n this.paginationState.pageNumber = newPageNumber;\n this.paginationChangedAction();\n };\n\n this.onPaginationLimitChanged = function () {\n this.paginationChangedAction();\n };\n\n this.paginationChangedAction = function () {\n this.retrievePage(this.pageType, this.tableType);\n };\n\n this.$onChanges = function (changes) {\n if (changes.loaded && changes.loaded.currentValue) {\n this.paginationChangedAction();\n }\n };\n\n this.tagIdsToTagNames = function tagIdsToTagNames(tagIds) {\n return PortainerEndpointTagHelper.idsToTagNames(this.tags, tagIds).join(', ') || '-';\n };\n\n this.groupIdToGroupName = function groupIdToGroupName(groupId) {\n const group = _.find(this.groups, { Id: groupId });\n return group ? group.Name : '';\n };\n },\n bindings: {\n paginationState: '=',\n loaded: '<',\n pageType: '<',\n tableType: '@',\n retrievePage: '<',\n dataset: '<',\n entryClick: '<',\n emptyDatasetMessage: '@',\n tags: '<',\n showTags: '<',\n groups: '<',\n showGroups: '<',\n hasBackendPagination: '<',\n cyValue: '@',\n },\n});\n","import { PropsWithChildren } from 'react';\n\nimport styles from './Code.module.css';\n\nexport function Code({ children }: PropsWithChildren) {\n return {children};\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"code\":\"app-portainer-components-Code-Code-module__code\"};","import { PropsWithChildren, useState, useEffect } from 'react';\nimport clsx from 'clsx';\n\nimport { Button } from '../Button';\n\nimport styles from './CopyButton.module.css';\n\nexport interface Props {\n copyText: string;\n fadeDelay?: number;\n displayText?: string;\n className?: string;\n}\n\nexport function CopyButton({\n copyText,\n fadeDelay = 1000,\n displayText = 'copied',\n className,\n children,\n}: PropsWithChildren) {\n const [isFading, setIsFading] = useState(false);\n\n useEffect(() => {\n const fadeoutTime = setTimeout(() => setIsFading(false), fadeDelay);\n // clear timeout when component unmounts\n return () => {\n clearTimeout(fadeoutTime);\n };\n }, [isFading, fadeDelay]);\n\n function onClick() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Clipboard\n // https://caniuse.com/?search=clipboard\n if (navigator.clipboard) {\n navigator.clipboard.writeText(copyText);\n } else {\n // https://stackoverflow.com/a/57192718\n const inputEl = document.createElement('input');\n inputEl.value = copyText;\n inputEl.type = 'text';\n document.body.appendChild(inputEl);\n inputEl.select();\n document.execCommand('copy');\n inputEl.type = 'hidden';\n document.body.removeChild(inputEl);\n }\n setIsFading(true);\n }\n\n return (\n
    \n \n {children}\n \n\n \n {displayText}\n \n
    \n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"fadeout\":\"app-portainer-components-Button-CopyButton-CopyButton-module__fadeout\",\"fadeOut\":\"app-portainer-components-Button-CopyButton-CopyButton-module__fadeOut\",\"container\":\"app-portainer-components-Button-CopyButton-CopyButton-module__container\",\"displayText\":\"app-portainer-components-Button-CopyButton-CopyButton-module__display-text\"};","import { react2angular } from '@/react-tools/react2angular';\n\nimport { CreateAccessToken } from './CreateAccessToken';\n\nconst CreateAccessTokenAngular = react2angular(CreateAccessToken, [\n 'userId',\n 'onSubmit',\n 'onSuccess',\n 'onError',\n]);\nexport { CreateAccessToken, CreateAccessTokenAngular };\n","import { PropsWithChildren, useEffect, useState } from 'react';\nimport { useRouter } from '@uirouter/react';\nimport { Trans, useTranslation } from 'react-i18next';\n\nimport { Widget, WidgetBody } from '@/portainer/components/widget';\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { Button } from '@/portainer/components/Button';\nimport { FormSectionTitle } from '@/portainer/components/form-components/FormSectionTitle';\nimport { TextTip } from '@/portainer/components/Tip/TextTip';\nimport { Code } from '@/portainer/components/Code';\nimport { CopyButton } from '@/portainer/components/Button/CopyButton';\nimport { Input } from '@/portainer/components/form-components/Input';\n\nimport styles from './CreateAccessToken.module.css';\n\ninterface AccessTokenResponse {\n rawAPIKey: string;\n}\n\nexport interface Props {\n // userId for whom the access token is generated for\n userId: number;\n\n // onSubmit dispatches a successful matomo analytics event\n onSubmit: (description: string) => Promise;\n\n // onError is called when an error occurs; this is a callback to Notifications.error\n onError: (heading: string, err: unknown, message: string) => void;\n}\n\nexport function CreateAccessToken({\n onSubmit,\n onError,\n}: PropsWithChildren) {\n const { t } = useTranslation();\n\n const router = useRouter();\n const [description, setDescription] = useState('');\n const [errorText, setErrorText] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n const [accessToken, setAccessToken] = useState('');\n\n useEffect(() => {\n if (description.length === 0) {\n setErrorText(\n t(\n 'users.access-tokens.create.form.description-field.error.required',\n 'this field is required'\n )\n );\n } else setErrorText('');\n }, [description, t]);\n\n async function generateAccessToken() {\n if (isLoading) {\n return;\n }\n\n setIsLoading(true);\n try {\n const response = await onSubmit(description);\n setAccessToken(response.rawAPIKey);\n } catch (err) {\n onError('Failure', err, 'Failed to generate access token');\n } finally {\n setIsLoading(false);\n }\n }\n\n return (\n \n \n
    \n \n setDescription(e.target.value)}\n value={description}\n />\n \n generateAccessToken()}\n className={styles.addButton}\n >\n {t('users.access-tokens.create.add-button', 'Add access token')}\n \n
    \n {accessToken && (\n <>\n \n \n New access token\n \n \n \n \n Please copy the new access token. You won't be able to view\n the token again.\n \n \n {accessToken}\n \n \n Copy access token\n \n \n
    \n router.stateService.go('portainer.account')}\n >\n \n Done\n \n \n \n )}\n
    \n
    \n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"addButton\":\"app-portainer-views-account-CreateAccessToken-CreateAccessToken-module__add-button\",\"copyButton\":\"app-portainer-views-account-CreateAccessToken-CreateAccessToken-module__copy-button\"};","import { useSref } from '@uirouter/react';\nimport { Trans, useTranslation } from 'react-i18next';\n\nimport i18n from '@/i18n';\nimport { react2angular } from '@/react-tools/react2angular';\n\nimport { Link } from './Link';\nimport styles from './ReactExample.module.css';\n\nexport interface ReactExampleProps {\n /**\n * Example text to displayed in the component.\n */\n text: string;\n}\n\nconst lngs = {\n en: { nativeName: 'English' },\n de: { nativeName: 'Deutsch' },\n he: { nativeName: 'Hebrew' },\n};\n\nexport function ReactExample({ text }: ReactExampleProps) {\n const route = 'portainer.registries';\n const { onClick, href } = useSref(route);\n const { t } = useTranslation();\n\n return (\n
    \n
    {text}
    \n \n
    \n \n \n Registries Link\n \n \n
    \n {Object.entries(lngs).map(([lng, lngConfig]) => (\n i18n.changeLanguage(lng)}\n >\n {lngConfig.nativeName}\n \n ))}\n
    \n );\n}\n\nexport const ReactExampleAngular = react2angular(ReactExample, ['text']);\n","// extracted by mini-css-extract-plugin\nexport default {\"redBg\":\"app-portainer-components-ReactExample-module__red-bg\"};","import angular from 'angular';\n\nimport { CreateAccessTokenAngular } from '../views/account/CreateAccessToken';\n\nimport sidebarModule from './sidebar';\nimport gitFormModule from './forms/git-form';\nimport porAccessManagementModule from './accessManagement';\nimport formComponentsModule from './form-components';\nimport widgetModule from './widget';\nimport boxSelectorModule from './BoxSelector';\nimport dateRangePickerModule from './date-range-picker';\nimport headerModule from './PageHeader';\n\nimport { ReactExampleAngular } from './ReactExample';\nimport { TooltipAngular } from './Tip/Tooltip';\nimport { beFeatureIndicatorAngular } from './BEFeatureIndicator';\n\nexport default angular\n .module('portainer.app.components', [\n headerModule,\n boxSelectorModule,\n widgetModule,\n sidebarModule,\n dateRangePickerModule,\n gitFormModule,\n porAccessManagementModule,\n formComponentsModule,\n ])\n .component('portainerTooltip', TooltipAngular)\n .component('reactExample', ReactExampleAngular)\n .component('beFeatureIndicator', beFeatureIndicatorAngular)\n .component('createAccessToken', CreateAccessTokenAngular).name;\n","const autoNgTemplateLoaderTemplate1 = require('./informationPanelOffline.html');\n\nangular.module('portainer.app').component('informationPanelOffline', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'InformationPanelOfflineController',\n});\n","angular.module('portainer.app').controller('InformationPanelOfflineController', [\n '$state',\n 'EndpointProvider',\n 'EndpointService',\n 'Authentication',\n 'Notifications',\n function StackDuplicationFormController($state, EndpointProvider, EndpointService, Authentication, Notifications) {\n var ctrl = this;\n\n this.$onInit = onInit;\n this.triggerSnapshot = triggerSnapshot;\n\n function triggerSnapshot() {\n var endpointId = EndpointProvider.endpointID();\n\n EndpointService.snapshotEndpoint(endpointId)\n .then(function onSuccess() {\n $state.reload();\n })\n .catch(function onError(err) {\n Notifications.error('Failure', err, 'An error occured during environment snapshot');\n });\n }\n\n function onInit() {\n var endpointId = EndpointProvider.endpointID();\n ctrl.showRefreshButton = Authentication.isAdmin();\n\n EndpointService.endpoint(endpointId)\n .then(function onSuccess(data) {\n ctrl.snapshotTime = data.Snapshots[0].Time;\n })\n .catch(function onError(err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment information');\n });\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./informationPanel.html');\n\nangular.module('portainer.app').component('informationPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n titleText: '@',\n dismissAction: '&?',\n },\n transclude: true,\n});\n","import angular from 'angular';\nimport parse from 'parse-duration';\n\nangular.module('portainer.app').directive('intervalFormat', function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function ($scope, $element, $attrs, ngModel) {\n ngModel.$validators.invalidIntervalFormat = function (modelValue) {\n try {\n return modelValue && modelValue.toUpperCase().match(/^P?(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T?(?=\\d+[HMS])(\\d+H)?(\\d+M)?(\\d+S)?)?$/gm) !== null;\n } catch (error) {\n return false;\n }\n };\n\n ngModel.$validators.minimumInterval = function (modelValue) {\n try {\n return modelValue && parse(modelValue, 'minute') >= 1;\n } catch (error) {\n return false;\n }\n };\n },\n };\n});\n","const autoNgTemplateLoaderTemplate1 = require('./motdPanel.html');\n\nangular.module('portainer.app').component('motdPanel', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n motd: '<',\n dismissAction: '&?',\n },\n transclude: true,\n});\n","angular.module('portainer.app').directive('onEnterKey', [\n function porOnEnterKey() {\n var directive = {\n restrict: 'A',\n link: function (scope, element, attrs) {\n element.bind('keydown keypress', function (e) {\n if (e.which === 13) {\n e.preventDefault();\n scope.$apply(function () {\n scope.$eval(attrs.onEnterKey);\n });\n }\n });\n },\n };\n\n return directive;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./productItem.html');\n\nangular.module('portainer.app').component('productItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n goTo: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./productList.html');\n\nangular.module('portainer.app').component('productList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n titleText: '@',\n products: '<',\n goTo: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registry-details.html');\n\nimport angular from 'angular';\n\nexport const registryDetails = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n registry: '<',\n },\n};\n\nangular.module('portainer.app').component('registryDetails', registryDetails);\n","const autoNgTemplateLoaderTemplate1 = require('./sensitive-details.html');\n\nimport angular from 'angular';\nimport './sensitive-details.css';\n\nangular.module('portainer.app').component('sensitiveDetails', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n key: '@',\n value: '@',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./show-hide.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('showHide', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n value: '<',\n useAsterisk: '<',\n },\n});\n","import angular from 'angular';\nimport './sidebar.css';\n\nimport { sidebarMenu } from './sidebar-menu';\nimport { sidebarSection } from './sidebar-section';\nimport { sidebarMenuItem } from './sidebar-menu-item';\n\nexport default angular\n .module('portainer.app.components.sidebar', [])\n .component('sidebarMenu', sidebarMenu)\n .component('sidebarMenuItem', sidebarMenuItem)\n .component('sidebarSection', sidebarSection).name;\n","const autoNgTemplateLoaderTemplate1 = require('./sidebar-menu-item.html');\n\nimport './sidebar-menu-item.css';\n\nexport const sidebarMenuItem = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n path: '@',\n pathParams: '<',\n iconClass: '@',\n className: '@',\n },\n transclude: true,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./sidebar-menu.html');\n\nimport './sidebar-menu.css';\n\nimport controller from './sidebar-menu.controller.js';\n\nexport const sidebarMenu = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n iconClass: '@',\n path: '@', // string\n pathParams: '<', //object, corresponds to https://ui-router.github.io/ng1/docs/latest/modules/directives.html#uistatedirective\n childrenPaths: '<', // []string (globs)\n label: '@', // string\n isSidebarOpen: '<',\n currentState: '@',\n },\n transclude: true,\n};\n","class SidebarMenuController {\n /* @ngInject */\n constructor($state) {\n this.$state = $state;\n\n this.state = {\n forceOpen: false,\n };\n }\n\n isOpen() {\n if (!this.isSidebarOpen) {\n return false;\n }\n\n if (this.state.forceOpen) {\n return true;\n }\n\n return this.isOpenByPathState();\n }\n\n isOpenByPathState() {\n const currentName = this.$state.current.name;\n return currentName.startsWith(this.path) || this.childrenPaths.includes(currentName);\n }\n\n onClickArrow(event) {\n event.stopPropagation();\n event.preventDefault();\n\n // prevent toggling when menu is open by state\n if (this.isOpenByPathState()) {\n return;\n }\n\n this.state.forceOpen = !this.state.forceOpen;\n }\n\n $onInit() {\n this.childrenPaths = this.childrenPaths || [];\n }\n}\n\nexport default SidebarMenuController;\n","const autoNgTemplateLoaderTemplate1 = require('./sidebar-section.html');\n\nexport const sidebarSection = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n transclude: true,\n bindings: {\n title: '@',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./slider.html');\n\nangular.module('portainer.app').component('slider', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'SliderController',\n bindings: {\n model: '=',\n onChange: '<',\n floor: '<',\n ceil: '<',\n step: '<',\n precision: '<',\n },\n});\n","// TODO: k8s merge - TEST WITH EXISTING SLIDERS !\n// Not sure if this is not breaking existing sliders on docker views\n// Or sliders with onChange call (docker service update view)\nimport angular from 'angular';\n\nclass SliderController {\n /* @ngInject */\n constructor($scope) {\n this.$scope = $scope;\n\n this.buildOptions = this.buildOptions.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n $onChanges() {\n this.buildOptions();\n }\n\n translate(value, sliderId, label) {\n if ((label === 'floor' && this.floor === 0) || value === 0) {\n return 'unlimited';\n }\n return value;\n }\n\n buildOptions() {\n this.options = {\n floor: this.floor,\n ceil: this.ceil,\n step: this.step,\n precision: this.precision,\n showSelectionBar: true,\n enforceStep: false,\n translate: this.translate,\n onChange: () => this.onChange(),\n };\n }\n\n $onInit() {\n this.buildOptions();\n }\n}\n\nexport default SliderController;\nangular.module('portainer.app').controller('SliderController', SliderController);\n","import { STACK_NAME_VALIDATION_REGEX } from '@/constants';\n\nangular.module('portainer.app').controller('StackDuplicationFormController', [\n 'Notifications',\n function StackDuplicationFormController(Notifications) {\n var ctrl = this;\n\n ctrl.state = {\n duplicationInProgress: false,\n migrationInProgress: false,\n };\n\n ctrl.formValues = {\n endpoint: null,\n newName: '',\n };\n\n ctrl.STACK_NAME_VALIDATION_REGEX = STACK_NAME_VALIDATION_REGEX;\n\n ctrl.isFormValidForDuplication = isFormValidForDuplication;\n ctrl.isFormValidForMigration = isFormValidForMigration;\n ctrl.duplicateStack = duplicateStack;\n ctrl.migrateStack = migrateStack;\n ctrl.isMigrationButtonDisabled = isMigrationButtonDisabled;\n ctrl.isEndpointSelected = isEndpointSelected;\n\n function isFormValidForMigration() {\n return ctrl.formValues.endpoint && ctrl.formValues.endpoint.Id;\n }\n\n function isFormValidForDuplication() {\n return isFormValidForMigration() && ctrl.formValues.newName && !ctrl.yamlError;\n }\n\n function duplicateStack() {\n if (!ctrl.formValues.newName) {\n Notifications.error('Failure', null, 'Stack name is required for duplication');\n return;\n }\n ctrl.state.duplicationInProgress = true;\n ctrl\n .onDuplicate({\n endpointId: ctrl.formValues.endpoint.Id,\n name: ctrl.formValues.newName ? ctrl.formValues.newName : undefined,\n })\n .finally(function () {\n ctrl.state.duplicationInProgress = false;\n });\n }\n\n function migrateStack() {\n ctrl.state.migrationInProgress = true;\n ctrl\n .onMigrate({\n endpointId: ctrl.formValues.endpoint.Id,\n name: ctrl.formValues.newName ? ctrl.formValues.newName : undefined,\n })\n .finally(function () {\n ctrl.state.migrationInProgress = false;\n });\n }\n\n function isMigrationButtonDisabled() {\n return !ctrl.isFormValidForMigration() || ctrl.state.duplicationInProgress || ctrl.state.migrationInProgress || isTargetEndpointAndCurrentEquals();\n }\n\n function isTargetEndpointAndCurrentEquals() {\n return ctrl.formValues.endpoint && ctrl.formValues.endpoint.Id === ctrl.currentEndpointId;\n }\n\n function isEndpointSelected() {\n return ctrl.formValues.endpoint && ctrl.formValues.endpoint.Id;\n }\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./stack-duplication-form.html');\n\nangular.module('portainer.app').component('stackDuplicationForm', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'StackDuplicationFormController',\n bindings: {\n onDuplicate: '&',\n onMigrate: '&',\n endpoints: '<',\n groups: '<',\n currentEndpointId: '<',\n yamlError: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./status-indicator.html');\n\nimport angular from 'angular';\n\nimport './status-indicator.css';\n\nexport const statusIndicator = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n ok: '<',\n },\n};\n\nangular.module('portainer.app').component('statusIndicator', statusIndicator);\n","const autoNgTemplateLoaderTemplate1 = require('./tagSelector.html');\n\nangular.module('portainer.app').component('tagSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TagSelectorController',\n bindings: {\n tags: '<',\n model: '=',\n onCreate: '<',\n allowCreate: '<',\n },\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass TagSelectorController {\n /* @ngInject */\n constructor() {\n this.state = {\n selectedValue: '',\n selectedTags: [],\n noResult: false,\n };\n }\n\n removeTag(tag) {\n _.remove(this.model, (id) => tag.Id === id);\n _.remove(this.state.selectedTags, { Id: tag.Id });\n }\n\n selectTag($item) {\n this.state.selectedValue = '';\n if ($item.create && this.allowCreate) {\n this.onCreate($item.value);\n return;\n }\n this.state.selectedTags.push($item);\n this.model.push($item.Id);\n }\n\n filterTags(searchValue) {\n let filteredTags = _.filter(this.tags, (tag) => !_.includes(this.model, tag.Id));\n if (!searchValue) {\n return filteredTags.slice(0, 7);\n }\n\n const exactTag = _.find(this.tags, (tag) => tag.Name === searchValue);\n filteredTags = _.filter(filteredTags, (tag) => _.includes(tag.Name.toLowerCase(), searchValue.toLowerCase()));\n if (exactTag || !this.allowCreate) {\n return filteredTags.slice(0, 7);\n }\n\n return filteredTags.slice(0, 6).concat({ Name: `Create \"${searchValue}\"`, create: true, value: searchValue });\n }\n\n generateSelectedTags(model, tags) {\n this.state.selectedTags = _.map(model, (id) => _.find(tags, (t) => t.Id === id));\n }\n\n $onInit() {\n this.generateSelectedTags(this.model, this.tags);\n }\n\n $onChanges({ tags, model }) {\n const tagsValue = tags && tags.currentValue ? tags.currentValue : this.tags;\n const modelValue = model && model.currentValue ? model.currentValue : this.model;\n if (modelValue && tagsValue) {\n this.generateSelectedTags(modelValue, tagsValue);\n }\n }\n}\n\nexport default TagSelectorController;\nangular.module('portainer.app').controller('TagSelectorController', TagSelectorController);\n","const autoNgTemplateLoaderTemplate1 = require('./templateItem.html');\n\nimport angular from 'angular';\n\nimport './template-item.css';\n\nangular.module('portainer.app').component('templateItem', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n model: '<',\n typeLabel: '@',\n onSelect: '<',\n },\n transclude: {\n actions: '?templateItemActions',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('TemplateListController', TemplateListController);\n\nfunction TemplateListController($async, $state, DatatableService, Notifications, TemplateService) {\n var ctrl = this;\n\n this.state = {\n textFilter: '',\n selectedCategory: '',\n categories: [],\n showContainerTemplates: true,\n };\n\n this.onTextFilterChange = function () {\n DatatableService.setDataTableTextFilters(this.tableKey, this.state.textFilter);\n };\n\n this.filterByTemplateType = function (item) {\n switch (item.Type) {\n case 1: // container\n return ctrl.state.showContainerTemplates;\n case 2: // swarm stack\n return ctrl.showSwarmStacks;\n case 3: // docker compose\n return !ctrl.showSwarmStacks || (ctrl.showSwarmStacks && ctrl.state.showContainerTemplates);\n case 4: // Edge stack templates\n return false;\n }\n return false;\n };\n\n this.updateCategories = function () {\n var availableCategories = [];\n\n for (var i = 0; i < ctrl.templates.length; i++) {\n var template = ctrl.templates[i];\n if (this.filterByTemplateType(template)) {\n availableCategories = availableCategories.concat(template.Categories);\n }\n }\n\n this.state.categories = _.sortBy(_.uniq(availableCategories));\n };\n\n this.filterByCategory = function (item) {\n if (!ctrl.state.selectedCategory) {\n return true;\n }\n\n return _.includes(item.Categories, ctrl.state.selectedCategory);\n };\n\n this.duplicateTemplate = duplicateTemplate.bind(this);\n this.duplicateTemplateAsync = duplicateTemplateAsync.bind(this);\n function duplicateTemplate(template) {\n return $async(this.duplicateTemplateAsync, template);\n }\n\n async function duplicateTemplateAsync(template) {\n try {\n const { FileContent: fileContent } = await TemplateService.templateFile(template.Repository.url, template.Repository.stackfile);\n let type = 0;\n if (template.Type === 2) {\n type = 1;\n }\n if (template.Type === 3) {\n type = 2;\n }\n $state.go('docker.templates.custom.new', { fileContent, type });\n } catch (err) {\n Notifications.error('Failure', err, 'Failed to duplicate template');\n }\n }\n\n this.$onInit = function () {\n if (this.showSwarmStacks) {\n this.state.showContainerTemplates = false;\n }\n this.updateCategories();\n\n var textFilter = DatatableService.getDataTableTextFilters(this.tableKey);\n if (textFilter !== null) {\n this.state.textFilter = textFilter;\n }\n };\n}\n","const autoNgTemplateLoaderTemplate1 = require('./templateList.html');\n\nangular.module('portainer.app').component('templateList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'TemplateListController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n templates: '<',\n tableKey: '@',\n selectAction: '<',\n showSwarmStacks: '<',\n },\n});\n","angular.module('portainer.app').directive('rdTemplateWidget', function rdWidget() {\n var directive = {\n scope: {\n ngModel: '=',\n },\n transclude: true,\n template: '
    ',\n restrict: 'EA',\n };\n return directive;\n});\n","import { buildOption } from '@/portainer/components/BoxSelector';\n\nexport default class ThemeSettingsController {\n /* @ngInject */\n constructor($async, Authentication, ThemeManager, StateManager, UserService, Notifications) {\n this.$async = $async;\n this.Authentication = Authentication;\n this.ThemeManager = ThemeManager;\n this.StateManager = StateManager;\n this.UserService = UserService;\n this.Notifications = Notifications;\n\n this.setTheme = this.setTheme.bind(this);\n }\n\n /** Theme Settings Panel */\n async updateTheme() {\n try {\n await this.UserService.updateUserTheme(this.state.userId, this.state.userTheme);\n this.state.themeInProgress = false;\n this.Notifications.success('Success', 'User theme successfully updated');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update user theme');\n }\n }\n\n setTheme(theme) {\n if (theme === 'auto' || !theme) {\n this.ThemeManager.autoTheme();\n } else {\n this.ThemeManager.setTheme(theme);\n }\n this.state.themeInProgress = true;\n this.state.userTheme = theme;\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n userId: null,\n userTheme: '',\n initTheme: '',\n defaultTheme: 'auto',\n themeInProgress: false,\n };\n\n this.state.availableThemes = [\n buildOption('light', 'fas fa-sun', 'Light Theme', 'Default color mode', 'light'),\n buildOption('dark', 'fas fa-moon', 'Dark Theme', 'Dark color mode', 'dark'),\n buildOption('highcontrast', 'fas fa-adjust', 'High Contrast', 'High contrast color mode', 'highcontrast'),\n buildOption('auto', 'fas fa-sync-alt', 'Auto', 'Sync with system theme', 'auto'),\n ];\n\n try {\n this.state.userId = await this.Authentication.getUserDetails().ID;\n const data = await this.UserService.user(this.state.userId);\n this.state.userTheme = data.UserTheme || this.state.defaultTheme;\n this.state.initTheme = this.state.userTheme;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to get user details');\n }\n });\n }\n\n $onDestroy() {\n if (this.state.themeInProgress) {\n this.ThemeManager.setTheme(this.state.initTheme);\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./theme-settings.html');\n\nimport angular from 'angular';\nimport controller from './theme-settings.controller';\n\nangular.module('portainer.app').component('themeSettings', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./time-window-display.html');\n\nimport angular from 'angular';\nimport controller from './time-window-display.controller';\n\nangular.module('portainer.app').component('timeWindowDisplay', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","import * as moment from 'moment-timezone';\n\nexport default class TimeWindowDisplayController {\n /* @ngInject */\n constructor($async, EndpointProvider, EndpointService) {\n this.$async = $async;\n this.EndpointProvider = EndpointProvider;\n this.EndpointService = EndpointService;\n }\n\n utcToTime(utcTime) {\n const startTime = moment.tz(utcTime.StartTime, 'HH:mm', 'GMT').tz(this.state.timezone).format('HH:mm');\n const endTime = moment.tz(utcTime.EndTime, 'HH:mm', 'GMT').tz(this.state.timezone).format('HH:mm');\n\n const [startHour, startMin] = startTime.split(':');\n const [endHour, endMin] = endTime.split(':');\n\n const startTimeUser = new Date();\n const endTimeUser = new Date();\n\n startTimeUser.setHours(startHour);\n startTimeUser.setMinutes(startMin);\n\n endTimeUser.setHours(endHour);\n endTimeUser.setMinutes(endMin);\n\n return {\n startTime: startTimeUser,\n endTime: endTimeUser,\n };\n }\n\n customToTimeObject() {\n const startTime = this.state.timeWindow.StartTime;\n const endTime = this.state.timeWindow.EndTime;\n\n const [startHour, startMin] = startTime.split(':');\n const [endHour, endMin] = endTime.split(':');\n\n const startTimeObject = new Date();\n const endTimeObject = new Date();\n\n startTimeObject.setHours(startHour);\n startTimeObject.setMinutes(startMin);\n\n endTimeObject.setHours(endHour);\n endTimeObject.setMinutes(endMin);\n\n this.state.startTimeUtc = startTimeObject;\n this.state.endTimeUtc = endTimeObject;\n }\n\n loadUserTime(utcTime) {\n const { startTime, endTime } = this.utcToTime(utcTime);\n\n this.state.startTimeUser = startTime;\n this.state.endTimeUser = endTime;\n }\n\n $onInit() {\n const currentUserTimezone = moment.tz.guess();\n\n return this.$async(async () => {\n const endpointId = this.EndpointProvider.endpointID();\n const endpoint = await this.EndpointService.endpoint(endpointId);\n\n this.state = {\n timeWindow: endpoint.ChangeWindow,\n startTimeUser: '',\n endTimeUser: '',\n startTimeUtc: '',\n endTimeUtc: '',\n timezone: currentUserTimezone,\n dst: moment().isDST(),\n };\n\n this.loadUserTime(this.state.timeWindow);\n this.customToTimeObject();\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./time-window-picker.html');\n\nimport angular from 'angular';\nimport controller from './time-window-picker.controller';\nimport './time-window-picker.css';\n\nangular.module('portainer.app').component('timeWindowPicker', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n timeWindow: '=',\n timeZone: '=',\n },\n});\n","import * as moment from 'moment-timezone';\n\nexport default class TimeWindowController {\n /* @ngInject */\n constructor($async) {\n this.$async = $async;\n }\n\n timeToUtc(startTimeSet, endTimeSet, timeZone) {\n const start = moment(startTimeSet).format('YYYY-MM-DD HH:mm');\n const end = moment(endTimeSet).format('YYYY-MM-DD HH:mm');\n\n const startTimeUtc = moment.tz(start, timeZone).utc().format('HH:mm');\n const endTimeUtc = moment.tz(end, timeZone).utc().format('HH:mm');\n\n return { startTimeUtc, endTimeUtc };\n }\n\n utcToTime(utcTime) {\n const startTime = moment.tz(utcTime.StartTime, 'HH:mm', 'GMT').tz(this.state.timeZoneSelected).format('HH:mm');\n const endTime = moment.tz(utcTime.EndTime, 'HH:mm', 'GMT').tz(this.state.timeZoneSelected).format('HH:mm');\n\n const [startHour, startMin] = startTime.split(':');\n const [endHour, endMin] = endTime.split(':');\n\n const startTimeUser = new Date();\n const endTimeUser = new Date();\n\n startTimeUser.setHours(startHour);\n startTimeUser.setMinutes(startMin);\n\n endTimeUser.setHours(endHour);\n endTimeUser.setMinutes(endMin);\n\n return {\n startTime: startTimeUser,\n endTime: endTimeUser,\n };\n }\n\n loadUtcTime() {\n const startTime = this.timeWindow.StartTime;\n const endTime = this.timeWindow.EndTime;\n\n const { startTimeObject, endTimeObject } = this.customToTimeObject(startTime, endTime);\n\n this.state.utcStartTime = startTimeObject;\n this.state.utcEndTime = endTimeObject;\n }\n\n loadTimeWindow() {\n // get time window from api ( UTC time object )\n const timeWindow = this.timeWindow;\n\n // Recover user set time with user-set timezone from UTC time object\n const { startTime, endTime } = this.utcToTime(timeWindow);\n\n this.state.setStartTime = startTime;\n this.state.setEndTime = endTime;\n }\n\n timeWindowUpdate() {\n const { startTimeUtc, endTimeUtc } = this.timeToUtc(this.state.setStartTime, this.state.setEndTime, this.state.timeZoneSelected);\n\n if (this.state.setStartTime.getTime() === this.state.setEndTime.getTime()) {\n this.state.timeError = true;\n } else {\n this.state.timeError = false;\n }\n\n this.timeWindow = {\n Enabled: this.timeWindow.Enabled,\n StartTime: startTimeUtc,\n EndTime: endTimeUtc,\n };\n\n this.timeZone = this.state.timeZoneSelected;\n\n const { startTimeObject, endTimeObject } = this.customToTimeObject(startTimeUtc, endTimeUtc);\n\n this.state.utcStartTime = startTimeObject;\n this.state.utcEndTime = endTimeObject;\n }\n\n customToTimeObject(startTime, endTime) {\n const [startHour, startMin] = startTime.split(':');\n const [endHour, endMin] = endTime.split(':');\n\n const startTimeObject = new Date();\n const endTimeObject = new Date();\n\n startTimeObject.setHours(startHour);\n startTimeObject.setMinutes(startMin);\n\n endTimeObject.setHours(endHour);\n endTimeObject.setMinutes(endMin);\n\n return { startTimeObject, endTimeObject };\n }\n\n defaultTimeWindow() {\n const defaultStartTime = '00:00';\n const defaultEndTime = '00:00';\n\n this.state.setStartTime.setHours(0, 0, 0, 0);\n this.state.setEndTime.setHours(0, 0, 0, 0);\n\n this.timeWindow = {\n Enabled: this.timeWindow.Enabled,\n StartTime: defaultStartTime,\n EndTime: defaultEndTime,\n };\n }\n\n toggleChangeWindow() {\n this.state.changeWindow = !this.state.changeWindow;\n if (!this.state.changeWindow) {\n const { startTime, endTime } = this.utcToTime(this.state.initTime);\n this.state.setStartTime = startTime;\n this.state.setEndTime = endTime;\n this.state.timeError = false;\n }\n }\n\n $onInit() {\n const currentUserTimezone = moment.tz.guess();\n\n const countries = moment.tz.countries();\n const zones = new Set();\n for (const country of countries) {\n moment.tz.zonesForCountry(country).reduce((set, zone) => set.add(zone), zones);\n }\n this.timeZones = [...zones].sort();\n this.timeZones.push('UTC');\n\n this.state = {\n hstep: 1,\n mstep: 5,\n ismeridian: true,\n utcStartTime: '',\n utcEndTime: '',\n setStartTime: new Date(),\n setEndTime: new Date(),\n initTime: this.timeWindow,\n dst: moment().isDST(),\n changeWindow: false,\n timeSet: false,\n options: {\n timezones: this.timeZones,\n },\n timeError: false,\n timeZoneSelected: currentUserTimezone,\n };\n\n // StartTime & EndTime is not Null\n if (this.timeWindow.StartTime && this.timeWindow.EndTime) {\n if (this.timeWindow.StartTime !== '00:00' || this.timeWindow.EndTime !== '00:00') {\n this.loadUtcTime();\n this.loadTimeWindow();\n this.state.timeSet = true;\n } else {\n this.defaultTimeWindow();\n this.state.timeSet = false;\n }\n }\n // StartTime & EndTime is Null\n else {\n this.defaultTimeWindow();\n }\n }\n}\n","import moment from 'moment';\nimport _ from 'lodash-es';\nimport filesize from 'filesize';\n\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nexport function truncateLeftRight(text, max, left, right) {\n max = isNaN(max) ? 50 : max;\n left = isNaN(left) ? 25 : left;\n right = isNaN(right) ? 25 : right;\n\n if (text.length <= max) {\n return text;\n } else {\n return text.substring(0, left) + '[...]' + text.substring(text.length - right, text.length);\n }\n}\n\nexport function stripProtocol(url) {\n return url.replace(/.*?:\\/\\//g, '');\n}\n\nexport function humanize(bytes, round, base) {\n if (!round) {\n round = 1;\n }\n if (!base) {\n base = 10;\n }\n if (bytes || bytes === 0) {\n return filesize(bytes, { base: base, round: round });\n }\n}\n\nexport function isoDateFromTimestamp(timestamp) {\n return moment.unix(timestamp).format('YYYY-MM-DD HH:mm:ss');\n}\n\nexport function isoDate(date) {\n return moment(date).format('YYYY-MM-DD HH:mm:ss');\n}\n\nexport function getPairKey(pair, separator) {\n if (!pair.includes(separator)) {\n return pair;\n }\n\n return pair.slice(0, pair.indexOf(separator));\n}\n\nexport function getPairValue(pair, separator) {\n if (!pair.includes(separator)) {\n return '';\n }\n\n return pair.slice(pair.indexOf(separator) + 1);\n}\n\nexport function ipAddress(ip) {\n return ip.slice(0, ip.indexOf('/'));\n}\n\nexport function arrayToStr(arr, separator) {\n if (arr) {\n return _.join(arr, separator);\n }\n return '';\n}\n\nexport function labelsToStr(arr, separator) {\n if (arr) {\n return _.join(\n arr.map((item) => item.key + ':' + item.value),\n separator\n );\n }\n return '';\n}\n\nexport function endpointTypeName(type) {\n if (type === 1) {\n return 'Docker';\n } else if (type === 2 || type === 6) {\n return 'Agent';\n } else if (type === 3) {\n return 'Azure ACI';\n } else if (type === 5) {\n return 'Kubernetes';\n } else if (type === 4 || type === 7) {\n return 'Edge Agent';\n }\n return '';\n}\n\nexport function endpointTypeIcon(type) {\n if (type === 3) {\n return 'fab fa-microsoft';\n } else if (type === 4) {\n return 'fa fa-cloud';\n } else if (type === 5 || type === 6 || type === 7) {\n return 'fas fa-dharmachakra';\n }\n return 'fab fa-docker';\n}\n\nexport function ownershipIcon(ownership) {\n switch (ownership) {\n case RCO.PRIVATE:\n return 'fa fa-eye-slash';\n case RCO.ADMINISTRATORS:\n return 'fa fa-eye-slash';\n case RCO.RESTRICTED:\n return 'fa fa-users';\n default:\n return 'fa fa-eye';\n }\n}\n\nexport function truncate(text, length, end) {\n if (isNaN(length)) {\n length = 10;\n }\n\n if (end === undefined) {\n end = '...';\n }\n\n if (text.length <= length || text.length - end.length <= length) {\n return text;\n } else {\n return String(text).substring(0, length - end.length) + end;\n }\n}\n\nexport function endpointStatusBadge(status) {\n if (status === 2) {\n return 'danger';\n }\n return 'success';\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport {\n arrayToStr,\n endpointStatusBadge,\n endpointTypeIcon,\n endpointTypeName,\n getPairKey,\n getPairValue,\n humanize,\n ipAddress,\n isoDate,\n isoDateFromTimestamp,\n labelsToStr,\n ownershipIcon,\n stripProtocol,\n truncate,\n truncateLeftRight,\n} from './filters';\n\nangular\n .module('portainer.app')\n .filter('truncate', () => truncate)\n .filter('truncatelr', () => truncateLeftRight)\n .filter('capitalize', () => _.capitalize)\n .filter('stripprotocol', () => stripProtocol)\n .filter('humansize', () => humanize)\n .filter('getisodatefromtimestamp', () => isoDateFromTimestamp)\n .filter('getisodate', () => isoDate)\n .filter('key', () => getPairKey)\n .filter('value', () => getPairValue)\n .filter('emptyobject', () => _.isEmpty)\n .filter('ipaddress', () => ipAddress)\n .filter('arraytostr', () => arrayToStr)\n .filter('labelsToStr', () => labelsToStr)\n .filter('endpointtypename', () => endpointTypeName)\n .filter('endpointtypeicon', () => endpointTypeIcon)\n .filter('ownershipicon', () => ownershipIcon)\n .filter('endpointstatusbadge', () => endpointStatusBadge);\n","import _ from 'lodash-es';\nimport { PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\n\nfunction findAssociatedGroup(endpoint, groups) {\n return _.find(groups, function (group) {\n return group.Id === endpoint.GroupId;\n });\n}\n\nexport default class EndpointHelper {\n static isLocalEndpoint(endpoint) {\n return endpoint.URL.includes('unix://') || endpoint.URL.includes('npipe://') || endpoint.Type === PortainerEndpointTypes.KubernetesLocalEnvironment;\n }\n\n static isDockerEndpoint(endpoint) {\n return [PortainerEndpointTypes.DockerEnvironment, PortainerEndpointTypes.AgentOnDockerEnvironment, PortainerEndpointTypes.EdgeAgentOnDockerEnvironment].includes(endpoint.Type);\n }\n\n static isAgentEndpoint(endpoint) {\n return [\n PortainerEndpointTypes.AgentOnDockerEnvironment,\n PortainerEndpointTypes.EdgeAgentOnDockerEnvironment,\n PortainerEndpointTypes.AgentOnKubernetesEnvironment,\n PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment,\n ].includes(endpoint.Type);\n }\n\n static isEdgeEndpoint(endpoint) {\n return [PortainerEndpointTypes.EdgeAgentOnDockerEnvironment, PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment].includes(endpoint.Type);\n }\n\n static mapGroupNameToEndpoint(endpoints, groups) {\n for (var i = 0; i < endpoints.length; i++) {\n var endpoint = endpoints[i];\n var group = findAssociatedGroup(endpoint, groups);\n if (group) {\n endpoint.GroupName = group.Name;\n }\n }\n }\n}\n\nexport function isOfflineEndpoint(endpoint) {\n return endpoint.Status !== 1;\n}\n","import _ from 'lodash-es';\n\nexport const KEY_REGEX = /(.+?)/.source;\nexport const VALUE_REGEX = /(.*)?/.source;\n\nconst KEY_VALUE_REGEX = new RegExp(`^(${KEY_REGEX})\\\\s*=(${VALUE_REGEX})$`);\nconst NEWLINES_REGEX = /\\n|\\r|\\r\\n/;\n\n/**\n * @param {string} src the source of the .env file\n *\n * @returns {[{name: string, value: string}]} array of {name, value}\n */\nexport function parseDotEnvFile(src) {\n return parseArrayOfStrings(\n _.compact(src.split(NEWLINES_REGEX))\n .map((v) => v.trim())\n .filter((v) => !v.startsWith('#') && v !== '')\n );\n}\n\n/**\n * parses an array of name=value to array of {name, value}\n *\n * @param {[string]} array array of strings in format name=value\n *\n * @returns {[{name: string, value: string}]} array of {name, value}\n */\nexport function parseArrayOfStrings(array) {\n if (!array) {\n return [];\n }\n\n return _.compact(\n array.map((variableString) => {\n if (!variableString.includes('=')) {\n return { name: variableString };\n }\n\n const parsedKeyValArr = variableString.trim().match(KEY_VALUE_REGEX);\n if (parsedKeyValArr != null && parsedKeyValArr.length > 4) {\n return { name: parsedKeyValArr[1].trim(), value: parsedKeyValArr[3].trim() || '' };\n }\n })\n );\n}\n/**\n * converts an array of {name, value} to array of `name=value`, name is always defined\n *\n * @param {[{name, value}]} array array of {name, value}\n *\n * @returns {[string]} array of `name=value`\n */\nexport function convertToArrayOfStrings(array) {\n if (!array) {\n return [];\n }\n\n return array.filter((variable) => variable.name).map(({ name, value }) => (value || value === '' ? `${name}=${value}` : name));\n}\n","angular.module('portainer.app').factory('FormHelper', [\n function FormHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.removeInvalidEnvVars = function (env) {\n for (var i = env.length - 1; i >= 0; i--) {\n var envvar = env[i];\n if (!envvar.value || !envvar.name) {\n env.splice(i, 1);\n }\n }\n\n return env;\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\n\nclass GenericHelper {\n static findDeepAll(obj, target, res = []) {\n if (typeof obj === 'object') {\n _.forEach(obj, (child, key) => {\n if (key === target) res.push(child);\n if (typeof child === 'object') GenericHelper.findDeepAll(child, target, res);\n });\n }\n return res;\n }\n}\n\nexport default GenericHelper;\n","import _ from 'lodash-es';\nimport angular from 'angular';\n\nclass NetworkHelper {\n /* @ngInject */\n constructor(PREDEFINED_NETWORKS) {\n this.PREDEFINED_NETWORKS = PREDEFINED_NETWORKS;\n }\n\n isSystemNetwork(item) {\n return _.includes(this.PREDEFINED_NETWORKS, item.Name);\n }\n}\n\nexport default NetworkHelper;\nangular.module('portainer.app').service('NetworkHelper', NetworkHelper);\n","/**\n * calculates baseHref\n *\n * return [string]\n *\n */\nexport function baseHref() {\n const base = document.getElementById('base');\n return base ? base.getAttribute('href') : '/';\n}\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\nimport { ResourceControlOwnershipParameters } from '../models/resourceControl/resourceControlOwnershipParameters';\n\nclass ResourceControlHelper {\n /**\n * Transform ResourceControlViewModel to ResourceControlOwnershipParameters\n * @param {int} userId ID of User performing the action\n * @param {ResourceControlViewModel} resourceControl ResourceControl view model\n */\n RCViewModelToOwnershipParameters(userId, resourceControl) {\n if (!resourceControl) {\n return new ResourceControlOwnershipParameters(true);\n }\n let adminOnly = false;\n let publicOnly = false;\n let users = [];\n let teams = [];\n switch (resourceControl.Ownership) {\n case RCO.PUBLIC:\n publicOnly = true;\n break;\n case RCO.PRIVATE:\n users = [userId];\n break;\n case RCO.RESTRICTED:\n users = _.map(resourceControl.UserAccesses, (user) => user.UserId);\n teams = _.map(resourceControl.TeamAccesses, (team) => team.TeamId);\n break;\n default:\n adminOnly = true;\n break;\n }\n return new ResourceControlOwnershipParameters(adminOnly, publicOnly, users, teams);\n }\n\n /**\n * Transform AccessControlFormData to ResourceControlOwnershipParameters\n * @param {int} userId ID of user performing the operation\n * @param {AccessControlFormData} formValues Form data (generated by AccessControlForm)\n * @param {int[]} subResources Sub Resources restricted by the ResourceControl\n */\n RCFormDataToOwnershipParameters(userId, formValues, subResources = []) {\n if (!formValues.AccessControlEnabled) {\n formValues.Ownership = RCO.PUBLIC;\n }\n\n let adminOnly = false;\n let publicOnly = false;\n let users = [];\n let teams = [];\n switch (formValues.Ownership) {\n case RCO.PUBLIC:\n publicOnly = true;\n break;\n case RCO.PRIVATE:\n users.push(userId);\n break;\n case RCO.RESTRICTED:\n users = _.map(formValues.AuthorizedUsers, (user) => user.Id);\n teams = _.map(formValues.AuthorizedTeams, (team) => team.Id);\n break;\n default:\n adminOnly = true;\n break;\n }\n return new ResourceControlOwnershipParameters(adminOnly, publicOnly, users, teams, subResources);\n }\n\n /**\n * Transform AccessControlPanelData to ResourceControlOwnershipParameters\n * @param {AccessControlPanelData} formValues Form data (generated by AccessControlPanel)\n */\n RCPanelDataToOwnershipParameters(formValues) {\n const adminOnly = formValues.Ownership === RCO.ADMINISTRATORS;\n const publicOnly = formValues.Ownership === RCO.PUBLIC;\n const userIds = publicOnly || adminOnly ? [] : _.map(formValues.Ownership_Users, (user) => user.Id);\n const teamIds = publicOnly || adminOnly ? [] : _.map(formValues.Ownership_Teams, (team) => team.Id);\n\n return new ResourceControlOwnershipParameters(adminOnly, publicOnly, userIds, teamIds);\n }\n\n retrieveAuthorizedUsers(resourceControl, users) {\n const authorizedUsers = [];\n _.forEach(resourceControl.UserAccesses, (access) => {\n const user = _.find(users, { Id: access.UserId });\n if (user) {\n authorizedUsers.push(user);\n }\n });\n return authorizedUsers;\n }\n\n retrieveAuthorizedTeams(resourceControl, teams) {\n const authorizedTeams = [];\n _.forEach(resourceControl.TeamAccesses, (access) => {\n const team = _.find(teams, { Id: access.TeamId });\n if (team) {\n authorizedTeams.push(team);\n }\n });\n return authorizedTeams;\n }\n\n isLeaderOfAnyRestrictedTeams(userMemberships, resourceControl) {\n let isTeamLeader = false;\n _.forEach(userMemberships, (membership) => {\n const found = _.find(resourceControl.TeamAccesses, { TeamId: membership.TeamId });\n if (found && membership.Role === 1) {\n isTeamLeader = true;\n return false;\n }\n });\n return isTeamLeader;\n }\n}\n\nexport default ResourceControlHelper;\nangular.module('portainer.app').service('ResourceControlHelper', ResourceControlHelper);\n","import _ from 'lodash-es';\nimport YAML from 'yaml';\nimport GenericHelper from '@/portainer/helpers/genericHelper';\n\nimport { ExternalStackViewModel } from '@/portainer/models/stack';\n\nangular.module('portainer.app').factory('StackHelper', [\n function StackHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.getExternalStacksFromContainers = function (containers) {\n return getExternalStacksFromLabel(containers, 'com.docker.compose.project', 2);\n };\n\n helper.getExternalStacksFromServices = function (services) {\n return getExternalStacksFromLabel(services, 'com.docker.stack.namespace', 1);\n };\n\n function getExternalStacksFromLabel(items, label, type) {\n return _.uniqBy(\n items.filter((item) => item.Labels && item.Labels[label]).map((item) => new ExternalStackViewModel(item.Labels[label], type, item.Created)),\n 'Name'\n );\n }\n\n helper.validateYAML = function (yaml, containerNames) {\n let yamlObject;\n\n try {\n yamlObject = YAML.parse(yaml);\n } catch (err) {\n return 'There is an error in the yaml syntax: ' + err;\n }\n\n const names = _.uniq(GenericHelper.findDeepAll(yamlObject, 'container_name'));\n const duplicateContainers = _.intersection(containerNames, names);\n\n if (duplicateContainers.length === 0) return;\n\n return (\n (duplicateContainers.length === 1 ? 'This container name is' : 'These container names are') +\n ' already used by another container running in this environment: ' +\n _.join(duplicateContainers, ', ') +\n '.'\n );\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash';\n\nexport default class PortainerEndpointTagHelper {\n static idsToTagNames(tags, ids) {\n const filteredTags = _.filter(tags, (tag) => _.includes(ids, tag.Id));\n const tagNames = _.map(filteredTags, 'Name');\n return tagNames;\n }\n}\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('TemplateHelper', [\n function TemplateHelperFactory() {\n 'use strict';\n var helper = {};\n\n helper.getDefaultContainerConfiguration = function () {\n return {\n Env: [],\n OpenStdin: false,\n Tty: false,\n ExposedPorts: {},\n HostConfig: {\n RestartPolicy: {\n Name: 'no',\n },\n PortBindings: {},\n Binds: [],\n Privileged: false,\n ExtraHosts: [],\n },\n Volumes: {},\n Labels: {},\n };\n };\n\n helper.portArrayToPortConfiguration = function (ports) {\n var portConfiguration = {\n bindings: {},\n exposedPorts: {},\n };\n ports.forEach(function (p) {\n if (p.containerPort) {\n var key = p.containerPort + '/' + p.protocol;\n var binding = {};\n if (p.hostPort) {\n binding.HostPort = p.hostPort;\n if (p.hostPort.indexOf(':') > -1) {\n var hostAndPort = p.hostPort.split(':');\n binding.HostIp = hostAndPort[0];\n binding.HostPort = hostAndPort[1];\n }\n }\n portConfiguration.bindings[key] = [binding];\n portConfiguration.exposedPorts[key] = {};\n }\n });\n return portConfiguration;\n };\n\n helper.updateContainerConfigurationWithLabels = function (labelsArray) {\n var labels = {};\n labelsArray.forEach(function (l) {\n if (l.name) {\n if (l.value) {\n labels[l.name] = l.value;\n } else {\n labels[l.name] = '';\n }\n }\n });\n return labels;\n };\n\n helper.EnvToStringArray = function (templateEnvironment) {\n var env = [];\n templateEnvironment.forEach(function (envvar) {\n if (envvar.value || envvar.set) {\n var value = envvar.set ? envvar.set : envvar.value;\n env.push(envvar.name + '=' + value);\n }\n });\n return env;\n };\n\n helper.getConsoleConfiguration = function (interactiveFlag) {\n var consoleConfiguration = {\n openStdin: false,\n tty: false,\n };\n if (interactiveFlag === true) {\n consoleConfiguration.openStdin = true;\n consoleConfiguration.tty = true;\n }\n return consoleConfiguration;\n };\n\n helper.createVolumeBindings = function (volumes, generatedVolumesPile) {\n volumes.forEach(function (volume) {\n if (volume.container) {\n var binding;\n if (volume.type === 'auto') {\n binding = generatedVolumesPile.pop().Id + ':' + volume.container;\n } else if (volume.type !== 'auto' && volume.bind) {\n binding = volume.bind + ':' + volume.container;\n }\n if (volume.readonly) {\n binding += ':ro';\n }\n volume.binding = binding;\n }\n });\n };\n\n helper.determineRequiredGeneratedVolumeCount = function (volumes) {\n var count = 0;\n volumes.forEach(function (volume) {\n if (volume.type === 'auto') {\n ++count;\n }\n });\n return count;\n };\n\n helper.getUniqueCategories = function (templates) {\n var categories = [];\n for (var i = 0; i < templates.length; i++) {\n var template = templates[i];\n categories = categories.concat(template.Categories);\n }\n return _.uniq(categories);\n };\n\n return helper;\n },\n]);\n","angular.module('portainer.app').factory('URLHelper', [\n '$window',\n function URLHelperFactory($window) {\n 'use strict';\n var helper = {};\n\n helper.getParameter = getParameter;\n helper.cleanParameters = cleanParameters;\n\n function getParameter(param) {\n var parameters = extractParameters();\n return parameters[param];\n }\n\n function extractParameters() {\n var queryString = $window.location.search.replace(/.*?\\?/, '').split('&');\n return queryString.reduce(function (acc, keyValStr) {\n var keyVal = keyValStr.split('=');\n var key = keyVal[0];\n var val = keyVal[1];\n acc[key] = val;\n return acc;\n }, {});\n }\n\n function cleanParameters() {\n $window.location.replace($window.location.origin + $window.location.pathname + $window.location.hash);\n }\n\n return helper;\n },\n]);\n","import { baseHref } from '@/portainer/helpers/pathHelper';\n\nangular.module('portainer.app').factory('WebhookHelper', [\n '$location',\n 'API_ENDPOINT_WEBHOOKS',\n 'API_ENDPOINT_STACKS',\n function WebhookHelperFactory($location, API_ENDPOINT_WEBHOOKS, API_ENDPOINT_STACKS) {\n 'use strict';\n\n var helper = {};\n const protocol = $location.protocol().toLowerCase();\n const port = $location.port();\n const displayPort = (protocol === 'http' && port === 80) || (protocol === 'https' && port === 443) ? '' : ':' + port;\n\n helper.returnWebhookUrl = function (token) {\n return `${protocol}://${$location.host()}${displayPort}${baseHref()}${API_ENDPOINT_WEBHOOKS}/${token}`;\n };\n\n helper.returnStackWebhookUrl = function (token) {\n return `${protocol}://${$location.host()}${displayPort}${baseHref()}${API_ENDPOINT_STACKS}/webhooks/${token}`;\n };\n\n return helper;\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('EndpointStatusInterceptor', [\n '$q',\n 'EndpointProvider',\n function ($q, EndpointProvider) {\n 'use strict';\n var interceptor = {};\n\n interceptor.response = responseInterceptor;\n interceptor.responseError = responseErrorInterceptor;\n\n function canBeOffline(url) {\n return (\n _.startsWith(url, 'api/') &&\n (_.includes(url, '/containers') ||\n _.includes(url, '/images') ||\n _.includes(url, '/volumes') ||\n _.includes(url, '/networks') ||\n _.includes(url, '/info') ||\n _.includes(url, '/version'))\n );\n }\n\n function responseInterceptor(response) {\n var url = response.config.url;\n if (response.status === 200 && canBeOffline(url) && EndpointProvider.offlineMode()) {\n EndpointProvider.setOfflineMode(false);\n }\n return response || $q.when(response);\n }\n\n function responseErrorInterceptor(rejection) {\n var url = rejection.config.url;\n if ((rejection.status === 502 || rejection.status === 503 || rejection.status === -1) && canBeOffline(url) && !EndpointProvider.offlineMode()) {\n EndpointProvider.setOfflineMode(true);\n }\n return $q.reject(rejection);\n }\n\n return interceptor;\n },\n]);\n","export default class AddLicenseViewController {\n /* @ngInject */\n constructor($async, $state, LicenseService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.LicenseService = LicenseService;\n this.Notifications = Notifications;\n\n this.licenses = [''];\n this.keyValidations = {};\n\n this.onSubmitSuccess = this.onSubmitSuccess.bind(this);\n }\n\n onSubmitSuccess() {\n this.$state.go('portainer.licenses');\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./add-license.view.html');\n\nimport controller from './add-license.view.controller.js';\n\nexport const addLicenseView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import angular from 'angular';\n\nimport { addLicenseView } from './add-license.view';\nimport { licensesForm } from './licenses-form';\nimport { licenseFormItem } from './licenses-form/license-item';\n\nexport default angular\n .module('portainer.app.license-management.add-license-view', [])\n\n .component('addLicenseView', addLicenseView)\n .component('licensesForm', licensesForm)\n .component('licenseFormItem', licenseFormItem).name;\n","const autoNgTemplateLoaderTemplate1 = require('./licenses-form.html');\n\nimport controller from './licenses-form.controller';\nimport './licenses-form.css';\n\nexport const licensesForm = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n licenses: '<',\n onSubmitSuccess: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./license-item.html');\n\nimport controller from './license-item.controller';\n\nexport const licenseFormItem = {\n bindings: {\n keyValidation: '<',\n value: '<',\n index: '<',\n\n onChange: '&',\n onRemoveClick: '&',\n },\n controller,\n templateUrl: autoNgTemplateLoaderTemplate1,\n};\n","export default class LicenseItemController {\n isInvalid() {\n return this.form.licenseInput.$invalid || (this.keyValidation && !this.keyValidation.status);\n }\n}\n","import _ from 'lodash-es';\n\nexport default class LicensesFormController {\n /* @ngInject */\n constructor($async, LicenseService, Notifications) {\n this.$async = $async;\n this.LicenseService = LicenseService;\n this.Notifications = Notifications;\n\n this.state = {\n actionInProgress: false,\n formError: '',\n };\n this.keyValidations = {};\n\n this.addLicense = this.addLicense.bind(this);\n this.removeLicense = this.removeLicense.bind(this);\n this.onLicenseChange = this.onLicenseChange.bind(this);\n this.submit = this.submit.bind(this);\n }\n\n addLicense() {\n this.licenses.push('');\n }\n\n removeLicense(index) {\n this.licenses.splice(index, 1);\n }\n\n onLicenseChange(value, index) {\n this.licenses[index] = value;\n }\n\n isFormValid() {\n return this.form.$valid && this.licenses.every((key) => !this.keyValidations[key] || this.keyValidations[key].status);\n }\n\n async submit() {\n return this.$async(async () => {\n if (!this.isFormValid()) {\n this.state.formError = 'Form is invalid';\n return;\n }\n let licenses = _.compact(this.licenses);\n\n if (!licenses.length) {\n this.state.formError = 'At least one license should be provided';\n return;\n }\n\n licenses = licenses.filter((key) => !this.keyValidations[key] || !this.keyValidations[key].status);\n\n if (!licenses.length) {\n this.onSubmitSuccess();\n return;\n }\n\n try {\n const { failedKeys } = await this.LicenseService.attach(licenses);\n\n if (failedKeys && Object.keys(failedKeys).length) {\n this.keyValidations = Object.fromEntries(licenses.map((key) => [key, { status: !failedKeys[key], message: failedKeys[key] }]));\n return;\n }\n\n this.onSubmitSuccess();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed validating licenses');\n }\n });\n }\n}\n","import angular from 'angular';\n\nimport { LicenseService } from './license.service.ts';\nimport licensesViewModule from './licenses.view';\nimport addLicenseViewModule from './add-license.view';\n\nimport { licenseNodePanel } from './license-node-panel.component';\n\nexport default angular\n .module('portainer.app.license-management', [licensesViewModule, addLicenseViewModule])\n .config(config)\n .service('LicenseService', LicenseService)\n .component('licenseNodePanel', licenseNodePanel).name;\n\n/* @ngInject */\nfunction config($stateRegistryProvider) {\n const licenses = {\n name: 'portainer.licenses',\n url: '/licenses',\n views: {\n 'content@': {\n component: 'licensesView',\n },\n },\n onEnter: /* @ngInject */ function onEnter($async, $state, Authentication) {\n return $async(async () => {\n if (!Authentication.isAdmin()) {\n return $state.go('portainer.home');\n }\n });\n },\n };\n\n const addLicense = {\n name: 'portainer.licenses.new',\n url: '/licenses/new',\n views: {\n 'content@': {\n component: 'addLicenseView',\n },\n },\n };\n\n $stateRegistryProvider.register(licenses);\n $stateRegistryProvider.register(addLicense);\n}\n","const autoNgTemplateLoaderTemplate1 = require('./license-node-panel.html');\n\nimport controller from './license-node-panel.controller.js';\n\nexport const licenseNodePanel = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","export default class LicenseNodePanelController {\n /* @ngInject */\n constructor($async, LicenseService, StatusService, Notifications) {\n this.$async = $async;\n this.LicenseService = LicenseService;\n this.Notifications = Notifications;\n this.StatusService = StatusService;\n\n this.numberOfNodesExceeded = false;\n }\n\n $onInit() {\n return this.$async(async () => {\n let nodesCount, licenseInfo;\n try {\n nodesCount = await this.StatusService.nodesCount();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to get nodes count');\n }\n\n try {\n licenseInfo = await this.LicenseService.info();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to get license info');\n }\n\n if (!licenseInfo || licenseInfo.type === 1) {\n return;\n }\n\n this.numberOfNodesExceeded = nodesCount > licenseInfo.nodes;\n });\n }\n}\n","import angular from 'angular';\n\nimport { licensesView } from './licenses.view';\nimport { licensesDatatable } from './licenses-datatable';\nimport { licenseInfo } from './license-info';\n\nexport default angular\n .module('portainer.app.license-management.licenses-view', [])\n .component('licensesDatatable', licensesDatatable)\n .component('licenseInfo', licenseInfo)\n .component('licensesView', licensesView).name;\n","const autoNgTemplateLoaderTemplate1 = require('./license-info.html');\n\nimport controller from './license-info.controller.js';\n\nexport const licenseInfo = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: { info: '<' },\n};\n","import moment from 'moment';\n\nexport default class LicenseInfoController {\n /* @ngInject */\n constructor($async, StatusService, Notifications) {\n this.$async = $async;\n this.StatusService = StatusService;\n this.Notifications = Notifications;\n }\n\n productEdition() {\n switch (this.info.productEdition) {\n case 1:\n return 'Business Edition';\n case 2:\n return 'Enterprise Edition';\n default:\n return '';\n }\n }\n\n expiresAt() {\n return moment.unix(this.info.expiresAt).format('YYYY-MM-DD');\n }\n\n overUsage() {\n return this.usedNodes > this.info.nodes;\n }\n\n $onInit() {\n return this.$async(async () => {\n try {\n this.usedNodes = await this.StatusService.nodesCount();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to get nodes count');\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./licenses-datatable.html');\n\nimport './licenses-datatable.css';\n\nexport const licensesDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: { dataset: '<', titleIcon: '@', tableKey: '@', orderBy: '@', removeAction: '<', updateAction: '<', reverseOrder: '<', copyLicenseKey: '<' },\n};\n","import moment from 'moment';\n\nexport default class LicensesViewController {\n /* @ngInject */\n constructor($async, $state, LicenseService, ModalService, Notifications, clipboard) {\n this.$async = $async;\n this.$state = $state;\n this.LicenseService = LicenseService;\n this.ModalService = ModalService;\n this.Notifications = Notifications;\n this.clipboard = clipboard;\n\n this.info = null;\n this.licenses = null;\n\n this.removeAction = this.removeAction.bind(this);\n this.copyLicenseKey = this.copyLicenseKey.bind(this);\n }\n\n copyLicenseKey(item) {\n this.clipboard.copyText(item.licenseKey);\n }\n\n removeAction(licenses) {\n return this.$async(async () => {\n try {\n const validLicensesToRemove = licenses.filter((l) => l.valid);\n if (validLicensesToRemove.length) {\n const validLicenses = this.licenses.filter((l) => l.valid);\n if (validLicenses.length === validLicensesToRemove.length) {\n this.Notifications.warning('At least one valid license is required');\n return;\n }\n }\n\n if (!(await this.ModalService.confirmDeletionAsync('Are you sure you want to remove these licenses?'))) {\n return;\n }\n\n const response = await this.LicenseService.remove(licenses.map((license) => license.licenseKey));\n if (response.failedKeys && Object.keys(response.failedKeys).length) {\n throw new Error('Failed removing licenses');\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed removing licenses');\n }\n this.$state.reload();\n });\n }\n\n async $onInit() {\n return this.$async(async () => {\n try {\n const licenses = await this.LicenseService.licenses();\n this.licenses = licenses.map((license) => {\n const expiresAt = moment.unix(license.expiresAt);\n const valid = !license.revoked && moment().isBefore(expiresAt);\n return {\n ...license,\n showExpiresAt: expiresAt.format('YYYY-MM-DD HH:mm'),\n valid,\n };\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading licenses');\n }\n\n try {\n this.info = await this.LicenseService.info();\n this.LicenseService.subscribe((info) => {\n this.info = info;\n });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading license info');\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./licenses.view.html');\n\nimport controller from './licenses.view.controller.js';\n\nexport const licensesView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","// create UserAccessViewModel from UserViewModel\nexport function UserAccessViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Username;\n this.Type = 'user';\n this.Inherited = false;\n this.Override = false;\n this.Role = { Id: 0, Name: '-' };\n this.icon = '';\n}\n\n// create TeamAccessViewModel from TeamViewModel\nexport function TeamAccessViewModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Type = 'team';\n this.Inherited = false;\n this.Override = false;\n this.Role = { Id: 0, Name: '-' };\n this.icon = '';\n}\n","import { RegistryTypes } from './registryTypes';\n\nexport function DockerHubViewModel() {\n this.Id = 0;\n this.Type = RegistryTypes.ANONYMOUS;\n this.Name = 'DockerHub (anonymous)';\n this.URL = 'docker.io';\n}\n","import { PortainerEndpointConnectionTypes } from 'Portainer/models/endpoint/models';\n\nexport class PortainerEndpointInitFormValues {\n constructor() {\n this.ConnectionType = PortainerEndpointConnectionTypes.KUBERNETES_LOCAL;\n this.Name = '';\n this.URL = '';\n this.TLS = false;\n this.TLSSkipVerify = false;\n this.TLSSKipClientVerify = false;\n this.TLSCACert = null;\n this.TLSCert = null;\n this.TLSKey = null;\n this.AzureApplicationId = '';\n this.AzureTenantId = '';\n this.AzureAuthenticationKey = '';\n }\n}\n\nclass PortainerEndpointInitFormValueEndpointSection {\n constructor(value, title, classes, description) {\n this.Id = value;\n this.Value = value;\n this.Title = title;\n this.Classes = classes;\n this.Description = description;\n }\n}\n\nexport const PortainerEndpointInitFormValueEndpointSections = Object.freeze([\n new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.DOCKER_LOCAL, 'Docker', 'fab fa-docker', 'Manage the local Docker environment'),\n new PortainerEndpointInitFormValueEndpointSection(\n PortainerEndpointConnectionTypes.KUBERNETES_LOCAL,\n 'Kubernetes',\n 'fas fa-dharmachakra',\n 'Manage the local Kubernetes environment'\n ),\n new PortainerEndpointInitFormValueEndpointSection(PortainerEndpointConnectionTypes.AGENT, 'Agent', 'fa fa-bolt', 'Connect to a Portainer agent'),\n]);\n","/**\n * JS reference of portainer.go#EndpointType iota\n */\nexport const PortainerEndpointTypes = Object.freeze({\n // DockerEnvironment represents an endpoint connected to a Docker environment\n DockerEnvironment: 1,\n // AgentOnDockerEnvironment represents an endpoint connected to a Portainer agent deployed on a Docker environment\n AgentOnDockerEnvironment: 2,\n // AzureEnvironment represents an endpoint connected to an Azure environment\n AzureEnvironment: 3,\n // EdgeAgentOnDockerEnvironment represents an endpoint connected to an Edge agent deployed on a Docker environment\n EdgeAgentOnDockerEnvironment: 4,\n // KubernetesLocalEnvironment represents an endpoint connected to a local Kubernetes environment\n KubernetesLocalEnvironment: 5,\n // AgentOnKubernetesEnvironment represents an endpoint connected to a Portainer agent deployed on a Kubernetes environment\n AgentOnKubernetesEnvironment: 6,\n // EdgeAgentOnKubernetesEnvironment represents an endpoint connected to an Edge agent deployed on a Kubernetes environment\n EdgeAgentOnKubernetesEnvironment: 7,\n});\n\n/**\n * JS reference of endpoint_create.go#EndpointCreationType iota\n */\nexport const PortainerEndpointCreationTypes = Object.freeze({\n LocalDockerEnvironment: 1,\n AgentEnvironment: 2,\n AzureEnvironment: 3,\n EdgeAgentEnvironment: 4,\n LocalKubernetesEnvironment: 5,\n});\n\nexport const PortainerEndpointConnectionTypes = Object.freeze({\n DOCKER_LOCAL: 1,\n KUBERNETES_LOCAL: 2,\n REMOTE: 3,\n AZURE: 4,\n AGENT: 5,\n EDGE: 6,\n});\n","export function RegistryGitlabProject(project) {\n this.Id = project.id;\n this.Description = project.description;\n this.Name = project.name;\n this.Namespace = project.namespace ? project.namespace.name : '';\n this.PathWithNamespace = project.path_with_namespace;\n this.RegistryEnabled = project.container_registry_enabled;\n}\n","export function EndpointGroupDefaultModel() {\n this.Name = '';\n this.Description = '';\n this.TagIds = [];\n}\n\nexport function EndpointGroupModel(data) {\n this.Id = data.Id;\n this.Name = data.Name;\n this.Description = data.Description;\n this.TagIds = data.TagIds;\n this.AuthorizedUsers = data.AuthorizedUsers;\n this.AuthorizedTeams = data.AuthorizedTeams;\n this.UserAccessPolicies = data.UserAccessPolicies;\n this.TeamAccessPolicies = data.TeamAccessPolicies;\n}\n\nexport function EndpointGroupCreateRequest(model, endpoints) {\n this.Name = model.Name;\n this.Description = model.Description;\n this.TagIds = model.TagIds;\n this.AssociatedEndpoints = endpoints;\n}\n\nexport function EndpointGroupUpdateRequest(model, endpoints) {\n this.id = model.Id;\n this.Name = model.Name;\n this.Description = model.Description;\n this.TagIds = model.TagIds;\n this.AssociatedEndpoints = endpoints;\n this.UserAccessPolicies = model.UserAccessPolicies;\n this.TeamAccessPolicies = model.TeamAccessPolicies;\n}\n","export function MotdViewModel(data) {\n this.Title = data.Title;\n this.Message = data.Message;\n this.Hash = data.Hash;\n this.Style = data.Style;\n this.ContentLayout = data.ContentLayout;\n}\n","import _ from 'lodash-es';\nimport { RegistryTypes } from './registryTypes';\n\nexport function RegistryViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.Name = data.Name;\n this.URL = data.URL;\n this.BaseURL = data.BaseURL;\n this.Authentication = data.Authentication;\n this.Username = data.Username;\n this.Password = data.Password;\n this.RegistryAccesses = data.RegistryAccesses; // map[EndpointID]{UserAccessPolicies, TeamAccessPolicies, NamespaceAccessPolicies}\n this.Checked = false;\n this.Gitlab = data.Gitlab;\n this.Quay = data.Quay;\n this.Ecr = data.Ecr;\n}\n\nexport function RegistryManagementConfigurationDefaultModel(registry) {\n this.Authentication = false;\n this.Password = '';\n this.TLS = false;\n this.TLSSkipVerify = false;\n this.TLSCACertFile = null;\n this.TLSCertFile = null;\n this.TLSKeyFile = null;\n\n if (registry.Type === RegistryTypes.ECR) {\n this.Region = registry.Ecr.Region;\n this.TLSSkipVerify = true;\n }\n\n if (registry.Type === RegistryTypes.QUAY || registry.Type === RegistryTypes.AZURE || registry.Type === RegistryTypes.ECR) {\n this.Authentication = true;\n this.Username = registry.Username;\n this.TLS = true;\n }\n\n if ((registry.Type === RegistryTypes.CUSTOM || registry.Type === RegistryTypes.PROGET) && registry.Authentication) {\n this.Authentication = true;\n this.Username = registry.Username;\n }\n}\n\nexport function RegistryCreateFormValues() {\n this.Type = RegistryTypes.CUSTOM;\n this.URL = '';\n this.Name = '';\n this.Authentication = false;\n this.Username = '';\n this.Password = '';\n}\n\nexport function RegistryCreateRequest(model) {\n this.Name = model.Name;\n this.Type = model.Type;\n this.URL = _.replace(model.URL, /^https?\\:\\/\\//i, '');\n this.URL = _.replace(this.URL, /\\/$/, '');\n this.Authentication = model.Authentication;\n if (model.Authentication) {\n this.Username = model.Username;\n this.Password = model.Password;\n }\n if (model.Type === RegistryTypes.GITLAB) {\n this.Gitlab = {\n ProjectId: model.Gitlab.ProjectId,\n InstanceURL: model.Gitlab.InstanceURL,\n ProjectPath: model.Gitlab.ProjectPath,\n };\n }\n if (model.Type === RegistryTypes.ECR) {\n this.Ecr = model.Ecr;\n }\n if (model.Type === RegistryTypes.QUAY) {\n this.Quay = {\n useOrganisation: model.Quay.useOrganisation,\n organisationName: model.Quay.organisationName,\n };\n }\n if (model.Type === RegistryTypes.PROGET) {\n this.BaseURL = _.replace(model.BaseURL, /^https?\\:\\/\\//i, '');\n this.BaseURL = _.replace(this.BaseURL, /\\/$/, '');\n }\n}\n","import _ from 'lodash-es';\n\nexport function RegistryRepositoryViewModel(item) {\n if (item.name && item.tags) {\n this.Name = item.name;\n this.TagsCount = _.without(item.tags, null).length;\n } else {\n this.Name = item;\n this.TagsCount = 0;\n }\n}\n\nexport function RegistryRepositoryGitlabViewModel(data) {\n this.Name = data.path;\n this.TagsCount = data.tags.length;\n}\n","export const RegistryTypes = Object.freeze({\n ANONYMOUS: 0, // not backend replicated, only for frontend\n QUAY: 1,\n AZURE: 2,\n CUSTOM: 3,\n GITLAB: 4,\n PROGET: 5,\n DOCKERHUB: 6,\n ECR: 7,\n});\n","/**\n * Payload for resourceControleCreate operation\n * @param {string} resourceId ID of involved Resource\n * @param {ResourceControlResourceType} resourceType Type of involved Resource\n * @param {ResourceControlOwnershipParameters} data Transcient type from view data to payload\n */\nexport function ResourceControlCreatePayload(resourceId, resourceType, data) {\n void data;\n\n this.ResourceID = resourceId;\n this.Type = resourceType;\n this.Public = data.Public;\n this.AdministratorsOnly = data.AdministratorsOnly;\n this.Users = data.Users;\n this.Teams = data.Teams;\n this.SubResourceIDs = data.SubResourceIDs;\n}\n","/**\n * Transcient type from view data to payload\n * @param {bool} adminOnly is ResourceControl restricted to admin only\n * @param {bool} publicOnly is ResourceControl exposed to public\n * @param {[]int} users Authorized UserIDs array\n * @param {[]int} teams Authorized TeamIDs array\n * @param {[]int} subResources subResourceIDs array\n */\nexport function ResourceControlOwnershipParameters(adminOnly = false, publicOnly = false, users = [], teams = [], subResources = []) {\n this.AdministratorsOnly = adminOnly;\n this.Public = publicOnly;\n this.Users = users;\n this.Teams = teams;\n this.SubResourceIDs = subResources;\n}\n","export const ResourceControlTypeString = Object.freeze({\n CONFIG: 'config',\n CONTAINER: 'container',\n NETWORK: 'network',\n SECRET: 'secret',\n SERVICE: 'service',\n STACK: 'stack',\n VOLUME: 'volume',\n CUSTOM_TEMPLATE: 'custom-template',\n CONTAINER_GROUP: 'container-group',\n});\n\n/**\n * ResourceType int defined in portainer.go as ResourceControlType\n */\nexport const ResourceControlTypeInt = Object.freeze({\n CONTAINER: 1,\n SERVICE: 2,\n VOLUME: 3,\n NETWORK: 4,\n SECRET: 5,\n STACK: 6,\n CONFIG: 7,\n CUSTOM_TEMPLATE: 8,\n CONTAINER_GROUP: 9,\n});\n","/**\n * Payload for resourceControlUpdate operation\n * @param {ResourceControlOwnershipParameters} data\n */\nexport function ResourceControlUpdatePayload(data) {\n this.Public = data.Public;\n this.AdministratorsOnly = data.AdministratorsOnly;\n this.Users = data.Users;\n this.Teams = data.Teams;\n}\n","export function ScheduleCreateRequest(model) {\n this.Name = model.Name;\n this.Recurring = model.Recurring;\n this.CronExpression = model.CronExpression;\n this.Endpoints = model.Endpoints;\n this.FileContent = model.FileContent;\n this.File = model.File;\n}\n\nexport function ScheduleUpdateRequest(model) {\n this.id = model.Id;\n this.Name = model.Name;\n this.Recurring = model.Recurring;\n this.CronExpression = model.CronExpression;\n this.Endpoints = model.Endpoints;\n this.FileContent = model.FileContent;\n}\n","export function SettingsViewModel(data) {\n this.LogoURL = data.LogoURL;\n this.BlackListedLabels = data.BlackListedLabels;\n this.AuthenticationMethod = data.AuthenticationMethod;\n this.LDAPSettings = data.LDAPSettings;\n this.OAuthSettings = new OAuthSettingsViewModel(data.OAuthSettings);\n this.openAMTConfiguration = data.openAMTConfiguration;\n this.fdoConfiguration = data.fdoConfiguration;\n this.SnapshotInterval = data.SnapshotInterval;\n this.TemplatesURL = data.TemplatesURL;\n this.EdgeAgentCheckinInterval = data.EdgeAgentCheckinInterval;\n this.EnableEdgeComputeFeatures = data.EnableEdgeComputeFeatures;\n this.FeatureFlagSettings = data.FeatureFlagSettings;\n this.UserSessionTimeout = data.UserSessionTimeout;\n this.EnableTelemetry = data.EnableTelemetry;\n this.KubeconfigExpiry = data.KubeconfigExpiry;\n this.HelmRepositoryURL = data.HelmRepositoryURL;\n this.DisableTrustOnFirstConnect = data.DisableTrustOnFirstConnect;\n this.EnforceEdgeID = data.EnforceEdgeID;\n}\n\nexport function PublicSettingsViewModel(settings) {\n this.AuthenticationMethod = settings.AuthenticationMethod;\n this.EnableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n this.DisableTrustOnFirstConnect = settings.DisableTrustOnFirstConnect;\n this.EnforceEdgeID = settings.EnforceEdgeID;\n this.FeatureFlagSettings = settings.FeatureFlagSettings;\n this.LogoURL = settings.LogoURL;\n this.OAuthLoginURI = settings.OAuthLoginURI;\n this.EnableTelemetry = settings.EnableTelemetry;\n this.OAuthHideInternalAuth = settings.OAuthHideInternalAuth;\n this.OAuthLogoutURI = settings.OAuthLogoutURI;\n this.KubeconfigExpiry = settings.KubeconfigExpiry;\n}\n\nexport function LDAPSettingsViewModel(data) {\n this.ReaderDN = data.ReaderDN;\n this.Password = data.Password;\n this.URL = data.URL;\n this.SearchSettings = data.SearchSettings;\n this.GroupSearchSettings = data.GroupSearchSettings;\n this.AdminGroupSearchSettings = data.AdminGroupSearchSettings;\n this.AutoCreateUsers = data.AutoCreateUsers;\n}\n\nexport function LDAPSearchSettings(BaseDN, UsernameAttribute, Filter) {\n this.BaseDN = BaseDN;\n this.UsernameAttribute = UsernameAttribute;\n this.Filter = Filter;\n}\n\nexport function LDAPGroupSearchSettings(GroupBaseDN, GroupAttribute, GroupFilter) {\n this.GroupBaseDN = GroupBaseDN;\n this.GroupAttribute = GroupAttribute;\n this.GroupFilter = GroupFilter;\n}\n\nexport function OAuthSettingsViewModel(data) {\n this.ClientID = data.ClientID;\n this.ClientSecret = data.ClientSecret;\n this.AccessTokenURI = data.AccessTokenURI;\n this.AuthorizationURI = data.AuthorizationURI;\n this.ResourceURI = data.ResourceURI;\n this.RedirectURI = data.RedirectURI;\n this.UserIdentifier = data.UserIdentifier;\n this.Scopes = data.Scopes;\n this.OAuthAutoCreateUsers = data.OAuthAutoCreateUsers;\n this.OAuthAutoMapTeamMemberships = data.OAuthAutoMapTeamMemberships;\n this.TeamMemberships = data.TeamMemberships;\n this.DefaultTeamID = data.DefaultTeamID;\n this.SSO = data.SSO;\n this.HideInternalAuth = data.HideInternalAuth;\n this.LogoutURI = data.LogoutURI;\n}\n","import { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nexport function StackViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.Name = data.Name;\n this.EndpointId = data.EndpointId;\n this.SwarmId = data.SwarmId;\n this.Env = data.Env ? data.Env : [];\n this.IsComposeFormat = data.IsComposeFormat;\n if (data.ResourceControl && data.ResourceControl.Id !== 0) {\n this.ResourceControl = new ResourceControlViewModel(data.ResourceControl);\n }\n this.Status = data.Status;\n this.CreationDate = data.CreationDate;\n this.CreatedBy = data.CreatedBy;\n this.UpdateDate = data.UpdateDate;\n this.UpdatedBy = data.UpdatedBy;\n\n this.Regular = true;\n this.External = false;\n this.Orphaned = false;\n this.Checked = false;\n this.GitConfig = data.GitConfig;\n this.FromAppTemplate = data.FromAppTemplate;\n this.AdditionalFiles = data.AdditionalFiles;\n this.AutoUpdate = data.AutoUpdate;\n this.Webhook = data.Webhook;\n}\n\nexport function ExternalStackViewModel(name, type, creationDate) {\n this.Name = name;\n this.Type = type;\n this.CreationDate = creationDate;\n\n this.Regular = false;\n this.External = true;\n this.Orphaned = false;\n this.Checked = false;\n}\n\nexport function OrphanedStackViewModel(data) {\n this.Id = data.Id;\n this.Type = data.Type;\n this.Name = data.Name;\n this.EndpointId = data.EndpointId;\n this.SwarmId = data.SwarmId;\n this.Env = data.Env ? data.Env : [];\n if (data.ResourceControl && data.ResourceControl.Id !== 0) {\n this.ResourceControl = new ResourceControlViewModel(data.ResourceControl);\n }\n this.Status = data.Status;\n this.CreationDate = data.CreationDate;\n this.CreatedBy = data.CreatedBy;\n this.UpdateDate = data.UpdateDate;\n this.UpdatedBy = data.UpdatedBy;\n\n this.Regular = false;\n this.External = false;\n this.Orphaned = true;\n this.OrphanedRunning = false;\n this.Checked = false;\n}\n","export function StatusViewModel(data) {\n this.Authentication = data.Authentication;\n this.Snapshot = data.Snapshot;\n this.Version = data.Version;\n this.Edition = data.Edition;\n this.InstanceID = data.InstanceID;\n}\n\nexport function StatusVersionViewModel(data) {\n this.UpdateAvailable = data.UpdateAvailable;\n this.LatestVersion = data.LatestVersion;\n}\n","import _ from 'lodash-es';\n\nexport function TagViewModel(data) {\n this.Id = data.ID;\n this.Name = _.escape(data.Name);\n}\n","import _ from 'lodash-es';\n\nexport function TeamViewModel(data) {\n this.Id = data.Id;\n this.Name = _.escape(data.Name);\n this.Checked = false;\n}\n","export function TeamMembershipModel(data) {\n this.Id = data.Id;\n this.UserId = data.UserID;\n this.TeamId = data.TeamID;\n this.Role = data.Role;\n}\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\n\nexport class TemplateViewModel {\n constructor(data, version) {\n switch (version) {\n case '2':\n this.setTemplatesV2(data);\n break;\n default:\n throw new Error('Unsupported template version');\n }\n }\n\n setTemplatesV2(data) {\n this.Id = data.Id;\n this.Title = data.title;\n this.Type = data.type;\n this.Description = data.description;\n this.AdministratorOnly = data.AdministratorOnly;\n this.Name = data.name;\n this.Note = data.note;\n this.Categories = data.categories ? data.categories : [];\n this.Platform = data.platform ? data.platform : '';\n this.Logo = data.logo;\n this.Repository = data.repository;\n this.Hostname = data.hostname;\n this.RegistryModel = new PorImageRegistryModel();\n this.RegistryModel.Image = data.image;\n this.RegistryModel.Registry.URL = data.registry || '';\n this.Command = data.command ? data.command : '';\n this.Network = data.network ? data.network : '';\n this.Privileged = data.privileged ? data.privileged : false;\n this.Interactive = data.interactive ? data.interactive : false;\n this.RestartPolicy = data.restart_policy ? data.restart_policy : 'always';\n this.Labels = data.labels ? data.labels : [];\n this.Hosts = data.hosts ? data.hosts : [];\n this.Env = templateEnv(data);\n this.Volumes = templateVolumes(data);\n this.Ports = templatePorts(data);\n }\n}\n\nfunction templatePorts(data) {\n var ports = [];\n\n if (data.ports) {\n ports = data.ports.map(function (p) {\n var portAndProtocol = _.split(p, '/');\n var hostAndContainerPort = _.split(portAndProtocol[0], ':');\n\n return {\n hostPort: hostAndContainerPort.length > 1 ? hostAndContainerPort[0] : undefined,\n containerPort: hostAndContainerPort.length > 1 ? hostAndContainerPort[1] : hostAndContainerPort[0],\n protocol: portAndProtocol[1],\n };\n });\n }\n\n return ports;\n}\n\nfunction templateVolumes(data) {\n var volumes = [];\n\n if (data.volumes) {\n volumes = data.volumes.map(function (v) {\n return {\n container: v.container,\n readonly: v.readonly || false,\n type: v.bind ? 'bind' : 'auto',\n bind: v.bind ? v.bind : null,\n };\n });\n }\n\n return volumes;\n}\n\nfunction templateEnv(data) {\n var env = [];\n\n if (data.env) {\n env = data.env.map(function (envvar) {\n envvar.type = 2;\n envvar.value = envvar.default ? envvar.default : '';\n\n if (envvar.preset) {\n envvar.type = 1;\n }\n\n if (envvar.select) {\n envvar.type = 3;\n for (var i = 0; i < envvar.select.length; i++) {\n var allowedValue = envvar.select[i];\n if (allowedValue.default) {\n envvar.value = allowedValue.value;\n break;\n }\n }\n }\n return envvar;\n });\n }\n\n return env;\n}\n","export function UserViewModel(data) {\n this.Id = data.Id;\n this.Username = data.Username;\n this.Role = data.Role;\n this.UserTheme = data.UserTheme;\n this.EndpointAuthorizations = data.EndpointAuthorizations;\n this.PortainerAuthorizations = data.PortainerAuthorizations;\n if (data.Role === 1) {\n this.RoleName = 'administrator';\n } else {\n this.RoleName = 'user';\n }\n this.AuthenticationMethod = data.AuthenticationMethod;\n this.Checked = false;\n this.EndpointAuthorizations = data.EndpointAuthorizations;\n}\n\nexport function UserTokenModel(data) {\n this.id = data.id;\n this.userId = data.userId;\n this.description = data.description;\n this.prefix = data.prefix;\n this.dateCreated = data.dateCreated;\n this.lastUsed = data.lastUsed;\n}\n","export function WebhookViewModel(data) {\n this.Id = data.Id;\n this.Token = data.Token;\n this.ResourceId = data.ResourceID;\n this.EndpointId = data.EndpointID;\n this.WebhookType = data.WebhookType;\n}\n","angular.module('portainer.oauth', ['ngResource']).constant('API_ENDPOINT_OAUTH', 'api/auth/oauth');\n","const autoNgTemplateLoaderTemplate1 = require('./oauth-providers-selector.html');\n\nimport angular from 'angular';\nimport controller from './oauth-provider-selector.controller';\n\nangular.module('portainer.oauth').component('oauthProvidersSelector', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n onChange: '<',\n value: '<',\n },\n controller,\n});\n","import { buildOption } from '@/portainer/components/BoxSelector';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nexport default class OAuthProviderSelectorController {\n constructor() {\n this.options = [\n buildOption('microsoft', 'fab fa-microsoft', 'Microsoft', 'Microsoft OAuth provider', 'microsoft', FeatureId.HIDE_INTERNAL_AUTH),\n buildOption('google', 'fab fa-google', 'Google', 'Google OAuth provider', 'google', FeatureId.HIDE_INTERNAL_AUTH),\n buildOption('github', 'fab fa-github', 'Github', 'Github OAuth provider', 'github', FeatureId.HIDE_INTERNAL_AUTH),\n buildOption('custom', 'fa fa-user-check', 'Custom', 'Custom OAuth provider', 'custom'),\n ];\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./oauth-settings.html');\n\nimport angular from 'angular';\nimport controller from './oauth-settings.controller';\n\nangular.module('portainer.oauth').component('oauthSettings', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n settings: '=',\n teams: '<',\n onSaveSettings: '<',\n saveButtonState: '<',\n },\n controller,\n});\n","import { baseHref } from '@/portainer/helpers/pathHelper';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\n\nimport providers, { getProviderByUrl } from './providers';\n\nconst MS_TENANT_ID_PLACEHOLDER = 'TENANT_ID';\n\nexport default class OAuthSettingsController {\n /* @ngInject */\n constructor($scope) {\n Object.assign(this, { $scope });\n\n this.limitedFeature = FeatureId.HIDE_INTERNAL_AUTH;\n this.limitedFeatureClass = 'limited-be';\n\n this.state = {\n provider: 'custom',\n overrideConfiguration: false,\n microsoftTenantID: '',\n };\n\n this.$onInit = this.$onInit.bind(this);\n this.onSelectProvider = this.onSelectProvider.bind(this);\n this.onMicrosoftTenantIDChange = this.onMicrosoftTenantIDChange.bind(this);\n this.useDefaultProviderConfiguration = this.useDefaultProviderConfiguration.bind(this);\n this.updateSSO = this.updateSSO.bind(this);\n this.addTeamMembershipMapping = this.addTeamMembershipMapping.bind(this);\n this.removeTeamMembership = this.removeTeamMembership.bind(this);\n this.addAdminClaimRegex = this.addAdminClaimRegex.bind(this);\n this.removeAdminClaimRegex = this.removeAdminClaimRegex.bind(this);\n this.onChangeHideInternalAuth = this.onChangeHideInternalAuth.bind(this);\n this.onToggleAutoTeamMembership = this.onToggleAutoTeamMembership.bind(this);\n }\n\n onMicrosoftTenantIDChange() {\n const tenantID = this.state.microsoftTenantID || MS_TENANT_ID_PLACEHOLDER;\n\n this.settings.AuthorizationURI = `https://login.microsoftonline.com/${tenantID}/oauth2/authorize`;\n this.settings.AccessTokenURI = `https://login.microsoftonline.com/${tenantID}/oauth2/token`;\n this.settings.ResourceURI = `https://graph.windows.net/${tenantID}/me?api-version=2013-11-08`;\n this.settings.LogoutURI = `https://login.microsoftonline.com/${tenantID}/oauth2/logout`;\n }\n\n useDefaultProviderConfiguration(providerId) {\n const provider = providers[providerId];\n\n this.state.overrideConfiguration = false;\n\n if (!this.isLimitedToBE || providerId === 'custom') {\n this.settings.AuthorizationURI = provider.authUrl;\n this.settings.AccessTokenURI = provider.accessTokenUrl;\n this.settings.ResourceURI = provider.resourceUrl;\n this.settings.LogoutURI = provider.logoutUrl;\n this.settings.UserIdentifier = provider.userIdentifier;\n this.settings.Scopes = provider.scopes;\n\n if (providerId === 'microsoft' && this.state.microsoftTenantID !== '') {\n this.onMicrosoftTenantIDChange();\n }\n } else {\n this.settings.ClientID = '';\n this.settings.ClientSecret = '';\n }\n }\n\n onSelectProvider(provider) {\n this.state.provider = provider;\n\n this.useDefaultProviderConfiguration(provider);\n }\n\n updateSSO(checked) {\n this.$scope.$evalAsync(() => {\n this.settings.SSO = checked;\n this.onChangeHideInternalAuth(checked);\n });\n }\n\n onChangeHideInternalAuth(checked) {\n this.$scope.$evalAsync(() => {\n if (!this.isLimitedToBE) {\n this.settings.HideInternalAuth = checked;\n }\n });\n }\n\n onToggleAutoTeamMembership(checked) {\n this.$scope.$evalAsync(() => {\n this.settings.OAuthAutoMapTeamMemberships = checked;\n });\n }\n\n addTeamMembershipMapping() {\n this.settings.TeamMemberships.OAuthClaimMappings.push({ ClaimValRegex: '', Team: this.settings.DefaultTeamID });\n }\n\n removeTeamMembership(index) {\n this.settings.TeamMemberships.OAuthClaimMappings.splice(index, 1);\n }\n\n addAdminClaimRegex() {\n this.settings.TeamMemberships.AdminGroupClaimsRegexList.push('');\n }\n\n removeAdminClaimRegex(index) {\n this.settings.TeamMemberships.AdminGroupClaimsRegexList.splice(index, 1);\n }\n\n isOAuthTeamMembershipFormValid() {\n if (this.settings.OAuthAutoMapTeamMemberships && this.settings.TeamMemberships) {\n if (!this.settings.TeamMemberships.OAuthClaimName) {\n return false;\n }\n\n const hasInvalidMapping = this.settings.TeamMemberships.OAuthClaimMappings.some((m) => !(m.ClaimValRegex && m.Team));\n if (hasInvalidMapping) {\n return false;\n }\n }\n return true;\n }\n\n isOAuthAdminMappingFormValid() {\n if (this.settings.AdminAutoPopulate && this.settings.AdminGroupClaimsRegexList) {\n const hasInvalidMapping = this.settings.AdminGroupClaimsRegexList.length === 0 || this.settings.AdminGroupClaimsRegexList.some((e) => e === '');\n if (hasInvalidMapping) {\n return false;\n }\n }\n\n return true;\n }\n\n $onInit() {\n this.isLimitedToBE = isLimitedToBE(this.limitedFeature);\n\n if (this.isLimitedToBE) {\n return;\n }\n\n if (this.settings.RedirectURI === '') {\n this.settings.RedirectURI = window.location.origin + baseHref();\n }\n\n if (this.settings.AuthorizationURI) {\n const authUrl = this.settings.AuthorizationURI;\n\n this.state.provider = getProviderByUrl(authUrl);\n if (this.state.provider === 'microsoft') {\n const tenantID = authUrl.match(/login.microsoftonline.com\\/(.*?)\\//)[1];\n if (tenantID !== MS_TENANT_ID_PLACEHOLDER) {\n this.state.microsoftTenantID = tenantID;\n this.onMicrosoftTenantIDChange();\n }\n }\n }\n\n if (this.settings.DefaultTeamID === 0) {\n this.settings.DefaultTeamID = null;\n }\n\n if (this.settings.TeamMemberships == null) {\n this.settings.TeamMemberships = {};\n }\n\n if (this.settings.TeamMemberships.OAuthClaimMappings === null) {\n this.settings.TeamMemberships.OAuthClaimMappings = [];\n }\n\n if (this.settings.TeamMemberships.AdminGroupClaimsRegexList === null) {\n this.settings.TeamMemberships.AdminGroupClaimsRegexList = [];\n }\n }\n}\n","import { baseHref } from '@/portainer/helpers/pathHelper';\n\nexport default {\n microsoft: {\n authUrl: 'https://login.microsoftonline.com/TENANT_ID/oauth2/authorize',\n accessTokenUrl: 'https://login.microsoftonline.com/TENANT_ID/oauth2/token',\n resourceUrl: 'https://graph.windows.net/TENANT_ID/me?api-version=2013-11-08',\n logoutUrl: `https://login.microsoftonline.com/TENANT_ID/oauth2/logout`,\n userIdentifier: 'userPrincipalName',\n scopes: 'id,email,name',\n },\n google: {\n authUrl: 'https://accounts.google.com/o/oauth2/auth',\n accessTokenUrl: 'https://accounts.google.com/o/oauth2/token',\n resourceUrl: 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json',\n logoutUrl: `https://www.google.com/accounts/Logout?continue=https://appengine.google.com/_ah/logout?continue=${window.location.origin}${baseHref()}#!/auth`,\n userIdentifier: 'email',\n scopes: 'profile email',\n },\n github: {\n authUrl: 'https://github.com/login/oauth/authorize',\n accessTokenUrl: 'https://github.com/login/oauth/access_token',\n resourceUrl: 'https://api.github.com/user',\n logoutUrl: `https://github.com/logout`,\n userIdentifier: 'login',\n scopes: 'id email name',\n },\n custom: { authUrl: '', accessTokenUrl: '', resourceUrl: '', logoutUrl: '', userIdentifier: '', scopes: '' },\n};\n\nexport function getProviderByUrl(providerAuthURL = '') {\n if (providerAuthURL.includes('login.microsoftonline.com')) {\n return 'microsoft';\n }\n\n if (providerAuthURL.includes('accounts.google.com')) {\n return 'google';\n }\n\n if (providerAuthURL.includes('github.com')) {\n return 'github';\n }\n\n return 'custom';\n}\n","angular.module('portainer.oauth').factory('OAuth', [\n '$resource',\n 'API_ENDPOINT_OAUTH',\n function OAuthFactory($resource, API_ENDPOINT_OAUTH) {\n 'use strict';\n return $resource(\n API_ENDPOINT_OAUTH + '/:action',\n {},\n {\n validate: {\n method: 'POST',\n ignoreLoadingBar: true,\n params: {\n action: 'validate',\n },\n },\n }\n );\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./access-viewer-datatable.html');\n\nexport const accessViewerDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n tableKey: '@',\n orderBy: '@',\n dataset: '<',\n },\n};\n","import _ from 'lodash-es';\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\n\nimport AccessViewerPolicyModel from '../../models/access';\n\nexport default class AccessViewerController {\n /* @ngInject */\n constructor(Notifications, RoleService, UserService, EndpointService, GroupService, TeamService, TeamMembershipService) {\n this.Notifications = Notifications;\n this.RoleService = RoleService;\n this.UserService = UserService;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.TeamService = TeamService;\n this.TeamMembershipService = TeamMembershipService;\n\n this.limitedFeature = 'rbac-roles';\n this.users = [];\n }\n\n onUserSelect() {\n this.userRoles = [];\n const userRoles = {};\n const user = this.selectedUser;\n const userMemberships = _.filter(this.teamMemberships, { UserId: user.Id });\n\n for (const [, endpoint] of _.entries(this.endpoints)) {\n let role = this.getRoleFromUserEndpointPolicy(user, endpoint);\n if (role) {\n userRoles[endpoint.Id] = role;\n continue;\n }\n\n role = this.getRoleFromUserEndpointGroupPolicy(user, endpoint);\n if (role) {\n userRoles[endpoint.Id] = role;\n continue;\n }\n\n role = this.getRoleFromTeamEndpointPolicies(userMemberships, endpoint);\n if (role) {\n userRoles[endpoint.Id] = role;\n continue;\n }\n\n role = this.getRoleFromTeamEndpointGroupPolicies(userMemberships, endpoint);\n if (role) {\n userRoles[endpoint.Id] = role;\n }\n }\n\n this.userRoles = _.values(userRoles);\n }\n\n findLowestRole(policies) {\n return _.first(_.orderBy(policies, 'RolePriority', 'desc'));\n }\n\n getRoleFromUserEndpointPolicy(user, endpoint) {\n const policyRoles = [];\n const policy = (endpoint.UserAccessPolicies || {})[user.Id];\n if (policy) {\n const accessPolicy = new AccessViewerPolicyModel(policy, endpoint, this.roles, null, null);\n policyRoles.push(accessPolicy);\n }\n return this.findLowestRole(policyRoles);\n }\n\n getRoleFromUserEndpointGroupPolicy(user, endpoint) {\n const policyRoles = [];\n const policy = this.groupUserAccessPolicies[endpoint.GroupId][user.Id];\n if (policy) {\n const accessPolicy = new AccessViewerPolicyModel(policy, endpoint, this.roles, this.groups[endpoint.GroupId], null);\n policyRoles.push(accessPolicy);\n }\n return this.findLowestRole(policyRoles);\n }\n\n getRoleFromTeamEndpointPolicies(memberships, endpoint) {\n const policyRoles = [];\n for (const membership of memberships) {\n const policy = (endpoint.TeamAccessPolicies || {})[membership.TeamId];\n if (policy) {\n const accessPolicy = new AccessViewerPolicyModel(policy, endpoint, this.roles, null, this.teams[membership.TeamId]);\n policyRoles.push(accessPolicy);\n }\n }\n return this.findLowestRole(policyRoles);\n }\n\n getRoleFromTeamEndpointGroupPolicies(memberships, endpoint) {\n const policyRoles = [];\n for (const membership of memberships) {\n const policy = this.groupTeamAccessPolicies[endpoint.GroupId][membership.TeamId];\n if (policy) {\n const accessPolicy = new AccessViewerPolicyModel(policy, endpoint, this.roles, this.groups[endpoint.GroupId], this.teams[membership.TeamId]);\n policyRoles.push(accessPolicy);\n }\n }\n return this.findLowestRole(policyRoles);\n }\n\n async $onInit() {\n try {\n const limitedToBE = isLimitedToBE(this.limitedFeature);\n\n if (limitedToBE) {\n return;\n }\n\n this.users = await this.UserService.users();\n this.endpoints = _.keyBy((await this.EndpointService.endpoints()).value, 'Id');\n const groups = await this.GroupService.groups();\n this.groupUserAccessPolicies = {};\n this.groupTeamAccessPolicies = {};\n _.forEach(groups, (group) => {\n this.groupUserAccessPolicies[group.Id] = group.UserAccessPolicies;\n this.groupTeamAccessPolicies[group.Id] = group.TeamAccessPolicies;\n });\n this.groups = _.keyBy(groups, 'Id');\n this.roles = _.keyBy(await this.RoleService.roles(), 'Id');\n this.teams = _.keyBy(await this.TeamService.teams(), 'Id');\n this.teamMemberships = await this.TeamMembershipService.memberships();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve accesses');\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./access-viewer.html');\n\nimport controller from './access-viewer.controller';\n\nexport const accessViewer = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","const autoNgTemplateLoaderTemplate1 = require('./roles-datatable.html');\n\nimport controller from './roles-datatable.controller';\nimport './roles-datatable.css';\n\nexport const rolesDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n};\n","import angular from 'angular';\nimport { RoleTypes } from '../../models/role';\n\nexport default class RolesDatatableController {\n /* @ngInject */\n constructor($controller, $scope) {\n this.limitedFeature = 'rbac-roles';\n\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n }\n\n isDefaultItem(item) {\n return item.ID === RoleTypes.STANDARD;\n }\n}\n","angular.module('portainer.rbac').directive('authorization', [\n 'Authentication',\n '$async',\n function (Authentication, $async) {\n async function linkAsync(scope, elem, attrs) {\n elem.hide();\n\n var authorizations = attrs.authorization.split(',');\n for (var i = 0; i < authorizations.length; i++) {\n authorizations[i] = authorizations[i].trim();\n }\n\n var hasAuthorizations = Authentication.hasAuthorizations(authorizations);\n\n if (hasAuthorizations) {\n elem.show();\n } else if (!hasAuthorizations && elem[0].tagName === 'A') {\n elem.show();\n elem.addClass('portainer-disabled-link');\n }\n }\n\n return {\n restrict: 'A',\n link: function (scope, elem, attrs) {\n return $async(linkAsync, scope, elem, attrs);\n },\n };\n },\n]);\n","angular.module('portainer.rbac').directive('disableAuthorization', [\n 'Authentication',\n '$async',\n function (Authentication, $async) {\n async function linkAsync(scope, elem, attrs) {\n var authorizations = attrs.disableAuthorization.split(',');\n for (var i = 0; i < authorizations.length; i++) {\n authorizations[i] = authorizations[i].trim();\n }\n\n if (!Authentication.hasAuthorizations(authorizations)) {\n elem.attr('disabled', true);\n if (elem.is('Slider')) {\n elem.css('pointer-events', 'none');\n }\n }\n }\n\n return {\n restrict: 'A',\n link: function (scope, elem, attrs) {\n return $async(linkAsync, scope, elem, attrs);\n },\n };\n },\n]);\n","angular.module('portainer.rbac').directive('excludeAuthorization', [\n 'Authentication',\n '$async',\n function (Authentication, $async) {\n async function linkAsync(scope, elem, attrs) {\n elem.show();\n\n var authorizations = attrs.excludeAuthorization.split(',');\n for (var i = 0; i < authorizations.length; i++) {\n authorizations[i] = authorizations[i].trim();\n }\n\n var hasAuthorizations = Authentication.hasAuthorizations(authorizations);\n\n if (hasAuthorizations) {\n elem.hide();\n }\n }\n\n return {\n restrict: 'A',\n link: function (scope, elem, attrs) {\n return $async(linkAsync, scope, elem, attrs);\n },\n };\n },\n]);\n","import { rolesView } from './views/roles';\nimport { accessViewer } from './components/access-viewer';\nimport { accessViewerDatatable } from './components/access-viewer/access-viewer-datatable';\nimport { rolesDatatable } from './components/roles-datatable';\n\nimport { RoleService } from './services/role.service';\nimport { RolesFactory } from './services/role.rest';\n\nangular\n .module('portainer.rbac', ['ngResource'])\n .constant('API_ENDPOINT_ROLES', 'api/roles')\n .component('accessViewer', accessViewer)\n .component('accessViewerDatatable', accessViewerDatatable)\n .component('rolesDatatable', rolesDatatable)\n .component('rolesView', rolesView)\n .factory('RoleService', RoleService)\n .factory('Roles', RolesFactory)\n .config(config);\n\n/* @ngInject */\nfunction config($stateRegistryProvider) {\n const roles = {\n name: 'portainer.roles',\n url: '/roles',\n views: {\n 'content@': {\n component: 'rolesView',\n },\n },\n };\n\n $stateRegistryProvider.register(roles);\n}\n","export default function AccessViewerPolicyModel(policy, endpoint, roles, group, team) {\n this.EndpointId = endpoint.Id;\n this.EndpointName = endpoint.Name;\n this.RoleId = policy.RoleId;\n this.RoleName = roles[policy.RoleId].Name;\n this.RolePriority = roles[policy.RoleId].Priority;\n if (group) {\n this.GroupId = group.Id;\n this.GroupName = group.Name;\n }\n if (team) {\n this.TeamId = team.Id;\n this.TeamName = team.Name;\n }\n this.AccessLocation = group ? 'environment group' : 'environment';\n}\n","export function RoleViewModel(id, name, description, authorizations) {\n this.ID = id;\n this.Name = name;\n this.Description = description;\n this.Authorizations = authorizations;\n}\n\nexport const RoleTypes = Object.freeze({\n ENDPOINT_ADMIN: 1,\n HELPDESK: 2,\n STANDARD: 3,\n READ_ONLY: 4,\n OPERATOR: 5,\n});\n","angular.module('portainer.app').factory('Roles', [\n '$resource',\n 'API_ENDPOINT_ROLES',\n function RolesFactory($resource, API_ENDPOINT_ROLES) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ROLES + '/:id',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","/* @ngInject */\nexport function RolesFactory($resource, API_ENDPOINT_ROLES) {\n return $resource(\n API_ENDPOINT_ROLES + '/:id',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n}\n","/* @ngInject */\nexport function RoleService($q, Roles) {\n return {\n roles,\n };\n\n function roles() {\n return Roles.query({}).$promise;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./roles.html');\n\nimport controller from './roles.controller';\n\nexport const rolesView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import _ from 'lodash-es';\n\nexport default class RolesController {\n /* @ngInject */\n constructor(Notifications, RoleService) {\n this.Notifications = Notifications;\n this.RoleService = RoleService;\n }\n\n async $onInit() {\n this.roles = [];\n\n try {\n this.roles = await this.RoleService.roles();\n this.roles = _.orderBy(this.roles, 'Priority', 'asc');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve roles');\n }\n }\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nclass RolesController {\n /* @ngInject */\n constructor(Notifications, RoleService) {\n this.Notifications = Notifications;\n this.RoleService = RoleService;\n }\n\n async $onInit() {\n this.roles = [];\n\n try {\n this.roles = await this.RoleService.roles();\n this.roles = _.orderBy(this.roles, 'Priority', 'asc');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve roles');\n }\n }\n}\nexport default RolesController;\nangular.module('portainer.rbac').controller('RolesController', RolesController);\n","const autoNgTemplateLoaderTemplate1 = require('./registryRepositoriesDatatable.html');\n\nangular.module('portainer.registrymanagement').component('registryRepositoriesDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'RegistryRepositoriesDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n paginationAction: '<',\n loading: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('RegistryRepositoriesDatatableController', [\n '$scope',\n '$controller',\n function ($scope, $controller) {\n var ctrl = this;\n\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n this.state.orderBy = this.orderBy;\n\n function areDifferent(a, b) {\n if (!a || !b) {\n return true;\n }\n var namesA = a\n .map(function (x) {\n return x.Name;\n })\n .sort();\n var namesB = b\n .map(function (x) {\n return x.Name;\n })\n .sort();\n return namesA.join(',') !== namesB.join(',');\n }\n\n $scope.$watch(\n function () {\n return ctrl.state.filteredDataSet;\n },\n function (newValue, oldValue) {\n if (newValue && areDifferent(oldValue, newValue)) {\n ctrl.paginationAction(_.filter(newValue, ({ TagsCount }) => !TagsCount));\n }\n },\n true\n );\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./registriesRepositoryTagsDatatable.html');\n\nangular.module('portainer.registrymanagement').component('registriesRepositoryTagsDatatable', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'RegistryRepositoriesTagsDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n removeAction: '<',\n retagAction: '<',\n advancedFeaturesAvailable: '<',\n paginationAction: '<',\n loading: '<',\n },\n});\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('RegistryRepositoriesTagsDatatableController', [\n '$scope',\n '$controller',\n function ($scope, $controller) {\n angular.extend(this, $controller('GenericDatatableController', { $scope: $scope }));\n var ctrl = this;\n this.state.orderBy = this.orderBy;\n\n function diff(item) {\n return item.Name + item.ImageDigest;\n }\n\n function areDifferent(a, b) {\n if (!a || !b) {\n return true;\n }\n var namesA = _.sortBy(_.map(a, diff));\n var namesB = _.sortBy(_.map(b, diff));\n return namesA.join(',') !== namesB.join(',');\n }\n\n $scope.$watch(\n function () {\n return ctrl.state.filteredDataSet;\n },\n function (newValue, oldValue) {\n if (newValue && newValue.length && areDifferent(oldValue, newValue)) {\n ctrl.paginationAction(_.filter(newValue, { ImageId: '' }));\n ctrl.resetSelectionState();\n }\n },\n true\n );\n },\n]);\n","import _ from 'lodash-es';\nimport { RepositoryTagViewModel } from '../models/repositoryTag';\n\nangular.module('portainer.registrymanagement').factory('RegistryV2Helper', [\n function RegistryV2HelperFactory() {\n 'use strict';\n\n var helper = {};\n\n function historyRawToParsed(rawHistory) {\n return _.map(rawHistory, (item) => angular.fromJson(item.v1Compatibility));\n }\n\n helper.manifestsToTag = function (manifests) {\n var v1 = manifests.v1;\n var v2 = manifests.v2;\n\n var history = historyRawToParsed(v1.history);\n var name = v1.tag;\n var os = _.get(history, '[0].os', '');\n var arch = v1.architecture;\n var size = v2.layers.reduce(function (a, b) {\n return {\n size: a.size + b.size,\n };\n }).size;\n var imageId = v2.config.digest;\n var imageDigest = v2.digest;\n\n return new RepositoryTagViewModel(name, os, arch, size, imageDigest, imageId, v2, history);\n };\n\n return helper;\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./views/repositories/edit/template.html');\n\nangular.module('portainer.registrymanagement', []).config([\n '$stateRegistryProvider',\n function ($stateRegistryProvider) {\n 'use strict';\n\n var registryConfiguration = {\n name: 'portainer.registries.registry.configure',\n url: '/configure',\n views: {\n 'content@': {\n component: 'configureRegistryView',\n },\n },\n };\n\n var registryRepositories = {\n name: 'portainer.registries.registry.repositories',\n url: '/repositories',\n views: {\n 'content@': {\n component: 'registryRepositoriesView',\n },\n },\n };\n\n var registryRepositoryTags = {\n name: 'portainer.registries.registry.repository',\n url: '/:repository',\n views: {\n 'content@': {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'RegistryRepositoryController',\n },\n },\n };\n var registryRepositoryTag = {\n name: 'portainer.registries.registry.repository.tag',\n url: '/:tag',\n views: {\n 'content@': {\n component: 'registryRepositoryTagView',\n },\n },\n };\n\n $stateRegistryProvider.register(registryConfiguration);\n $stateRegistryProvider.register(registryRepositories);\n $stateRegistryProvider.register(registryRepositoryTags);\n $stateRegistryProvider.register(registryRepositoryTag);\n },\n]);\n","export function RegistryGitlabProject(project) {\n this.Id = project.id;\n this.Description = project.description;\n this.Name = project.name;\n this.Namespace = project.namespace ? project.namespace.name : '';\n this.PathWithNamespace = project.path_with_namespace;\n this.RegistryEnabled = project.container_registry_enabled;\n}\n","export function RegistryImageDetailsViewModel(data) {\n if (data) {\n this.Id = data.id;\n this.Parent = data.parent;\n this.Created = data.created;\n this.DockerVersion = data.docker_version;\n this.Os = data.os;\n this.Architecture = data.architecture;\n this.Author = data.author;\n this.Command = data.config.Cmd;\n this.Entrypoint = data.container_config.Entrypoint ? data.container_config.Entrypoint : '';\n this.ExposedPorts = data.container_config.ExposedPorts ? Object.keys(data.container_config.ExposedPorts) : [];\n this.Volumes = data.container_config.Volumes ? Object.keys(data.container_config.Volumes) : [];\n this.Env = data.container_config.Env ? data.container_config.Env : [];\n }\n}\n","import _ from 'lodash-es';\n\nexport function RegistryImageLayerViewModel(order, data) {\n this.Order = order;\n this.Id = data.id;\n this.Created = data.created;\n this.CreatedBy = _.join(data.container_config.Cmd, ' ');\n}\n","import _ from 'lodash-es';\n\nexport function RegistryRepositoryViewModel(item) {\n if (item.name && item.tags) {\n this.Name = item.name;\n this.TagsCount = _.without(item.tags, null).length;\n } else {\n this.Name = item;\n this.TagsCount = 0;\n }\n}\n\nexport function RegistryRepositoryGitlabViewModel(data) {\n this.Name = data.path;\n this.TagsCount = data.tags.length;\n}\n","export function RepositoryTagViewModel(name, os, arch, size, imageDigest, imageId, v2, history) {\n this.Name = name;\n this.Os = os || '';\n this.Architecture = arch || '';\n this.Size = size || 0;\n this.ImageDigest = imageDigest || '';\n this.ImageId = imageId || '';\n this.ManifestV2 = v2 || {};\n this.History = history || [];\n}\n\nexport function RepositoryShortTag(name, imageId, imageDigest, manifest) {\n this.Name = name;\n this.ImageId = imageId;\n this.ImageDigest = imageDigest;\n this.ManifestV2 = manifest;\n}\n\nexport function RepositoryAddTagPayload(tag, manifest) {\n this.Tag = tag;\n this.Manifest = manifest;\n}\n","import linkGetResponse from './transform/linkGetResponse';\n\nangular.module('portainer.registrymanagement').factory('RegistryCatalog', [\n '$resource',\n 'API_ENDPOINT_REGISTRIES',\n function RegistryCatalogFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n return $resource(\n API_ENDPOINT_REGISTRIES + '/:id/v2/:action',\n {},\n {\n get: {\n method: 'GET',\n params: { id: '@id', action: '_catalog' },\n transformResponse: linkGetResponse,\n },\n ping: {\n method: 'GET',\n params: { id: '@id' },\n },\n pingWithForceNew: {\n method: 'GET',\n params: { id: '@id' },\n headers: { 'X-RegistryManagement-ForceNew': '1' },\n },\n },\n {\n stripTrailingSlashes: false,\n }\n );\n },\n]);\n","/**\n * This service has been created to request the docker registry API\n * without triggering AngularJS digest cycles\n * For more information, see https://github.com/portainer/portainer/pull/2648#issuecomment-505644913\n */\n\nimport $ from 'jquery';\nimport { Sha256 } from '@aws-crypto/sha256-js';\n\nangular.module('portainer.registrymanagement').factory('RegistryManifestsJquery', [\n 'API_ENDPOINT_REGISTRIES',\n function RegistryManifestsJqueryFactory(API_ENDPOINT_REGISTRIES) {\n 'use strict';\n\n function buildUrl(params) {\n return API_ENDPOINT_REGISTRIES + '/' + params.id + '/v2/' + params.repository + '/manifests/' + params.tag;\n }\n\n function _get(params) {\n return new Promise((resolve, reject) => {\n $.ajax({\n type: 'GET',\n dataType: 'JSON',\n url: buildUrl(params),\n headers: {\n Accept: 'application/vnd.docker.distribution.manifest.v1+json',\n 'Cache-Control': 'no-cache',\n 'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',\n },\n success: (result) => resolve(result),\n error: (error) => reject(error),\n });\n });\n }\n\n function _getV2(params) {\n return new Promise((resolve, reject) => {\n $.ajax({\n type: 'GET',\n dataType: 'text',\n url: buildUrl(params),\n headers: {\n Accept: 'application/vnd.docker.distribution.manifest.v2+json',\n 'Cache-Control': 'no-cache',\n 'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',\n },\n success: async (resultText, status, request) => {\n const result = JSON.parse(resultText);\n // ECR does not return the digest header\n result.digest = request.getResponseHeader('Docker-Content-Digest') || (await sha256(resultText));\n resolve(result);\n },\n error: (error) => reject(error),\n });\n });\n }\n\n function _put(params, data) {\n const transformRequest = (d) => {\n return angular.toJson(d, 3);\n };\n return new Promise((resolve, reject) => {\n $.ajax({\n type: 'PUT',\n url: buildUrl(params),\n headers: {\n 'Content-Type': 'application/vnd.docker.distribution.manifest.v2+json',\n },\n data: transformRequest(data),\n success: (result) => resolve(result),\n error: (error) => reject(error),\n });\n });\n }\n\n function _delete(params) {\n return new Promise((resolve, reject) => {\n $.ajax({\n type: 'DELETE',\n url: buildUrl(params),\n success: (result) => resolve(result),\n error: (error) => reject(error),\n });\n });\n }\n\n return {\n get: _get,\n getV2: _getV2,\n put: _put,\n delete: _delete,\n };\n },\n]);\n\nasync function sha256(string) {\n const hash = new Sha256();\n hash.update(string);\n return await hash.digest();\n}\n","import linkGetResponse from './transform/linkGetResponse';\n\nangular.module('portainer.registrymanagement').factory('RegistryTags', [\n '$resource',\n 'API_ENDPOINT_REGISTRIES',\n function RegistryTagsFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n return $resource(\n API_ENDPOINT_REGISTRIES + '/:id/v2/:repository/tags/list',\n {},\n {\n get: {\n method: 'GET',\n params: { id: '@id', repository: '@repository' },\n transformResponse: linkGetResponse,\n },\n }\n );\n },\n]);\n","export default function gitlabResponseGetLink(data, headers) {\n let response = {};\n try {\n response.data = angular.fromJson(data);\n response.next = headers('X-Next-Page');\n } catch (error) {\n response = data;\n }\n return response;\n}\n","export default function linkGetResponse(data, headers) {\n var response = angular.fromJson(data);\n var link = headers('link');\n if (link) {\n var queryString = link.substring(link.indexOf('?') + 1).split('>;')[0];\n var queries = queryString.split('&');\n for (var i = 0; i < queries.length; i++) {\n var kv = queries[i].split('=');\n response[kv[0]] = kv[1];\n }\n }\n return response;\n}\n","import _ from 'lodash-es';\n\nfunction findBestStep(length) {\n let step = Math.trunc(length / 10);\n if (step < 10) {\n step = 10;\n } else if (step > 100) {\n step = 100;\n }\n return step;\n}\n\nexport default async function* genericAsyncGenerator($q, list, func, params) {\n const step = findBestStep(list.length);\n let start = 0;\n let end = start + step;\n let results = [];\n while (start < list.length) {\n const batch = _.slice(list, start, end);\n const promises = [];\n for (let i = 0; i < batch.length; i++) {\n promises.push(func(...params, batch[i]));\n }\n yield start;\n const res = await $q.all(promises);\n for (let i = 0; i < res.length; i++) {\n results.push(res[i]);\n }\n start = end;\n end += step;\n }\n yield list.length;\n yield results;\n}\n","import { RegistryTypes } from 'Portainer/models/registryTypes';\n\nangular.module('portainer.registrymanagement').factory('RegistryServiceSelector', [\n '$q',\n 'RegistryV2Service',\n 'RegistryGitlabService',\n 'RegistryEcrService',\n function RegistryServiceSelector($q, RegistryV2Service, RegistryGitlabService, RegistryEcrService) {\n 'use strict';\n const service = {\n ping,\n repositories,\n getRepositoriesDetails,\n tag,\n tags,\n getTagsDetails,\n addTag,\n retagWithProgress,\n shortTagsWithProgress,\n deleteTagsWithProgress,\n deleteManifest,\n deleteRepository,\n batchDeleteTags,\n };\n\n function ping(registry, forceNewConfig) {\n let service = RegistryV2Service;\n return service.ping(registry, forceNewConfig);\n }\n\n function repositories(registry) {\n let service = RegistryV2Service;\n if (registry.Type === RegistryTypes.GITLAB) {\n service = RegistryGitlabService;\n }\n return service.repositories(registry);\n }\n\n function getRepositoriesDetails(registry, repositories) {\n let service = RegistryV2Service;\n return service.getRepositoriesDetails(registry, repositories);\n }\n\n function tags(registry, repository) {\n let service = RegistryV2Service;\n return service.tags(registry, repository);\n }\n\n function getTagsDetails(registry, repository, tags) {\n let service = RegistryV2Service;\n return service.getTagsDetails(registry, repository, tags);\n }\n\n function tag(registry, repository, tag) {\n let service = RegistryV2Service;\n return service.tag(registry, repository, tag);\n }\n\n function addTag(registry, repository, tag, manifest) {\n let service = RegistryV2Service;\n return service.addTag(registry, repository, tag, manifest);\n }\n\n function deleteManifest(registry, repository, digest) {\n let service = RegistryV2Service;\n return service.deleteManifest(registry, repository, digest);\n }\n\n function shortTagsWithProgress(registry, repository, tagsList) {\n let service = RegistryV2Service;\n return service.shortTagsWithProgress(registry, repository, tagsList);\n }\n\n function deleteTagsWithProgress(registry, repository, modifiedDigests, impactedTags) {\n let service = RegistryV2Service;\n return service.deleteTagsWithProgress(registry, repository, modifiedDigests, impactedTags);\n }\n\n function retagWithProgress(registry, repository, modifiedTags, modifiedDigests, impactedTags) {\n let service = RegistryV2Service;\n if (registry.Type === RegistryTypes.ECR) {\n service = RegistryEcrService;\n }\n return service.retagWithProgress(registry, repository, modifiedTags, modifiedDigests, impactedTags);\n }\n\n function batchDeleteTags(params, data) {\n // Only for ECR\n const service = RegistryEcrService;\n return service.batchDeleteTags(params, data);\n }\n\n function deleteRepository(registry, repository) {\n // Only for ECR\n const service = RegistryEcrService;\n return service.deleteRepository(registry, repository);\n }\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { RepositoryAddTagPayload, RepositoryShortTag } from '../models/repositoryTag';\nimport { RegistryRepositoryViewModel } from '../models/registryRepository';\nimport genericAsyncGenerator from './genericAsyncGenerator';\n\nangular.module('portainer.registrymanagement').factory('RegistryV2Service', [\n '$q',\n '$async',\n 'RegistryCatalog',\n 'RegistryTags',\n 'RegistryManifestsJquery',\n 'RegistryV2Helper',\n function RegistryV2ServiceFactory($q, $async, RegistryCatalog, RegistryTags, RegistryManifestsJquery, RegistryV2Helper) {\n 'use strict';\n var service = {};\n\n /**\n * PING\n */\n function ping(registry, forceNewConfig) {\n const id = registry.Id;\n if (forceNewConfig) {\n return RegistryCatalog.pingWithForceNew({ id: id }).$promise;\n }\n return RegistryCatalog.ping({ id: id }).$promise;\n }\n\n /**\n * END PING\n */\n\n /**\n * REPOSITORIES\n */\n\n function _getCatalogPage(params, deferred, repositories) {\n RegistryCatalog.get(params).$promise.then(function (data) {\n repositories = _.concat(repositories, data.repositories);\n if (data.last && data.n) {\n _getCatalogPage({ id: params.id, n: data.n, last: data.last }, deferred, repositories);\n } else {\n deferred.resolve(repositories);\n }\n });\n }\n\n function _getCatalog(id) {\n var deferred = $q.defer();\n var repositories = [];\n\n _getCatalogPage({ id: id }, deferred, repositories);\n return deferred.promise;\n }\n\n function repositories(registry) {\n const deferred = $q.defer();\n const id = registry.Id;\n\n _getCatalog(id)\n .then(function success(data) {\n const repositories = _.map(data, (repositoryName) => new RegistryRepositoryViewModel(repositoryName));\n deferred.resolve(repositories);\n })\n .catch(function error(err) {\n deferred.reject({\n msg: 'Unable to retrieve repositories',\n err: err,\n });\n });\n\n return deferred.promise;\n }\n\n function getRepositoriesDetails(registry, repositories) {\n const deferred = $q.defer();\n const promises = _.map(repositories, (repository) => tags(registry, repository.Name));\n\n Promise.all(promises)\n .then(function success(data) {\n var repositories = data.map(function (item) {\n return new RegistryRepositoryViewModel(item);\n });\n repositories = _.without(repositories, undefined);\n deferred.resolve(repositories);\n })\n .catch(function error(err) {\n deferred.reject({\n msg: 'Unable to retrieve repositories',\n err: err,\n });\n });\n\n return deferred.promise;\n }\n\n /**\n * END REPOSITORIES\n */\n\n /**\n * TAGS\n */\n\n function _getTagsPage(params, deferred, previousTags) {\n RegistryTags.get(params)\n .$promise.then(function (data) {\n previousTags.name = data.name;\n previousTags.tags = _.concat(previousTags.tags, data.tags);\n if (data.last && data.n) {\n _getTagsPage({ id: params.id, repository: params.repository, n: data.n, last: data.last }, deferred, previousTags);\n } else {\n deferred.resolve(previousTags);\n }\n })\n .catch(function error(err) {\n if (err.status === 404) {\n deferred.resolve(previousTags);\n return;\n }\n\n deferred.reject({\n msg: 'Unable to retrieve tags',\n err: err,\n });\n });\n }\n\n function tags(registry, repository) {\n const deferred = $q.defer();\n const id = registry.Id;\n\n _getTagsPage({ id: id, repository: repository }, deferred, { name: repository, tags: [] });\n return deferred.promise;\n }\n\n function getTagsDetails(registry, repository, tags) {\n const promises = _.map(tags, (t) => tag(registry, repository, t.Name));\n\n return $q.all(promises);\n }\n\n function tag(registry, repository, tag) {\n const deferred = $q.defer();\n const id = registry.Id;\n\n var promises = {\n v1: RegistryManifestsJquery.get({\n id: id,\n repository: repository,\n tag: tag,\n }),\n v2: RegistryManifestsJquery.getV2({\n id: id,\n repository: repository,\n tag: tag,\n }),\n };\n $q.all(promises)\n .then(function success(data) {\n var tagDetails = RegistryV2Helper.manifestsToTag(data);\n tagDetails.Name = tagDetails.Name || tag;\n deferred.resolve(tagDetails);\n })\n .catch(function error(err) {\n deferred.reject({\n msg: 'Unable to retrieve tag ' + tag,\n err: err,\n });\n });\n\n return deferred.promise;\n }\n\n /**\n * END TAGS\n */\n\n /**\n * ADD TAG\n */\n\n // tag: RepositoryAddTagPayload\n function _addTagFromGenerator(registry, repository, tag) {\n return addTag(registry, repository, tag.Tag, tag.Manifest);\n }\n\n function addTag(registry, repository, tag, manifest) {\n const id = registry.Id;\n delete manifest.digest;\n return RegistryManifestsJquery.put(\n {\n id: id,\n repository: repository,\n tag: tag,\n },\n manifest\n );\n }\n\n async function* _addTagsWithProgress(registry, repository, tagsList, progression = 0) {\n for await (const partialResult of genericAsyncGenerator($q, tagsList, _addTagFromGenerator, [registry, repository])) {\n if (typeof partialResult === 'number') {\n yield progression + partialResult;\n } else {\n yield partialResult;\n }\n }\n }\n\n /**\n * END ADD TAG\n */\n\n /**\n * DELETE MANIFEST\n */\n\n function deleteManifest(registry, repository, imageDigest) {\n const id = registry.Id;\n return RegistryManifestsJquery.delete({\n id: id,\n repository: repository,\n tag: imageDigest,\n });\n }\n\n async function* _deleteManifestsWithProgress(registry, repository, manifests) {\n for await (const partialResult of genericAsyncGenerator($q, manifests, deleteManifest, [registry, repository])) {\n yield partialResult;\n }\n }\n\n /**\n * END DELETE MANIFEST\n */\n\n /**\n * SHORT TAG\n */\n\n function _shortTagFromGenerator(id, repository, tag) {\n return new Promise((resolve, reject) => {\n RegistryManifestsJquery.getV2({ id: id, repository: repository, tag: tag })\n .then((data) => resolve(new RepositoryShortTag(tag, data.config.digest, data.digest, data)))\n .catch((err) => reject(err));\n });\n }\n\n async function* shortTagsWithProgress(registry, repository, tagsList) {\n const id = registry.Id;\n yield* genericAsyncGenerator($q, tagsList, _shortTagFromGenerator, [id, repository]);\n }\n\n /**\n * END SHORT TAG\n */\n\n /**\n * RETAG\n */\n async function* retagWithProgress(registry, repository, modifiedTags, modifiedDigests, impactedTags) {\n yield* _deleteManifestsWithProgress(registry, repository, modifiedDigests);\n\n const newTags = _.map(impactedTags, (item) => {\n const tagFromTable = _.find(modifiedTags, { Name: item.Name });\n const name = tagFromTable && tagFromTable.Name !== tagFromTable.NewName ? tagFromTable.NewName : item.Name;\n return new RepositoryAddTagPayload(name, item.ManifestV2);\n });\n\n yield* _addTagsWithProgress(registry, repository, newTags, modifiedDigests.length);\n }\n\n /**\n * END RETAG\n */\n\n /**\n * DELETE TAGS\n */\n\n async function* deleteTagsWithProgress(registry, repository, modifiedDigests, impactedTags) {\n yield* _deleteManifestsWithProgress(registry, repository, modifiedDigests);\n\n const newTags = _.map(impactedTags, (item) => new RepositoryAddTagPayload(item.Name, item.ManifestV2));\n\n yield* _addTagsWithProgress(registry, repository, newTags, modifiedDigests.length);\n }\n\n /**\n * END DELETE TAGS\n */\n\n /**\n * SERVICE FUNCTIONS DECLARATION\n */\n\n service.ping = ping;\n\n service.repositories = repositories;\n service.getRepositoriesDetails = getRepositoriesDetails;\n\n service.tags = tags;\n service.tag = tag;\n service.getTagsDetails = getTagsDetails;\n\n service.shortTagsWithProgress = shortTagsWithProgress;\n\n service.addTag = addTag;\n service.deleteManifest = deleteManifest;\n\n service.deleteTagsWithProgress = deleteTagsWithProgress;\n service.retagWithProgress = retagWithProgress;\n\n return service;\n },\n]);\n","import { RegistryTypes } from 'Portainer/models/registryTypes';\nimport { RegistryManagementConfigurationDefaultModel } from 'Portainer/models/registry';\n\nexport class ConfigureRegistryController {\n /* @ngInject */\n constructor($async, $state, RegistryService, RegistryServiceSelector, Notifications) {\n Object.assign(this, { $async, $state, RegistryService, RegistryServiceSelector, Notifications });\n\n this.state = {\n testInProgress: false,\n updateInProgress: false,\n validConfiguration: false,\n };\n\n this.testConfiguration = this.testConfiguration.bind(this);\n this.testConfigurationAsync = this.testConfigurationAsync.bind(this);\n this.updateConfiguration = this.updateConfiguration.bind(this);\n this.updateConfigurationAsync = this.updateConfigurationAsync.bind(this);\n this.$onInit = this.$onInit.bind(this);\n }\n\n testConfiguration() {\n return this.$async(this.testConfigurationAsync);\n }\n async testConfigurationAsync() {\n this.state.testInProgress = true;\n try {\n await this.RegistryService.configureRegistry(this.registry.Id, this.model);\n await this.RegistryServiceSelector.ping(this.registry, true);\n\n this.Notifications.success('Success', 'Valid management configuration');\n this.state.validConfiguration = true;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Invalid management configuration');\n }\n\n this.state.testInProgress = false;\n }\n\n updateConfiguration() {\n return this.$async(this.updateConfigurationAsync);\n }\n async updateConfigurationAsync() {\n this.state.updateInProgress = true;\n try {\n await this.RegistryService.configureRegistry(this.registry.Id, this.model);\n this.Notifications.success('Success', 'Registry management configuration updated');\n this.$state.go('portainer.registries.registry.repositories', { id: this.registry.Id }, { reload: true });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update registry management configuration');\n }\n\n this.state.updateInProgress = false;\n }\n\n async $onInit() {\n const registryId = this.$state.params.id;\n this.RegistryTypes = RegistryTypes;\n\n try {\n const registry = await this.RegistryService.registry(registryId);\n const model = new RegistryManagementConfigurationDefaultModel(registry);\n\n this.registry = registry;\n this.model = model;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registry details');\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nimport angular from 'angular';\n\nimport { ConfigureRegistryController } from './controller';\n\nangular.module('portainer.registrymanagement').component('configureRegistryView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: ConfigureRegistryController,\n});\n","import _ from 'lodash-es';\n\nimport { RegistryTypes } from 'Portainer/models/registryTypes';\n\nexport class RegistryRepositoriesController {\n /* @ngInject */\n constructor($async, $state, RegistryService, RegistryServiceSelector, Notifications, Authentication) {\n Object.assign(this, { $async, $state, RegistryService, RegistryServiceSelector, Notifications, Authentication });\n\n this.state = {\n displayInvalidConfigurationMessage: false,\n loading: false,\n };\n\n this.paginationAction = this.paginationAction.bind(this);\n this.paginationActionAsync = this.paginationActionAsync.bind(this);\n this.$onInit = this.$onInit.bind(this);\n }\n\n paginationAction(repositories) {\n return this.$async(this.paginationActionAsync, repositories);\n }\n async paginationActionAsync(repositories) {\n if (this.registry.Type === RegistryTypes.GITLAB) {\n return;\n }\n this.state.loading = true;\n try {\n const data = await this.RegistryServiceSelector.getRepositoriesDetails(this.registry, repositories);\n for (let i = 0; i < data.length; i++) {\n const idx = _.findIndex(this.repositories, { Name: data[i].Name });\n if (idx !== -1) {\n if (data[i].TagsCount === 0) {\n this.repositories.splice(idx, 1);\n } else {\n this.repositories[idx].TagsCount = data[i].TagsCount;\n }\n }\n }\n this.state.loading = false;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve repositories details');\n }\n }\n\n async $onInit() {\n const registryId = this.$state.params.id;\n\n this.isAdmin = this.Authentication.isAdmin();\n\n try {\n this.registry = await this.RegistryService.registry(registryId);\n try {\n await this.RegistryServiceSelector.ping(this.registry, false);\n this.repositories = await this.RegistryServiceSelector.repositories(this.registry);\n } catch (e) {\n this.state.displayInvalidConfigurationMessage = true;\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registry details');\n }\n }\n}\n","import _ from 'lodash-es';\nimport { RegistryTypes } from 'Portainer/models/registryTypes';\nimport { RepositoryShortTag, RepositoryTagViewModel } from '@/portainer/registry-management/models/repositoryTag';\n\nangular.module('portainer.app').controller('RegistryRepositoryController', RegistryRepositoryController);\n\n/* @ngInject */\nfunction RegistryRepositoryController($q, $async, $scope, $uibModal, $interval, $state, RegistryServiceSelector, RegistryService, ModalService, Notifications, ImageHelper) {\n $scope.state = {\n actionInProgress: false,\n loading: false,\n tagsRetrieval: {\n auto: true,\n running: false,\n limit: 100,\n progression: 0,\n elapsedTime: 0,\n asyncGenerator: null,\n clock: null,\n },\n tagsRetag: {\n running: false,\n progression: 0,\n elapsedTime: 0,\n asyncGenerator: null,\n clock: null,\n },\n tagsDelete: {\n running: false,\n progression: 0,\n elapsedTime: 0,\n asyncGenerator: null,\n clock: null,\n },\n };\n $scope.formValues = {\n Tag: '', // new tag name on add feature\n };\n $scope.tags = []; // RepositoryTagViewModel (for datatable)\n $scope.short = {\n Tags: [], // RepositoryShortTag\n Images: [], // strings extracted from short.Tags\n };\n $scope.repository = {\n Name: '',\n Tags: [], // string list\n };\n\n function toSeconds(time) {\n return time / 1000;\n }\n function toPercent(progress, total) {\n return ((progress / total) * 100).toFixed();\n }\n\n function openModal(resolve) {\n return $uibModal.open({\n component: 'progressionModal',\n backdrop: 'static',\n keyboard: false,\n resolve: resolve,\n });\n }\n\n $scope.paginationAction = function (tags) {\n $scope.state.loading = true;\n RegistryServiceSelector.getTagsDetails($scope.registry, $scope.repository.Name, tags)\n .then(function success(data) {\n for (var i = 0; i < data.length; i++) {\n var idx = _.findIndex($scope.tags, { Name: data[i].Name });\n if (idx !== -1) {\n $scope.tags[idx] = data[i];\n }\n }\n $scope.state.loading = false;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve tags details');\n });\n };\n\n /**\n * RETRIEVAL SECTION\n */\n function updateRetrievalClock(startTime) {\n $scope.state.tagsRetrieval.elapsedTime = toSeconds(Date.now() - startTime);\n }\n\n function createRetrieveAsyncGenerator() {\n $scope.state.tagsRetrieval.asyncGenerator = RegistryServiceSelector.shortTagsWithProgress($scope.registry, $scope.repository.Name, $scope.repository.Tags);\n }\n\n function resetTagsRetrievalState() {\n $scope.state.tagsRetrieval.running = false;\n $scope.state.tagsRetrieval.progression = 0;\n $scope.state.tagsRetrieval.elapsedTime = 0;\n $scope.state.tagsRetrieval.clock = null;\n }\n\n function computeImages() {\n const images = _.map($scope.short.Tags, 'ImageId');\n $scope.short.Images = _.without(_.uniq(images), '');\n }\n\n $scope.startStopRetrieval = function () {\n if ($scope.state.tagsRetrieval.running) {\n $scope.state.tagsRetrieval.asyncGenerator.return();\n $interval.cancel($scope.state.tagsRetrieval.clock);\n } else {\n retrieveTags().then(() => {\n createRetrieveAsyncGenerator();\n if ($scope.short.Tags.length === 0) {\n resetTagsRetrievalState();\n } else {\n computeImages();\n }\n });\n }\n };\n\n function retrieveTags() {\n return $async(retrieveTagsAsync);\n }\n\n async function retrieveTagsAsync() {\n $scope.state.tagsRetrieval.running = true;\n const startTime = Date.now();\n $scope.state.tagsRetrieval.clock = $interval(updateRetrievalClock, 1000, 0, true, startTime);\n for await (const partialResult of $scope.state.tagsRetrieval.asyncGenerator) {\n if (typeof partialResult === 'number') {\n $scope.state.tagsRetrieval.progression = toPercent(partialResult, $scope.repository.Tags.length);\n } else {\n $scope.short.Tags = _.sortBy(partialResult, 'Name');\n }\n }\n $scope.state.tagsRetrieval.running = false;\n $interval.cancel($scope.state.tagsRetrieval.clock);\n }\n /**\n * !END RETRIEVAL SECTION\n */\n\n /**\n * ADD TAG SECTION\n */\n\n async function addTagAsync() {\n try {\n $scope.state.actionInProgress = true;\n if (!ImageHelper.isValidTag($scope.formValues.Tag)) {\n throw { msg: 'Invalid tag pattern, see info for more details on format.' };\n }\n const tag = $scope.short.Tags.find((item) => item.ImageId === $scope.formValues.SelectedImage);\n const manifest = tag.ManifestV2;\n await RegistryServiceSelector.addTag($scope.registry, $scope.repository.Name, $scope.formValues.Tag, manifest);\n\n Notifications.success('Success', 'Tag successfully added');\n $scope.short.Tags.push(new RepositoryShortTag($scope.formValues.Tag, tag.ImageId, tag.ImageDigest, tag.ManifestV2));\n\n await loadRepositoryDetails();\n $scope.formValues.Tag = '';\n delete $scope.formValues.SelectedImage;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to add tag');\n } finally {\n $scope.state.actionInProgress = false;\n }\n }\n\n $scope.addTag = function () {\n return $async(addTagAsync);\n };\n /**\n * !END ADD TAG SECTION\n */\n\n /**\n * RETAG SECTION\n */\n function updateRetagClock(startTime) {\n $scope.state.tagsRetag.elapsedTime = toSeconds(Date.now() - startTime);\n }\n\n function createRetagAsyncGenerator(modifiedTags, modifiedDigests, impactedTags) {\n $scope.state.tagsRetag.asyncGenerator = RegistryServiceSelector.retagWithProgress($scope.registry, $scope.repository.Name, modifiedTags, modifiedDigests, impactedTags);\n }\n\n async function retagActionAsync() {\n let modal = null;\n try {\n $scope.state.tagsRetag.running = true;\n\n const modifiedTags = _.filter($scope.tags, (item) => item.Modified === true);\n for (const tag of modifiedTags) {\n if (!ImageHelper.isValidTag(tag.NewName)) {\n throw { msg: 'Invalid tag pattern, see info for more details on format.' };\n }\n }\n modal = await openModal({\n message: () => 'Retag is in progress! Closing your browser or refreshing the page while this operation is in progress will result in loss of tags.',\n progressLabel: () => 'Retag progress',\n context: () => $scope.state.tagsRetag,\n });\n const modifiedDigests = _.uniq(_.map(modifiedTags, 'ImageDigest'));\n const impactedTags = _.filter($scope.short.Tags, (item) => _.includes(modifiedDigests, item.ImageDigest));\n\n const totalOps = modifiedDigests.length + impactedTags.length;\n\n createRetagAsyncGenerator(modifiedTags, modifiedDigests, impactedTags);\n\n const startTime = Date.now();\n $scope.state.tagsRetag.clock = $interval(updateRetagClock, 1000, 0, true, startTime);\n for await (const partialResult of $scope.state.tagsRetag.asyncGenerator) {\n if (typeof partialResult === 'number') {\n $scope.state.tagsRetag.progression = toPercent(partialResult, totalOps);\n }\n }\n\n _.map(modifiedTags, (item) => {\n const idx = _.findIndex($scope.short.Tags, (i) => i.Name === item.Name);\n $scope.short.Tags[idx].Name = item.NewName;\n });\n\n Notifications.success('Success', 'Tags successfully renamed');\n\n await loadRepositoryDetails();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to rename tags');\n } finally {\n $interval.cancel($scope.state.tagsRetag.clock);\n $scope.state.tagsRetag.running = false;\n if (modal) {\n modal.close();\n }\n }\n }\n\n $scope.retagAction = function () {\n return $async(retagActionAsync);\n };\n /**\n * !END RETAG SECTION\n */\n\n /**\n * REMOVE TAGS SECTION\n */\n\n function updateDeleteClock(startTime) {\n $scope.state.tagsDelete.elapsedTime = toSeconds(Date.now() - startTime);\n }\n\n function createDeleteAsyncGenerator(modifiedDigests, impactedTags) {\n $scope.state.tagsDelete.asyncGenerator = RegistryServiceSelector.deleteTagsWithProgress($scope.registry, $scope.repository.Name, modifiedDigests, impactedTags);\n }\n\n async function removeEcrTagsAsync(selectedTags) {\n try {\n const tags = selectedTags.map((tag) => tag.Name);\n\n await RegistryServiceSelector.batchDeleteTags({ id: $scope.registry.Id, repositoryName: $scope.repository.Name }, { Tags: tags });\n\n await loadRepositoryDetails();\n Notifications.success('Success', 'Tags successfully deleted');\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to delete tags');\n }\n }\n\n async function removeTagsAsync(selectedTags) {\n if ($scope.registry.Type === RegistryTypes.ECR) {\n // ECR does NOT support DELETE v2//manifests/\n // So, use ECR SDK BatchDeleteImage() instead\n return removeEcrTagsAsync(selectedTags);\n }\n\n let modal = null;\n try {\n $scope.state.tagsDelete.running = true;\n modal = await openModal({\n message: () => 'Tag delete is in progress! Closing your browser or refreshing the page while this operation is in progress will result in loss of tags.',\n progressLabel: () => 'Deletion progress',\n context: () => $scope.state.tagsDelete,\n });\n\n const deletedTagNames = _.map(selectedTags, 'Name');\n const deletedShortTags = _.filter($scope.short.Tags, (item) => _.includes(deletedTagNames, item.Name));\n const modifiedDigests = _.uniq(_.map(deletedShortTags, 'ImageDigest'));\n const impactedTags = _.filter($scope.short.Tags, (item) => _.includes(modifiedDigests, item.ImageDigest));\n const tagsToKeep = _.without(impactedTags, ...deletedShortTags);\n\n const totalOps = modifiedDigests.length + tagsToKeep.length;\n\n createDeleteAsyncGenerator(modifiedDigests, tagsToKeep);\n\n const startTime = Date.now();\n $scope.state.tagsDelete.clock = $interval(updateDeleteClock, 1000, 0, true, startTime);\n for await (const partialResult of $scope.state.tagsDelete.asyncGenerator) {\n if (typeof partialResult === 'number') {\n $scope.state.tagsDelete.progression = toPercent(partialResult, totalOps);\n }\n }\n\n _.pull($scope.short.Tags, ...deletedShortTags);\n $scope.short.Images = _.map(_.uniqBy($scope.short.Tags, 'ImageId'), 'ImageId');\n\n Notifications.success('Success', 'Tags successfully deleted');\n\n if ($scope.short.Tags.length === 0) {\n $state.go('portainer.registries.registry.repositories', { id: $scope.registry.Id }, { reload: true });\n }\n await loadRepositoryDetails();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to delete tags');\n } finally {\n $interval.cancel($scope.state.tagsDelete.clock);\n $scope.state.tagsDelete.running = false;\n modal.close();\n }\n }\n\n $scope.removeTags = function (selectedItems) {\n ModalService.confirmDeletion('Are you sure you want to remove the selected tags ?', (confirmed) => {\n if (!confirmed) {\n return;\n }\n return $async(removeTagsAsync, selectedItems);\n });\n };\n /**\n * !END REMOVE TAGS SECTION\n */\n\n /**\n * REMOVE REPOSITORY SECTION\n */\n async function removeRepositoryAsync() {\n try {\n if ($scope.registry.Type == RegistryTypes.ECR) {\n await RegistryServiceSelector.deleteRepository($scope.registry, $scope.repository);\n } else {\n const digests = _.uniqBy($scope.short.Tags, 'ImageDigest');\n const promises = [];\n _.map(digests, (item) => promises.push(RegistryServiceSelector.deleteManifest($scope.registry, $scope.repository.Name, item.ImageDigest)));\n await Promise.all(promises);\n }\n Notifications.success('Success', 'Repository successfully removed');\n $state.go('portainer.registries.registry.repositories', { id: $scope.registry.Id }, { reload: true });\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to delete repository');\n }\n }\n\n $scope.removeRepository = function () {\n ModalService.confirmDeletion(\n 'This action will only remove the manifests linked to this repository. You need to manually trigger a garbage collector pass on your registry to remove orphan layers and really remove the images content. THIS ACTION CAN NOT BE UNDONE',\n function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n return $async(removeRepositoryAsync);\n }\n );\n };\n /**\n * !END REMOVE REPOSITORY SECTION\n */\n\n /**\n * INIT SECTION\n */\n async function loadRepositoryDetails() {\n try {\n const registry = $scope.registry;\n const repository = $scope.repository.Name;\n const tags = await RegistryServiceSelector.tags(registry, repository);\n $scope.tags = [];\n $scope.repository.Tags = [];\n $scope.repository.Tags = _.sortBy(_.concat($scope.repository.Tags, _.without(tags.tags, null)));\n _.map($scope.repository.Tags, (item) => $scope.tags.push(new RepositoryTagViewModel(item)));\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve tags details');\n }\n }\n\n async function initView() {\n try {\n const registryId = $state.params.id;\n $scope.repository.Name = $state.params.repository;\n $scope.state.loading = true;\n\n $scope.registry = await RegistryService.registry(registryId);\n await loadRepositoryDetails();\n if ($scope.repository.Tags.length > $scope.state.tagsRetrieval.limit) {\n $scope.state.tagsRetrieval.auto = false;\n }\n createRetrieveAsyncGenerator();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve repository information');\n } finally {\n $scope.state.loading = false;\n }\n }\n\n $scope.$on('$destroy', () => {\n if ($scope.state.tagsRetrieval.asyncGenerator) {\n $scope.state.tagsRetrieval.asyncGenerator.return();\n }\n if ($scope.state.tagsRetrieval.clock) {\n $interval.cancel($scope.state.tagsRetrieval.clock);\n }\n if ($scope.state.tagsRetag.asyncGenerator) {\n $scope.state.tagsRetag.asyncGenerator.return();\n }\n if ($scope.state.tagsRetag.clock) {\n $interval.cancel($scope.state.tagsRetag.clock);\n }\n if ($scope.state.tagsDelete.asyncGenerator) {\n $scope.state.tagsDelete.asyncGenerator.return();\n }\n if ($scope.state.tagsDelete.clock) {\n $interval.cancel($scope.state.tagsDelete.clock);\n }\n });\n\n this.$onInit = function () {\n return $async(initView).then(() => {\n if ($scope.state.tagsRetrieval.auto) {\n $scope.startStopRetrieval();\n }\n });\n };\n /**\n * !END INIT SECTION\n */\n}\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nangular.module('portainer.registrymanagement').component('progressionModal', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n resolve: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nimport angular from 'angular';\n\nimport { RegistryRepositoriesController } from './controller.js';\n\nangular.module('portainer.registrymanagement').component('registryRepositoriesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: RegistryRepositoriesController,\n});\n","import _ from 'lodash-es';\nimport { RegistryImageLayerViewModel } from '@/portainer/registry-management/models/registryImageLayer';\nimport { RegistryImageDetailsViewModel } from '@/portainer/registry-management/models/registryImageDetails';\n\nexport class RegistryRepositoryTagController {\n /* @ngInject */\n constructor($state, $async, Notifications, RegistryService, RegistryServiceSelector, imagelayercommandFilter) {\n Object.assign(this, { $state, $async, Notifications, RegistryService, RegistryServiceSelector, imagelayercommandFilter });\n\n this.context = {};\n\n this.$onInit = this.$onInit.bind(this);\n this.$onInitAsync = this.$onInitAsync.bind(this);\n }\n\n toggleLayerCommand(layerId) {\n $('#layer-command-expander' + layerId + ' span').toggleClass('glyphicon-plus-sign glyphicon-minus-sign');\n $('#layer-command-' + layerId + '-short').toggle();\n $('#layer-command-' + layerId + '-full').toggle();\n }\n\n order(sortType) {\n this.Sort.Reverse = this.Sort.Type === sortType ? !this.Sort.Reverse : false;\n this.Sort.Type = sortType;\n }\n\n $onInit() {\n return this.$async(this.$onInitAsync);\n }\n async $onInitAsync() {\n this.context.registryId = this.$state.params.id;\n this.context.repository = this.$state.params.repository;\n this.context.tag = this.$state.params.tag;\n this.Sort = {\n Type: 'Order',\n Reverse: false,\n };\n try {\n this.registry = await this.RegistryService.registry(this.context.registryId);\n this.tag = await this.RegistryServiceSelector.tag(this.registry, this.context.repository, this.context.tag);\n const length = this.tag.History.length;\n this.history = _.map(this.tag.History, (layer, idx) => new RegistryImageLayerViewModel(length - idx, layer));\n _.forEach(this.history, (item) => (item.CreatedBy = this.imagelayercommandFilter(item.CreatedBy)));\n this.details = new RegistryImageDetailsViewModel(this.tag.History[0]);\n } catch (error) {\n this.Notifications.error('Failure', error, 'Unable to retrieve tag');\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./template.html');\n\nimport angular from 'angular';\n\nimport { RegistryRepositoryTagController } from './controller';\n\nangular.module('portainer.registrymanagement').component('registryRepositoryTagView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: RegistryRepositoryTagController,\n});\n","angular.module('portainer.app').factory('Auth', [\n '$resource',\n 'API_ENDPOINT_AUTH',\n function AuthFactory($resource, API_ENDPOINT_AUTH) {\n 'use strict';\n return $resource(\n API_ENDPOINT_AUTH + '/:action',\n {},\n {\n login: { method: 'POST', ignoreLoadingBar: true },\n logout: { method: 'POST', params: { action: 'logout' }, ignoreLoadingBar: true },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Backup', [\n '$resource',\n 'API_ENDPOINT_BACKUP',\n function BackupFactory($resource, API_ENDPOINT_BACKUP) {\n 'use strict';\n return $resource(\n API_ENDPOINT_BACKUP + '/:subResource/:action',\n {},\n {\n download: {\n method: 'POST',\n responseType: 'blob',\n ignoreLoadingBar: true,\n transformResponse: (data, headersGetter) => ({\n file: data,\n name: headersGetter('Content-Disposition').replace('attachment; filename=', ''),\n }),\n },\n getS3Settings: { method: 'GET', params: { subResource: 's3', action: 'settings' } },\n saveS3Settings: { method: 'POST', params: { subResource: 's3', action: 'settings' } },\n exportS3Backup: { method: 'POST', params: { subResource: 's3', action: 'execute' } },\n restoreS3Backup: { method: 'POST', params: { subResource: 's3', action: 'restore' } },\n getBackupStatus: { method: 'GET', params: { subResource: 's3', action: 'status' } },\n }\n );\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.app').factory('CustomTemplates', CustomTemplatesFactory);\n\nfunction CustomTemplatesFactory($resource, API_ENDPOINT_CUSTOM_TEMPLATES) {\n return $resource(\n API_ENDPOINT_CUSTOM_TEMPLATES + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n file: { method: 'GET', params: { id: '@id', action: 'file' } },\n }\n );\n}\n","angular.module('portainer.app').factory('Ecr', EcrFactory);\n\nfunction EcrFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n const baseUrl = API_ENDPOINT_REGISTRIES + '/:id/ecr';\n\n return $resource(\n baseUrl,\n {\n id: '@id',\n repositoryName: '@repositoryName',\n tag: '@tag',\n },\n {\n deleteRepository: {\n method: 'DELETE',\n url: baseUrl + '/repositories/:repositoryName',\n },\n batchDeleteTags: {\n method: 'DELETE',\n url: baseUrl + '/repositories/:repositoryName/tags',\n headers: { 'Content-Type': 'application/json;charset=utf-8' },\n hasBody: true,\n },\n }\n );\n}\n","import getEndpointsTotalCount from './transform/getEndpointsTotalCount';\n\nangular.module('portainer.app').factory('Endpoints', [\n '$resource',\n 'API_ENDPOINT_ENDPOINTS',\n function EndpointsFactory($resource, API_ENDPOINT_ENDPOINTS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINTS + '/:id/:action',\n {},\n {\n query: {\n method: 'GET',\n params: { start: '@start', limit: '@limit', search: '@search', groupId: '@groupId' },\n transformResponse: getEndpointsTotalCount,\n },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n deassociate: { method: 'DELETE', params: { id: '@id', action: 'association' } },\n updateAccess: { method: 'PUT', params: { id: '@id', action: 'access' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n snapshots: { method: 'POST', params: { action: 'snapshot' } },\n snapshot: { method: 'POST', params: { id: '@id', action: 'snapshot' } },\n status: { method: 'GET', params: { id: '@id', action: 'status' } },\n updateSettings: { method: 'PUT', params: { id: '@id', action: 'settings' } },\n dockerhubLimits: { method: 'GET', url: `${API_ENDPOINT_ENDPOINTS}/:id/dockerhub/:registryId` },\n updatePoolAccess: { url: API_ENDPOINT_ENDPOINTS + '/:id/pools/:rpn/access', method: 'PUT', params: { id: '@id', rpn: '@rpn' } },\n forceUpdateService: { method: 'PUT', params: { id: '@id', action: 'forceupdateservice' } },\n registries: { url: `${API_ENDPOINT_ENDPOINTS}/:id/registries`, method: 'GET', params: { id: '@id', namespace: '@namespace' }, isArray: true },\n registry: {\n url: `${API_ENDPOINT_ENDPOINTS}/:id/registries/:registryId`,\n method: 'GET',\n params: { id: '@id', namespace: '@namespace', registryId: '@registryId' },\n },\n updateRegistryAccess: { url: `${API_ENDPOINT_ENDPOINTS}/:id/registries/:registryId`, method: 'PUT', params: { id: '@id', registryId: '@registryId' } },\n }\n );\n },\n]);\n","import gitlabResponseGetLink from './transform/gitlabResponseGetLink';\n\nangular.module('portainer.app').factory('Gitlab', [\n '$resource',\n 'API_ENDPOINT_REGISTRIES',\n function GitlabFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n return function (env) {\n const headers = {};\n if (env) {\n headers['Private-Token'] = env.token;\n headers['X-Gitlab-Domain'] = env.url;\n }\n\n const baseUrl = API_ENDPOINT_REGISTRIES + '/:id/proxies/gitlab/api/v4/projects';\n\n return $resource(\n baseUrl,\n { id: '@id' },\n {\n projects: {\n method: 'GET',\n params: { membership: 'true' },\n transformResponse: gitlabResponseGetLink,\n headers: headers,\n },\n repositories: {\n method: 'GET',\n url: baseUrl + '/:projectId/registry/repositories',\n params: { tags: true },\n headers: headers,\n transformResponse: gitlabResponseGetLink,\n },\n }\n );\n };\n },\n]);\n","angular.module('portainer.app').factory('EndpointGroups', [\n '$resource',\n 'API_ENDPOINT_ENDPOINT_GROUPS',\n function EndpointGroupsFactory($resource, API_ENDPOINT_ENDPOINT_GROUPS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_ENDPOINT_GROUPS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n updateAccess: { method: 'PUT', params: { id: '@id', action: 'access' } },\n addEndpoint: { method: 'PUT', params: { id: '@id', action: '@action' } },\n removeEndpoint: { method: 'DELETE', params: { id: '@id', action: '@action' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Motd', [\n '$resource',\n 'API_ENDPOINT_MOTD',\n function MotdFactory($resource, API_ENDPOINT_MOTD) {\n 'use strict';\n return $resource(\n API_ENDPOINT_MOTD,\n {},\n {\n get: {\n method: 'GET',\n ignoreLoadingBar: true,\n },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Registries', [\n '$resource',\n 'API_ENDPOINT_REGISTRIES',\n function RegistriesFactory($resource, API_ENDPOINT_REGISTRIES) {\n 'use strict';\n return $resource(\n API_ENDPOINT_REGISTRIES + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id', action: '', endpointId: '@endpointId' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n configure: { method: 'POST', params: { id: '@id', action: 'configure' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('ResourceControl', [\n '$resource',\n 'API_ENDPOINT_RESOURCE_CONTROLS',\n function ResourceControlFactory($resource, API_ENDPOINT_RESOURCE_CONTROLS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_RESOURCE_CONTROLS + '/:id',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Settings', [\n '$resource',\n 'API_ENDPOINT_SETTINGS',\n function SettingsFactory($resource, API_ENDPOINT_SETTINGS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_SETTINGS + '/:subResource/:action',\n {},\n {\n get: { method: 'GET' },\n update: { method: 'PUT', ignoreLoadingBar: true },\n publicSettings: { method: 'GET', params: { subResource: 'public' }, ignoreLoadingBar: true },\n checkLDAPConnectivity: { method: 'PUT', params: { subResource: 'authentication', action: 'checkLDAP' } },\n }\n );\n },\n]);\n","import angular from 'angular';\n\nconst API_ENDPOINT_SSL = 'api/ssl';\n\nangular.module('portainer.app').factory('SSL', SSLFactory);\n\n/* @ngInject */\nfunction SSLFactory($resource) {\n return $resource(\n API_ENDPOINT_SSL,\n {},\n {\n get: { method: 'GET' },\n upload: { method: 'PUT' },\n }\n );\n}\n","import angular from 'angular';\n\nangular.module('portainer.app').factory('Stack', StackFactory);\n\nfunction StackFactory($resource, API_ENDPOINT_STACKS) {\n return $resource(\n API_ENDPOINT_STACKS + '/:id/:action/:subaction',\n {},\n {\n get: { method: 'GET', params: { id: '@id' } },\n query: { method: 'GET', isArray: true },\n create: { method: 'POST', ignoreLoadingBar: true },\n update: { method: 'PUT', params: { id: '@id' }, ignoreLoadingBar: true },\n associate: { method: 'PUT', params: { id: '@id', swarmId: '@swarmId', endpointId: '@endpointId', orphanedRunning: '@orphanedRunning', action: 'associate' } },\n remove: { method: 'DELETE', params: { id: '@id', external: '@external', endpointId: '@endpointId' } },\n getStackFile: { method: 'GET', params: { id: '@id', action: 'file' } },\n migrate: { method: 'POST', params: { id: '@id', action: 'migrate', endpointId: '@endpointId' }, ignoreLoadingBar: true },\n start: { method: 'POST', params: { id: '@id', action: 'start' } },\n stop: { method: 'POST', params: { id: '@id', action: 'stop', endpointId: '@endpointId' } },\n updateGit: { method: 'PUT', params: { id: '@id', action: 'git', subaction: 'redeploy' } },\n updateGitStackSettings: { method: 'POST', params: { id: '@id', action: 'git' }, ignoreLoadingBar: true },\n }\n );\n}\n","angular.module('portainer.app').factory('Status', [\n '$resource',\n 'API_ENDPOINT_STATUS',\n function StatusFactory($resource, API_ENDPOINT_STATUS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_STATUS + '/:action',\n {},\n {\n get: { method: 'GET' },\n version: { method: 'GET', params: { action: 'version' } },\n nodesCount: { method: 'GET', params: { action: 'nodes' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Support', [\n '$resource',\n 'API_ENDPOINT_SUPPORT',\n function SupportFactory($resource, API_ENDPOINT_SUPPORT) {\n 'use strict';\n return $resource(\n API_ENDPOINT_SUPPORT,\n {},\n {\n get: { method: 'GET', isArray: true },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Tags', [\n '$resource',\n 'API_ENDPOINT_TAGS',\n function TagsFactory($resource, API_ENDPOINT_TAGS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_TAGS + '/:id',\n {},\n {\n create: { method: 'POST' },\n query: { method: 'GET', isArray: true },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Teams', [\n '$resource',\n 'API_ENDPOINT_TEAMS',\n function TeamsFactory($resource, API_ENDPOINT_TEAMS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_TEAMS + '/:id/:entity/:entityId',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n queryMemberships: { method: 'GET', isArray: true, params: { id: '@id', entity: 'memberships' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('TeamMemberships', [\n '$resource',\n 'API_ENDPOINT_TEAM_MEMBERSHIPS',\n function TeamMembershipsFactory($resource, API_ENDPOINT_TEAM_MEMBERSHIPS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_TEAM_MEMBERSHIPS + '/:id/:action',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Templates', [\n '$resource',\n 'API_ENDPOINT_TEMPLATES',\n function TemplatesFactory($resource, API_ENDPOINT_TEMPLATES) {\n return $resource(\n API_ENDPOINT_TEMPLATES + '/:action',\n {},\n {\n query: { method: 'GET' },\n file: { method: 'POST', params: { action: 'file' } },\n }\n );\n },\n]);\n","export default function getEndpointsTotalCount(data, headers) {\n const response = {};\n response.value = angular.fromJson(data);\n response.totalCount = headers('X-Total-Count');\n return response;\n}\n","export default function gitlabResponseGetLink(data, headers) {\n let response = {};\n try {\n response.data = angular.fromJson(data);\n response.next = headers('X-Next-Page');\n } catch (error) {\n response = data;\n }\n return response;\n}\n","angular.module('portainer.app').factory('Users', [\n '$resource',\n 'API_ENDPOINT_USERS',\n function UsersFactory($resource, API_ENDPOINT_USERS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_USERS + '/:id/:entity/:entityId',\n {},\n {\n create: { method: 'POST', ignoreLoadingBar: true },\n query: { method: 'GET', isArray: true },\n get: { method: 'GET', params: { id: '@id' } },\n update: { method: 'PUT', params: { id: '@id' }, ignoreLoadingBar: true },\n updatePassword: { method: 'PUT', params: { id: '@id', entity: 'passwd' } },\n updateTheme: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n queryMemberships: { method: 'GET', isArray: true, params: { id: '@id', entity: 'memberships' } },\n checkAdminUser: { method: 'GET', params: { id: 'admin', entity: 'check' }, isArray: true, ignoreLoadingBar: true },\n initAdminUser: { method: 'POST', params: { id: 'admin', entity: 'init' }, ignoreLoadingBar: true },\n createAccessToken: { url: `${API_ENDPOINT_USERS}/:id/tokens`, method: 'POST', params: { id: '@id' }, ignoreLoadingBar: true },\n getAccessTokens: { method: 'GET', params: { id: '@id', entity: 'tokens' }, isArray: true },\n deleteAccessToken: { url: `${API_ENDPOINT_USERS}/:id/tokens/:tokenId`, method: 'DELETE', params: { id: '@id', entityId: '@tokenId' } },\n }\n );\n },\n]);\n","angular.module('portainer.app').factory('Webhooks', [\n '$resource',\n 'API_ENDPOINT_WEBHOOKS',\n function WebhooksFactory($resource, API_ENDPOINT_WEBHOOKS) {\n 'use strict';\n return $resource(\n API_ENDPOINT_WEBHOOKS + '/:id',\n {},\n {\n query: { method: 'GET', isArray: true },\n create: { method: 'POST' },\n update: { method: 'PUT', params: { id: '@id' } },\n remove: { method: 'DELETE', params: { id: '@id' } },\n }\n );\n },\n]);\n","import _ from 'lodash-es';\n\n/**\n *\n * @param {any[]} promises\n */\nexport default async function $allSettled(promises) {\n const res = {\n fulfilled: [],\n rejected: [],\n };\n const data = await Promise.allSettled(promises);\n res.fulfilled = _.reduce(\n data,\n (acc, item) => {\n if (item.status === 'fulfilled') {\n acc.push(item.value);\n }\n return acc;\n },\n []\n );\n res.rejected = _.reduce(\n data,\n (acc, item) => {\n if (item.status === 'rejected') {\n acc.push(item.reason);\n }\n return acc;\n },\n []\n );\n return res;\n}\n","import _ from 'lodash-es';\nimport { UserAccessViewModel } from '../../models/access';\nimport { TeamAccessViewModel } from '../../models/access';\n\nangular.module('portainer.app').factory('AccessService', [\n '$q',\n '$async',\n 'UserService',\n 'TeamService',\n function AccessServiceFactory($q, $async, UserService, TeamService) {\n 'use strict';\n return {\n accesses,\n generateAccessPolicies,\n };\n\n function _getRole(roles, roleId) {\n if (roles.length) {\n const role = _.find(roles, (role) => role.Id === roleId);\n return role ? role : { Id: 0, Name: '-' };\n }\n return { Id: 0, Name: '-' };\n }\n\n function _mapAccessData(accesses, authorizedPolicies, inheritedPolicies, roles) {\n var availableAccesses = [];\n var authorizedAccesses = [];\n\n for (var i = 0; i < accesses.length; i++) {\n const access = accesses[i];\n\n const authorized = authorizedPolicies && authorizedPolicies[access.Id];\n const inherited = inheritedPolicies && inheritedPolicies[access.Id];\n\n if (authorized && inherited) {\n access.Role = _getRole(roles, authorizedPolicies[access.Id].RoleId);\n access.Override = true;\n authorizedAccesses.push(access);\n } else if (authorized && !inherited) {\n access.Role = _getRole(roles, authorizedPolicies[access.Id].RoleId);\n authorizedAccesses.push(access);\n } else if (!authorized && inherited) {\n access.Role = _getRole(roles, inheritedPolicies[access.Id].RoleId);\n access.Inherited = true;\n authorizedAccesses.push(access);\n availableAccesses.push(access);\n } else {\n availableAccesses.push(access);\n }\n }\n\n return {\n available: availableAccesses,\n authorized: authorizedAccesses,\n };\n }\n\n function getAccesses(authorizedUserPolicies, authorizedTeamPolicies, inheritedUserPolicies, inheritedTeamPolicies, roles) {\n var deferred = $q.defer();\n\n $q.all({\n users: UserService.users(false),\n teams: TeamService.teams(),\n })\n .then(function success(data) {\n var userAccesses = data.users.map(function (user) {\n return new UserAccessViewModel(user);\n });\n var teamAccesses = data.teams.map(function (team) {\n return new TeamAccessViewModel(team);\n });\n\n var userAccessData = _mapAccessData(userAccesses, authorizedUserPolicies, inheritedUserPolicies, roles);\n var teamAccessData = _mapAccessData(teamAccesses, authorizedTeamPolicies, inheritedTeamPolicies, roles);\n\n var accessData = {\n availableUsersAndTeams: userAccessData.available.concat(teamAccessData.available),\n authorizedUsersAndTeams: userAccessData.authorized.concat(teamAccessData.authorized),\n };\n\n deferred.resolve(accessData);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve users and teams', err: err });\n });\n\n return deferred.promise;\n }\n\n async function accessesAsync(entity, parent, roles) {\n if (!entity) {\n throw new Error('Unable to retrieve accesses');\n }\n if (!entity.UserAccessPolicies) {\n entity.UserAccessPolicies = {};\n }\n if (!entity.TeamAccessPolicies) {\n entity.TeamAccessPolicies = {};\n }\n if (parent && !parent.UserAccessPolicies) {\n parent.UserAccessPolicies = {};\n }\n if (parent && !parent.TeamAccessPolicies) {\n parent.TeamAccessPolicies = {};\n }\n return await getAccesses(entity.UserAccessPolicies, entity.TeamAccessPolicies, parent ? parent.UserAccessPolicies : {}, parent ? parent.TeamAccessPolicies : {}, roles);\n }\n\n function accesses(entity, parent, roles) {\n return $async(accessesAsync, entity, parent, roles);\n }\n\n function generateAccessPolicies(userAccessPolicies, teamAccessPolicies, selectedUserAccesses, selectedTeamAccesses, selectedRoleId) {\n const newUserPolicies = _.clone(userAccessPolicies);\n const newTeamPolicies = _.clone(teamAccessPolicies);\n\n _.forEach(selectedUserAccesses, (access) => (newUserPolicies[access.Id] = { RoleId: selectedRoleId ? selectedRoleId : access.Role.Id }));\n _.forEach(selectedTeamAccesses, (access) => (newTeamPolicies[access.Id] = { RoleId: selectedRoleId ? selectedRoleId : access.Role.Id }));\n\n const accessPolicies = {\n userAccessPolicies: newUserPolicies,\n teamAccessPolicies: newTeamPolicies,\n };\n\n return accessPolicies;\n }\n },\n]);\n","angular.module('portainer.app').factory('BackupService', [\n '$q',\n '$async',\n 'Backup',\n 'FileUploadService',\n function BackupServiceFactory($q, $async, Backup, FileUploadService) {\n 'use strict';\n const service = {};\n\n service.downloadBackup = function (payload) {\n return Backup.download({}, payload).$promise;\n };\n\n service.uploadBackup = function (file, password) {\n return FileUploadService.uploadBackup(file, password);\n };\n\n service.getS3Settings = function () {\n var deferred = $q.defer();\n\n Backup.getS3Settings()\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve backup S3 settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.saveS3Settings = function (payload) {\n var deferred = $q.defer();\n\n Backup.saveS3Settings({}, payload)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to save backup S3 settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.exportBackup = function (payload) {\n var deferred = $q.defer();\n\n Backup.exportS3Backup({}, payload)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to export backup', err: err });\n });\n\n return deferred.promise;\n };\n\n service.restoreFromS3 = function (payload) {\n var deferred = $q.defer();\n\n Backup.restoreS3Backup({}, payload)\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to restore backup from S3', err: err });\n });\n\n return deferred.promise;\n };\n\n service.getBackupStatus = function () {\n var deferred = $q.defer();\n\n Backup.getBackupStatus()\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve backup status', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.app').factory('CustomTemplateService', CustomTemplateServiceFactory);\n\n/* @ngInject */\nfunction CustomTemplateServiceFactory($sanitize, CustomTemplates, FileUploadService) {\n var service = {};\n\n service.customTemplate = function customTemplate(id) {\n return CustomTemplates.get({ id }).$promise;\n };\n\n service.customTemplates = async function customTemplates(type) {\n const templates = await CustomTemplates.query({ type }).$promise;\n templates.forEach((template) => {\n if (template.Note) {\n template.Note = $('

    ').html($sanitize(template.Note)).find('img').remove().end().html();\n }\n });\n return templates;\n };\n\n service.remove = function remove(id) {\n return CustomTemplates.remove({ id }).$promise;\n };\n\n service.customTemplateFile = async function customTemplateFile(id) {\n try {\n const { FileContent } = await CustomTemplates.file({ id }).$promise;\n return FileContent;\n } catch (err) {\n throw { msg: 'Unable to retrieve customTemplate content', err };\n }\n };\n\n service.updateCustomTemplate = async function updateCustomTemplate(id, customTemplate) {\n return CustomTemplates.update({ id }, customTemplate).$promise;\n };\n\n service.createCustomTemplateFromFileContent = async function createCustomTemplateFromFileContent(payload) {\n try {\n return await CustomTemplates.create({ method: 'string' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the customTemplate', err };\n }\n };\n\n service.createCustomTemplateFromFileUpload = async function createCustomTemplateFromFileUpload(payload) {\n try {\n const { data } = await FileUploadService.createCustomTemplate(payload);\n return data;\n } catch (err) {\n throw { msg: 'Unable to create the customTemplate', err };\n }\n };\n\n service.createCustomTemplateFromGitRepository = async function createCustomTemplateFromGitRepository(payload) {\n try {\n return await CustomTemplates.create({ method: 'repository' }, payload).$promise;\n } catch (err) {\n throw { msg: 'Unable to create the customTemplate', err };\n }\n };\n\n return service;\n}\n","import EndpointHelper from '@/portainer/helpers/endpointHelper';\nimport { PortainerEndpointTypes } from '@/portainer/models/endpoint/models';\n\nangular.module('portainer.app').factory('DockerHubService', DockerHubService);\n\n/* @ngInject */\nfunction DockerHubService(Endpoints, AgentDockerhub) {\n return {\n checkRateLimits,\n };\n\n function checkRateLimits(endpoint, registryId) {\n if (EndpointHelper.isLocalEndpoint(endpoint)) {\n return Endpoints.dockerhubLimits({ id: endpoint.Id, registryId }).$promise;\n }\n\n switch (endpoint.Type) {\n case PortainerEndpointTypes.AgentOnDockerEnvironment:\n case PortainerEndpointTypes.EdgeAgentOnDockerEnvironment:\n return AgentDockerhub.limits({ endpointId: endpoint.Id, endpointType: 'docker', registryId }).$promise;\n\n case PortainerEndpointTypes.AgentOnKubernetesEnvironment:\n case PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment:\n return AgentDockerhub.limits({ endpointId: endpoint.Id, endpointType: 'kubernetes', registryId }).$promise;\n }\n }\n}\n","import { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\n\nangular.module('portainer.app').factory('EndpointService', [\n '$q',\n 'Endpoints',\n 'FileUploadService',\n function EndpointServiceFactory($q, Endpoints, FileUploadService) {\n 'use strict';\n var service = {\n updateSettings,\n registries,\n registry,\n updateRegistryAccess,\n };\n\n service.endpoint = function (endpointID) {\n return Endpoints.get({ id: endpointID }).$promise;\n };\n\n service.endpoints = function (start, limit, { search, types, tagIds, endpointIds, tagsPartialMatch } = {}) {\n if (tagIds && !tagIds.length) {\n return Promise.resolve({ value: [], totalCount: 0 });\n }\n return Endpoints.query({ start, limit, search, types: JSON.stringify(types), tagIds: JSON.stringify(tagIds), endpointIds: JSON.stringify(endpointIds), tagsPartialMatch })\n .$promise;\n };\n\n service.snapshotEndpoints = function () {\n return Endpoints.snapshots({}, {}).$promise;\n };\n\n service.snapshotEndpoint = function (endpointID) {\n return Endpoints.snapshot({ id: endpointID }, {}).$promise;\n };\n\n service.endpointsByGroup = function (start, limit, search, groupId) {\n return Endpoints.query({ start, limit, search, groupId }).$promise;\n };\n\n service.updateAccess = function (id, userAccessPolicies, teamAccessPolicies) {\n return Endpoints.updateAccess({ id: id }, { UserAccessPolicies: userAccessPolicies, TeamAccessPolicies: teamAccessPolicies }).$promise;\n };\n\n service.deassociateEndpoint = function (endpointID) {\n return Endpoints.deassociate({ id: endpointID }).$promise;\n };\n\n service.updateEndpoint = function (id, payload) {\n var deferred = $q.defer();\n FileUploadService.uploadTLSFilesForEndpoint(id, payload.TLSCACert, payload.TLSCert, payload.TLSKey)\n .then(function success() {\n deferred.notify({ upload: false });\n return Endpoints.update({ id: id }, payload).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.notify({ upload: false });\n deferred.reject({ msg: 'Unable to update environment', err: err });\n });\n return deferred.promise;\n };\n\n service.deleteEndpoint = function (endpointID) {\n return Endpoints.remove({ id: endpointID }).$promise;\n };\n\n service.createLocalEndpoint = function (name = 'local', URL = '', PublicURL = '', groupID = 1, tagIds = []) {\n var deferred = $q.defer();\n\n var endpointURL = URL;\n if (endpointURL !== '') {\n if (endpointURL.indexOf('//./pipe/') == 0) {\n // Windows named pipe\n endpointURL = 'npipe://' + URL;\n } else {\n endpointURL = 'unix://' + URL;\n }\n }\n\n FileUploadService.createEndpoint(name, PortainerEndpointCreationTypes.LocalDockerEnvironment, endpointURL, PublicURL, groupID, tagIds, false)\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create environment', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createRemoteEndpoint = function (\n name,\n creationType,\n URL,\n PublicURL,\n groupID,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n checkinInterval,\n isEdgeDevice\n ) {\n var deferred = $q.defer();\n\n var endpointURL = URL;\n if (creationType !== PortainerEndpointCreationTypes.EdgeAgentEnvironment) {\n endpointURL = 'tcp://' + URL;\n }\n\n FileUploadService.createEndpoint(\n name,\n creationType,\n endpointURL,\n PublicURL,\n groupID,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n checkinInterval,\n isEdgeDevice\n )\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create environment', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createLocalKubernetesEndpoint = function (name = 'local', tagIds = []) {\n var deferred = $q.defer();\n\n FileUploadService.createEndpoint(name, PortainerEndpointCreationTypes.LocalKubernetesEnvironment, '', '', 1, tagIds, true, true, true)\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create environment', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createAzureEndpoint = function (name, applicationId, tenantId, authenticationKey, groupId, tagIds) {\n var deferred = $q.defer();\n\n FileUploadService.createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds)\n .then(function success(response) {\n deferred.resolve(response.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to connect to Azure', err: err });\n });\n\n return deferred.promise;\n };\n\n service.updatePoolAccess = function (endpointID, resourcePool, usersToAdd, teamsToAdd, usersToRemove, teamsToRemove) {\n return Endpoints.updatePoolAccess(\n {\n id: endpointID,\n rpn: resourcePool,\n },\n {\n UsersToAdd: usersToAdd,\n TeamsToAdd: teamsToAdd,\n UsersToRemove: usersToRemove,\n teamsToRemove: teamsToRemove,\n }\n ).$promise;\n };\n\n service.forceUpdateService = function (endpointID, serviceID, pullImage) {\n return Endpoints.forceUpdateService(\n {\n id: endpointID,\n },\n {\n ServiceID: serviceID,\n PullImage: pullImage,\n }\n ).$promise;\n };\n\n service.trust = function (id) {\n Endpoints.updateEndpoint({ id }, { UserTrusted: true }).$promise;\n };\n\n return service;\n\n function updateRegistryAccess(id, registryId, endpointAccesses) {\n return Endpoints.updateRegistryAccess({ registryId, id }, endpointAccesses).$promise;\n }\n\n function registries(id, namespace) {\n return Endpoints.registries({ namespace, id }).$promise;\n }\n\n function updateSettings(id, settings) {\n return Endpoints.updateSettings({ id }, settings).$promise;\n }\n\n function registry(endpointId, registryId) {\n return Endpoints.registry({ registryId, id: endpointId }).$promise;\n }\n },\n]);\n","import { EndpointGroupCreateRequest, EndpointGroupModel, EndpointGroupUpdateRequest } from '../../models/group';\n\nangular.module('portainer.app').factory('GroupService', [\n '$q',\n 'EndpointGroups',\n function GroupService($q, EndpointGroups) {\n 'use strict';\n var service = {};\n\n service.group = function (groupId) {\n var deferred = $q.defer();\n\n EndpointGroups.get({ id: groupId })\n .$promise.then(function success(data) {\n var group = new EndpointGroupModel(data);\n deferred.resolve(group);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve group', err: err });\n });\n\n return deferred.promise;\n };\n\n service.groups = function () {\n return EndpointGroups.query({}).$promise;\n };\n\n service.createGroup = function (model, endpoints) {\n var payload = new EndpointGroupCreateRequest(model, endpoints);\n return EndpointGroups.create(payload).$promise;\n };\n\n service.updateGroup = function (model, endpoints) {\n var payload = new EndpointGroupUpdateRequest(model, endpoints);\n return EndpointGroups.update(payload).$promise;\n };\n\n service.updateAccess = function (groupId, userAccessPolicies, teamAccessPolicies) {\n return EndpointGroups.updateAccess({ id: groupId }, { UserAccessPolicies: userAccessPolicies, TeamAccessPolicies: teamAccessPolicies }).$promise;\n };\n\n service.addEndpoint = function (groupId, endpoint) {\n return EndpointGroups.addEndpoint({ id: groupId, action: 'endpoints/' + endpoint.Id }, endpoint).$promise;\n };\n\n service.removeEndpoint = function (groupId, endpointId) {\n return EndpointGroups.removeEndpoint({ id: groupId, action: 'endpoints/' + endpointId }).$promise;\n };\n\n service.deleteGroup = function (groupId) {\n return EndpointGroups.remove({ id: groupId }).$promise;\n };\n\n return service;\n },\n]);\n","import { MotdViewModel } from '../../models/motd';\n\nangular.module('portainer.app').factory('MotdService', [\n '$q',\n 'Motd',\n function MotdServiceFactory($q, Motd) {\n 'use strict';\n var service = {};\n\n service.motd = function () {\n var deferred = $q.defer();\n\n Motd.get()\n .$promise.then(function success(data) {\n var motd = new MotdViewModel(data);\n deferred.resolve(motd);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve information message', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport { PorImageRegistryModel } from 'Docker/models/porImageRegistry';\nimport { RegistryTypes } from 'Portainer/models/registryTypes';\nimport { RegistryCreateRequest, RegistryViewModel } from 'Portainer/models/registry';\nimport { DockerHubViewModel } from 'Portainer/models/dockerhub';\n\nangular.module('portainer.app').factory('RegistryService', [\n '$q',\n '$async',\n 'EndpointService',\n 'Registries',\n 'ImageHelper',\n 'FileUploadService',\n function RegistryServiceFactory($q, $async, EndpointService, Registries, ImageHelper, FileUploadService) {\n return {\n registries,\n registry,\n encodedCredentials,\n deleteRegistry,\n updateRegistry,\n configureRegistry,\n createRegistry,\n createGitlabRegistries,\n retrievePorRegistryModelFromRepository,\n retrievePorRegistryModelFromRepositoryWithRegistries,\n loadRegistriesForDropdown,\n };\n\n function registries() {\n var deferred = $q.defer();\n\n Registries.query()\n .$promise.then(function success(data) {\n var registries = data.map(function (item) {\n return new RegistryViewModel(item);\n });\n deferred.resolve(registries);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve registries', err: err });\n });\n\n return deferred.promise;\n }\n\n function registry(id, endpointId) {\n var deferred = $q.defer();\n\n Registries.get({ id: id, endpointId: endpointId })\n .$promise.then(function success(data) {\n var registry = new RegistryViewModel(data);\n deferred.resolve(registry);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve registry details', err: err });\n });\n\n return deferred.promise;\n }\n\n function encodedCredentials(registry) {\n var credentials = {\n registryId: registry.Id,\n };\n return btoa(JSON.stringify(credentials));\n }\n\n function deleteRegistry(id) {\n return Registries.remove({ id: id }).$promise;\n }\n\n function updateRegistry(registry) {\n registry.URL = _.replace(registry.URL, /^https?\\:\\/\\//i, '');\n registry.URL = _.replace(registry.URL, /\\/$/, '');\n return Registries.update({ id: registry.Id }, registry).$promise;\n }\n\n function configureRegistry(id, registryManagementConfigurationModel) {\n return FileUploadService.configureRegistry(id, registryManagementConfigurationModel);\n }\n\n function createRegistry(model) {\n var payload = new RegistryCreateRequest(model);\n return Registries.create(payload).$promise;\n }\n\n function createGitlabRegistries(model, projects) {\n const promises = [];\n _.forEach(projects, (p) => {\n const m = model;\n m.Name = p.PathWithNamespace;\n m.Gitlab.ProjectPath = _.toLower(p.PathWithNamespace);\n m.Gitlab.ProjectId = p.Id;\n m.Password = m.Token;\n const payload = new RegistryCreateRequest(m);\n promises.push(Registries.create(payload).$promise);\n });\n return $q.all(promises);\n }\n\n function getURL(reg) {\n let url = reg.URL;\n if (reg.Type === RegistryTypes.GITLAB) {\n url = reg.URL + '/' + reg.Gitlab.ProjectPath;\n } else if (reg.Type === RegistryTypes.QUAY) {\n const name = reg.Quay.UseOrganisation ? reg.Quay.OrganisationName : reg.Username;\n url = reg.URL + '/' + name;\n }\n return url;\n }\n\n // findBestMatchRegistry finds out the best match registry for repository\n // matching precedence:\n // 1. registryId matched\n // 2. both domain name and username matched (for dockerhub only)\n // 3. only URL matched\n // 4. pick up the first dockerhub registry\n function findBestMatchRegistry(repository, registries, registryId) {\n let match2, match3, match4;\n\n for (const registry of registries) {\n if (registry.Id == registryId) {\n return registry;\n }\n\n if (registry.Type === RegistryTypes.DOCKERHUB) {\n // try to match repository examples:\n // /nginx:latest\n // docker.io//nginx:latest\n if (repository.startsWith(registry.Username + '/') || repository.startsWith(getURL(registry) + '/' + registry.Username + '/')) {\n match2 = registry;\n }\n\n // try to match repository examples:\n // portainer/portainer-ee:latest\n // /portainer-ee:latest\n match4 = match4 || registry;\n }\n\n if (_.includes(repository, getURL(registry))) {\n match3 = registry;\n }\n }\n\n return match2 || match3 || match4;\n }\n\n function retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries, registryId) {\n const model = new PorImageRegistryModel();\n const registry = findBestMatchRegistry(repository, registries, registryId);\n if (registry) {\n const url = getURL(registry);\n let lastIndex = repository.lastIndexOf(url);\n lastIndex = lastIndex === -1 ? 0 : lastIndex + url.length;\n let image = repository.substring(lastIndex);\n if (_.startsWith(image, '/')) {\n image = image.substring(1);\n }\n model.Registry = registry;\n model.Image = image;\n } else {\n if (ImageHelper.imageContainsURL(repository)) {\n model.UseRegistry = false;\n }\n model.Registry = new DockerHubViewModel();\n model.Image = repository;\n }\n return model;\n }\n\n function retrievePorRegistryModelFromRepository(repository, endpointId, registryId, namespace) {\n return $async(async () => {\n try {\n const regs = await EndpointService.registries(endpointId, namespace);\n return retrievePorRegistryModelFromRepositoryWithRegistries(repository, regs, registryId);\n } catch (err) {\n throw { msg: 'Unable to retrieve the registry associated to the repository', err: err };\n }\n });\n }\n\n function loadRegistriesForDropdown(endpointId, namespace) {\n return $async(async () => {\n try {\n const registries = await EndpointService.registries(endpointId, namespace);\n\n // hide default(anonymous) dockerhub registry if user has an authenticated one\n if (!registries.some((registry) => registry.Type === RegistryTypes.DOCKERHUB)) {\n registries.push(new DockerHubViewModel());\n }\n\n return registries;\n } catch (err) {\n throw { msg: 'Unable to retrieve the registries', err: err };\n }\n });\n }\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory('ResourceControlService', [\n '$q',\n 'ResourceControl',\n 'UserService',\n 'TeamService',\n 'ResourceControlHelper',\n function ResourceControlServiceFactory($q, ResourceControl, UserService, TeamService, ResourceControlHelper) {\n 'use strict';\n const service = {};\n\n service.duplicateResourceControl = duplicateResourceControl;\n service.applyResourceControlChange = applyResourceControlChange;\n service.applyResourceControl = applyResourceControl;\n service.retrieveOwnershipDetails = retrieveOwnershipDetails;\n service.retrieveUserPermissionsOnResource = retrieveUserPermissionsOnResource;\n\n /**\n * PRIVATE SECTION\n */\n\n /**\n * Create a ResourceControl\n * @param {ResourceControlTypeString} rcType Type of ResourceControl\n * @param {string} rcID ID of involved resource\n * @param {ResourceControlOwnershipParameters} ownershipParameters Transcient type from view data to payload\n */\n function createResourceControl(rcType, resourceID, ownershipParameters) {\n var payload = {\n Type: rcType,\n Public: ownershipParameters.Public,\n AdministratorsOnly: ownershipParameters.AdministratorsOnly,\n ResourceID: resourceID,\n Users: ownershipParameters.Users,\n Teams: ownershipParameters.Teams,\n SubResourceIds: ownershipParameters.SubResourceIDs,\n };\n return ResourceControl.create({}, payload).$promise;\n }\n\n /**\n * Update a ResourceControl\n * @param {String} rcID ID of involved resource\n * @param {ResourceControlOwnershipParameters} ownershipParameters Transcient type from view data to payload\n */\n function updateResourceControl(rcID, ownershipParameters) {\n const payload = {\n AdministratorsOnly: ownershipParameters.AdministratorsOnly,\n Public: ownershipParameters.Public,\n Users: ownershipParameters.Users,\n Teams: ownershipParameters.Teams,\n };\n\n return ResourceControl.update({ id: rcID }, payload).$promise;\n }\n\n /**\n * END PRIVATE SECTION\n */\n\n /**\n * PUBLIC SECTION\n */\n\n /**\n * Apply a ResourceControl after Resource creation\n * @param {int} userId ID of User performing the action\n * @param {AccessControlFormData} accessControlData ResourceControl to apply\n * @param {ResourceControlViewModel} resourceControl ResourceControl to update\n * @param {[]int} subResources SubResources managed by the ResourceControl\n */\n function applyResourceControl(userId, accessControlData, resourceControl, subResources = []) {\n const ownershipParameters = ResourceControlHelper.RCFormDataToOwnershipParameters(userId, accessControlData, subResources);\n return updateResourceControl(resourceControl.Id, ownershipParameters);\n }\n\n /**\n * Duplicate an existing ResourceControl (default to AdministratorsOnly if undefined)\n * @param {int} userId ID of User performing the action\n * @param {ResourceControlViewModel} oldResourceControl ResourceControl to duplicate\n * @param {ResourceControlViewModel} newResourceControl ResourceControl to apply duplication to\n */\n function duplicateResourceControl(userId, oldResourceControl, newResourceControl) {\n const ownershipParameters = ResourceControlHelper.RCViewModelToOwnershipParameters(userId, oldResourceControl);\n return updateResourceControl(newResourceControl.Id, ownershipParameters);\n }\n\n /**\n * Update an existing ResourceControl or create a new one on existing resource without RC\n * @param {ResourceControlTypeString} rcType Type of ResourceControl\n * @param {String} resourceId ID of involved Resource\n * @param {ResourceControlViewModel} resourceControl Previous ResourceControl (can be undefined)\n * @param {AccessControlPanelData} formValues View data generated by AccessControlPanel\n */\n function applyResourceControlChange(rcType, resourceId, resourceControl, formValues) {\n const ownershipParameters = ResourceControlHelper.RCPanelDataToOwnershipParameters(formValues);\n if (resourceControl) {\n return updateResourceControl(resourceControl.Id, ownershipParameters);\n } else {\n return createResourceControl(rcType, resourceId, ownershipParameters);\n }\n }\n\n /**\n * Retrieve users and team details for ResourceControlViewModel\n * @param {ResourceControlViewModel} resourceControl ResourceControl view model\n */\n function retrieveOwnershipDetails(resourceControl) {\n var deferred = $q.defer();\n\n if (!resourceControl) {\n deferred.resolve({ authorizedUsers: [], authorizedTeams: [] });\n return deferred.promise;\n }\n\n $q.all({\n users: resourceControl.UserAccesses.length > 0 ? UserService.users(false) : [],\n teams: resourceControl.TeamAccesses.length > 0 ? TeamService.teams() : [],\n })\n .then(function success(data) {\n var authorizedUsers = ResourceControlHelper.retrieveAuthorizedUsers(resourceControl, data.users);\n var authorizedTeams = ResourceControlHelper.retrieveAuthorizedTeams(resourceControl, data.teams);\n deferred.resolve({ authorizedUsers: authorizedUsers, authorizedTeams: authorizedTeams });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user and team information', err: err });\n });\n\n return deferred.promise;\n }\n\n function retrieveUserPermissionsOnResource(userID, isAdministrator, resourceControl) {\n var deferred = $q.defer();\n\n if (!resourceControl || isAdministrator) {\n deferred.resolve({ isPartOfRestrictedUsers: false, isLeaderOfAnyRestrictedTeams: false });\n return deferred.promise;\n }\n\n var found = _.find(resourceControl.UserAccesses, { UserId: userID });\n if (found) {\n deferred.resolve({ isPartOfRestrictedUsers: true, isLeaderOfAnyRestrictedTeams: false });\n } else {\n var isTeamLeader = false;\n UserService.userMemberships(userID)\n .then(function success(data) {\n var memberships = data;\n isTeamLeader = ResourceControlHelper.isLeaderOfAnyRestrictedTeams(memberships, resourceControl);\n deferred.resolve({ isPartOfRestrictedUsers: false, isLeaderOfAnyRestrictedTeams: isTeamLeader });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user memberships', err: err });\n });\n }\n\n return deferred.promise;\n }\n\n /**\n * END PUBLIC SECTION\n */\n\n return service;\n },\n]);\n","import { SettingsViewModel, PublicSettingsViewModel } from '../../models/settings';\n\nangular.module('portainer.app').factory('SettingsService', [\n '$q',\n 'Settings',\n function SettingsServiceFactory($q, Settings) {\n 'use strict';\n var service = {};\n\n service.settings = function () {\n var deferred = $q.defer();\n\n Settings.get()\n .$promise.then(function success(data) {\n var settings = new SettingsViewModel(data);\n deferred.resolve(settings);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.update = function (settings) {\n return Settings.update({}, settings).$promise;\n };\n\n service.publicSettings = function () {\n var deferred = $q.defer();\n\n Settings.publicSettings()\n .$promise.then(function success(data) {\n var settings = new PublicSettingsViewModel(data);\n deferred.resolve(settings);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application settings', err: err });\n });\n\n return deferred.promise;\n };\n\n service.checkLDAPConnectivity = function (settings) {\n return Settings.checkLDAPConnectivity({}, settings).$promise;\n };\n\n return service;\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.app').service('SSLService', SSLServiceFactory);\n\n/* @ngInject */\nfunction SSLServiceFactory(SSL) {\n return {\n upload,\n get,\n };\n\n function get() {\n return SSL.get().$promise;\n }\n\n function upload(httpEnabled, cert, key) {\n return SSL.upload({ httpEnabled, cert, key }).$promise;\n }\n}\n","import _ from 'lodash-es';\nimport { RepositoryMechanismTypes } from 'Kubernetes/models/deploy';\nimport { StackViewModel, OrphanedStackViewModel } from '../../models/stack';\n\nangular.module('portainer.app').factory('StackService', [\n '$q',\n '$async',\n 'Stack',\n 'FileUploadService',\n 'StackHelper',\n 'ServiceService',\n 'ContainerService',\n 'SwarmService',\n 'EndpointProvider',\n function StackServiceFactory($q, $async, Stack, FileUploadService, StackHelper, ServiceService, ContainerService, SwarmService, EndpointProvider) {\n 'use strict';\n var service = {\n updateGit,\n updateKubeGit,\n };\n\n service.stack = function (id) {\n var deferred = $q.defer();\n\n Stack.get({ id: id })\n .$promise.then(function success(data) {\n var stack = new StackViewModel(data);\n deferred.resolve(stack);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stack details', err: err });\n });\n\n return deferred.promise;\n };\n\n service.getStackFile = function (id) {\n var deferred = $q.defer();\n\n Stack.getStackFile({ id: id })\n .$promise.then(function success(data) {\n deferred.resolve(data.StackFileContent);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stack content', err: err });\n });\n\n return deferred.promise;\n };\n\n service.migrateSwarmStack = function (stack, targetEndpointId, newName) {\n var deferred = $q.defer();\n\n EndpointProvider.setEndpointID(targetEndpointId);\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n if (swarm.Id === stack.SwarmId) {\n deferred.reject({ msg: 'Target environment is located in the same Swarm cluster as the current environment', err: null });\n return;\n }\n return Stack.migrate({ id: stack.Id, endpointId: stack.EndpointId }, { EndpointID: targetEndpointId, SwarmID: swarm.Id, Name: newName }).$promise;\n })\n .then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to migrate stack', err: err });\n })\n .finally(function final() {\n EndpointProvider.setEndpointID(stack.EndpointId);\n });\n\n return deferred.promise;\n };\n\n service.migrateComposeStack = function (stack, targetEndpointId, newName) {\n var deferred = $q.defer();\n\n EndpointProvider.setEndpointID(targetEndpointId);\n\n Stack.migrate({ id: stack.Id, endpointId: stack.EndpointId }, { EndpointID: targetEndpointId, Name: newName })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n EndpointProvider.setEndpointID(stack.EndpointId);\n deferred.reject({ msg: 'Unable to migrate stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.stacks = function (compose, swarm, endpointId, includeOrphanedStacks = false) {\n var deferred = $q.defer();\n\n var queries = [];\n if (compose) {\n queries.push(service.composeStacks(endpointId, true, { EndpointID: endpointId, IncludeOrphanedStacks: includeOrphanedStacks }));\n }\n if (swarm) {\n queries.push(service.swarmStacks(endpointId, true, { EndpointID: endpointId, IncludeOrphanedStacks: includeOrphanedStacks }));\n }\n\n $q.all(queries)\n .then(function success(data) {\n var stacks = [];\n if (data[0]) {\n stacks = stacks.concat(data[0]);\n }\n if (data[1]) {\n stacks = stacks.concat(data[1]);\n }\n stacks = _.uniqWith(stacks, (s1, s2) => s1.Id === s2.Id && s1.Name === s2.Name);\n deferred.resolve(stacks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.externalSwarmStacks = function () {\n var deferred = $q.defer();\n\n ServiceService.services()\n .then(function success(services) {\n deferred.resolve(StackHelper.getExternalStacksFromServices(services));\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve external stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.externalComposeStacks = function () {\n var deferred = $q.defer();\n\n ContainerService.containers(1)\n .then(function success(containers) {\n deferred.resolve(StackHelper.getExternalStacksFromContainers(containers));\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve external stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.unionStacks = function (stacks, externalStacks) {\n stacks.forEach((stack) => {\n externalStacks.forEach((externalStack) => {\n if (stack.Orphaned && stack.Name == externalStack.Name) {\n stack.OrphanedRunning = true;\n }\n });\n });\n const result = _.unionWith(stacks, externalStacks, function (a, b) {\n return a.Name === b.Name;\n });\n\n return result;\n };\n\n service.composeStacks = function (endpointId, includeExternalStacks, filters) {\n var deferred = $q.defer();\n\n $q.all({\n stacks: Stack.query({ filters: filters }).$promise,\n externalStacks: includeExternalStacks ? service.externalComposeStacks() : [],\n })\n .then(function success(data) {\n var stacks = data.stacks.map(function (item) {\n if (item.EndpointId == endpointId) {\n return new StackViewModel(item);\n } else {\n return new OrphanedStackViewModel(item);\n }\n });\n var externalStacks = data.externalStacks;\n const result = service.unionStacks(stacks, externalStacks);\n deferred.resolve(result);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.swarmStacks = function (endpointId, includeExternalStacks, filters = {}) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n filters = { SwarmID: swarm.Id, ...filters };\n\n return $q.all({\n stacks: Stack.query({ filters: filters }).$promise,\n externalStacks: includeExternalStacks ? service.externalSwarmStacks() : [],\n });\n })\n .then(function success(data) {\n var stacks = data.stacks.map(function (item) {\n if (item.EndpointId == endpointId) {\n return new StackViewModel(item);\n } else {\n return new OrphanedStackViewModel(item);\n }\n });\n var externalStacks = data.externalStacks;\n const result = service.unionStacks(stacks, externalStacks);\n deferred.resolve(result);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve stacks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.remove = function (stack, external, endpointId) {\n var deferred = $q.defer();\n\n Stack.remove({ id: stack.Id ? stack.Id : stack.Name, external: external, endpointId: endpointId })\n .$promise.then(function success() {\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to remove the stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.associate = function (stack, endpointId, orphanedRunning) {\n var deferred = $q.defer();\n\n if (stack.Type == 1) {\n SwarmService.swarm()\n .then(function success(data) {\n const swarm = data;\n return Stack.associate({ id: stack.Id, endpointId: endpointId, swarmId: swarm.Id, orphanedRunning }).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to associate the stack', err: err });\n });\n } else {\n Stack.associate({ id: stack.Id, endpointId: endpointId, orphanedRunning })\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to associate the stack', err: err });\n });\n }\n\n return deferred.promise;\n };\n\n service.updateStack = function (stack, stackFile, env, prune, webhook, pullImage) {\n return Stack.update(\n { endpointId: stack.EndpointId },\n {\n id: stack.Id,\n StackFileContent: stackFile,\n Env: env,\n Prune: prune,\n Webhook: webhook,\n PullImage: pullImage,\n }\n ).$promise;\n };\n\n service.updateKubeStack = function (stack, stackFile, gitConfig) {\n let payload = {};\n\n if (stackFile) {\n payload = {\n StackFileContent: stackFile,\n };\n } else {\n const autoUpdate = {};\n if (gitConfig.AutoUpdate && gitConfig.AutoUpdate.RepositoryAutomaticUpdates) {\n autoUpdate.ForceUpdate = gitConfig.AutoUpdate.RepositoryAutomaticUpdatesForce;\n autoUpdate.ForcePullImage = gitConfig.AutoUpdate.RepositoryAutomaticUpdatesForce;\n if (gitConfig.AutoUpdate.RepositoryMechanism === RepositoryMechanismTypes.INTERVAL) {\n autoUpdate.Interval = gitConfig.AutoUpdate.RepositoryFetchInterval;\n } else if (gitConfig.AutoUpdate.RepositoryMechanism === RepositoryMechanismTypes.WEBHOOK) {\n autoUpdate.Webhook = gitConfig.AutoUpdate.RepositoryWebhookURL.split('/').reverse()[0];\n }\n }\n payload = {\n AutoUpdate: autoUpdate,\n RepositoryReferenceName: gitConfig.RefName,\n RepositoryAuthentication: gitConfig.RepositoryAuthentication,\n RepositoryUsername: gitConfig.RepositoryUsername,\n RepositoryPassword: gitConfig.RepositoryPassword,\n };\n }\n\n return Stack.update({ id: stack.Id, endpointId: stack.EndpointId }, payload).$promise;\n };\n\n service.createComposeStackFromFileUpload = function (name, stackFile, env, endpointId, webhook) {\n return FileUploadService.createComposeStack(name, stackFile, env, endpointId, webhook);\n };\n\n service.createSwarmStackFromFileUpload = function (name, stackFile, env, endpointId, webhook) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n return FileUploadService.createSwarmStack(name, swarm.Id, stackFile, env, endpointId, webhook);\n })\n .then(function success(data) {\n deferred.resolve(data.data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create the stack', err: err });\n });\n\n return deferred.promise;\n };\n service.createComposeStackFromFileContent = function (name, stackFileContent, env, endpointId, webhook) {\n var payload = {\n Name: name,\n StackFileContent: stackFileContent,\n Env: env,\n Webhook: webhook,\n };\n return Stack.create({ method: 'string', type: 2, endpointId: endpointId }, payload).$promise;\n };\n\n service.createSwarmStackFromFileContent = function (name, stackFileContent, env, endpointId, webhook) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(swarm) {\n var payload = {\n Name: name,\n SwarmID: swarm.Id,\n StackFileContent: stackFileContent,\n Env: env,\n Webhook: webhook,\n };\n return Stack.create({ method: 'string', type: 1, endpointId: endpointId }, payload).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create the stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createComposeStackFromGitRepository = function (name, repositoryOptions, env, endpointId) {\n var payload = {\n Name: name,\n RepositoryURL: repositoryOptions.RepositoryURL,\n RepositoryReferenceName: repositoryOptions.RepositoryReferenceName,\n ComposeFile: repositoryOptions.ComposeFilePathInRepository,\n AdditionalFiles: repositoryOptions.AdditionalFiles,\n RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,\n RepositoryUsername: repositoryOptions.RepositoryUsername,\n RepositoryPassword: repositoryOptions.RepositoryPassword,\n FromAppTemplate: repositoryOptions.FromAppTemplate,\n Env: env,\n };\n\n if (repositoryOptions.AutoUpdate) {\n payload.AutoUpdate = repositoryOptions.AutoUpdate;\n }\n\n return Stack.create({ method: 'repository', type: 2, endpointId: endpointId }, payload).$promise;\n };\n\n service.createSwarmStackFromGitRepository = function (name, repositoryOptions, env, endpointId) {\n var deferred = $q.defer();\n\n SwarmService.swarm()\n .then(function success(data) {\n var swarm = data;\n var payload = {\n Name: name,\n SwarmID: swarm.Id,\n RepositoryURL: repositoryOptions.RepositoryURL,\n RepositoryReferenceName: repositoryOptions.RepositoryReferenceName,\n ComposeFile: repositoryOptions.ComposeFilePathInRepository,\n AdditionalFiles: repositoryOptions.AdditionalFiles,\n RepositoryAuthentication: repositoryOptions.RepositoryAuthentication,\n RepositoryUsername: repositoryOptions.RepositoryUsername,\n RepositoryPassword: repositoryOptions.RepositoryPassword,\n FromAppTemplate: repositoryOptions.FromAppTemplate,\n Env: env,\n };\n\n if (repositoryOptions.AutoUpdate) {\n payload.AutoUpdate = repositoryOptions.AutoUpdate;\n }\n\n return Stack.create({ method: 'repository', type: 1, endpointId: endpointId }, payload).$promise;\n })\n .then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create the stack', err: err });\n });\n\n return deferred.promise;\n };\n\n service.duplicateStack = function duplicateStack(name, stackFileContent, env, endpointId, type) {\n var action = type === 1 ? service.createSwarmStackFromFileContent : service.createComposeStackFromFileContent;\n return action(name, stackFileContent, env, endpointId);\n };\n\n async function kubernetesDeployAsync(endpointId, method, payload) {\n try {\n await Stack.create({ endpointId: endpointId, method: method, type: 3 }, payload).$promise;\n } catch (err) {\n throw { err: err };\n }\n }\n\n service.kubernetesDeploy = function (endpointId, method, payload) {\n return $async(kubernetesDeployAsync, endpointId, method, payload);\n };\n\n service.start = start;\n function start(id) {\n return Stack.start({ id }).$promise;\n }\n\n service.stop = stop;\n function stop(id, endpointId) {\n return Stack.stop({ id: id, endpointId: endpointId }).$promise;\n }\n\n function updateGit(id, endpointId, env, prune, gitConfig, pullImage) {\n return Stack.updateGit(\n { endpointId, id },\n {\n env,\n prune,\n RepositoryReferenceName: gitConfig.RefName,\n RepositoryAuthentication: gitConfig.RepositoryAuthentication,\n RepositoryUsername: gitConfig.RepositoryUsername,\n RepositoryPassword: gitConfig.RepositoryPassword,\n PullImage: pullImage,\n }\n ).$promise;\n }\n\n function updateKubeGit(id, endpointId, namespace, gitConfig) {\n return Stack.updateGit(\n { endpointId, id },\n {\n Namespace: namespace,\n RepositoryReferenceName: gitConfig.RefName,\n RepositoryAuthentication: gitConfig.RepositoryAuthentication,\n RepositoryUsername: gitConfig.RepositoryUsername,\n RepositoryPassword: gitConfig.RepositoryPassword,\n }\n ).$promise;\n }\n\n service.updateGitStackSettings = function (id, endpointId, env, gitConfig) {\n // prepare auto update\n const autoUpdate = {};\n\n if (gitConfig.AutoUpdate && gitConfig.AutoUpdate.RepositoryAutomaticUpdates) {\n autoUpdate.ForceUpdate = gitConfig.AutoUpdate.RepositoryAutomaticUpdatesForce;\n autoUpdate.ForcePullImage = gitConfig.AutoUpdate.ForcePullImage;\n if (gitConfig.AutoUpdate.RepositoryMechanism === RepositoryMechanismTypes.INTERVAL) {\n autoUpdate.Interval = gitConfig.AutoUpdate.RepositoryFetchInterval;\n } else if (gitConfig.AutoUpdate.RepositoryMechanism === RepositoryMechanismTypes.WEBHOOK) {\n autoUpdate.Webhook = gitConfig.AutoUpdate.RepositoryWebhookURL.split('/').reverse()[0];\n }\n }\n\n return Stack.updateGitStackSettings(\n { endpointId, id },\n {\n AutoUpdate: autoUpdate,\n Env: env,\n RepositoryReferenceName: gitConfig.RefName,\n RepositoryAuthentication: gitConfig.RepositoryAuthentication,\n RepositoryUsername: gitConfig.RepositoryUsername,\n RepositoryPassword: gitConfig.RepositoryPassword,\n }\n ).$promise;\n };\n\n return service;\n },\n]);\n","import { StatusVersionViewModel, StatusViewModel } from '../../models/status';\n\nangular.module('portainer.app').factory('StatusService', [\n '$q',\n 'Status',\n function StatusServiceFactory($q, Status) {\n 'use strict';\n var service = {};\n\n service.status = function () {\n var deferred = $q.defer();\n\n Status.get()\n .$promise.then(function success(data) {\n var status = new StatusViewModel(data);\n deferred.resolve(status);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application status', err: err });\n });\n\n return deferred.promise;\n };\n\n service.version = function () {\n var deferred = $q.defer();\n\n Status.version()\n .$promise.then(function success(data) {\n var status = new StatusVersionViewModel(data);\n deferred.resolve(status);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve application version info', err: err });\n });\n\n return deferred.promise;\n };\n\n service.nodesCount = async function nodesCount() {\n const response = await Status.nodesCount().$promise;\n return response.nodes;\n };\n\n return service;\n },\n]);\n","angular.module('portainer.app').factory('SupportService', [\n '$q',\n 'Support',\n function SupportServiceFactory($q, Support) {\n 'use strict';\n var service = {};\n\n service.supportProducts = function () {\n var deferred = $q.defer();\n\n Support.get()\n .$promise.then(function success(data) {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve support options', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { TagViewModel } from '../../models/tag';\n\nangular.module('portainer.app').factory('TagService', [\n '$q',\n '$async',\n 'Tags',\n function TagServiceFactory($q, $async, Tags) {\n 'use strict';\n var service = {};\n\n service.tags = function () {\n var deferred = $q.defer();\n Tags.query()\n .$promise.then(function success(data) {\n var tags = data.map(function (item) {\n return new TagViewModel(item);\n });\n deferred.resolve(tags);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve tags', err: err });\n });\n return deferred.promise;\n };\n\n service.tagNames = function () {\n var deferred = $q.defer();\n Tags.query()\n .$promise.then(function success(data) {\n var tags = data.map(function (item) {\n return item.Name;\n });\n deferred.resolve(tags);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve tags', err: err });\n });\n return deferred.promise;\n };\n\n async function createTagAsync(name) {\n var payload = {\n Name: name,\n };\n try {\n const tag = await Tags.create({}, payload).$promise;\n return new TagViewModel(tag);\n } catch (err) {\n throw { msg: 'Unable to create tag', err };\n }\n }\n\n function createTag(name) {\n return $async(createTagAsync, name);\n }\n service.createTag = createTag;\n\n service.deleteTag = function (id) {\n return Tags.remove({ id: id }).$promise;\n };\n\n return service;\n },\n]);\n","import { TeamMembershipModel } from '../../models/teamMembership';\n\nangular.module('portainer.app').factory('TeamMembershipService', [\n '$q',\n 'TeamMemberships',\n function TeamMembershipFactory($q, TeamMemberships) {\n 'use strict';\n var service = {};\n\n service.memberships = function () {\n var deferred = $q.defer();\n TeamMemberships.query()\n .$promise.then(function success(data) {\n var memberships = data.map(function (item) {\n return new TeamMembershipModel(item);\n });\n deferred.resolve(memberships);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve team memberships', err: err });\n });\n return deferred.promise;\n };\n\n service.createMembership = function (userId, teamId, role) {\n var payload = {\n UserID: userId,\n TeamID: teamId,\n Role: role,\n };\n return TeamMemberships.create({}, payload).$promise;\n };\n\n service.deleteMembership = function (id) {\n return TeamMemberships.remove({ id: id }).$promise;\n };\n\n service.updateMembership = function (id, userId, teamId, role) {\n var payload = {\n UserID: userId,\n TeamID: teamId,\n Role: role,\n };\n return TeamMemberships.update({ id: id }, payload).$promise;\n };\n\n return service;\n },\n]);\n","import { TeamViewModel } from '../../models/team';\nimport { TeamMembershipModel } from '../../models/teamMembership';\n\nangular.module('portainer.app').factory('TeamService', [\n '$q',\n 'Teams',\n 'TeamMembershipService',\n function TeamServiceFactory($q, Teams, TeamMembershipService) {\n 'use strict';\n var service = {};\n\n service.teams = function () {\n var deferred = $q.defer();\n Teams.query()\n .$promise.then(function success(data) {\n var teams = data.map(function (item) {\n return new TeamViewModel(item);\n });\n deferred.resolve(teams);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve teams', err: err });\n });\n return deferred.promise;\n };\n\n service.team = function (id) {\n var deferred = $q.defer();\n Teams.get({ id: id })\n .$promise.then(function success(data) {\n var team = new TeamViewModel(data);\n deferred.resolve(team);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve team details', err: err });\n });\n return deferred.promise;\n };\n\n service.createTeam = function (name, leaderIds) {\n var deferred = $q.defer();\n var payload = {\n Name: name,\n };\n Teams.create({}, payload)\n .$promise.then(function success(data) {\n var teamId = data.Id;\n var teamMembershipQueries = [];\n angular.forEach(leaderIds, function (userId) {\n teamMembershipQueries.push(TeamMembershipService.createMembership(userId, teamId, 1));\n });\n $q.all(teamMembershipQueries).then(function success() {\n deferred.resolve();\n });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create team', err: err });\n });\n return deferred.promise;\n };\n\n service.deleteTeam = function (id) {\n return Teams.remove({ id: id }).$promise;\n };\n\n service.userMemberships = function (id) {\n var deferred = $q.defer();\n Teams.queryMemberships({ id: id })\n .$promise.then(function success(data) {\n var memberships = data.map(function (item) {\n return new TeamMembershipModel(item);\n });\n deferred.resolve(memberships);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user memberships for the team', err: err });\n });\n return deferred.promise;\n };\n\n return service;\n },\n]);\n","import { DockerHubViewModel } from 'Portainer/models/dockerhub';\nimport { TemplateViewModel } from '../../models/template';\n\nangular.module('portainer.app').factory('TemplateService', TemplateServiceFactory);\n\n/* @ngInject */\nfunction TemplateServiceFactory($q, Templates, TemplateHelper, ImageHelper, ContainerHelper, EndpointService) {\n var service = {\n templates,\n };\n\n function templates(endpointId) {\n const deferred = $q.defer();\n\n $q.all({\n templates: Templates.query().$promise,\n registries: EndpointService.registries(endpointId),\n })\n .then(function success({ templates, registries }) {\n const version = templates.version;\n deferred.resolve(\n templates.templates.map((item) => {\n try {\n const template = new TemplateViewModel(item, version);\n const registryURL = template.RegistryModel.Registry.URL;\n const registry = registryURL ? registries.find((reg) => reg.URL === registryURL) : new DockerHubViewModel();\n template.RegistryModel.Registry = registry;\n return template;\n } catch (err) {\n deferred.reject({ msg: 'Unable to retrieve templates', err: err });\n }\n })\n );\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve templates', err: err });\n });\n\n return deferred.promise;\n }\n\n service.templateFile = templateFile;\n function templateFile(repositoryUrl, composeFilePathInRepository) {\n return Templates.file({ repositoryUrl, composeFilePathInRepository }).$promise;\n }\n\n service.createTemplateConfiguration = function (template, containerName, network) {\n var imageConfiguration = ImageHelper.createImageConfigForContainer(template.RegistryModel);\n var containerConfiguration = createContainerConfiguration(template, containerName, network);\n containerConfiguration.Image = imageConfiguration.fromImage;\n return containerConfiguration;\n };\n\n function createContainerConfiguration(template, containerName, network) {\n var configuration = TemplateHelper.getDefaultContainerConfiguration();\n configuration.HostConfig.NetworkMode = network.Name;\n configuration.HostConfig.Privileged = template.Privileged;\n configuration.HostConfig.RestartPolicy = { Name: template.RestartPolicy };\n configuration.HostConfig.ExtraHosts = template.Hosts ? template.Hosts : [];\n configuration.name = containerName;\n configuration.Hostname = template.Hostname;\n configuration.Env = TemplateHelper.EnvToStringArray(template.Env);\n configuration.Cmd = ContainerHelper.commandStringToArray(template.Command);\n var portConfiguration = TemplateHelper.portArrayToPortConfiguration(template.Ports);\n configuration.HostConfig.PortBindings = portConfiguration.bindings;\n configuration.ExposedPorts = portConfiguration.exposedPorts;\n var consoleConfiguration = TemplateHelper.getConsoleConfiguration(template.Interactive);\n configuration.OpenStdin = consoleConfiguration.openStdin;\n configuration.Tty = consoleConfiguration.tty;\n configuration.Labels = TemplateHelper.updateContainerConfigurationWithLabels(template.Labels);\n return configuration;\n }\n\n service.updateContainerConfigurationWithVolumes = function (configuration, template, generatedVolumesPile) {\n var volumes = template.Volumes;\n TemplateHelper.createVolumeBindings(volumes, generatedVolumesPile);\n volumes.forEach(function (volume) {\n if (volume.binding) {\n configuration.Volumes[volume.container] = {};\n configuration.HostConfig.Binds.push(volume.binding);\n }\n });\n };\n\n return service;\n}\n","import _ from 'lodash-es';\n\nimport axios from '@/portainer/services/axios';\n\nconst BASE_URL = '/users';\n\nimport PortainerError from '@/portainer/error';\nimport { filterNonAdministratorUsers } from '@/portainer/helpers/userHelper';\nimport { UserViewModel, UserTokenModel } from '../../models/user';\nimport { TeamMembershipModel } from '../../models/teamMembership';\n\nexport async function getUsers(includeAdministrators) {\n try {\n let { data } = await axios.get(BASE_URL);\n\n const users = data.map((user) => new UserViewModel(user));\n\n if (includeAdministrators) {\n return users;\n }\n\n return filterNonAdministratorUsers(users);\n } catch (e) {\n let err = e;\n if (err.isAxiosError) {\n err = new Error(e.response.data.message);\n }\n\n throw new PortainerError('Unable to retrieve users', err);\n }\n}\n\nexport async function getUser(id) {\n try {\n const { data: user } = await axios.get(`${BASE_URL}/${id}`);\n\n return new UserViewModel(user);\n } catch (e) {\n let err = e;\n if (err.isAxiosError) {\n err = new Error(e.response.data.message);\n }\n\n throw new PortainerError('Unable to retrieve user details', err);\n }\n}\n\n/* @ngInject */\nexport function UserService($q, Users, TeamService, TeamMembershipService) {\n 'use strict';\n var service = {};\n\n service.users = getUsers;\n\n service.user = getUser;\n\n service.createUser = function (username, password, role, teamIds) {\n var deferred = $q.defer();\n\n var payload = {\n username: username,\n password: password,\n role: role,\n };\n\n Users.create({}, payload)\n .$promise.then(function success(data) {\n var userId = data.Id;\n var teamMembershipQueries = [];\n angular.forEach(teamIds, function (teamId) {\n teamMembershipQueries.push(TeamMembershipService.createMembership(userId, teamId, 2));\n });\n $q.all(teamMembershipQueries).then(function success() {\n deferred.resolve();\n });\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create user', err: err });\n });\n\n return deferred.promise;\n };\n\n service.deleteUser = function (id) {\n return Users.remove({ id: id }).$promise;\n };\n\n service.updateUser = function (id, { password, role, username }) {\n return Users.update({ id }, { password, role, username }).$promise;\n };\n\n service.updateUserPassword = function (id, currentPassword, newPassword) {\n var payload = {\n Password: currentPassword,\n NewPassword: newPassword,\n };\n\n return Users.updatePassword({ id: id }, payload).$promise;\n };\n\n service.updateUserTheme = function (id, userTheme) {\n return Users.updateTheme({ id }, { userTheme }).$promise;\n };\n\n service.userMemberships = function (id) {\n var deferred = $q.defer();\n\n Users.queryMemberships({ id: id })\n .$promise.then(function success(data) {\n var memberships = data.map(function (item) {\n return new TeamMembershipModel(item);\n });\n deferred.resolve(memberships);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user memberships', err: err });\n });\n\n return deferred.promise;\n };\n\n service.userLeadingTeams = function (id) {\n var deferred = $q.defer();\n\n $q.all({\n teams: TeamService.teams(),\n memberships: service.userMemberships(id),\n })\n .then(function success(data) {\n var memberships = data.memberships;\n var teams = data.teams.filter(function (team) {\n var membership = _.find(memberships, { TeamId: team.Id });\n if (membership && membership.Role === 1) {\n return team;\n }\n });\n deferred.resolve(teams);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user teams', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createAccessToken = function (id, description) {\n const deferred = $q.defer();\n const payload = { description };\n Users.createAccessToken({ id }, payload)\n .$promise.then((data) => {\n deferred.resolve(data);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to create user', err: err });\n });\n return deferred.promise;\n };\n\n service.getAccessTokens = function (id) {\n var deferred = $q.defer();\n\n Users.getAccessTokens({ id: id })\n .$promise.then(function success(data) {\n var userTokens = data.map(function (item) {\n return new UserTokenModel(item);\n });\n deferred.resolve(userTokens);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve user tokens', err: err });\n });\n\n return deferred.promise;\n };\n\n service.deleteAccessToken = function (id, tokenId) {\n return Users.deleteAccessToken({ id: id, tokenId: tokenId }).$promise;\n };\n\n service.initAdministrator = function (username, password) {\n return Users.initAdminUser({ Username: username, Password: password }).$promise;\n };\n\n service.administratorExists = function () {\n var deferred = $q.defer();\n\n Users.checkAdminUser({})\n .$promise.then(function success() {\n deferred.resolve(true);\n })\n .catch(function error(err) {\n if (err.status === 404) {\n deferred.resolve(false);\n }\n deferred.reject({ msg: 'Unable to verify administrator account existence', err: err });\n });\n\n return deferred.promise;\n };\n\n return service;\n}\n","import { UserViewModel } from '../models/user';\n\nexport function filterNonAdministratorUsers(users: UserViewModel[]) {\n return users.filter((user) => user.Role !== 1);\n}\n","import { WebhookViewModel } from '../../models/webhook';\n\nangular.module('portainer.app').factory('WebhookService', [\n '$q',\n 'Webhooks',\n function WebhookServiceFactory($q, Webhooks) {\n 'use strict';\n var service = {};\n\n service.webhooks = function (serviceID, endpointID) {\n var deferred = $q.defer();\n var filters = { ResourceID: serviceID, EndpointID: endpointID };\n\n Webhooks.query({ filters: filters })\n .$promise.then(function success(data) {\n var webhooks = data.map(function (item) {\n return new WebhookViewModel(item);\n });\n deferred.resolve(webhooks);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve webhooks', err: err });\n });\n\n return deferred.promise;\n };\n\n service.createWebhook = function (serviceID, endpointID, registryID, webhookType) {\n // webhookType 1. service 2. container\n return Webhooks.create({ ResourceID: serviceID, EndpointID: endpointID, WebhookType: webhookType, registryID }).$promise;\n };\n\n service.updateServiceWebhook = function (id, registryID) {\n return Webhooks.update({ id, registryID }).$promise;\n };\n\n service.deleteWebhook = function (id) {\n return Webhooks.remove({ id: id }).$promise;\n };\n\n return service;\n },\n]);\n","/**\n * Look a the following PR for how to use the wrapper\n * and documentation about it\n * https://github.com/portainer/portainer/pull/2945\n */\n\nangular.module('portainer').factory('$async', [\n '$q',\n function ($q) {\n return function (asyncFunc, ...args) {\n const def = $q.defer();\n const wrapper = function (params) {\n const deferred = $q.defer();\n asyncFunc(...params)\n .then(deferred.resolve)\n .catch(deferred.reject);\n return deferred.promise;\n };\n\n wrapper(args).then(def.resolve).catch(def.reject);\n return def.promise;\n };\n },\n]);\n","import { clear as clearSessionStorage } from './session-storage';\nangular.module('portainer.app').factory('Authentication', [\n '$async',\n '$state',\n 'Auth',\n 'OAuth',\n 'jwtHelper',\n 'LocalStorage',\n 'StateManager',\n 'EndpointProvider',\n 'UserService',\n 'ThemeManager',\n function AuthenticationFactory($async, $state, Auth, OAuth, jwtHelper, LocalStorage, StateManager, EndpointProvider, UserService, ThemeManager) {\n 'use strict';\n\n var service = {};\n var user = {};\n\n service.init = init;\n service.OAuthLogin = OAuthLogin;\n service.login = login;\n service.logout = logout;\n service.isAuthenticated = isAuthenticated;\n service.getUserDetails = getUserDetails;\n service.isAdmin = isAdmin;\n service.hasAuthorizations = hasAuthorizations;\n service.redirectIfUnauthorized = redirectIfUnauthorized;\n\n async function initAsync() {\n try {\n const jwt = LocalStorage.getJWT();\n if (jwt) {\n await setUser(jwt);\n }\n return !!jwt;\n } catch (error) {\n return false;\n }\n }\n\n async function logoutAsync(performApiLogout) {\n if (performApiLogout) {\n await Auth.logout().$promise;\n }\n\n clearSessionStorage();\n StateManager.clean();\n EndpointProvider.clean();\n LocalStorage.cleanAuthData();\n LocalStorage.storeLoginStateUUID('');\n }\n\n function logout(performApiLogout) {\n return $async(logoutAsync, performApiLogout);\n }\n\n function init() {\n return $async(initAsync);\n }\n\n async function OAuthLoginAsync(code) {\n const response = await OAuth.validate({ code: code }).$promise;\n await setUser(response.jwt);\n }\n\n function OAuthLogin(code) {\n return $async(OAuthLoginAsync, code);\n }\n\n async function loginAsync(username, password) {\n const response = await Auth.login({ username: username, password: password }).$promise;\n await setUser(response.jwt);\n }\n\n function login(username, password) {\n return $async(loginAsync, username, password);\n }\n\n function isAuthenticated() {\n var jwt = LocalStorage.getJWT();\n return jwt && !jwtHelper.isTokenExpired(jwt);\n }\n\n function getUserDetails() {\n return user;\n }\n\n async function retrievePermissions() {\n const data = await UserService.user(user.ID);\n user.endpointAuthorizations = data.EndpointAuthorizations;\n user.portainerAuthorizations = data.PortainerAuthorizations;\n\n // Initialize user theme base on Usertheme from database\n const userTheme = data.UserTheme;\n if (userTheme === 'auto' || !userTheme) {\n ThemeManager.autoTheme();\n } else {\n ThemeManager.setTheme(userTheme);\n }\n }\n\n async function setUser(jwt) {\n LocalStorage.storeJWT(jwt);\n var tokenPayload = jwtHelper.decodeToken(jwt);\n user.username = tokenPayload.username;\n user.ID = tokenPayload.id;\n user.role = tokenPayload.role;\n await retrievePermissions();\n }\n\n function isAdmin() {\n if (user.role === 1) {\n return true;\n }\n return false;\n }\n\n function hasAuthorizations(authorizations) {\n const endpointId = EndpointProvider.endpointID();\n if (isAdmin()) {\n return true;\n }\n if (!user.endpointAuthorizations || !user.endpointAuthorizations[endpointId]) {\n return false;\n }\n const userEndpointAuthorizations = user.endpointAuthorizations[endpointId];\n return authorizations.some((authorization) => userEndpointAuthorizations[authorization]);\n }\n\n function redirectIfUnauthorized(authorizations) {\n const authorized = hasAuthorizations(authorizations);\n if (!authorized) {\n $state.go('portainer.home');\n }\n }\n\n return service;\n },\n]);\n","import Chart from 'chart.js';\nimport filesize from 'filesize';\n\nangular.module('portainer.app').factory('ChartService', [\n function ChartService() {\n 'use strict';\n\n // Max. number of items to display on a chart\n var CHART_LIMIT = 600;\n\n var service = {};\n\n function defaultChartOptions(pos, tooltipCallback, scalesCallback, isStacked) {\n return {\n animation: { duration: 0 },\n responsiveAnimationDuration: 0,\n responsive: true,\n tooltips: {\n mode: 'index',\n intersect: false,\n position: pos,\n callbacks: {\n label: function (tooltipItem, data) {\n var datasetLabel = data.datasets[tooltipItem.datasetIndex].label;\n return tooltipCallback(datasetLabel, tooltipItem.yLabel);\n },\n },\n },\n layout: {\n padding: {\n left: 15,\n },\n },\n hover: { animationDuration: 0 },\n scales: {\n yAxes: [\n {\n stacked: isStacked,\n ticks: {\n beginAtZero: true,\n callback: scalesCallback,\n precision: 0,\n },\n },\n ],\n },\n };\n }\n\n function CreateChart(context, label, tooltipCallback, scalesCallback) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: label,\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('nearest', tooltipCallback, scalesCallback),\n });\n }\n\n function CreateMemoryChart(context, tooltipCallback, scalesCallback) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'Memory',\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n {\n label: 'Cache',\n data: [],\n fill: true,\n backgroundColor: 'rgba(255,180,174,0.4)',\n borderColor: 'rgba(255,180,174,0.6)',\n pointBackgroundColor: 'rgba(255,180,174,1)',\n pointBorderColor: 'rgba(255,180,174,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('nearest', tooltipCallback, scalesCallback, true),\n });\n }\n\n function CreateIOChart(context, tooltipCallback, scalesCallback) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'Read (Aggregate)',\n data: [],\n fill: true,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n {\n label: 'Write (Aggregate)',\n data: [],\n fill: true,\n backgroundColor: 'rgba(255,180,174,0.4)',\n borderColor: 'rgba(255,180,174,0.6)',\n pointBackgroundColor: 'rgba(255,180,174,1)',\n pointBorderColor: 'rgba(255,180,174,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('nearest', tooltipCallback, scalesCallback, true),\n });\n }\n\n service.CreateCPUChart = function (context) {\n return CreateChart(context, 'CPU', percentageBasedTooltipLabel, percentageBasedAxisLabel);\n };\n\n service.CreateIOChart = function (context) {\n return CreateIOChart(context, byteBasedTooltipLabel, byteBasedAxisLabel);\n };\n\n service.CreateMemoryChart = function (context) {\n return CreateMemoryChart(context, byteBasedTooltipLabel, byteBasedAxisLabel);\n };\n\n service.CreateNetworkChart = function (context) {\n return new Chart(context, {\n type: 'line',\n data: {\n labels: [],\n datasets: [\n {\n label: 'RX on eth0',\n data: [],\n fill: false,\n backgroundColor: 'rgba(151,187,205,0.4)',\n borderColor: 'rgba(151,187,205,0.6)',\n pointBackgroundColor: 'rgba(151,187,205,1)',\n pointBorderColor: 'rgba(151,187,205,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n {\n label: 'TX on eth0',\n data: [],\n fill: false,\n backgroundColor: 'rgba(255,180,174,0.4)',\n borderColor: 'rgba(255,180,174,0.6)',\n pointBackgroundColor: 'rgba(255,180,174,1)',\n pointBorderColor: 'rgba(255,180,174,1)',\n pointRadius: 2,\n borderWidth: 2,\n },\n ],\n },\n options: defaultChartOptions('average', byteBasedTooltipLabel, byteBasedAxisLabel),\n });\n };\n\n function LimitChartItems(chart, CHART_LIMIT) {\n if (chart.data.datasets[0].data.length > CHART_LIMIT) {\n chart.data.labels.pop();\n chart.data.datasets[0].data.pop();\n chart.data.datasets[1].data.pop();\n }\n }\n\n function UpdateChart(label, value, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(value);\n\n if (chart.data.datasets[0].data.length > CHART_LIMIT) {\n chart.data.labels.pop();\n chart.data.datasets[0].data.pop();\n }\n\n chart.update(0);\n }\n\n service.UpdateMemoryChart = function UpdateChart(label, memoryValue, cacheValue, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(memoryValue);\n\n if (cacheValue) {\n chart.data.datasets[1].data.push(cacheValue);\n } else {\n // cache values are not available for Windows\n chart.data.datasets.splice(1, 1);\n }\n\n LimitChartItems(chart);\n\n chart.update(0);\n };\n service.UpdateCPUChart = UpdateChart;\n service.UpdateIOChart = function (label, read, write, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(read);\n chart.data.datasets[1].data.push(write);\n LimitChartItems(chart);\n chart.update(0);\n };\n\n service.UpdateNetworkChart = function (label, rx, tx, chart) {\n chart.data.labels.push(label);\n chart.data.datasets[0].data.push(rx);\n chart.data.datasets[1].data.push(tx);\n\n LimitChartItems(chart);\n\n chart.update(0);\n };\n\n function byteBasedTooltipLabel(label, value) {\n var processedValue = 0;\n if (value > 5) {\n processedValue = filesize(value, { base: 10, round: 1 });\n } else {\n processedValue = value.toFixed(1) + 'B';\n }\n return label + ': ' + processedValue;\n }\n\n function byteBasedAxisLabel(value) {\n if (value > 5) {\n return filesize(value, { base: 10, round: 1 });\n }\n return value.toFixed(1) + 'B';\n }\n\n function percentageBasedAxisLabel(value) {\n if (value > 1) {\n return Math.round(value) + '%';\n }\n return value.toFixed(1) + '%';\n }\n\n function percentageBasedTooltipLabel(label, value) {\n var processedValue = 0;\n if (value > 1) {\n processedValue = Math.round(value);\n } else {\n processedValue = value.toFixed(1);\n }\n return label + ': ' + processedValue + '%';\n }\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport CodeMirror from 'codemirror';\nimport 'codemirror/mode/yaml/yaml.js';\nimport 'codemirror/addon/lint/lint.js';\nimport 'codemirror/addon/lint/yaml-lint.js';\nimport 'codemirror/addon/display/placeholder.js';\n\nangular.module('portainer.app').factory('CodeMirrorService', function CodeMirrorService() {\n 'use strict';\n\n var service = {};\n\n var codeMirrorGenericOptions = {\n lineNumbers: true,\n };\n\n var codeMirrorYAMLOptions = {\n mode: 'text/x-yaml',\n gutters: ['CodeMirror-lint-markers'],\n lint: true,\n extraKeys: {\n Tab: function (cm) {\n var spaces = Array(cm.getOption('indentUnit') + 1).join(' ');\n cm.replaceSelection(spaces);\n },\n },\n };\n\n service.applyCodeMirrorOnElement = function (element, yamlLint, readOnly) {\n var options = angular.copy(codeMirrorGenericOptions);\n\n if (yamlLint) {\n _.assign(options, codeMirrorYAMLOptions);\n }\n\n if (readOnly) {\n options.readOnly = true;\n }\n\n var cm = CodeMirror.fromTextArea(element, options);\n cm.setSize('100%', 500);\n return cm;\n };\n\n return service;\n});\n","import angular from 'angular';\n\nimport * as sessionStorage from './session-storage';\n\nangular.module('portainer.app').factory('DatatableService', DatatableServiceFactory);\n\nconst DATATABLE_PREFIX = 'datatable_';\nconst TEXT_FILTER_KEY_PREFIX = `${DATATABLE_PREFIX}text_filter_`;\n\n/* @ngInject */\nfunction DatatableServiceFactory(LocalStorage) {\n return {\n setDataTableSettings,\n getDataTableSettings,\n setDataTableTextFilters,\n getDataTableTextFilters,\n setDataTableFilters,\n getDataTableFilters,\n getDataTableOrder,\n setDataTableOrder,\n setDataTableExpandedItems,\n setColumnVisibilitySettings,\n getDataTableExpandedItems,\n setDataTableSelectedItems,\n getDataTableSelectedItems,\n getColumnVisibilitySettings,\n };\n\n function setDataTableSettings(key, settings) {\n LocalStorage.storeDataTableSettings(key, settings);\n }\n\n function getDataTableSettings(key) {\n return LocalStorage.getDataTableSettings(key);\n }\n\n function setDataTableTextFilters(key, filters) {\n sessionStorage.save(TEXT_FILTER_KEY_PREFIX + key, filters);\n }\n\n function getDataTableTextFilters(key) {\n return sessionStorage.get(TEXT_FILTER_KEY_PREFIX + key);\n }\n\n function setDataTableFilters(key, filters) {\n LocalStorage.storeDataTableFilters(key, filters);\n }\n\n function getDataTableFilters(key) {\n return LocalStorage.getDataTableFilters(key);\n }\n\n function getDataTableOrder(key) {\n return LocalStorage.getDataTableOrder(key);\n }\n\n function setDataTableOrder(key, orderBy, reverse) {\n var filter = {\n orderBy: orderBy,\n reverse: reverse,\n };\n LocalStorage.storeDataTableOrder(key, filter);\n }\n\n function setDataTableExpandedItems(key, expandedItems) {\n LocalStorage.storeDataTableExpandedItems(key, expandedItems);\n }\n\n function setColumnVisibilitySettings(key, columnVisibility) {\n LocalStorage.storeColumnVisibilitySettings(key, columnVisibility);\n }\n\n function getDataTableExpandedItems(key) {\n return LocalStorage.getDataTableExpandedItems(key);\n }\n\n function setDataTableSelectedItems(key, selectedItems) {\n LocalStorage.storeDataTableSelectedItems(key, selectedItems);\n }\n\n function getDataTableSelectedItems(key) {\n return LocalStorage.getDataTableSelectedItems(key);\n }\n\n function getColumnVisibilitySettings(key) {\n return LocalStorage.getColumnVisibilitySettings(key);\n }\n}\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').factory(\n 'EndpointProvider',\n /* @ngInject */\n function EndpointProviderFactory(LocalStorage, $uiRouterGlobals) {\n 'use strict';\n var service = {};\n var endpoint = {};\n\n service.initialize = function () {\n var endpointID = LocalStorage.getEndpointID();\n var endpointPublicURL = LocalStorage.getEndpointPublicURL();\n var offlineMode = LocalStorage.getOfflineMode();\n\n if (endpointID) {\n endpoint.ID = endpointID;\n }\n if (endpointPublicURL) {\n endpoint.PublicURL = endpointPublicURL;\n }\n if (offlineMode) {\n endpoint.OfflineMode = offlineMode;\n }\n };\n\n service.clean = function () {\n LocalStorage.cleanEndpointData();\n endpoint = {};\n };\n\n service.endpoint = function () {\n return endpoint;\n };\n\n service.endpointID = function () {\n if (endpoint.ID === undefined) {\n endpoint.ID = LocalStorage.getEndpointID();\n }\n if (endpoint.ID === null || endpoint.ID === undefined) {\n return service.getUrlEndpointID();\n }\n return endpoint.ID;\n };\n\n // TODO: technical debt\n // Reference issue: JIRA EE-338 (backport of JIRA CE-463)\n // Documentation (https://ui-router.github.io/ng1/docs/latest/modules/injectables.html) show the usage of either\n // * $stateParams\n // * $transition$\n // * $uiRouterGlobals\n // to retrieve the URL params\n //\n // * $stateParams: is deprecated and will cause a circular dependency injection error\n // because EndpointProvider is used by EndpointStatusInterceptor which is injected inside $httpProvider\n // >> [$injector:cdep] Circular dependency found: $uiRouter <- $stateParams <- EndpointProvider <- EndpointStatusInterceptor <- $http <- $uiRouter\n // For more details, see https://stackoverflow.com/questions/20230691/injecting-state-ui-router-into-http-interceptor-causes-circular-dependency#20230786\n //\n // * $transition$: mentionned as the replacement of $stateParams (https://ui-router.github.io/guide/ng1/migrate-to-1_0#stateparams-deprecation)\n // but is not injectable without tweaks inside a service\n //\n // * $uiRouterGlobal: per https://github.com/angular-ui/ui-router/issues/3237#issuecomment-271979688\n // seems the recommanded way to retrieve params inside a service/factory\n //\n // We need this function to fallback on URL endpoint ID when no endpoint has been selected\n service.getUrlEndpointID = () => {\n return $uiRouterGlobals.params.id;\n };\n\n service.setEndpointID = function (id) {\n endpoint.ID = id;\n LocalStorage.storeEndpointID(id);\n };\n\n service.endpointPublicURL = function () {\n if (endpoint.PublicURL === undefined) {\n endpoint.PublicURL = LocalStorage.getEndpointPublicURL();\n }\n return endpoint.PublicURL;\n };\n\n service.setEndpointPublicURL = function (publicURL) {\n endpoint.PublicURL = publicURL;\n LocalStorage.storeEndpointPublicURL(publicURL);\n };\n\n service.endpoints = function () {\n return LocalStorage.getEndpoints();\n };\n\n service.setEndpoints = function (data) {\n LocalStorage.storeEndpoints(data);\n };\n\n service.offlineMode = function () {\n return endpoint.OfflineMode;\n };\n\n service.setOfflineMode = function (isOffline) {\n endpoint.OfflineMode = isOffline;\n LocalStorage.storeOfflineMode(isOffline);\n };\n\n service.setOfflineModeFromStatus = function (status) {\n var isOffline = status !== 1;\n endpoint.OfflineMode = isOffline;\n LocalStorage.storeOfflineMode(isOffline);\n };\n\n service.currentEndpoint = function () {\n var endpointId = endpoint.ID;\n var endpoints = LocalStorage.getEndpoints();\n return _.find(endpoints, function (item) {\n return item.Id === endpointId;\n });\n };\n\n return service;\n }\n);\n","import { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\nimport { genericHandler, jsonObjectsToArrayHandler } from '../../docker/rest/response/handlers';\n\nangular.module('portainer.app').factory('FileUploadService', [\n '$q',\n 'Upload',\n 'EndpointProvider',\n function FileUploadFactory($q, Upload, EndpointProvider) {\n 'use strict';\n\n var service = {};\n\n function uploadFile(url, file) {\n return Upload.upload({ url: url, data: { file: file } });\n }\n\n service.buildImage = function (names, file, path) {\n var endpointID = EndpointProvider.endpointID();\n return Upload.http({\n url: 'api/endpoints/' + endpointID + '/docker/build',\n headers: {\n 'Content-Type': file.type,\n },\n data: file,\n params: {\n t: names,\n dockerfile: path,\n },\n ignoreLoadingBar: true,\n transformResponse: function (data) {\n return jsonObjectsToArrayHandler(data);\n },\n });\n };\n\n service.loadImages = function (file) {\n var endpointID = EndpointProvider.endpointID();\n return Upload.http({\n url: 'api/endpoints/' + endpointID + '/docker/images/load',\n headers: {\n 'Content-Type': file.type,\n },\n data: file,\n ignoreLoadingBar: true,\n transformResponse: genericHandler,\n });\n };\n\n service.createSchedule = function (payload) {\n return Upload.upload({\n url: 'api/schedules?method=file',\n data: {\n file: payload.File,\n Name: payload.Name,\n CronExpression: payload.CronExpression,\n Image: payload.Image,\n Endpoints: Upload.json(payload.Endpoints),\n RetryCount: payload.RetryCount,\n RetryInterval: payload.RetryInterval,\n },\n });\n };\n\n service.uploadBackup = function (file, password) {\n return Upload.upload({\n url: 'api/restore',\n data: {\n file,\n password,\n },\n });\n };\n\n service.createSwarmStack = function (stackName, swarmId, file, env, endpointId, webhook) {\n return Upload.upload({\n url: 'api/stacks?method=file&type=1&endpointId=' + endpointId,\n data: {\n file: file,\n Name: stackName,\n SwarmID: swarmId,\n Env: Upload.json(env),\n Webhook: webhook,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createComposeStack = function (stackName, file, env, endpointId, webhook) {\n return Upload.upload({\n url: 'api/stacks?method=file&type=2&endpointId=' + endpointId,\n data: {\n file: file,\n Name: stackName,\n Env: Upload.json(env),\n Webhook: webhook,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createEdgeStack = function createEdgeStack({ EdgeGroups, ...payload }, file) {\n return Upload.upload({\n url: 'api/edge_stacks?method=file',\n data: {\n file,\n EdgeGroups: Upload.json(EdgeGroups),\n ...payload,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createCustomTemplate = function createCustomTemplate(data) {\n return Upload.upload({\n url: 'api/custom_templates?method=file',\n data,\n ignoreLoadingBar: true,\n });\n };\n\n service.configureRegistry = function (registryId, registryManagementConfigurationModel) {\n return Upload.upload({\n url: 'api/registries/' + registryId + '/configure',\n data: registryManagementConfigurationModel,\n });\n };\n\n service.createEndpoint = function (\n name,\n creationType,\n URL,\n PublicURL,\n groupID,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n checkinInterval,\n isEdgeDevice\n ) {\n return Upload.upload({\n url: 'api/endpoints',\n data: {\n Name: name,\n EndpointCreationType: creationType,\n URL: URL,\n PublicURL: PublicURL,\n GroupID: groupID,\n TagIds: Upload.json(tagIds),\n TLS: TLS,\n TLSSkipVerify: TLSSkipVerify,\n TLSSkipClientVerify: TLSSkipClientVerify,\n TLSCACertFile: TLSCAFile,\n TLSCertFile: TLSCertFile,\n TLSKeyFile: TLSKeyFile,\n CheckinInterval: checkinInterval,\n IsEdgeDevice: isEdgeDevice,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.createAzureEndpoint = function (name, applicationId, tenantId, authenticationKey, groupId, tagIds) {\n return Upload.upload({\n url: 'api/endpoints',\n data: {\n Name: name,\n EndpointCreationType: PortainerEndpointCreationTypes.AzureEnvironment,\n GroupID: groupId,\n TagIds: Upload.json(tagIds),\n AzureApplicationID: applicationId,\n AzureTenantID: tenantId,\n AzureAuthenticationKey: authenticationKey,\n },\n ignoreLoadingBar: true,\n });\n };\n\n service.uploadLDAPTLSFiles = function (TLSCAFile, TLSCertFile, TLSKeyFile) {\n var queue = [];\n\n if (TLSCAFile) {\n queue.push(uploadFile('api/upload/tls/ca?folder=ldap', TLSCAFile));\n }\n if (TLSCertFile) {\n queue.push(uploadFile('api/upload/tls/cert?folder=ldap', TLSCertFile));\n }\n if (TLSKeyFile) {\n queue.push(uploadFile('api/upload/tls/key?folder=ldap', TLSKeyFile));\n }\n\n return $q.all(queue);\n };\n\n service.uploadTLSFilesForEndpoint = function (endpointID, TLSCAFile, TLSCertFile, TLSKeyFile) {\n var queue = [];\n\n if (TLSCAFile) {\n queue.push(uploadFile('api/upload/tls/ca?folder=' + endpointID, TLSCAFile));\n }\n if (TLSCertFile) {\n queue.push(uploadFile('api/upload/tls/cert?folder=' + endpointID, TLSCertFile));\n }\n if (TLSKeyFile) {\n queue.push(uploadFile('api/upload/tls/key?folder=' + endpointID, TLSKeyFile));\n }\n\n return $q.all(queue);\n };\n\n service.uploadOwnershipVoucher = function (voucherFile) {\n return Upload.upload({\n url: 'api/fdo/register',\n data: {\n voucher: voucherFile,\n },\n ignoreLoadingBar: true,\n });\n };\n\n return service;\n },\n]);\n","import { ResourceControlOwnership as RCO } from 'Portainer/models/resourceControl/resourceControlOwnership';\n\nangular.module('portainer.app').factory('FormValidator', [\n function FormValidatorFactory() {\n 'use strict';\n\n var validator = {};\n\n validator.validateAccessControl = function (accessControlData, isAdmin) {\n if (!accessControlData.AccessControlEnabled) {\n return '';\n }\n\n if (isAdmin && accessControlData.Ownership === RCO.RESTRICTED && accessControlData.AuthorizedUsers.length === 0 && accessControlData.AuthorizedTeams.length === 0) {\n return 'You must specify at least one team or user.';\n } else if (!isAdmin && accessControlData.Ownership === RCO.RESTRICTED && accessControlData.AuthorizedTeams.length === 0) {\n return 'You must specify at least a team.';\n }\n return '';\n };\n\n return validator;\n },\n]);\n","angular.module('portainer.app').factory('LocalStorage', [\n 'localStorageService',\n function LocalStorageFactory(localStorageService) {\n return {\n storeEndpointID: function (id) {\n localStorageService.set('ENDPOINT_ID', id);\n },\n getEndpointID: function () {\n return localStorageService.get('ENDPOINT_ID');\n },\n storeEndpointPublicURL: function (publicURL) {\n localStorageService.set('ENDPOINT_PUBLIC_URL', publicURL);\n },\n getEndpointPublicURL: function () {\n return localStorageService.get('ENDPOINT_PUBLIC_URL');\n },\n storeLoginStateUUID: function (uuid) {\n localStorageService.set('LOGIN_STATE_UUID', uuid);\n },\n getLoginStateUUID: function () {\n return localStorageService.get('LOGIN_STATE_UUID');\n },\n storeOfflineMode: function (isOffline) {\n localStorageService.set('ENDPOINT_OFFLINE_MODE', isOffline);\n },\n getOfflineMode: function () {\n return localStorageService.get('ENDPOINT_OFFLINE_MODE');\n },\n storeEndpoints: function (data) {\n localStorageService.set('ENDPOINTS_DATA', data);\n },\n getEndpoints: function () {\n return localStorageService.get('ENDPOINTS_DATA');\n },\n storeEndpointState: function (state) {\n localStorageService.set('ENDPOINT_STATE', state);\n },\n getEndpointState: function () {\n return localStorageService.get('ENDPOINT_STATE');\n },\n storeApplicationState: function (state) {\n localStorageService.set('APPLICATION_STATE', state);\n },\n getApplicationState: function () {\n return localStorageService.get('APPLICATION_STATE');\n },\n storeUIState: function (state) {\n localStorageService.set('UI_STATE', state);\n },\n getUIState: function () {\n return localStorageService.get('UI_STATE');\n },\n storeJWT: function (jwt) {\n localStorageService.set('JWT', jwt);\n },\n getJWT: function () {\n return localStorageService.get('JWT');\n },\n deleteJWT: function () {\n localStorageService.remove('JWT');\n },\n storePaginationLimit: function (key, count) {\n localStorageService.set('datatable_pagination_' + key, count);\n },\n getPaginationLimit: function (key) {\n return localStorageService.get('datatable_pagination_' + key);\n },\n getDataTableOrder: function (key) {\n return localStorageService.get('datatable_order_' + key);\n },\n storeDataTableOrder: function (key, data) {\n localStorageService.set('datatable_order_' + key, data);\n },\n getDataTableTextFilters: function (key) {\n return localStorageService.get('datatable_text_filter_' + key);\n },\n storeDataTableTextFilters: function (key, data) {\n localStorageService.set('datatable_text_filter_' + key, data);\n },\n getDataTableFilters: function (key) {\n return localStorageService.get('datatable_filters_' + key);\n },\n storeDataTableFilters: function (key, data) {\n localStorageService.set('datatable_filters_' + key, data);\n },\n getDataTableSettings: function (key) {\n return localStorageService.get('datatable_settings_' + key);\n },\n storeDataTableSettings: function (key, data) {\n localStorageService.set('datatable_settings_' + key, data);\n },\n getDataTableExpandedItems: function (key) {\n return localStorageService.get('datatable_expandeditems_' + key);\n },\n storeDataTableExpandedItems: function (key, data) {\n localStorageService.set('datatable_expandeditems_' + key, data);\n },\n getDataTableSelectedItems: function (key) {\n return localStorageService.get('datatable_selecteditems_' + key);\n },\n storeDataTableSelectedItems: function (key, data) {\n localStorageService.set('datatable_selecteditems_' + key, data);\n },\n storeSwarmVisualizerSettings: function (key, data) {\n localStorageService.set('swarmvisualizer_' + key, data);\n },\n getSwarmVisualizerSettings: function (key) {\n return localStorageService.get('swarmvisualizer_' + key);\n },\n storeColumnVisibilitySettings: function (key, data) {\n localStorageService.set('col_visibility_' + key, data);\n },\n getColumnVisibilitySettings: function (key) {\n return localStorageService.get('col_visibility_' + key);\n },\n storeJobImage: function (data) {\n localStorageService.set('job_image', data);\n },\n getJobImage: function () {\n return localStorageService.get('job_image');\n },\n storeActiveTab: function (key, index) {\n return localStorageService.set('active_tab_' + key, index);\n },\n getActiveTab: function (key) {\n const activeTab = localStorageService.get('active_tab_' + key);\n return activeTab === null ? 0 : activeTab;\n },\n storeToolbarToggle(value) {\n localStorageService.set('toolbar_toggle', value);\n },\n getToolbarToggle() {\n return localStorageService.get('toolbar_toggle');\n },\n storeLogoutReason: (reason) => localStorageService.set('logout_reason', reason),\n getLogoutReason: () => localStorageService.get('logout_reason'),\n cleanLogoutReason: () => localStorageService.remove('logout_reason'),\n clean: function () {\n localStorageService.clearAll();\n },\n cleanAuthData() {\n localStorageService.remove('JWT', 'APPLICATION_STATE', 'LOGIN_STATE_UUID');\n },\n cleanEndpointData() {\n localStorageService.remove('ENDPOINT_ID', 'ENDPOINT_PUBLIC_URL', 'ENDPOINT_OFFLINE_MODE', 'ENDPOINTS_DATA', 'ENDPOINT_STATE');\n },\n storeKubernetesSummaryToggle(value) {\n localStorageService.set('kubernetes_summary_expanded', value);\n },\n getKubernetesSummaryToggle() {\n return localStorageService.get('kubernetes_summary_expanded');\n },\n };\n },\n]);\n","import angular from 'angular';\n\nangular.module('portainer.app').factory('NameValidator', NameValidatorFactory);\n/* @ngInject */\nfunction NameValidatorFactory(EndpointService, Notifications) {\n return {\n validateEnvironmentName,\n };\n\n async function validateEnvironmentName(environmentName) {\n try {\n const endpoints = await EndpointService.endpoints();\n const endpointArray = endpoints.value;\n const nameDuplicated = endpointArray.filter((item) => item.Name === environmentName);\n return nameDuplicated.length > 0;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment details');\n }\n }\n}\n","angular.module('portainer.app').factory('PaginationService', [\n 'LocalStorage',\n 'PAGINATION_MAX_ITEMS',\n function PaginationServiceFactory(LocalStorage, PAGINATION_MAX_ITEMS) {\n 'use strict';\n\n var service = {};\n\n service.getPaginationLimit = function (key) {\n var paginationLimit = PAGINATION_MAX_ITEMS;\n\n var storedLimit = LocalStorage.getPaginationLimit(key);\n if (storedLimit !== null) {\n paginationLimit = storedLimit;\n }\n return '' + paginationLimit;\n };\n\n service.setPaginationLimit = function (key, limit) {\n LocalStorage.storePaginationLimit(key, limit);\n };\n\n return service;\n },\n]);\n","import _ from 'lodash-es';\nimport genericAsyncGenerator from '@/portainer/registry-management/services/genericAsyncGenerator';\n\nangular.module('portainer.app').factory('RegistryEcrService', RegistryEcrServiceFactory);\n\n/* @ngInject */\nfunction RegistryEcrServiceFactory($q, RegistryManifestsJquery, Ecr) {\n 'use strict';\n const service = {\n retagWithProgress,\n batchDeleteTags,\n deleteRepository,\n };\n\n function batchDeleteTags(params, data) {\n return Ecr.batchDeleteTags(params, data).$promise;\n }\n\n function deleteRepository(registry, repository) {\n return Ecr.deleteRepository({ id: registry.Id, repositoryName: repository.Name }).$promise;\n }\n\n /**\n * RETAG\n */\n function _addTag(registry, repository, tag, manifest) {\n const id = registry.Id;\n delete manifest.digest;\n return RegistryManifestsJquery.put(\n {\n id: id,\n repository: repository,\n tag: tag,\n },\n manifest\n );\n }\n\n function _addTagFromGenerator(registry, repository, tag) {\n return _addTag(registry, repository, tag.NewName, tag.ManifestV2);\n }\n\n async function* _addTagsWithProgress(registry, repository, modifiedTags) {\n for await (const partialResult of genericAsyncGenerator($q, modifiedTags, _addTagFromGenerator, [registry, repository])) {\n yield partialResult;\n }\n }\n\n async function* retagWithProgress(registry, repository, modifiedTags, modifiedDigests, impactedTags) {\n yield* _addTagsWithProgress(registry, repository, modifiedTags);\n\n const oldTagNames = modifiedTags.map((tag) => tag.Name);\n const newTagNames = modifiedTags.map((tag) => tag.NewName);\n const toDelTags = _.without(oldTagNames, ...newTagNames);\n\n if (toDelTags.length) {\n await batchDeleteTags({ id: registry.Id, repositoryName: repository }, { Tags: toDelTags });\n }\n\n yield modifiedDigests.length + impactedTags.length;\n }\n\n return service;\n}\n","import _ from 'lodash-es';\nimport { RegistryGitlabProject } from '../models/gitlabRegistry';\nimport { RegistryRepositoryGitlabViewModel } from '../models/registryRepository';\n\nangular.module('portainer.app').factory('RegistryGitlabService', [\n '$async',\n 'Gitlab',\n function RegistryGitlabServiceFactory($async, Gitlab) {\n 'use strict';\n var service = {};\n\n /**\n * PROJECTS\n */\n\n async function _getProjectsPage(env, params, projects) {\n const response = await Gitlab(env).projects(params).$promise;\n projects = _.concat(projects, response.data);\n if (response.next) {\n params.page = response.next;\n projects = await _getProjectsPage(env, params, projects);\n }\n return projects;\n }\n\n async function projectsAsync(url, token) {\n try {\n const data = await _getProjectsPage({ url: url, token: token }, { page: 1 }, []);\n return _.map(data, (project) => new RegistryGitlabProject(project));\n } catch (error) {\n throw { msg: 'Unable to retrieve projects', err: error };\n }\n }\n\n /**\n * END PROJECTS\n */\n\n /**\n * REPOSITORIES\n */\n\n async function _getRepositoriesPage(params, repositories) {\n const response = await Gitlab().repositories(params).$promise;\n repositories = _.concat(repositories, response.data);\n if (response.next) {\n params.page = response.next;\n repositories = await _getRepositoriesPage(params, repositories);\n }\n return repositories;\n }\n\n async function repositoriesAsync(registry) {\n try {\n const params = {\n id: registry.Id,\n projectId: registry.Gitlab.ProjectId,\n page: 1,\n };\n const data = await _getRepositoriesPage(params, []);\n return _.filter(\n _.map(data, (r) => new RegistryRepositoryGitlabViewModel(r)),\n (r) => r.TagsCount > 0\n );\n } catch (error) {\n throw { msg: 'Unable to retrieve repositories', err: error };\n }\n }\n\n /**\n * END REPOSITORIES\n */\n\n /**\n * SERVICE FUNCTIONS DECLARATION\n */\n\n function projects(url, token) {\n return $async(projectsAsync, url, token);\n }\n\n function repositories(registry) {\n return $async(repositoriesAsync, registry);\n }\n\n service.projects = projects;\n service.repositories = repositories;\n return service;\n },\n]);\n","import _ from 'lodash';\n\nangular.module('portainer.app').factory('RegistryModalService', ModalServiceFactory);\n\nfunction ModalServiceFactory($q, ModalService, RegistryService) {\n const service = {};\n\n function registries2Options(registries) {\n return registries.map((r) => ({\n text: r.Name,\n value: String(r.Id),\n }));\n }\n\n service.registryModal = async function (repository, registries) {\n const deferred = $q.defer();\n\n const options = registries2Options(registries);\n const registryModel = RegistryService.retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries);\n const defaultValue = String(_.get(registryModel, 'Registry.Id', '0'));\n\n ModalService.selectRegistry({\n title: 'Which registry do you want to use?',\n inputType: 'select',\n inputOptions: options,\n value: defaultValue,\n callback: (registryId) => {\n if (registryId) {\n const registryModel = RegistryService.retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries, registryId);\n deferred.resolve(registryModel);\n } else {\n deferred.resolve(null);\n }\n },\n });\n\n return deferred.promise;\n };\n\n return service;\n}\n","/**\n * clears the sessionStorage\n */\nexport function clear() {\n sessionStorage.clear();\n}\n\n/**\n * stores `value` as string in `sessionStorage[key]`\n *\n * @param {string} key the key to store value at\n * @param {any} value the value to store - will be stringified using JSON.stringify\n *\n */\nexport function save(key, value) {\n sessionStorage.setItem(key, JSON.stringify(value));\n}\n\n/**\n * get parses the value stored in sessionStorage[key], if it's not available returns undefined\n *\n * @param {string} key\n */\nexport function get(key) {\n try {\n const value = sessionStorage.getItem(key);\n return JSON.parse(value);\n } catch (e) {\n return;\n }\n}\n","import moment from 'moment';\n\nangular.module('portainer.app').factory('StateManager', StateManagerFactory);\n\n/* @ngInject */\nfunction StateManagerFactory(\n $async,\n $q,\n SystemService,\n InfoHelper,\n LocalStorage,\n SettingsService,\n StatusService,\n APPLICATION_CACHE_VALIDITY,\n AgentPingService,\n $analytics,\n EndpointProvider\n) {\n var manager = {};\n\n var state = {\n loading: true,\n application: {},\n endpoint: {},\n UI: {\n dismissedInfoPanels: {},\n dismissedInfoHash: '',\n },\n };\n\n manager.setVersionInfo = function (versionInfo) {\n state.application.versionStatus = versionInfo;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.dismissInformationPanel = function (id) {\n state.UI.dismissedInfoPanels[id] = true;\n LocalStorage.storeUIState(state.UI);\n };\n\n manager.dismissImportantInformation = function (hash) {\n state.UI.dismissedInfoHash = hash;\n LocalStorage.storeUIState(state.UI);\n };\n\n manager.getState = function () {\n return state;\n };\n\n manager.clean = function () {\n state.endpoint = {};\n state.application = {};\n };\n\n manager.cleanEndpoint = function () {\n state.endpoint = {};\n EndpointProvider.clean();\n };\n\n manager.updateLogo = function (logoURL) {\n state.application.logo = logoURL;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateTheme = function (theme) {\n state.application.theme = theme;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateSnapshotInterval = function (interval) {\n state.application.snapshotInterval = interval;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateEnableEdgeComputeFeatures = function updateEnableEdgeComputeFeatures(enableEdgeComputeFeatures) {\n state.application.enableEdgeComputeFeatures = enableEdgeComputeFeatures;\n LocalStorage.storeApplicationState(state.application);\n };\n\n manager.updateEnableTelemetry = function updateEnableTelemetry(enableTelemetry) {\n state.application.enableTelemetry = enableTelemetry;\n $analytics.setOptOut(!enableTelemetry);\n LocalStorage.storeApplicationState(state.application);\n };\n\n function assignStateFromStatusAndSettings(status, settings) {\n state.application.version = status.Version;\n state.application.edition = status.Edition;\n state.application.instanceId = status.InstanceID;\n\n state.application.enableTelemetry = settings.EnableTelemetry;\n state.application.logo = settings.LogoURL;\n state.application.theme = settings.Theme;\n state.application.snapshotInterval = settings.SnapshotInterval;\n state.application.enableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;\n state.application.validity = moment().unix();\n }\n\n function loadApplicationState() {\n var deferred = $q.defer();\n\n $q.all({\n settings: SettingsService.publicSettings(),\n status: StatusService.status(),\n })\n .then(function success(data) {\n var status = data.status;\n var settings = data.settings;\n assignStateFromStatusAndSettings(status, settings);\n LocalStorage.storeApplicationState(state.application);\n deferred.resolve(state);\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to retrieve server settings and status', err: err });\n });\n\n return deferred.promise;\n }\n\n manager.initialize = initialize;\n async function initialize() {\n return $async(async () => {\n const UIState = LocalStorage.getUIState();\n if (UIState) {\n state.UI = UIState;\n }\n\n const endpointState = LocalStorage.getEndpointState();\n if (endpointState) {\n state.endpoint = endpointState;\n }\n\n const applicationState = LocalStorage.getApplicationState();\n if (isAppStateValid(applicationState)) {\n state.application = applicationState;\n } else {\n await loadApplicationState();\n }\n\n state.loading = false;\n $analytics.setPortainerStatus(state.application.instanceId, state.application.version);\n $analytics.setOptOut(!state.application.enableTelemetry);\n return state;\n });\n }\n\n function isAppStateValid(appState) {\n if (!appState || !appState.validity) {\n return false;\n }\n const now = moment().unix();\n const cacheValidity = now - appState.validity;\n return cacheValidity < APPLICATION_CACHE_VALIDITY;\n }\n\n manager.updateEndpointState = function (endpoint) {\n var deferred = $q.defer();\n\n if (endpoint.Type === 3) {\n state.endpoint.name = endpoint.Name;\n state.endpoint.mode = { provider: 'AZURE' };\n LocalStorage.storeEndpointState(state.endpoint);\n deferred.resolve();\n return deferred.promise;\n } else if (endpoint.Type === 5 || endpoint.Type === 6 || endpoint.Type === 7) {\n state.endpoint.name = endpoint.Name;\n state.endpoint.mode = { provider: 'KUBERNETES' };\n LocalStorage.storeEndpointState(state.endpoint);\n deferred.resolve();\n return deferred.promise;\n }\n\n const reload = endpoint.Status === 1 || !endpoint.Snaphosts || !endpoint.Snaphosts.length || !endpoint.Snapshots[0].SnapshotRaw;\n\n $q.all({\n version: reload ? SystemService.version() : $q.when(endpoint.Snapshots[0].SnapshotRaw.Version),\n info: reload ? SystemService.info() : $q.when(endpoint.Snapshots[0].SnapshotRaw.Info),\n })\n .then(function success(data) {\n var endpointMode = InfoHelper.determineEndpointMode(data.info, endpoint.Type);\n var endpointAPIVersion = parseFloat(data.version.ApiVersion);\n state.endpoint.mode = endpointMode;\n state.endpoint.name = endpoint.Name;\n state.endpoint.type = endpoint.Type;\n state.endpoint.apiVersion = endpointAPIVersion;\n\n if (endpointMode.agentProxy && endpoint.Status === 1) {\n return AgentPingService.ping().then(function onPingSuccess(data) {\n state.endpoint.agentApiVersion = data.version;\n });\n }\n })\n .then(function () {\n LocalStorage.storeEndpointState(state.endpoint);\n deferred.resolve();\n })\n .catch(function error(err) {\n deferred.reject({ msg: 'Unable to connect to the Docker environment', err: err });\n })\n .finally(function final() {\n state.loading = false;\n });\n\n return deferred.promise;\n };\n\n manager.getAgentApiVersion = function getAgentApiVersion() {\n return state.endpoint.agentApiVersion;\n };\n\n return manager;\n}\n","angular.module('portainer').service('TerminalWindow', function ($window) {\n const terminalHeight = 495;\n this.terminalopen = function () {\n const contentWrapperHeight = $window.innerHeight;\n const newContentWrapperHeight = contentWrapperHeight - terminalHeight;\n document.getElementById('content-wrapper').style.height = newContentWrapperHeight + 'px';\n document.getElementById('content-wrapper').style.overflowY = 'auto';\n document.getElementById('sidebar-wrapper').style.height = newContentWrapperHeight + 'px';\n };\n this.terminalclose = function () {\n const wrapperCSS = {\n height: '100%',\n overflowY: 'initial',\n };\n document.getElementById('content-wrapper').style.height = wrapperCSS.height;\n document.getElementById('content-wrapper').style.overflowY = wrapperCSS.overflowY;\n document.getElementById('sidebar-wrapper').style.height = wrapperCSS.height;\n };\n this.terminalresize = function () {\n const contentWrapperHeight = $window.innerHeight;\n const newContentWrapperHeight = contentWrapperHeight - terminalHeight;\n document.getElementById('content-wrapper').style.height = newContentWrapperHeight + 'px';\n document.getElementById('content-wrapper').style.overflowY = 'auto';\n document.getElementById('sidebar-wrapper').style.height = newContentWrapperHeight + 'px';\n };\n});\n","angular.module('portainer.app').service('ThemeManager', ThemeManager);\n\n/* @ngInject */\n\nexport function ThemeManager(StateManager) {\n return {\n setTheme,\n autoTheme,\n defaultTheme,\n };\n\n function setTheme(theme) {\n if (!theme) {\n document.documentElement.removeAttribute('theme');\n } else {\n document.documentElement.setAttribute('theme', theme);\n StateManager.updateTheme(theme);\n }\n }\n\n function autoTheme() {\n const systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : '';\n this.setTheme(systemTheme);\n }\n\n function defaultTheme() {\n document.documentElement.removeAttribute('theme');\n }\n}\n","export const authenticationMethodTypesMap = {\n INTERNAL: 1,\n LDAP: 2,\n OAUTH: 3,\n};\n\nexport const authenticationMethodTypesLabels = {\n [authenticationMethodTypesMap.INTERNAL]: 'Internal',\n [authenticationMethodTypesMap.LDAP]: 'LDAP',\n [authenticationMethodTypesMap.OAUTH]: 'OAuth',\n};\n","export const authenticationActivityTypesMap = {\n AuthSuccess: 1,\n AuthFailure: 2,\n Logout: 3,\n};\n\nexport const authenticationActivityTypesLabels = {\n [authenticationActivityTypesMap.AuthSuccess]: 'Authentication success',\n [authenticationActivityTypesMap.AuthFailure]: 'Authentication failure',\n [authenticationActivityTypesMap.Logout]: 'Logout',\n};\n","const autoNgTemplateLoaderTemplate1 = require('./auto-user-provision-toggle.html');\n\nexport const autoUserProvisionToggle = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n transclude: {\n description: 'fieldDescription',\n },\n bindings: {\n ngModel: '=',\n },\n};\n","import angular from 'angular';\n\nimport ldapModule from './ldap';\n\nimport { autoUserProvisionToggle } from './auto-user-provision-toggle';\nimport { saveAuthSettingsButton } from './save-auth-settings-button';\nimport { internalAuth } from './internal-auth';\n\nexport default angular\n .module('portainer.settings.authentication', [ldapModule])\n .component('internalAuth', internalAuth)\n .component('saveAuthSettingsButton', saveAuthSettingsButton)\n .component('autoUserProvisionToggle', autoUserProvisionToggle).name;\n","const autoNgTemplateLoaderTemplate1 = require('./internal-auth.html');\n\nexport const internalAuth = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n onSaveSettings: '<',\n saveButtonState: '<',\n },\n};\n","import _ from 'lodash-es';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nconst DEFAULT_GROUP_FILTER = '(objectClass=group)';\nimport { isLimitedToBE } from '@/portainer/feature-flags/feature-flags.service';\n\nexport default class AdSettingsController {\n /* @ngInject */\n constructor(LDAPService) {\n this.LDAPService = LDAPService;\n\n this.domainSuffix = '';\n this.limitedFeatureId = FeatureId.HIDE_INTERNAL_AUTH;\n this.onTlscaCertChange = this.onTlscaCertChange.bind(this);\n this.searchUsers = this.searchUsers.bind(this);\n this.searchGroups = this.searchGroups.bind(this);\n this.searchAdminGroups = this.searchAdminGroups.bind(this);\n this.parseDomainName = this.parseDomainName.bind(this);\n this.onAccountChange = this.onAccountChange.bind(this);\n }\n\n parseDomainName(account) {\n this.domainName = '';\n\n if (!account || !account.includes('@')) {\n return;\n }\n\n const [, domainName] = account.split('@');\n if (!domainName) {\n return;\n }\n\n const parts = _.compact(domainName.split('.'));\n this.domainSuffix = parts.map((part) => `dc=${part}`).join(',');\n }\n\n onAccountChange(account) {\n this.parseDomainName(account);\n }\n\n searchUsers() {\n return this.LDAPService.users(this.settings);\n }\n\n searchGroups() {\n return this.LDAPService.groups(this.settings);\n }\n\n searchAdminGroups() {\n if (this.settings.AdminAutoPopulate) {\n this.settings.AdminGroups = this.selectedAdminGroups.map((team) => team.name);\n }\n\n const settings = {\n ...this.settings,\n AdminGroupSearchSettings: this.settings.AdminGroupSearchSettings.map((search) => ({ ...search, GroupFilter: search.GroupFilter || DEFAULT_GROUP_FILTER })),\n };\n\n return this.LDAPService.adminGroups(settings);\n }\n\n onTlscaCertChange(file) {\n this.tlscaCert = file;\n }\n\n addLDAPUrl() {\n this.settings.URLs.push('');\n }\n\n removeLDAPUrl(index) {\n this.settings.URLs.splice(index, 1);\n }\n\n isSaveSettingButtonDisabled() {\n return isLimitedToBE(this.limitedFeatureId) || !this.isLdapFormValid();\n }\n\n $onInit() {\n this.tlscaCert = this.settings.TLSCACert;\n this.parseDomainName(this.settings.ReaderDN);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ad-settings.html');\n\nimport controller from './ad-settings.controller';\n\nexport const adSettings = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n selectedAdminGroups: '=',\n tlscaCert: '=',\n state: '=',\n connectivityCheck: '<',\n onSaveSettings: '<',\n saveButtonState: '<',\n isLdapFormValid: '&?',\n },\n};\n","import angular from 'angular';\n\nimport { adSettings } from './ad-settings';\nimport { ldapSettings } from './ldap-settings';\nimport { ldapSettingsCustom } from './ldap-settings-custom';\nimport { ldapSettingsOpenLdap } from './ldap-settings-openldap';\n\nimport { ldapConnectivityCheck } from './ldap-connectivity-check';\nimport { ldapGroupsDatatable } from './ldap-groups-datatable';\nimport { ldapGroupSearch } from './ldap-group-search';\nimport { ldapGroupSearchItem } from './ldap-group-search-item';\nimport { ldapUserSearch } from './ldap-user-search';\nimport { ldapUserSearchItem } from './ldap-user-search-item';\nimport { ldapSettingsDnBuilder } from './ldap-settings-dn-builder';\nimport { ldapSettingsGroupDnBuilder } from './ldap-settings-group-dn-builder';\nimport { ldapCustomAdminGroup } from './ldap-custom-admin-group';\nimport { ldapCustomGroupSearch } from './ldap-custom-group-search';\nimport { ldapSettingsSecurity } from './ldap-settings-security';\nimport { ldapSettingsTestLogin } from './ldap-settings-test-login';\nimport { ldapCustomUserSearch } from './ldap-custom-user-search';\nimport { ldapUsersDatatable } from './ldap-users-datatable';\nimport { LDAPService } from './ldap.service';\nimport { LDAP } from './ldap.rest';\n\nexport default angular\n .module('portainer.settings.authentication.ldap', [])\n .service('LDAPService', LDAPService)\n .service('LDAP', LDAP)\n .component('ldapConnectivityCheck', ldapConnectivityCheck)\n .component('ldapGroupsDatatable', ldapGroupsDatatable)\n .component('ldapSettings', ldapSettings)\n .component('adSettings', adSettings)\n .component('ldapGroupSearch', ldapGroupSearch)\n .component('ldapGroupSearchItem', ldapGroupSearchItem)\n .component('ldapUserSearch', ldapUserSearch)\n .component('ldapUserSearchItem', ldapUserSearchItem)\n .component('ldapSettingsCustom', ldapSettingsCustom)\n .component('ldapSettingsDnBuilder', ldapSettingsDnBuilder)\n .component('ldapSettingsGroupDnBuilder', ldapSettingsGroupDnBuilder)\n .component('ldapCustomGroupSearch', ldapCustomGroupSearch)\n .component('ldapSettingsOpenLdap', ldapSettingsOpenLdap)\n .component('ldapSettingsSecurity', ldapSettingsSecurity)\n .component('ldapSettingsTestLogin', ldapSettingsTestLogin)\n .component('ldapCustomUserSearch', ldapCustomUserSearch)\n .component('ldapCustomAdminGroup', ldapCustomAdminGroup)\n .component('ldapUsersDatatable', ldapUsersDatatable).name;\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-connectivity-check.html');\n\nexport const ldapConnectivityCheck = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n settings: '<',\n state: '<',\n connectivityCheck: '<',\n limitedFeatureId: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-custom-admin-group.html');\n\nimport controller from './ldap-custom-admin-group.controller';\n\nexport const ldapCustomAdminGroup = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n selectedAdminGroups: '=',\n defaultAdminGroupSearchFilter: '<',\n onSearchClick: '<',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapCustomAdminGroupController {\n /* @ngInject */\n constructor($async, Notifications, LDAPService) {\n Object.assign(this, { $async, Notifications, LDAPService });\n\n this.groups = null;\n this.groupstest = null;\n this.enableAssignAdminGroup = false;\n\n this.onRemoveClick = this.onRemoveClick.bind(this);\n this.onAddClick = this.onAddClick.bind(this);\n this.search = this.search.bind(this);\n }\n\n onAddClick() {\n this.settings.AdminGroupSearchSettings.push({ GroupBaseDN: '', GroupAttribute: '', GroupFilter: '' });\n }\n\n onRemoveClick(index) {\n this.settings.AdminGroupSearchSettings.splice(index, 1);\n }\n\n search() {\n return this.$async(async () => {\n try {\n this.groups = null;\n this.groups = await this.onSearchClick();\n this.enableAssignAdminGroup = this.groups && this.groups.length > 0;\n } catch (error) {\n this.Notifications.error('Failure', error, 'Failed to search groups');\n }\n });\n }\n\n async $onInit() {\n if (this.settings.AdminAutoPopulate && this.settings.AdminGroups && this.settings.AdminGroups.length > 0) {\n const settings = {\n ...this.settings,\n AdminGroupSearchSettings: this.settings.AdminGroupSearchSettings.map((search) => ({ ...search, GroupFilter: search.GroupFilter || this.defaultAdminGroupSearchFilter })),\n };\n\n this.groups = await this.LDAPService.adminGroups(settings);\n }\n\n if (this.groups && this.groups.length > 0) {\n this.enableAssignAdminGroup = true;\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-custom-group-search.html');\n\nimport controller from './ldap-custom-group-search.controller';\n\nexport const ldapCustomGroupSearch = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n onSearchClick: '<',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapCustomGroupSearchController {\n /* @ngInject */\n constructor($async, Notifications) {\n Object.assign(this, { $async, Notifications });\n\n this.groups = null;\n this.showTable = false;\n\n this.onRemoveClick = this.onRemoveClick.bind(this);\n this.onAddClick = this.onAddClick.bind(this);\n this.search = this.search.bind(this);\n }\n\n onAddClick() {\n this.settings.push({ GroupBaseDN: '', GroupAttribute: '', GroupFilter: '' });\n }\n\n onRemoveClick(index) {\n this.settings.splice(index, 1);\n }\n\n search() {\n return this.$async(async () => {\n try {\n this.groups = null;\n this.showTable = true;\n this.groups = await this.onSearchClick();\n } catch (error) {\n this.showTable = false;\n this.Notifications.error('Failure', error, 'Failed to search users');\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-custom-user-search.html');\n\nimport controller from './ldap-custom-user-search.controller';\n\nexport const ldapCustomUserSearch = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n onSearchClick: '<',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapCustomUserSearchController {\n /* @ngInject */\n constructor($async, Notifications) {\n Object.assign(this, { $async, Notifications });\n\n this.users = null;\n\n this.onRemoveClick = this.onRemoveClick.bind(this);\n this.onAddClick = this.onAddClick.bind(this);\n this.search = this.search.bind(this);\n }\n\n onAddClick() {\n this.settings.push({ BaseDN: '', UserNameAttribute: '', Filter: '' });\n }\n\n onRemoveClick(index) {\n this.settings.splice(index, 1);\n }\n\n search() {\n return this.$async(async () => {\n try {\n this.users = null;\n this.showTable = true;\n this.users = await this.onSearchClick();\n } catch (error) {\n this.showTable = false;\n this.Notifications.error('Failure', error, 'Failed to search users');\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-group-search-item.html');\n\nimport controller from './ldap-group-search-item.controller';\n\nexport const ldapGroupSearchItem = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n config: '=',\n index: '<',\n domainSuffix: '@',\n baseFilter: '@',\n\n onRemoveClick: '<',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapSettingsAdGroupSearchItemController {\n /* @ngInject */\n constructor(Notifications) {\n Object.assign(this, { Notifications });\n\n this.groups = [];\n\n this.onChangeBaseDN = this.onChangeBaseDN.bind(this);\n }\n\n onChangeBaseDN(baseDN) {\n this.config.GroupBaseDN = baseDN;\n }\n\n addGroup() {\n this.groups.push({ type: 'ou', value: '' });\n }\n\n removeGroup($index) {\n this.groups.splice($index, 1);\n this.onGroupsChange();\n }\n\n onGroupsChange() {\n const groupsFilter = this.groups.map(({ type, value }) => `(${type}=${value})`).join('');\n this.onFilterChange(groupsFilter ? `(&${this.baseFilter}(|${groupsFilter}))` : `${this.baseFilter}`);\n }\n\n onFilterChange(filter) {\n this.config.GroupFilter = filter;\n }\n\n parseGroupFilter() {\n const match = this.config.GroupFilter.match(/^\\(&\\(objectClass=(\\w+)\\)\\(\\|((\\(\\w+=.+\\))+)\\)\\)$/);\n if (!match) {\n return;\n }\n\n const [, , groupFilter = ''] = match;\n\n this.groups = groupFilter\n .slice(1, -1)\n .split(')(')\n .map((str) => str.split('='))\n .map(([type, value]) => ({ type, value }));\n }\n\n $onInit() {\n this.parseGroupFilter();\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-group-search.html');\n\nimport controller from './ldap-group-search.controller';\n\nexport const ldapGroupSearch = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n domainSuffix: '@',\n baseFilter: '@',\n\n onSearchClick: '<',\n limitedFeatureId: '<',\n },\n};\n","import _ from 'lodash-es';\n\nexport default class LdapGroupSearchController {\n /* @ngInject */\n constructor($async, Notifications) {\n Object.assign(this, { $async, Notifications });\n\n this.groups = null;\n\n this.onRemoveClick = this.onRemoveClick.bind(this);\n this.onAddClick = this.onAddClick.bind(this);\n this.search = this.search.bind(this);\n }\n\n onAddClick() {\n const lastSetting = _.last(this.settings);\n this.settings.push({ GroupBaseDN: this.domainSuffix, GroupAttribute: lastSetting.GroupAttribute, GroupFilter: this.baseFilter });\n }\n\n onRemoveClick(index) {\n this.settings.splice(index, 1);\n }\n\n search() {\n return this.$async(async () => {\n try {\n this.groups = null;\n this.showTable = true;\n this.groups = await this.onSearchClick();\n } catch (error) {\n this.showTable = false;\n this.Notifications.error('Failure', error, 'Failed to search users');\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-groups-datatable.html');\n\nexport const ldapGroupsDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings-custom.html');\n\nimport controller from './ldap-settings-custom.controller';\n\nexport const ldapSettingsCustom = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n tlscaCert: '=',\n state: '=',\n selectedAdminGroups: '=',\n onTlscaCertChange: '<',\n connectivityCheck: '<',\n onSearchUsersClick: '<',\n onSearchGroupsClick: '<',\n onSearchAdminGroupsClick: '<',\n onSaveSettings: '<',\n saveButtonState: '<',\n saveButtonDisabled: '<',\n },\n};\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nexport default class LdapSettingsCustomController {\n constructor() {\n this.limitedFeatureId = FeatureId.EXTERNAL_AUTH_LDAP;\n }\n\n addLDAPUrl() {\n this.settings.URLs.push('');\n }\n\n removeLDAPUrl(index) {\n this.settings.URLs.splice(index, 1);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings-dn-builder.html');\n\nimport controller from './ldap-settings-dn-builder.controller';\n\nexport const ldapSettingsDnBuilder = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n // ngModel: string (dc=,cn=,)\n ngModel: '<',\n // onChange(string) => void\n onChange: '<',\n // suffix: string (dc=,dc=,)\n suffix: '@',\n label: '@',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapSettingsBaseDnBuilderController {\n /* @ngInject */\n constructor() {\n this.entries = [];\n }\n\n addEntry() {\n this.entries.push({ type: 'ou', value: '' });\n }\n\n removeEntry($index) {\n this.entries.splice($index, 1);\n this.onEntriesChange();\n }\n\n moveUp($index) {\n if ($index <= 0) {\n return;\n }\n arrayMove(this.entries, $index, $index - 1);\n this.onEntriesChange();\n }\n\n moveDown($index) {\n if ($index >= this.entries.length - 1) {\n return;\n }\n arrayMove(this.entries, $index, $index + 1);\n this.onEntriesChange();\n }\n\n onEntriesChange() {\n const dn = this.entries\n .filter(({ value }) => value)\n .map(({ type, value }) => `${type}=${value}`)\n .concat(this.suffix)\n .filter((value) => value)\n .join(',');\n\n this.onChange(dn);\n }\n\n getOUValues(dn, domainSuffix = '') {\n const regex = /(\\w+)=(\\w*),?/;\n let ouValues = [];\n let left = dn;\n let match = left.match(regex);\n while (match && left !== domainSuffix) {\n const [, type, value] = match;\n ouValues.push({ type, value });\n left = left.replace(regex, '');\n match = left.match(/(\\w+)=(\\w+),?/);\n }\n return ouValues;\n }\n\n parseBaseDN() {\n this.entries = this.getOUValues(this.ngModel, this.suffix);\n }\n\n $onChanges({ suffix, ngModel }) {\n if ((!suffix && !ngModel) || (suffix && suffix.isFirstChange())) {\n return;\n }\n this.onEntriesChange();\n }\n\n $onInit() {\n this.parseBaseDN();\n }\n}\n\nfunction arrayMove(array, fromIndex, toIndex) {\n if (!checkValidIndex(array, fromIndex) || !checkValidIndex(array, toIndex)) {\n throw new Error('index is out of bounds');\n }\n const [item] = array.splice(fromIndex, 1);\n\n array.splice(toIndex, 0, item);\n\n function checkValidIndex(array, index) {\n return index >= 0 && index <= array.length;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings-group-dn-builder.html');\n\nimport controller from './ldap-settings-group-dn-builder.controller';\n\nexport const ldapSettingsGroupDnBuilder = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n // ngModel: string (dc=,cn=,)\n ngModel: '<',\n // onChange(string) => void\n onChange: '<',\n // suffix: string (dc=,dc=,)\n suffix: '@',\n // index: int >= 0\n index: '<',\n onRemoveClick: '<',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapSettingsGroupDnBuilderController {\n /* @ngInject */\n constructor() {\n this.groupName = '';\n this.entries = '';\n\n this.onEntriesChange = this.onEntriesChange.bind(this);\n this.onGroupNameChange = this.onGroupNameChange.bind(this);\n this.onGroupChange = this.onGroupChange.bind(this);\n this.removeGroup = this.removeGroup.bind(this);\n }\n\n onEntriesChange(entries) {\n this.onGroupChange(this.groupName, entries);\n }\n\n onGroupNameChange() {\n this.onGroupChange(this.groupName, this.entries);\n }\n\n onGroupChange(groupName, entries) {\n if (!groupName) {\n return;\n }\n const groupNameEntry = `cn=${groupName}`;\n this.onChange(this.index, entries || this.suffix ? `${groupNameEntry},${entries || this.suffix}` : groupNameEntry);\n }\n\n removeGroup() {\n this.onRemoveClick(this.index);\n }\n\n parseEntries(value, suffix) {\n if (value === suffix) {\n this.groupName = '';\n this.entries = suffix;\n return;\n }\n\n const [groupName, entries] = this.ngModel.split(/,(.+)/);\n this.groupName = groupName.replace('cn=', '');\n this.entries = entries || '';\n }\n\n $onChange({ ngModel, suffix }) {\n if ((!suffix || suffix.isFirstChange()) && !ngModel) {\n return;\n }\n this.parseEntries(ngModel.value, suffix.value);\n }\n\n $onInit() {\n this.parseEntries(this.ngModel, this.suffix);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings-openldap.html');\n\nimport controller from './ldap-settings-openldap.controller';\n\nexport const ldapSettingsOpenLdap = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n tlscaCert: '=',\n state: '=',\n connectivityCheck: '<',\n\n onTlscaCertChange: '<',\n onSearchUsersClick: '<',\n onSearchGroupsClick: '<',\n onSaveSettings: '<',\n saveButtonState: '<',\n saveButtonDisabled: '<',\n },\n};\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nexport default class LdapSettingsOpenLDAPController {\n /* @ngInject */\n constructor() {\n this.domainSuffix = '';\n this.limitedFeatureId = FeatureId.EXTERNAL_AUTH_LDAP;\n\n this.findDomainSuffix = this.findDomainSuffix.bind(this);\n this.parseDomainSuffix = this.parseDomainSuffix.bind(this);\n this.onAccountChange = this.onAccountChange.bind(this);\n }\n\n findDomainSuffix() {\n const serviceAccount = this.settings.ReaderDN;\n let domainSuffix = this.parseDomainSuffix(serviceAccount);\n if (!domainSuffix && this.settings.SearchSettings.length > 0) {\n const searchSettings = this.settings.SearchSettings[0];\n domainSuffix = this.parseDomainSuffix(searchSettings.BaseDN);\n }\n\n this.domainSuffix = domainSuffix;\n }\n\n parseDomainSuffix(string = '') {\n const index = string.toLowerCase().indexOf('dc=');\n return index !== -1 ? string.substring(index) : '';\n }\n\n onAccountChange(serviceAccount) {\n this.domainSuffix = this.parseDomainSuffix(serviceAccount);\n }\n\n addLDAPUrl() {\n this.settings.URLs.push('');\n }\n\n removeLDAPUrl(index) {\n this.settings.URLs.splice(index, 1);\n }\n\n $onInit() {\n this.findDomainSuffix();\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings-security.html');\n\nexport const ldapSettingsSecurity = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n settings: '=',\n tlscaCert: '<',\n onTlscaCertChange: '<',\n uploadInProgress: '<',\n title: '@',\n limitedFeatureId: '<',\n },\n};\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings-test-login.html');\n\nimport controller from './ldap-settings-test-login.controller';\n\nexport const ldapSettingsTestLogin = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n limitedFeatureId: '<',\n showBeIndicatorIfNeeded: '<',\n },\n};\n","const TEST_STATUS = {\n LOADING: 'LOADING',\n SUCCESS: 'SUCCESS',\n FAILURE: 'FAILURE',\n};\n\nexport default class LdapSettingsTestLogin {\n /* @ngInject */\n constructor($async, LDAPService, Notifications) {\n Object.assign(this, { $async, LDAPService, Notifications });\n\n this.TEST_STATUS = TEST_STATUS;\n\n this.state = {\n testStatus: '',\n };\n }\n\n async testLogin(username, password) {\n return this.$async(async () => {\n this.state.testStatus = TEST_STATUS.LOADING;\n try {\n const response = await this.LDAPService.testLogin(this.settings, username, password);\n this.state.testStatus = response.valid ? TEST_STATUS.SUCCESS : TEST_STATUS.FAILURE;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to test login');\n this.state.testStatus = TEST_STATUS.FAILURE;\n }\n });\n }\n}\n","export function buildLdapSettingsModel() {\n return {\n AnonymousMode: true,\n ReaderDN: '',\n URLs: [''],\n ServerType: 0,\n TLSConfig: {\n TLS: false,\n TLSSkipVerify: false,\n },\n StartTLS: false,\n SearchSettings: [\n {\n BaseDN: '',\n Filter: '',\n UserNameAttribute: '',\n },\n ],\n GroupSearchSettings: [\n {\n GroupBaseDN: '',\n GroupFilter: '',\n GroupAttribute: '',\n },\n ],\n AdminGroupSearchSettings: [\n {\n GroupBaseDN: '',\n GroupFilter: '',\n GroupAttribute: '',\n },\n ],\n AutoCreateUsers: true,\n };\n}\n\nexport function buildAdSettingsModel() {\n const settings = buildLdapSettingsModel();\n\n settings.ServerType = 2;\n settings.AnonymousMode = false;\n settings.SearchSettings[0].UserNameAttribute = 'sAMAccountName';\n settings.SearchSettings[0].Filter = '(objectClass=user)';\n settings.GroupSearchSettings[0].GroupAttribute = 'member';\n settings.GroupSearchSettings[0].GroupFilter = '(objectClass=group)';\n\n return settings;\n}\n\nexport function buildOpenLDAPSettingsModel() {\n const settings = buildLdapSettingsModel();\n\n settings.ServerType = 1;\n settings.AnonymousMode = false;\n settings.SearchSettings[0].UserNameAttribute = 'uid';\n settings.SearchSettings[0].Filter = '(objectClass=inetOrgPerson)';\n settings.GroupSearchSettings[0].GroupAttribute = 'member';\n settings.GroupSearchSettings[0].GroupFilter = '(objectClass=groupOfNames)';\n\n return settings;\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-settings.html');\n\nimport controller from './ldap-settings.controller';\n\nexport const ldapSettings = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n selectedAdminGroups: '=',\n state: '<',\n connectivityCheck: '<',\n onSaveSettings: '<',\n saveButtonState: '<',\n isLdapFormValid: '<',\n },\n};\n","const SERVER_TYPES = {\n CUSTOM: 0,\n OPEN_LDAP: 1,\n AD: 2,\n};\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nimport { buildLdapSettingsModel, buildOpenLDAPSettingsModel } from '@/portainer/settings/authentication/ldap/ldap-settings.model';\n\nconst DEFAULT_GROUP_FILTER = '(objectClass=groupOfNames)';\nconst DEFAULT_USER_FILTER = '(objectClass=inetOrgPerson)';\n\nexport default class LdapSettingsController {\n /* @ngInject */\n constructor(LDAPService) {\n Object.assign(this, { LDAPService, SERVER_TYPES });\n\n this.tlscaCert = null;\n this.settingsDrafts = {};\n\n this.boxSelectorOptions = [\n { id: 'ldap_custom', value: SERVER_TYPES.CUSTOM, label: 'Custom', icon: 'fa fa-server' },\n { id: 'ldap_openldap', value: SERVER_TYPES.OPEN_LDAP, label: 'OpenLDAP', icon: 'fa fa-server', feature: FeatureId.EXTERNAL_AUTH_LDAP },\n ];\n\n this.onTlscaCertChange = this.onTlscaCertChange.bind(this);\n this.searchUsers = this.searchUsers.bind(this);\n this.searchGroups = this.searchGroups.bind(this);\n this.searchAdminGroups = this.searchAdminGroups.bind(this);\n this.onChangeServerType = this.onChangeServerType.bind(this);\n }\n\n onTlscaCertChange(file) {\n this.tlscaCert = file;\n }\n\n $onInit() {\n this.tlscaCert = this.settings.TLSCACert;\n }\n\n onChangeServerType(serverType) {\n this.settingsDrafts[this.settings.ServerType] = this.settings;\n\n if (this.settingsDrafts[serverType]) {\n this.settings = this.settingsDrafts[serverType];\n return;\n }\n\n switch (serverType) {\n case SERVER_TYPES.OPEN_LDAP:\n this.settings = buildOpenLDAPSettingsModel();\n break;\n case SERVER_TYPES.CUSTOM:\n this.settings = buildLdapSettingsModel();\n break;\n }\n }\n\n searchUsers() {\n const settings = {\n ...this.settings,\n SearchSettings: this.settings.SearchSettings.map((search) => ({ ...search, Filter: search.Filter || DEFAULT_USER_FILTER })),\n };\n return this.LDAPService.users(settings);\n }\n\n searchGroups() {\n const settings = {\n ...this.settings,\n GroupSearchSettings: this.settings.GroupSearchSettings.map((search) => ({ ...search, GroupFilter: search.GroupFilter || DEFAULT_GROUP_FILTER })),\n };\n return this.LDAPService.groups(settings);\n }\n\n searchAdminGroups() {\n if (this.settings.AdminAutoPopulate) {\n this.settings.AdminGroups = this.selectedAdminGroups.map((team) => team.Name);\n }\n\n const settings = {\n ...this.settings,\n AdminGroupSearchSettings: this.settings.AdminGroupSearchSettings.map((search) => ({ ...search, GroupFilter: search.GroupFilter || DEFAULT_GROUP_FILTER })),\n };\n\n return this.LDAPService.adminGroups(settings);\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-user-search-item.html');\n\nimport controller from './ldap-user-search-item.controller';\n\nexport const ldapUserSearchItem = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n config: '=',\n index: '<',\n showUsernameFormat: '<',\n domainSuffix: '@',\n baseFilter: '@',\n onRemoveClick: '<',\n limitedFeatureId: '<',\n },\n};\n","export default class LdapUserSearchItemController {\n /* @ngInject */\n constructor() {\n this.groups = [];\n\n this.onBaseDNChange = this.onBaseDNChange.bind(this);\n this.onGroupChange = this.onGroupChange.bind(this);\n this.onGroupsChange = this.onGroupsChange.bind(this);\n this.removeGroup = this.removeGroup.bind(this);\n }\n\n onBaseDNChange(baseDN) {\n this.config.BaseDN = baseDN;\n }\n\n onGroupChange(index, group) {\n this.groups[index] = group;\n this.onGroupsChange(this.groups);\n }\n\n onGroupsChange(groups) {\n this.config.Filter = this.generateUserFilter(groups);\n }\n\n removeGroup(index) {\n this.groups.splice(index, 1);\n this.onGroupsChange(this.groups);\n }\n\n addGroup() {\n this.groups.push(this.domainSuffix ? `cn=,${this.domainSuffix}` : 'cn=');\n }\n\n generateUserFilter(groups) {\n const filteredGroups = groups.filter((group) => group !== this.domainSuffix);\n\n if (!filteredGroups.length) {\n return this.baseFilter;\n }\n\n const groupsFilter = filteredGroups.map((group) => `(memberOf=${group})`);\n\n return `(&${this.baseFilter}${groupsFilter.length > 1 ? `(|${groupsFilter.join('')})` : groupsFilter[0]})`;\n }\n\n parseFilter() {\n const filter = this.config.Filter;\n if (filter === this.baseFilter) {\n return;\n }\n\n if (!filter.includes('|')) {\n const index = filter.indexOf('memberOf=');\n if (index > -1) {\n this.groups = [filter.slice(index + 9, -2)];\n }\n return;\n }\n\n const members = filter.slice(filter.indexOf('|') + 2, -3);\n this.groups = members.split(')(').map((member) => member.replace('memberOf=', ''));\n }\n\n $onInit() {\n this.parseFilter();\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-user-search.html');\n\nimport controller from './ldap-user-search.controller';\n\nexport const ldapUserSearch = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n settings: '=',\n domainSuffix: '@',\n showUsernameFormat: '<',\n baseFilter: '@',\n limitedFeatureId: '<',\n\n onSearchClick: '<',\n },\n};\n","import _ from 'lodash';\n\nexport default class LdapUserSearchController {\n /* @ngInject */\n constructor($async, Notifications) {\n Object.assign(this, { $async, Notifications });\n\n this.users = null;\n this.showTable = false;\n\n this.onRemoveClick = this.onRemoveClick.bind(this);\n this.onAddClick = this.onAddClick.bind(this);\n this.search = this.search.bind(this);\n }\n\n onAddClick() {\n const lastSetting = _.last(this.settings);\n this.settings.push({ BaseDN: this.domainSuffix, UserNameAttribute: lastSetting.UserNameAttribute, Filter: this.baseFilter });\n }\n\n onRemoveClick(index) {\n this.settings.splice(index, 1);\n }\n\n search() {\n return this.$async(async () => {\n try {\n this.users = null;\n this.showTable = true;\n const users = await this.onSearchClick();\n this.users = _.compact(users);\n } catch (error) {\n this.Notifications.error('Failure', error, 'Failed to search users');\n this.showTable = false;\n }\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./ldap-users-datatable.html');\n\nexport const ldapUsersDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'GenericDatatableController',\n bindings: {\n titleText: '@',\n titleIcon: '@',\n dataset: '<',\n tableKey: '@',\n orderBy: '@',\n reverseOrder: '<',\n },\n};\n","const API_ENDPOINT_LDAP = 'api/ldap';\n\n/* @ngInject */\nexport function LDAP($resource) {\n return $resource(\n `${API_ENDPOINT_LDAP}/:action`,\n {},\n {\n check: { method: 'POST', params: { action: 'check' } },\n users: { method: 'POST', isArray: true, params: { action: 'users' } },\n groups: { method: 'POST', isArray: true, params: { action: 'groups' } },\n adminGroups: { method: 'POST', isArray: true, params: { action: 'admin-groups' } },\n testLogin: { method: 'POST', params: { action: 'test' } },\n }\n );\n}\n","/* @ngInject */\nexport function LDAPService(LDAP) {\n return { users, groups, adminGroups, check, testLogin };\n\n function users(ldapSettings) {\n return LDAP.users({ ldapSettings }).$promise;\n }\n\n async function groups(ldapSettings) {\n const userGroups = await LDAP.groups({ ldapSettings }).$promise;\n return userGroups.map(({ Name, Groups }) => {\n let name = Name;\n if (Name.includes(',') && Name.includes('=')) {\n const [cnName] = Name.split(',');\n const split = cnName.split('=');\n name = split[1];\n }\n return { Groups, Name: name };\n });\n }\n\n async function adminGroups(ldapSettings) {\n const userGroups = await LDAP.adminGroups({ ldapSettings }).$promise;\n return userGroups.sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1)).map((name) => ({ name, selected: ldapSettings.AdminGroups.includes(name) }));\n }\n\n function check(ldapSettings) {\n return LDAP.check({ ldapSettings }).$promise;\n }\n\n function testLogin(ldapSettings, username, password) {\n return LDAP.testLogin({ ldapSettings, username, password }).$promise;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./save-auth-settings-button.html');\n\nexport const saveAuthSettingsButton = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n onSaveSettings: '<',\n saveButtonDisabled: '<',\n saveButtonState: '<',\n limitedFeatureId: '<',\n limitedFeatureClass: '<',\n className: '<',\n },\n};\n","import angular from 'angular';\n\nimport { sslCertificate } from './ssl-certificate';\n\nexport default angular.module('portainer.settings.general', []).component('sslCertificateSettings', sslCertificate).name;\n","const autoNgTemplateLoaderTemplate1 = require('./ssl-certificate.html');\n\nimport controller from './ssl-certificate.controller.js';\n\nexport const sslCertificate = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","class SslCertificateController {\n /* @ngInject */\n constructor($async, $scope, $state, SSLService, Notifications) {\n Object.assign(this, { $async, $scope, $state, SSLService, Notifications });\n\n this.cert = null;\n this.originalValues = {\n forceHTTPS: false,\n certFile: null,\n keyFile: null,\n };\n\n this.formValues = {\n certFile: null,\n keyFile: null,\n forceHTTPS: false,\n };\n\n this.state = {\n actionInProgress: false,\n reloadingPage: false,\n };\n\n const pemPattern = '.pem';\n this.certFilePattern = `${pemPattern},.crt,.cer,.cert`;\n this.keyFilePattern = `${pemPattern},.key`;\n\n this.save = this.save.bind(this);\n this.onChangeForceHTTPS = this.onChangeForceHTTPS.bind(this);\n }\n\n isFormChanged() {\n return Object.entries(this.originalValues).some(([key, value]) => value != this.formValues[key]);\n }\n\n onChangeForceHTTPS(checked) {\n return this.$scope.$evalAsync(() => {\n this.formValues.forceHTTPS = checked;\n });\n }\n\n async save() {\n return this.$async(async () => {\n this.state.actionInProgress = true;\n try {\n const cert = this.formValues.certFile ? await this.formValues.certFile.text() : null;\n const key = this.formValues.keyFile ? await this.formValues.keyFile.text() : null;\n const httpEnabled = !this.formValues.forceHTTPS;\n await this.SSLService.upload(httpEnabled, cert, key);\n\n await new Promise((resolve) => setTimeout(resolve, 2000));\n location.reload();\n this.state.reloadingPage = true;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed applying changes');\n }\n this.state.actionInProgress = false;\n });\n }\n\n wasHTTPsChanged() {\n return this.originalValues.forceHTTPS !== this.formValues.forceHTTPS;\n }\n\n async $onInit() {\n return this.$async(async () => {\n try {\n const certInfo = await this.SSLService.get();\n\n this.formValues.forceHTTPS = !certInfo.httpEnabled;\n this.originalValues.forceHTTPS = this.formValues.forceHTTPS;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading certificate info');\n }\n });\n }\n}\n\nexport default SslCertificateController;\n","import { Formik, Form } from 'formik';\n\nimport { Switch } from '@/portainer/components/form-components/SwitchField/Switch';\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { Select } from '@/portainer/components/form-components/Input/Select';\nimport { Widget, WidgetBody, WidgetTitle } from '@/portainer/components/widget';\nimport { LoadingButton } from '@/portainer/components/Button/LoadingButton';\nimport { TextTip } from '@/portainer/components/Tip/TextTip';\n\nimport styles from './SettingsEdgeCompute.module.css';\nimport { validationSchema } from './SettingsEdgeCompute.validation';\n\nexport interface FormValues {\n EdgeAgentCheckinInterval: number;\n EnableEdgeComputeFeatures: boolean;\n DisableTrustOnFirstConnect: boolean;\n EnforceEdgeID: boolean;\n}\n\ninterface Props {\n settings: FormValues;\n onSubmit(values: FormValues): void;\n}\n\nconst checkinIntervalOptions = [\n {\n value: 5,\n label: '5 seconds',\n },\n {\n value: 10,\n label: '10 seconds',\n },\n {\n value: 30,\n label: '30 seconds',\n },\n];\n\nexport function SettingsEdgeCompute({ settings, onSubmit }: Props) {\n const initialValues = {\n EdgeAgentCheckinInterval: settings ? settings.EdgeAgentCheckinInterval : 5,\n EnableEdgeComputeFeatures: settings\n ? settings.EnableEdgeComputeFeatures\n : false,\n DisableTrustOnFirstConnect: settings\n ? settings.DisableTrustOnFirstConnect\n : false,\n EnforceEdgeID: settings ? settings.EnforceEdgeID : false,\n };\n\n return (\n

    \n \n \n \n validationSchema()}\n onSubmit={onSubmit}\n validateOnMount\n >\n {({\n values,\n errors,\n handleSubmit,\n setFieldValue,\n isSubmitting,\n isValid,\n dirty,\n }) => (\n \n \n \n setFieldValue(\n 'EdgeAgentCheckinInterval',\n parseInt(e.currentTarget.value, 10)\n )\n }\n options={checkinIntervalOptions}\n />\n \n\n \n \n setFieldValue('EnableEdgeComputeFeatures', e)\n }\n />\n \n\n \n When enabled, this will enable Portainer to execute Edge\n Device features.\n \n\n \n \n setFieldValue('EnforceEdgeID', e.valueOf())\n }\n />\n \n\n
    \n
    \n \n Save Settings\n \n
    \n
    \n \n )}\n \n
    \n
    \n
    \n );\n}\n","import { react2angular } from '@/react-tools/react2angular';\n\nimport { SettingsEdgeCompute } from './SettingsEdgeCompute';\n\nconst SettingsEdgeComputeAngular = react2angular(SettingsEdgeCompute, [\n 'settings',\n 'onSubmit',\n]);\nexport { SettingsEdgeCompute, SettingsEdgeComputeAngular };\n","import { boolean, number, object } from 'yup';\n\nexport function validationSchema() {\n return object().shape({\n EdgeAgentCheckinInterval: number().required('This field is required.'),\n EnableEdgeComputeFeatures: boolean().required('This field is required.'),\n DisableTrustOnFirstConnect: boolean().required('This field is required.'),\n EnforceEdgeID: boolean().required('This field is required.'),\n });\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"saveButton\":\"app-portainer-settings-edge-compute-SettingsEdgeCompute-SettingsEdgeCompute-module__save-button\"};","import { useQueryClient } from 'react-query';\nimport { useRouter } from '@uirouter/react';\n\nimport { Button } from '@/portainer/components/Button';\nimport { Profile } from '@/portainer/hostmanagement/fdo/model';\nimport { Link } from '@/portainer/components/Link';\nimport { confirmAsync } from '@/portainer/services/modal.service/confirm';\nimport * as notifications from '@/portainer/services/notifications';\nimport {\n deleteProfile,\n duplicateProfile,\n} from '@/portainer/hostmanagement/fdo/fdo.service';\n\ninterface Props {\n isFDOEnabled: boolean;\n selectedItems: Profile[];\n}\n\nexport function FDOProfilesDatatableActions({\n isFDOEnabled,\n selectedItems,\n}: Props) {\n const router = useRouter();\n const queryClient = useQueryClient();\n\n return (\n
    \n \n \n \n\n onDuplicateProfileClick()}\n >\n \n Duplicate\n \n\n onDeleteProfileClick()}\n >\n \n Remove\n \n
    \n );\n\n async function onDuplicateProfileClick() {\n const confirmed = await confirmAsync({\n title: 'Are you sure ?',\n message: 'This action will duplicate the selected profile. Continue?',\n buttons: {\n confirm: {\n label: 'Confirm',\n className: 'btn-primary',\n },\n },\n });\n\n if (!confirmed) {\n return;\n }\n\n try {\n const profile = selectedItems[0];\n const newProfile = await duplicateProfile(profile.id);\n notifications.success('Profile successfully duplicated', profile.name);\n router.stateService.go('portainer.endpoints.profile.edit', {\n id: newProfile.id,\n });\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'Unable to duplicate profile'\n );\n }\n }\n\n async function onDeleteProfileClick() {\n const confirmed = await confirmAsync({\n title: 'Are you sure ?',\n message: 'This action will delete the selected profile(s). Continue?',\n buttons: {\n confirm: {\n label: 'Remove',\n className: 'btn-danger',\n },\n },\n });\n\n if (!confirmed) {\n return;\n }\n\n await Promise.all(\n selectedItems.map(async (profile) => {\n try {\n await deleteProfile(profile.id);\n\n notifications.success('Profile successfully removed', profile.name);\n } catch (err) {\n notifications.error(\n 'Failure',\n err as Error,\n 'Unable to remove profile'\n );\n }\n })\n );\n\n await queryClient.invalidateQueries('fdo_profiles');\n }\n}\n","import { Column } from 'react-table';\n\nimport { isoDateFromTimestamp } from '@/portainer/filters/filters';\nimport { Profile } from '@/portainer/hostmanagement/fdo/model';\n\nexport const created: Column = {\n Header: 'Created',\n accessor: 'dateCreated',\n id: 'created',\n Cell: ({ value }) => isoDateFromTimestamp(value),\n disableFilters: true,\n canHide: true,\n Filter: () => null,\n};\n","import { CellProps, Column } from 'react-table';\nimport { useSref } from '@uirouter/react';\n\nimport { Profile } from '@/portainer/hostmanagement/fdo/model';\n\nexport const name: Column = {\n Header: 'Name',\n accessor: 'name',\n id: 'name',\n Cell: NameCell,\n disableFilters: true,\n Filter: () => null,\n canHide: true,\n sortType: 'string',\n};\n\nexport function NameCell({\n value: name,\n row: { original: profile },\n}: CellProps) {\n const linkProps = useSref('portainer.endpoints.profile.edit', {\n id: profile.id,\n });\n\n return (\n \n {name}\n \n );\n}\n","import { useTable, usePagination, useSortBy } from 'react-table';\nimport { useRowSelectColumn } from '@lineup-lite/hooks';\nimport { FDOProfilesDatatableActions } from 'Portainer/settings/edge-compute/FDOProfilesDatatable/FDOProfilesDatatableActions';\nimport { SelectedRowsCount } from 'Portainer/components/datatables/components/SelectedRowsCount';\nimport { PaginationControls } from 'Portainer/components/pagination-controls';\nimport { TableFooter } from 'Portainer/components/datatables/components/TableFooter';\nimport { useTableSettings } from 'Portainer/components/datatables/components/useTableSettings';\nimport { useRowSelect } from 'Portainer/components/datatables/components/useRowSelect';\n\nimport { Profile } from '@/portainer/hostmanagement/fdo/model';\nimport PortainerError from '@/portainer/error';\nimport {\n Table,\n TableActions,\n TableContainer,\n TableHeaderRow,\n TableRow,\n TableTitle,\n} from '@/portainer/components/datatables/components';\nimport { FDOProfilesTableSettings } from '@/edge/devices/types';\nimport { useFDOProfiles } from '@/portainer/settings/edge-compute/FDOProfilesDatatable/useFDOProfiles';\n\nimport { useColumns } from './columns';\n\nexport interface FDOProfilesDatatableProps {\n isFDOEnabled: boolean;\n}\n\nexport function FDOProfilesDatatable({\n isFDOEnabled,\n}: FDOProfilesDatatableProps) {\n const { settings, setTableSettings } =\n useTableSettings();\n const columns = useColumns();\n\n const { isLoading, profiles, error } = useFDOProfiles();\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n page,\n prepareRow,\n selectedFlatRows,\n gotoPage,\n setPageSize,\n state: { pageIndex, pageSize },\n } = useTable(\n {\n defaultCanFilter: false,\n columns,\n data: profiles,\n initialState: {\n pageSize: settings.pageSize || 10,\n sortBy: [settings.sortBy],\n },\n isRowSelectable() {\n return isFDOEnabled;\n },\n selectColumnWidth: 5,\n },\n useSortBy,\n usePagination,\n useRowSelect,\n useRowSelectColumn\n );\n\n const tableProps = getTableProps();\n const tbodyProps = getTableBodyProps();\n\n return (\n \n \n\n \n row.original)}\n />\n \n\n \n \n {headerGroups.map((headerGroup) => {\n const { key, className, role, style } =\n headerGroup.getHeaderGroupProps();\n return (\n \n key={key}\n className={className}\n role={role}\n style={style}\n headers={headerGroup.headers}\n />\n );\n })}\n \n \n {!isLoading && profiles && profiles.length > 0 ? (\n page.map((row) => {\n prepareRow(row);\n const { key, className, role, style } = row.getRowProps();\n\n return (\n \n cells={row.cells}\n key={key}\n className={className}\n role={role}\n style={style}\n />\n );\n })\n ) : (\n \n \n {userMessage(isLoading, error)}\n \n \n )}\n \n \n\n \n \n gotoPage(p - 1)}\n totalCount={profiles ? profiles.length : 0}\n onPageLimitChange={handlePageSizeChange}\n />\n \n \n );\n\n function handlePageSizeChange(pageSize: number) {\n setPageSize(pageSize);\n setTableSettings((settings) => ({ ...settings, pageSize }));\n }\n}\n\nfunction userMessage(isLoading: boolean, error?: PortainerError) {\n if (isLoading) {\n return 'Loading...';\n }\n\n if (error) {\n return error.message;\n }\n\n return 'No profiles found';\n}\n","import { useMemo } from 'react';\n\nimport { created } from './created';\nimport { name } from './name';\n\nexport function useColumns() {\n return useMemo(() => [name, created], []);\n}\n","import { useEffect, useMemo } from 'react';\nimport { useQuery } from 'react-query';\n\nimport PortainerError from '@/portainer/error';\nimport * as notifications from '@/portainer/services/notifications';\nimport { getProfiles } from '@/portainer/hostmanagement/fdo/fdo.service';\n\nexport function useFDOProfiles() {\n const { isLoading, data, isError, error } = useQuery('fdo_profiles', () =>\n getProfiles()\n );\n\n useEffect(() => {\n if (isError) {\n notifications.error(\n 'Failure',\n error as Error,\n 'Failed retrieving FDO profiles'\n );\n }\n }, [isError, error]);\n\n const profiles = useMemo(() => data || [], [data]);\n\n return {\n isLoading,\n profiles,\n error: isError ? (error as PortainerError) : undefined,\n };\n}\n","import { TableSettingsProvider } from '@/portainer/components/datatables/components/useTableSettings';\n\nimport {\n FDOProfilesDatatable,\n FDOProfilesDatatableProps,\n} from './FDOProfilesDatatable';\n\nexport function FDOProfilesDatatableContainer({\n ...props\n}: FDOProfilesDatatableProps) {\n const defaultSettings = {\n pageSize: 10,\n sortBy: { id: 'name', desc: false },\n };\n\n return (\n \n {/* eslint-disable-next-line react/jsx-props-no-spreading */}\n \n \n );\n}\n","import { react2angular } from '@/react-tools/react2angular';\n\nimport { SettingsFDO } from './SettingsFDO';\n\nconst SettingsFDOAngular = react2angular(SettingsFDO, ['settings', 'onSubmit']);\nexport { SettingsFDO, SettingsFDOAngular };\n","import { useEffect, useState } from 'react';\nimport { Formik, Field, Form } from 'formik';\n\nimport { Switch } from '@/portainer/components/form-components/SwitchField/Switch';\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { FormSectionTitle } from '@/portainer/components/form-components/FormSectionTitle';\nimport { Widget, WidgetBody, WidgetTitle } from '@/portainer/components/widget';\nimport { LoadingButton } from '@/portainer/components/Button/LoadingButton';\nimport { TextTip } from '@/portainer/components/Tip/TextTip';\nimport { Input } from '@/portainer/components/form-components/Input';\nimport { FDOConfiguration } from '@/portainer/hostmanagement/fdo/model';\nimport { FDOProfilesDatatableContainer } from '@/portainer/settings/edge-compute/FDOProfilesDatatable/FDOProfilesDatatableContainer';\n\nimport styles from './SettingsFDO.module.css';\nimport { validationSchema } from './SettingsFDO.validation';\n\nexport interface Settings {\n fdoConfiguration: FDOConfiguration;\n EnableEdgeComputeFeatures: boolean;\n}\n\ninterface Props {\n settings: Settings;\n onSubmit(values: FDOConfiguration): void;\n}\n\nexport function SettingsFDO({ settings, onSubmit }: Props) {\n const fdoConfiguration = settings ? settings.fdoConfiguration : null;\n const initialFDOEnabled = fdoConfiguration ? fdoConfiguration.enabled : false;\n\n const [isFDOEnabled, setIsFDOEnabled] = useState(initialFDOEnabled);\n useEffect(() => {\n setIsFDOEnabled(settings?.fdoConfiguration?.enabled);\n }, [settings]);\n\n const initialValues = {\n enabled: initialFDOEnabled,\n ownerURL: fdoConfiguration ? fdoConfiguration.ownerURL : '',\n ownerUsername: fdoConfiguration ? fdoConfiguration.ownerUsername : '',\n ownerPassword: fdoConfiguration ? fdoConfiguration.ownerPassword : '',\n };\n\n const edgeComputeFeaturesEnabled = settings\n ? settings.EnableEdgeComputeFeatures\n : false;\n\n return (\n
    \n \n \n \n validationSchema()}\n validateOnChange\n validateOnMount\n >\n {({\n values,\n errors,\n handleSubmit,\n setFieldValue,\n isSubmitting,\n isValid,\n dirty,\n }) => (\n
    \n \n onChangedEnabled(e, setFieldValue)}\n />\n \n\n \n When enabled, this will allow Portainer to interact with FDO\n Services.\n \n\n {edgeComputeFeaturesEnabled && values.enabled && (\n <>\n
    \n\n \n \n \n\n \n \n \n\n \n \n \n \n )}\n\n
    \n
    \n \n Save Settings\n \n
    \n
    \n \n )}\n \n\n {edgeComputeFeaturesEnabled && isFDOEnabled && (\n
    \n Device Profiles\n \n Add, Edit and Manage the list of device profiles available\n during FDO device setup\n \n \n
    \n )}\n
    \n
    \n
    \n );\n\n async function onChangedEnabled(\n e: boolean,\n setFieldValue: (\n field: string,\n value: unknown,\n shouldValidate?: boolean\n ) => void\n ) {\n setIsFDOEnabled(e);\n setFieldValue('enabled', e);\n }\n}\n","import { object, string } from 'yup';\n\nexport function validationSchema() {\n return object().shape({\n ownerURL: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n ownerUsername: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n ownerPassword: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n });\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"saveButton\":\"app-portainer-settings-edge-compute-SettingsFDO-SettingsFDO-module__save-button\",\"fdoTable\":\"app-portainer-settings-edge-compute-SettingsFDO-SettingsFDO-module__fdo-table\"};","import { react2angular } from '@/react-tools/react2angular';\n\nimport { SettingsOpenAMT } from './SettingsOpenAMT';\n\nconst SettingsOpenAMTAngular = react2angular(SettingsOpenAMT, [\n 'settings',\n 'onSubmit',\n]);\nexport { SettingsOpenAMT, SettingsOpenAMTAngular };\n","import { useState } from 'react';\nimport { Formik, Field, Form } from 'formik';\n\nimport { Switch } from '@/portainer/components/form-components/SwitchField/Switch';\nimport { FormControl } from '@/portainer/components/form-components/FormControl';\nimport { Widget, WidgetBody, WidgetTitle } from '@/portainer/components/widget';\nimport { LoadingButton } from '@/portainer/components/Button/LoadingButton';\nimport { TextTip } from '@/portainer/components/Tip/TextTip';\nimport { Input } from '@/portainer/components/form-components/Input';\nimport { FileUploadField } from '@/portainer/components/form-components/FileUpload';\nimport { OpenAMTConfiguration } from '@/portainer/hostmanagement/open-amt/model';\n\nimport styles from './SettingsOpenAMT.module.css';\nimport { validationSchema } from './SettingsOpenAMT.validation';\n\nexport interface Settings {\n openAMTConfiguration: OpenAMTConfiguration;\n EnableEdgeComputeFeatures: boolean;\n}\n\ninterface Props {\n settings: Settings;\n onSubmit(values: OpenAMTConfiguration): void;\n}\n\nexport function SettingsOpenAMT({ settings, onSubmit }: Props) {\n const [certFile, setCertFile] = useState();\n async function handleFileUpload(\n file: File,\n setFieldValue: (\n field: string,\n value: unknown,\n shouldValidate?: boolean\n ) => void\n ) {\n if (file) {\n setCertFile(file);\n const fileContent = await readFileContent(file);\n setFieldValue('certFileContent', fileContent);\n setFieldValue('certFileName', file.name);\n }\n }\n\n function readFileContent(file: File) {\n return new Promise((resolve, reject) => {\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n if (e.target == null || e.target.result == null) {\n resolve('');\n return;\n }\n const base64 = e.target.result.toString();\n // remove prefix of \"data:application/x-pkcs12;base64,\" returned by \"readAsDataURL()\"\n const index = base64.indexOf('base64,');\n const cert = base64.substring(index + 7, base64.length);\n resolve(cert);\n };\n fileReader.onerror = () => {\n reject(new Error('error reading provisioning certificate file'));\n };\n fileReader.readAsDataURL(file);\n });\n }\n\n const openAMTConfiguration = settings ? settings.openAMTConfiguration : null;\n const initialValues = {\n enabled: openAMTConfiguration ? openAMTConfiguration.enabled : false,\n mpsServer: openAMTConfiguration ? openAMTConfiguration.mpsServer : '',\n mpsUser: openAMTConfiguration ? openAMTConfiguration.mpsUser : '',\n mpsPassword: openAMTConfiguration ? openAMTConfiguration.mpsPassword : '',\n domainName: openAMTConfiguration ? openAMTConfiguration.domainName : '',\n certFileContent: openAMTConfiguration\n ? openAMTConfiguration.certFileContent\n : '',\n certFileName: openAMTConfiguration ? openAMTConfiguration.certFileName : '',\n certFilePassword: openAMTConfiguration\n ? openAMTConfiguration.certFilePassword\n : '',\n };\n\n if (\n initialValues.certFileContent &&\n initialValues.certFileName &&\n !certFile\n ) {\n setCertFile(new File([], initialValues.certFileName));\n }\n\n const edgeComputeFeaturesEnabled = settings\n ? settings.EnableEdgeComputeFeatures\n : false;\n\n return (\n
    \n \n \n \n validationSchema()}\n validateOnChange\n validateOnMount\n >\n {({\n values,\n errors,\n handleSubmit,\n setFieldValue,\n isSubmitting,\n isValid,\n dirty,\n }) => (\n
    \n \n setFieldValue('enabled', e)}\n />\n \n\n \n When enabled, this will allow Portainer to interact with an\n OpenAMT MPS API.\n \n\n {edgeComputeFeaturesEnabled && values.enabled && (\n <>\n
    \n\n \n \n \n\n \n \n \n\n \n \n \n\n
    \n\n \n \n \n\n The certificate must contain the private key.
    On AMT 15 based devices you need to use SHA2.\"\n errors={errors.certFileContent}\n >\n \n handleFileUpload(file, setFieldValue)\n }\n />\n \n\n \n \n \n \n )}\n\n
    \n
    \n \n Save Settings\n \n
    \n
    \n \n )}\n \n
    \n
    \n
    \n );\n}\n","import { object, string } from 'yup';\n\nexport function validationSchema() {\n return object().shape({\n mpsServer: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n mpsUser: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n mpsPassword: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n domainName: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n certFileContent: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n certFileName: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n certFilePassword: string().when('enabled', {\n is: true,\n then: string().required('Field is required'),\n }),\n });\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"saveButton\":\"app-portainer-settings-edge-compute-SettingsOpenAMT-SettingsOpenAMT-module__save-button\"};","import angular from 'angular';\n\nimport authenticationModule from './authentication';\nimport generalModule from './general';\n\nimport { SettingsEdgeComputeAngular } from './edge-compute/SettingsEdgeCompute';\nimport { SettingsFDOAngular } from './edge-compute/SettingsFDO';\nimport { SettingsOpenAMTAngular } from './edge-compute/SettingsOpenAMT';\n\nexport default angular\n .module('portainer.settings', [authenticationModule, generalModule])\n .component('settingsEdgeCompute', SettingsEdgeComputeAngular)\n .component('settingsFdo', SettingsFDOAngular)\n .component('settingsOpenAmt', SettingsOpenAMTAngular).name;\n","export default class ActivityLogsDatatableController {\n /* @ngInject */\n constructor($controller, $scope, PaginationService) {\n this.PaginationService = PaginationService;\n\n this.tableKey = 'authLogs';\n\n const $onInit = this.$onInit;\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n\n this.changeSort = this.changeSort.bind(this);\n this.handleChangeLimit = this.handleChangeLimit.bind(this);\n this.$onInit = $onInit.bind(this);\n }\n\n changeSort(key) {\n let desc = false;\n if (key === this.sort.key) {\n desc = !this.sort.desc;\n }\n\n this.onChangeSort({ key, desc });\n }\n\n handleChangeLimit(limit) {\n this.PaginationService.setPaginationLimit(this.tableKey, limit);\n this.onChangeLimit(limit);\n }\n\n $onInit() {\n this.$onInitGeneric();\n\n const limit = this.PaginationService.getPaginationLimit(this.tableKey);\n if (limit) {\n this.onChangeLimit(+limit);\n }\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./activity-logs-datatable.html');\n\nimport './activity-logs-datatable.css';\n\nimport controller from './activity-logs-datatable.controller.js';\n\nexport const activityLogsDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n logs: '<',\n keyword: '<',\n sort: '<',\n limit: '<',\n totalItems: '<',\n currentPage: '<',\n feature: '@',\n\n onChangeContextFilter: '<',\n onChangeKeyword: '<',\n onChangeSort: '<',\n\n onChangeLimit: '<',\n onChangePage: '<',\n },\n};\n","import moment from 'moment';\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nexport default class ActivityLogsViewController {\n /* @ngInject */\n constructor($async, UserActivityService, Notifications) {\n this.$async = $async;\n this.UserActivityService = UserActivityService;\n this.Notifications = Notifications;\n\n this.limitedFeature = FeatureId.ACTIVITY_AUDIT;\n this.state = {\n keyword: '',\n date: {\n from: 0,\n to: 0,\n },\n sort: {\n key: 'Timestamp',\n desc: true,\n },\n page: 1,\n limit: 10,\n totalItems: 0,\n logs: null,\n };\n\n this.today = moment().endOf('day');\n this.minValidDate = moment().subtract(7, 'd').startOf('day');\n\n this.onChangeDate = this.onChangeDate.bind(this);\n this.onChangeKeyword = this.onChangeKeyword.bind(this);\n this.onChangeSort = this.onChangeSort.bind(this);\n this.loadLogs = this.loadLogs.bind(this);\n this.onChangePage = this.onChangePage.bind(this);\n this.onChangeLimit = this.onChangeLimit.bind(this);\n }\n\n onChangePage(page) {\n this.state.page = page;\n this.loadLogs();\n }\n\n onChangeLimit(limit) {\n this.state.page = 1;\n this.state.limit = limit;\n this.loadLogs();\n }\n\n onChangeSort(sort) {\n this.state.page = 1;\n this.state.sort = sort;\n this.loadLogs();\n }\n\n onChangeKeyword(keyword) {\n this.state.page = 1;\n this.state.keyword = keyword;\n this.loadLogs();\n }\n\n onChangeDate({ startDate, endDate }) {\n this.state.page = 1;\n this.state.date = { to: endDate, from: startDate };\n this.loadLogs();\n }\n\n async export() {\n return this.$async(async () => {\n try {\n await this.UserActivityService.saveLogsAsCSV(this.state.sort, this.state.keyword, this.state.date, this.state.contextFilter);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading user activity logs csv');\n }\n });\n }\n\n async loadLogs() {\n return this.$async(async () => {\n this.state.logs = null;\n const offset = (this.state.page - 1) * this.state.limit;\n try {\n const { logs, totalCount } = await this.UserActivityService.logs(offset, this.state.limit, this.state.sort, this.state.keyword, this.state.date);\n this.state.logs = decorateLogs(logs);\n this.state.totalItems = totalCount;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading user activity logs');\n }\n });\n }\n\n $onInit() {\n return this.$async(async () => {\n this.loadLogs();\n });\n }\n}\n\nfunction decorateLogs(logs) {\n if (!logs || !logs.length) {\n return [];\n }\n\n return logs.map((log) => ({ ...log, payload: parseJSON(atob(log.payload)) }));\n}\n\nfunction parseJSON(json) {\n try {\n return JSON.parse(json);\n } catch (e) {\n return null;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./activity-logs-view.html');\n\nimport controller from './activity-logs-view.controller.js';\n\nexport const activityLogsView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import angular from 'angular';\n\nimport { activityLogsView } from './activity-logs-view';\nimport { activityLogsDatatable } from './activity-logs-datatable';\n\nexport default angular\n .module('portainer.app.user-activity.activity-logs-view', [])\n .component('activityLogsDatatable', activityLogsDatatable)\n .component('activityLogsView', activityLogsView).name;\n","import { authenticationMethodTypesMap, authenticationMethodTypesLabels } from '@/portainer/settings/authentication/auth-method-constants';\nimport { authenticationActivityTypesMap, authenticationActivityTypesLabels } from '@/portainer/settings/authentication/auth-type-constants';\n\nclass ActivityLogsDatatableController {\n /* @ngInject */\n constructor($controller, $scope, PaginationService) {\n this.PaginationService = PaginationService;\n\n this.tableKey = 'authLogs';\n\n this.contextFilterLabels = Object.values(authenticationMethodTypesMap).map((value) => ({ value, label: authenticationMethodTypesLabels[value] }));\n this.typeFilterLabels = Object.values(authenticationActivityTypesMap).map((value) => ({ value, label: authenticationActivityTypesLabels[value] }));\n\n const $onInit = this.$onInit;\n angular.extend(this, $controller('GenericDatatableController', { $scope }));\n this.$onInit = $onInit.bind(this);\n\n this.changeSort = this.changeSort.bind(this);\n this.handleChangeLimit = this.handleChangeLimit.bind(this);\n }\n\n changeSort(key) {\n let desc = false;\n if (key === this.sort.key) {\n desc = !this.sort.desc;\n }\n\n this.onChangeSort({ key, desc });\n }\n\n contextType(context) {\n if (!(context in authenticationMethodTypesLabels)) {\n return '';\n }\n return authenticationMethodTypesLabels[context];\n }\n\n activityType(type) {\n if (!(type in authenticationActivityTypesLabels)) {\n return '';\n }\n return authenticationActivityTypesLabels[type];\n }\n\n isAuthSuccess(type) {\n return type === authenticationActivityTypesMap.AuthSuccess;\n }\n\n isAuthFailure(type) {\n return type === authenticationActivityTypesMap.AuthFailure;\n }\n\n handleChangeLimit(limit) {\n this.PaginationService.setPaginationLimit(this.tableKey, limit);\n this.onChangeLimit(limit);\n }\n\n $onInit() {\n this.$onInitGeneric();\n\n const limit = this.PaginationService.getPaginationLimit(this.tableKey);\n if (limit) {\n this.handleChangeLimit(+limit);\n }\n }\n}\n\nexport default ActivityLogsDatatableController;\n","const autoNgTemplateLoaderTemplate1 = require('./auth-logs-datatable.html');\n\nimport controller from './auth-logs-datatable.controller';\n\nexport const authLogsDatatable = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n logs: '<',\n keyword: '<',\n sort: '<',\n limit: '<',\n totalItems: '<',\n currentPage: '<',\n contextFilter: '<',\n typeFilter: '<',\n feature: '@',\n\n onChangeContextFilter: '<',\n onChangeTypeFilter: '<',\n onChangeKeyword: '<',\n onChangeSort: '<',\n\n onChangeLimit: '<',\n onChangePage: '<',\n },\n};\n","import moment from 'moment';\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nexport default class AuthLogsViewController {\n /* @ngInject */\n constructor($async, UserActivityService, Notifications) {\n this.$async = $async;\n this.UserActivityService = UserActivityService;\n this.Notifications = Notifications;\n\n this.limitedFeature = FeatureId.ACTIVITY_AUDIT;\n this.state = {\n keyword: '',\n date: {\n from: 0,\n to: 0,\n },\n sort: {\n key: 'Timestamp',\n desc: true,\n },\n contextFilter: [1, 2, 3],\n typeFilter: [1, 2, 3],\n page: 1,\n limit: 10,\n totalItems: 0,\n logs: null,\n };\n\n this.today = moment().endOf('day');\n this.minValidDate = moment().subtract(7, 'd').startOf('day');\n\n this.onChangeDate = this.onChangeDate.bind(this);\n this.onChangeKeyword = this.onChangeKeyword.bind(this);\n this.onChangeSort = this.onChangeSort.bind(this);\n this.onChangeContextFilter = this.onChangeContextFilter.bind(this);\n this.onChangeTypeFilter = this.onChangeTypeFilter.bind(this);\n this.loadLogs = this.loadLogs.bind(this);\n this.onChangePage = this.onChangePage.bind(this);\n this.onChangeLimit = this.onChangeLimit.bind(this);\n }\n\n onChangePage(page) {\n this.state.page = page;\n this.loadLogs();\n }\n\n onChangeLimit(limit) {\n this.state.page = 1;\n this.state.limit = limit;\n this.loadLogs();\n }\n\n onChangeSort(sort) {\n this.state.page = 1;\n this.state.sort = sort;\n this.loadLogs();\n }\n\n onChangeContextFilter(filterKey, filterState) {\n this.state.contextFilter = filterState;\n this.loadLogs();\n }\n\n onChangeTypeFilter(filterKey, filterState) {\n this.state.typeFilter = filterState;\n this.loadLogs();\n }\n\n onChangeKeyword(keyword) {\n this.state.page = 1;\n this.state.keyword = keyword;\n this.loadLogs();\n }\n\n onChangeDate({ startDate, endDate }) {\n this.state.page = 1;\n this.state.date = { to: endDate, from: startDate };\n this.loadLogs();\n }\n\n async export() {\n return this.$async(async () => {\n try {\n await this.UserActivityService.saveAuthLogsAsCSV(this.state.sort, this.state.keyword, this.state.date, this.state.contextFilter);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading auth activity logs csv');\n }\n });\n }\n\n async loadLogs() {\n return this.$async(async () => {\n this.state.logs = null;\n const offset = (this.state.page - 1) * this.state.limit;\n try {\n const { logs, totalCount } = await this.UserActivityService.authLogs(\n offset,\n this.state.limit,\n this.state.sort,\n this.state.keyword,\n this.state.date,\n this.state.contextFilter,\n this.state.typeFilter\n );\n this.state.logs = decorateLogs(logs);\n this.state.totalItems = totalCount;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed loading auth activity logs');\n }\n });\n }\n\n $onInit() {\n return this.$async(async () => {\n this.loadLogs();\n });\n }\n}\n\nfunction decorateLogs(logs) {\n return logs;\n}\n","const autoNgTemplateLoaderTemplate1 = require('./auth-logs-view.html');\n\nimport controller from './auth-logs-view.controller.js';\n\nexport const authLogsView = {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n};\n","import angular from 'angular';\n\nimport { authLogsView } from './auth-logs-view';\nimport { authLogsDatatable } from './auth-logs-datatable';\n\nexport default angular.module('portainer.app.user-activity.auth-logs-view', []).component('authLogsView', authLogsView).component('authLogsDatatable', authLogsDatatable).name;\n","import angular from 'angular';\n\nimport authLogsViewModule from './auth-logs-view';\nimport activityLogsViewModule from './activity-logs-view';\n\nimport { UserActivity } from './user-activity.rest';\nimport { UserActivityService } from './user-activity.service';\n\nexport default angular\n .module('portainer.app.user-activity', [authLogsViewModule, activityLogsViewModule])\n .service('UserActivity', UserActivity)\n .service('UserActivityService', UserActivityService)\n\n .config(config).name;\n\n/* @ngInject */\nfunction config($stateRegistryProvider) {\n $stateRegistryProvider.register({\n name: 'portainer.authLogs',\n url: '/auth-logs',\n views: {\n 'content@': {\n component: 'authLogsView',\n },\n },\n });\n\n $stateRegistryProvider.register({\n name: 'portainer.activityLogs',\n url: '/activity-logs',\n views: {\n 'content@': {\n component: 'activityLogsView',\n },\n },\n });\n}\n","/* @ngInject */\nexport function UserActivity($resource, $http) {\n const BASE_URL = '/api/useractivity';\n\n const resource = $resource(\n `${BASE_URL}/:action`,\n {},\n {\n authLogs: { method: 'GET', params: { action: 'authlogs' } },\n logs: { method: 'GET', params: { action: 'logs' } },\n }\n );\n\n return { authLogsAsCSV, logsAsCSV, ...resource };\n\n async function authLogsAsCSV(params) {\n return $http({\n method: 'GET',\n url: `${BASE_URL}/authlogs.csv`,\n params,\n responseType: 'blob',\n headers: {\n 'Content-type': 'text/csv',\n },\n });\n }\n\n async function logsAsCSV(params) {\n return $http({\n method: 'GET',\n url: `${BASE_URL}/logs.csv`,\n params,\n responseType: 'blob',\n headers: {\n 'Content-type': 'text/csv',\n },\n });\n }\n}\n","/* @ngInject */\nexport function UserActivityService(FileSaver, UserActivity) {\n return { authLogs, saveAuthLogsAsCSV, logs, saveLogsAsCSV };\n\n function authLogs(offset, limit, sort, keyword, date, contexts, types) {\n return UserActivity.authLogs({ offset, limit, keyword, before: date.to, after: date.from, sortBy: sort.key, sortDesc: sort.desc, contexts, types }).$promise;\n }\n\n async function saveAuthLogsAsCSV(sort, keyword, date, contexts, types) {\n const response = await UserActivity.authLogsAsCSV({ keyword, before: date.to, after: date.from, sortBy: sort.key, sortDesc: sort.desc, limit: 2000, contexts, types });\n return FileSaver.saveAs(response.data, 'logs.csv');\n }\n\n function logs(offset, limit, sort, keyword, date) {\n return UserActivity.logs({ offset, limit, keyword, before: date.to, after: date.from, sortBy: sort.key, sortDesc: sort.desc }).$promise;\n }\n\n async function saveLogsAsCSV(sort, keyword, date) {\n const response = await UserActivity.logsAsCSV({ keyword, before: date.to, after: date.from, sortBy: sort.key, sortDesc: sort.desc, limit: 2000 });\n return FileSaver.saveAs(response.data, 'logs.csv');\n }\n}\n","angular.module('portainer.app').controller('AccountController', [\n '$scope',\n '$state',\n 'Authentication',\n 'UserService',\n 'Notifications',\n 'SettingsService',\n 'ModalService',\n function ($scope, $state, Authentication, UserService, Notifications, SettingsService, ModalService) {\n $scope.formValues = {\n currentPassword: '',\n newPassword: '',\n confirmPassword: '',\n };\n\n $scope.updatePassword = async function () {\n const confirmed = await ModalService.confirmChangePassword();\n if (confirmed) {\n try {\n await UserService.updateUserPassword($scope.userID, $scope.formValues.currentPassword, $scope.formValues.newPassword);\n Notifications.success('Success', 'Password successfully updated');\n $state.go('portainer.logout');\n } catch (err) {\n Notifications.error('Failure', err, err.msg);\n }\n }\n };\n\n $scope.removeAction = (selectedTokens) => {\n const msg = 'Do you want to remove the selected access token(s)? Any script or application using these tokens will no longer be able to invoke the Portainer API.';\n\n ModalService.confirmDeletion(msg, (confirmed) => {\n if (!confirmed) {\n return;\n }\n let actionCount = selectedTokens.length;\n selectedTokens.forEach((token) => {\n UserService.deleteAccessToken($scope.userID, token.id)\n .then(() => {\n Notifications.success('Token successfully removed');\n var index = $scope.tokens.indexOf(token);\n $scope.tokens.splice(index, 1);\n })\n .catch((err) => {\n Notifications.error('Failure', err, 'Unable to remove token');\n })\n .finally(() => {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n });\n };\n\n function initView() {\n $scope.userID = Authentication.getUserDetails().ID;\n SettingsService.publicSettings()\n .then(function success(data) {\n $scope.AuthenticationMethod = data.AuthenticationMethod;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\n UserService.getAccessTokens($scope.userID)\n .then(function success(data) {\n $scope.tokens = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve user tokens');\n });\n }\n\n initView();\n },\n]);\n","export default class CreateUserAccessTokenController {\n /* @ngInject */\n constructor($async, $analytics, Authentication, UserService, Notifications) {\n this.$async = $async;\n this.$analytics = $analytics;\n this.Authentication = Authentication;\n this.UserService = UserService;\n this.Notifications = Notifications;\n\n this.onSubmit = this.onSubmit.bind(this);\n this.onError = this.onError.bind(this);\n }\n\n async onSubmit(description) {\n const accessToken = await this.UserService.createAccessToken(this.state.userId, description);\n // Dispatch analytics event upon success accessToken generation\n this.$analytics.eventTrack('portainer-account-access-token-create', { category: 'portainer' });\n return accessToken;\n }\n\n onError(heading, error, message) {\n this.Notifications.error(heading, error, message);\n }\n\n $onInit() {\n return this.$async(async () => {\n const userId = this.Authentication.getUserDetails().ID;\n this.state = {\n userId,\n };\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./create-user-access-token.html');\n\nimport angular from 'angular';\nimport controller from './create-user-access-token.controller';\n\nangular.module('portainer.app').component('createUserAccessToken', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","import angular from 'angular';\nimport uuidv4 from 'uuid/v4';\n\nclass AuthenticationController {\n /* @ngInject */\n constructor(\n $async,\n $analytics,\n $scope,\n $state,\n $stateParams,\n $window,\n Authentication,\n UserService,\n EndpointService,\n StateManager,\n Notifications,\n SettingsService,\n URLHelper,\n LocalStorage,\n StatusService,\n LicenseService\n ) {\n this.$async = $async;\n this.$analytics = $analytics;\n this.$scope = $scope;\n this.$state = $state;\n this.$stateParams = $stateParams;\n this.$window = $window;\n this.Authentication = Authentication;\n this.UserService = UserService;\n this.EndpointService = EndpointService;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.SettingsService = SettingsService;\n this.URLHelper = URLHelper;\n this.LocalStorage = LocalStorage;\n this.StatusService = StatusService;\n this.LicenseService = LicenseService;\n\n this.logo = this.StateManager.getState().application.logo;\n this.formValues = {\n Username: '',\n Password: '',\n };\n this.state = {\n showOAuthLogin: false,\n showStandardLogin: false,\n AuthenticationError: '',\n loginInProgress: true,\n OAuthProvider: '',\n };\n\n this.checkForEndpointsAsync = this.checkForEndpointsAsync.bind(this);\n this.checkForLicensesAsync = this.checkForLicensesAsync.bind(this);\n this.checkForLatestVersionAsync = this.checkForLatestVersionAsync.bind(this);\n this.postLoginSteps = this.postLoginSteps.bind(this);\n\n this.oAuthLoginAsync = this.oAuthLoginAsync.bind(this);\n this.internalLoginAsync = this.internalLoginAsync.bind(this);\n\n this.authenticateUserAsync = this.authenticateUserAsync.bind(this);\n\n this.manageOauthCodeReturn = this.manageOauthCodeReturn.bind(this);\n this.authEnabledFlowAsync = this.authEnabledFlowAsync.bind(this);\n this.onInit = this.onInit.bind(this);\n }\n\n /**\n * UTILS FUNCTIONS SECTION\n */\n\n logout(error) {\n this.Authentication.logout();\n this.state.loginInProgress = false;\n this.generateOAuthLoginURI();\n this.LocalStorage.storeLogoutReason(error);\n this.$window.location.reload();\n }\n\n error(err, message) {\n this.state.AuthenticationError = message;\n if (!err) {\n err = {};\n }\n this.Notifications.error('Failure', err, message);\n this.state.loginInProgress = false;\n }\n\n determineOauthProvider(LoginURI) {\n if (LoginURI.indexOf('login.microsoftonline.com') !== -1) {\n return 'Microsoft';\n } else if (LoginURI.indexOf('accounts.google.com') !== -1) {\n return 'Google';\n } else if (LoginURI.indexOf('github.com') !== -1) {\n return 'Github';\n }\n return 'OAuth';\n }\n\n generateState() {\n const uuid = uuidv4();\n this.LocalStorage.storeLoginStateUUID(uuid);\n return '&state=' + uuid;\n }\n\n generateOAuthLoginURI() {\n this.OAuthLoginURI = this.state.OAuthLoginURI + this.generateState();\n }\n\n hasValidState(state) {\n const savedUUID = this.LocalStorage.getLoginStateUUID();\n return savedUUID && state && savedUUID === state;\n }\n\n /**\n * END UTILS FUNCTIONS SECTION\n */\n\n /**\n * POST LOGIN STEPS SECTION\n */\n\n async checkForEndpointsAsync() {\n try {\n const endpoints = await this.EndpointService.endpoints(0, 1);\n\n if (endpoints.value.length === 0) {\n return 'portainer.wizard';\n }\n } catch (err) {\n this.error(err, 'Unable to retrieve environments');\n }\n return 'portainer.home';\n }\n\n async checkForLicensesAsync() {\n try {\n const info = await this.LicenseService.info();\n\n if (!info.valid) {\n return 'portainer.init.license';\n }\n } catch (err) {\n this.error(err, 'Unable to retrieve licenses info');\n }\n }\n\n async checkForLatestVersionAsync() {\n let versionInfo = {\n UpdateAvailable: false,\n LatestVersion: '',\n };\n\n try {\n const versionStatus = await this.StatusService.version();\n if (versionStatus.UpdateAvailable) {\n versionInfo.UpdateAvailable = true;\n versionInfo.LatestVersion = versionStatus.LatestVersion;\n }\n } finally {\n this.StateManager.setVersionInfo(versionInfo);\n }\n }\n\n async postLoginSteps() {\n await this.StateManager.initialize();\n\n const isAdmin = this.Authentication.isAdmin();\n this.$analytics.setUserRole(isAdmin ? 'admin' : 'standard-user');\n\n let path = 'portainer.home';\n if (isAdmin) {\n path = await this.checkForLicensesAsync();\n if (!path) {\n path = await this.checkForEndpointsAsync();\n }\n }\n\n this.$state.go(path);\n }\n /**\n * END POST LOGIN STEPS SECTION\n */\n\n /**\n * LOGIN METHODS SECTION\n */\n\n async oAuthLoginAsync(code) {\n try {\n await this.Authentication.OAuthLogin(code);\n this.URLHelper.cleanParameters();\n } catch (err) {\n this.error(err, 'Unable to login via OAuth');\n }\n }\n\n async internalLoginAsync(username, password) {\n await this.Authentication.login(username, password);\n await this.postLoginSteps();\n }\n\n /**\n * END LOGIN METHODS SECTION\n */\n\n /**\n * AUTHENTICATE USER SECTION\n */\n\n async authenticateUserAsync() {\n try {\n var username = this.formValues.Username;\n var password = this.formValues.Password;\n this.state.loginInProgress = true;\n await this.internalLoginAsync(username, password);\n } catch (err) {\n this.error(err, 'Unable to login');\n }\n }\n\n authenticateUser() {\n return this.$async(this.authenticateUserAsync);\n }\n\n /**\n * END AUTHENTICATE USER SECTION\n */\n\n /**\n * ON INIT SECTION\n */\n async manageOauthCodeReturn(code, state) {\n if (this.hasValidState(state)) {\n await this.oAuthLoginAsync(code);\n } else {\n this.error(null, 'Invalid OAuth state, try again.');\n }\n }\n\n async authEnabledFlowAsync() {\n try {\n const exists = await this.UserService.administratorExists();\n if (!exists) {\n this.$state.go('portainer.init.admin');\n }\n } catch (err) {\n this.error(err, 'Unable to verify administrator account existence');\n }\n }\n\n toggleStandardLogin() {\n this.state.showStandardLogin = !this.state.showStandardLogin;\n }\n\n async onInit() {\n try {\n const settings = await this.SettingsService.publicSettings();\n this.state.hideInternalAuth = settings.OAuthHideInternalAuth;\n this.state.showOAuthLogin = settings.AuthenticationMethod === 3;\n this.state.showStandardLogin = !this.state.showOAuthLogin;\n this.state.OAuthLoginURI = settings.OAuthLoginURI;\n this.state.OAuthProvider = this.determineOauthProvider(settings.OAuthLoginURI);\n\n const code = this.URLHelper.getParameter('code');\n const state = this.URLHelper.getParameter('state');\n if (code && state) {\n await this.manageOauthCodeReturn(code, state);\n this.generateOAuthLoginURI();\n return;\n }\n if (!this.logo) {\n await this.StateManager.initialize();\n this.logo = this.StateManager.getState().application.logo;\n }\n this.generateOAuthLoginURI();\n\n if (this.$stateParams.logout || this.$stateParams.error) {\n this.logout(this.$stateParams.error);\n return;\n }\n const error = this.LocalStorage.getLogoutReason();\n if (error) {\n this.state.AuthenticationError = error;\n this.LocalStorage.cleanLogoutReason();\n }\n\n if (this.Authentication.isAuthenticated()) {\n await this.postLoginSteps();\n }\n this.state.loginInProgress = false;\n\n if (this.state.hideInternalAuth && !this.Authentication.isAuthenticated()) {\n this.$window.location.href = this.OAuthLoginURI;\n }\n\n await this.authEnabledFlowAsync();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve public settings');\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * END ON INIT SECTION\n */\n}\n\nexport default AuthenticationController;\nangular.module('portainer.app').controller('AuthenticationController', AuthenticationController);\n","import _ from 'lodash';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\nimport { TEMPLATE_NAME_VALIDATION_REGEX } from '@/constants';\n\nclass CreateCustomTemplateViewController {\n /* @ngInject */\n constructor($async, $state, $window, Authentication, ModalService, CustomTemplateService, FormValidator, Notifications, ResourceControlService, StackService, StateManager) {\n Object.assign(this, {\n $async,\n $state,\n $window,\n Authentication,\n ModalService,\n CustomTemplateService,\n FormValidator,\n Notifications,\n ResourceControlService,\n StackService,\n StateManager,\n });\n\n this.formValues = {\n Title: '',\n FileContent: '',\n File: null,\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n ComposeFilePathInRepository: 'docker-compose.yml',\n Description: '',\n Note: '',\n Logo: '',\n Platform: 1,\n Type: 1,\n AccessControlData: new AccessControlFormData(),\n };\n\n this.state = {\n Method: 'editor',\n formValidationError: '',\n actionInProgress: false,\n fromStack: false,\n loading: true,\n isEditorDirty: false,\n templateNameRegex: TEMPLATE_NAME_VALIDATION_REGEX,\n };\n\n this.templates = [];\n\n this.createCustomTemplate = this.createCustomTemplate.bind(this);\n this.createCustomTemplateAsync = this.createCustomTemplateAsync.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.createCustomTemplateByMethod = this.createCustomTemplateByMethod.bind(this);\n this.createCustomTemplateFromFileContent = this.createCustomTemplateFromFileContent.bind(this);\n this.createCustomTemplateFromFileUpload = this.createCustomTemplateFromFileUpload.bind(this);\n this.createCustomTemplateFromGitRepository = this.createCustomTemplateFromGitRepository.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.onChangeMethod = this.onChangeMethod.bind(this);\n this.onChangeFormValues = this.onChangeFormValues.bind(this);\n }\n\n createCustomTemplate() {\n return this.$async(this.createCustomTemplateAsync);\n }\n\n onChangeMethod() {\n this.formValues.FileContent = '';\n this.selectedTemplate = null;\n }\n\n async createCustomTemplateAsync() {\n let method = this.state.Method;\n\n if (method === 'template') {\n method = 'editor';\n }\n\n if (!this.validateForm(method)) {\n return;\n }\n\n this.state.actionInProgress = true;\n try {\n const customTemplate = await this.createCustomTemplateByMethod(method);\n\n const accessControlData = this.formValues.AccessControlData;\n const userDetails = this.Authentication.getUserDetails();\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, customTemplate.ResourceControl);\n\n this.Notifications.success('Custom template successfully created');\n this.state.isEditorDirty = false;\n this.$state.go('docker.templates.custom');\n } catch (err) {\n this.Notifications.error('Failure', err, 'A template with the same name already exists');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n validateForm(method) {\n this.state.formValidationError = '';\n\n if (method === 'editor' && this.formValues.FileContent === '') {\n this.state.formValidationError = 'Template file content must not be empty';\n return false;\n }\n\n const title = this.formValues.Title;\n const isNotUnique = _.some(this.templates, (template) => template.Title === title);\n if (isNotUnique) {\n this.state.formValidationError = 'A template with the same name already exists';\n return false;\n }\n\n const isAdmin = this.Authentication.isAdmin();\n const accessControlData = this.formValues.AccessControlData;\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n\n return true;\n }\n\n createCustomTemplateByMethod(method) {\n switch (method) {\n case 'editor':\n return this.createCustomTemplateFromFileContent();\n case 'upload':\n return this.createCustomTemplateFromFileUpload();\n case 'repository':\n return this.createCustomTemplateFromGitRepository();\n }\n }\n\n createCustomTemplateFromFileContent() {\n return this.CustomTemplateService.createCustomTemplateFromFileContent(this.formValues);\n }\n\n createCustomTemplateFromFileUpload() {\n return this.CustomTemplateService.createCustomTemplateFromFileUpload(this.formValues);\n }\n\n createCustomTemplateFromGitRepository() {\n return this.CustomTemplateService.createCustomTemplateFromGitRepository(this.formValues);\n }\n\n editorUpdate(cm) {\n this.formValues.FileContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n\n onChangeFormValues(newValues) {\n this.formValues = newValues;\n }\n\n async $onInit() {\n const applicationState = this.StateManager.getState();\n\n this.state.endpointMode = applicationState.endpoint.mode;\n let stackType = 0;\n if (this.state.endpointMode.provider === 'DOCKER_STANDALONE') {\n stackType = 2;\n } else if (this.state.endpointMode.provider === 'DOCKER_SWARM_MODE') {\n stackType = 1;\n }\n this.formValues.Type = stackType;\n\n const { fileContent, type } = this.$state.params;\n\n this.formValues.FileContent = fileContent;\n if (type) {\n this.formValues.Type = +type;\n }\n\n try {\n this.templates = await this.CustomTemplateService.customTemplates([1, 2]);\n } catch (err) {\n this.Notifications.error('Failure loading', err, 'Failed loading custom templates');\n }\n\n this.state.loading = false;\n\n this.$window.onbeforeunload = () => {\n if (this.state.Method === 'editor' && this.formValues.FileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n\n async uiCanExit() {\n if (this.state.Method === 'editor' && this.formValues.FileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n}\n\nexport default CreateCustomTemplateViewController;\n","const autoNgTemplateLoaderTemplate1 = require('./createCustomTemplateView.html');\n\nimport CreateCustomTemplateViewController from './createCustomTemplateViewController.js';\n\nangular.module('portainer.app').component('createCustomTemplateView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateCustomTemplateViewController,\n});\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\nimport { TEMPLATE_NAME_VALIDATION_REGEX } from '@/constants';\n\nclass CustomTemplatesViewController {\n /* @ngInject */\n constructor(\n $anchorScroll,\n $async,\n $rootScope,\n $state,\n Authentication,\n CustomTemplateService,\n FormValidator,\n ModalService,\n NetworkService,\n Notifications,\n ResourceControlService,\n StackService,\n StateManager\n ) {\n this.$anchorScroll = $anchorScroll;\n this.$async = $async;\n this.$rootScope = $rootScope;\n this.$state = $state;\n this.Authentication = Authentication;\n this.CustomTemplateService = CustomTemplateService;\n this.FormValidator = FormValidator;\n this.ModalService = ModalService;\n this.NetworkService = NetworkService;\n this.Notifications = Notifications;\n this.ResourceControlService = ResourceControlService;\n this.StateManager = StateManager;\n this.StackService = StackService;\n\n this.DOCKER_STANDALONE = 'DOCKER_STANDALONE';\n this.DOCKER_SWARM_MODE = 'DOCKER_SWARM_MODE';\n\n this.state = {\n selectedTemplate: null,\n showAdvancedOptions: false,\n formValidationError: '',\n actionInProgress: false,\n isEditorVisible: false,\n deployable: false,\n templateNameRegex: TEMPLATE_NAME_VALIDATION_REGEX,\n };\n\n this.currentUser = {\n isAdmin: false,\n id: null,\n };\n\n this.formValues = {\n network: '',\n name: '',\n fileContent: '',\n AccessControlData: new AccessControlFormData(),\n };\n\n this.getTemplates = this.getTemplates.bind(this);\n this.getTemplatesAsync = this.getTemplatesAsync.bind(this);\n this.removeTemplates = this.removeTemplates.bind(this);\n this.removeTemplatesAsync = this.removeTemplatesAsync.bind(this);\n this.validateForm = this.validateForm.bind(this);\n this.createStack = this.createStack.bind(this);\n this.createStackAsync = this.createStackAsync.bind(this);\n this.selectTemplate = this.selectTemplate.bind(this);\n this.selectTemplateAsync = this.selectTemplateAsync.bind(this);\n this.unselectTemplate = this.unselectTemplate.bind(this);\n this.unselectTemplateAsync = this.unselectTemplateAsync.bind(this);\n this.getNetworks = this.getNetworks.bind(this);\n this.getNetworksAsync = this.getNetworksAsync.bind(this);\n this.confirmDelete = this.confirmDelete.bind(this);\n this.confirmDeleteAsync = this.confirmDeleteAsync.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n this.isEditAllowed = this.isEditAllowed.bind(this);\n }\n\n isEditAllowed(template) {\n return this.currentUser.isAdmin || this.currentUser.id === template.CreatedByUserId;\n }\n\n getTemplates() {\n return this.$async(this.getTemplatesAsync);\n }\n async getTemplatesAsync() {\n try {\n this.templates = await this.CustomTemplateService.customTemplates([1, 2]);\n } catch (err) {\n this.Notifications.error('Failed loading templates', err, 'Unable to load custom templates');\n }\n }\n\n removeTemplates(templates) {\n return this.$async(this.removeTemplatesAsync, templates);\n }\n async removeTemplatesAsync(templates) {\n for (let template of templates) {\n try {\n await this.CustomTemplateService.remove(template.id);\n this.Notifications.success('Removed template successfully');\n _.remove(this.templates, template);\n } catch (err) {\n this.Notifications.error('Failed removing template', err, 'Unable to remove custom template');\n }\n }\n }\n\n validateForm(accessControlData, isAdmin) {\n this.state.formValidationError = '';\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n createStack() {\n return this.$async(this.createStackAsync);\n }\n async createStackAsync() {\n const userId = this.currentUser.id;\n const accessControlData = this.formValues.AccessControlData;\n\n if (!this.validateForm(accessControlData, this.currentUser.isAdmin)) {\n return;\n }\n const stackName = this.formValues.name;\n\n const endpointId = this.endpoint.Id;\n\n this.state.actionInProgress = true;\n\n try {\n const file = this.formValues.fileContent;\n const createAction = this.state.selectedTemplate.Type === 1 ? this.StackService.createSwarmStackFromFileContent : this.StackService.createComposeStackFromFileContent;\n const { ResourceControl: resourceControl } = await createAction(stackName, file, [], endpointId);\n await this.ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n this.Notifications.success('Stack successfully deployed');\n this.$state.go('docker.stacks');\n } catch (err) {\n this.Notifications.error('Deployment error', err, 'Failed to deploy stack');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n unselectTemplate(template) {\n // wrapping unselect with async to make a digest cycle run between unselect to select\n return this.$async(this.unselectTemplateAsync, template);\n }\n async unselectTemplateAsync(template) {\n template.Selected = false;\n this.state.selectedTemplate = null;\n\n this.formValues = {\n network: '',\n name: '',\n fileContent: '',\n AccessControlData: new AccessControlFormData(),\n };\n }\n\n selectTemplate(template) {\n return this.$async(this.selectTemplateAsync, template);\n }\n async selectTemplateAsync(template) {\n if (!this.Authentication.isAdmin() && !this.Authentication.hasAuthorizations(['DockerContainerCreate', 'PortainerStackCreate'])) {\n return;\n }\n\n if (this.state.selectedTemplate) {\n await this.unselectTemplate(this.state.selectedTemplate);\n }\n\n template.Selected = true;\n\n this.formValues.network = _.find(this.availableNetworks, function (o) {\n return o.Name === 'bridge';\n });\n\n this.formValues.name = template.Title ? template.Title : '';\n this.state.selectedTemplate = template;\n const applicationState = this.StateManager.getState();\n this.state.deployable = this.isDeployable(applicationState.endpoint, template.Type);\n this.$anchorScroll('view-top');\n\n const file = await this.CustomTemplateService.customTemplateFile(template.Id);\n this.formValues.fileContent = file;\n }\n\n isDeployable(endpoint, templateType) {\n let deployable = false;\n switch (templateType) {\n case 1:\n deployable = endpoint.mode.provider === this.DOCKER_SWARM_MODE;\n break;\n case 2:\n deployable = endpoint.mode.provider === this.DOCKER_STANDALONE;\n break;\n }\n\n return deployable;\n }\n\n getNetworks(provider, apiVersion) {\n return this.$async(this.getNetworksAsync, provider, apiVersion);\n }\n async getNetworksAsync(provider, apiVersion) {\n try {\n const networks = await this.NetworkService.networks(\n provider === 'DOCKER_STANDALONE' || provider === 'DOCKER_SWARM_MODE',\n false,\n provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25\n );\n this.availableNetworks = networks;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to load networks.');\n }\n }\n\n confirmDelete(templateId) {\n return this.$async(this.confirmDeleteAsync, templateId);\n }\n async confirmDeleteAsync(templateId) {\n const confirmed = await this.ModalService.confirmDeletionAsync('Are you sure that you want to delete this template?');\n if (!confirmed) {\n return;\n }\n\n try {\n await this.CustomTemplateService.remove(templateId);\n _.remove(this.templates, { Id: templateId });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed to delete template');\n }\n }\n\n editorUpdate(cm) {\n this.formValues.fileContent = cm.getValue();\n }\n\n $onInit() {\n const applicationState = this.StateManager.getState();\n\n const {\n endpoint: { mode: endpointMode },\n apiVersion,\n } = applicationState;\n\n this.getTemplates();\n this.getNetworks(endpointMode.provider, apiVersion);\n\n this.currentUser.isAdmin = this.Authentication.isAdmin();\n const user = this.Authentication.getUserDetails();\n this.currentUser.id = user.ID;\n }\n}\n\nexport default CustomTemplatesViewController;\n","const autoNgTemplateLoaderTemplate1 = require('./customTemplatesView.html');\n\nimport CustomTemplatesViewController from './customTemplatesViewController.js';\n\nangular.module('portainer.app').component('customTemplatesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CustomTemplatesViewController,\n bindings: {\n endpoint: '<',\n },\n});\n","import _ from 'lodash';\n\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\nimport { ResourceControlViewModel } from 'Portainer/models/resourceControl/resourceControl';\n\nclass EditCustomTemplateViewController {\n /* @ngInject */\n constructor($async, $state, $window, ModalService, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService) {\n Object.assign(this, { $async, $state, $window, ModalService, Authentication, CustomTemplateService, FormValidator, Notifications, ResourceControlService });\n\n this.formValues = null;\n this.state = {\n formValidationError: '',\n isEditorDirty: false,\n };\n this.templates = [];\n\n this.getTemplate = this.getTemplate.bind(this);\n this.getTemplateAsync = this.getTemplateAsync.bind(this);\n this.submitAction = this.submitAction.bind(this);\n this.submitActionAsync = this.submitActionAsync.bind(this);\n this.editorUpdate = this.editorUpdate.bind(this);\n }\n\n getTemplate() {\n return this.$async(this.getTemplateAsync);\n }\n async getTemplateAsync() {\n try {\n const [template, file] = await Promise.all([\n this.CustomTemplateService.customTemplate(this.$state.params.id),\n this.CustomTemplateService.customTemplateFile(this.$state.params.id),\n ]);\n template.FileContent = file;\n this.formValues = template;\n this.oldFileContent = this.formValues.FileContent;\n this.formValues.ResourceControl = new ResourceControlViewModel(template.ResourceControl);\n this.formValues.AccessControlData = new AccessControlFormData();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve custom template data');\n }\n }\n\n validateForm() {\n this.state.formValidationError = '';\n\n if (!this.formValues.FileContent) {\n this.state.formValidationError = 'Template file content must not be empty';\n return false;\n }\n\n const title = this.formValues.Title;\n const id = this.$state.params.id;\n const isNotUnique = _.some(this.templates, (template) => template.Title === title && template.Id != id);\n if (isNotUnique) {\n this.state.formValidationError = `A template with the name ${title} already exists`;\n return false;\n }\n\n const isAdmin = this.Authentication.isAdmin();\n const accessControlData = this.formValues.AccessControlData;\n const error = this.FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n this.state.formValidationError = error;\n return false;\n }\n\n return true;\n }\n\n submitAction() {\n return this.$async(this.submitActionAsync);\n }\n async submitActionAsync() {\n if (!this.validateForm()) {\n return;\n }\n\n this.actionInProgress = true;\n try {\n await this.CustomTemplateService.updateCustomTemplate(this.formValues.Id, this.formValues);\n\n const userDetails = this.Authentication.getUserDetails();\n const userId = userDetails.ID;\n await this.ResourceControlService.applyResourceControl(userId, this.formValues.AccessControlData, this.formValues.ResourceControl);\n\n this.Notifications.success('Custom template successfully updated');\n this.state.isEditorDirty = false;\n this.$state.go('docker.templates.custom');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to update custom template');\n } finally {\n this.actionInProgress = false;\n }\n }\n\n editorUpdate(cm) {\n if (this.formValues.FileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== cm.getValue().replace(/(\\r\\n|\\n|\\r)/gm, '')) {\n this.formValues.FileContent = cm.getValue();\n this.state.isEditorDirty = true;\n }\n }\n\n async uiCanExit() {\n if (this.formValues.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return this.ModalService.confirmWebEditorDiscard();\n }\n }\n\n async $onInit() {\n this.getTemplate();\n\n try {\n this.templates = await this.CustomTemplateService.customTemplates([1, 2]);\n } catch (err) {\n this.Notifications.error('Failure loading', err, 'Failed loading custom templates');\n }\n\n this.$window.onbeforeunload = () => {\n if (this.formValues.FileContent !== this.oldFileContent && this.state.isEditorDirty) {\n return '';\n }\n };\n }\n\n $onDestroy() {\n this.state.isEditorDirty = false;\n }\n}\n\nexport default EditCustomTemplateViewController;\n","const autoNgTemplateLoaderTemplate1 = require('./editCustomTemplateView.html');\n\nimport EditCustomTemplateViewController from './editCustomTemplateViewController.js';\n\nangular.module('portainer.app').component('editCustomTemplateView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: EditCustomTemplateViewController,\n});\n","import uuidv4 from 'uuid/v4';\n\nimport { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\nimport { configureDevice, getProfiles } from 'Portainer/hostmanagement/fdo/fdo.service';\n\nangular\n .module('portainer.app')\n .controller(\n 'ImportDeviceController',\n function ImportDeviceController($async, $q, $scope, $state, EndpointService, GroupService, TagService, Notifications, Authentication, FileUploadService) {\n $scope.state = {\n actionInProgress: false,\n vouchersUploading: false,\n vouchersUploaded: false,\n deviceIDs: [],\n allowCreateTag: Authentication.isAdmin(),\n };\n\n $scope.formValues = {\n DeviceName: '',\n DeviceProfile: '',\n GroupId: 1,\n TagIds: [],\n VoucherFiles: [],\n PortainerURL: '',\n Suffix: 1,\n };\n\n $scope.profiles = [];\n\n $scope.onVoucherFilesChange = function () {\n if ($scope.formValues.VoucherFiles.length < 1) {\n return;\n }\n\n $scope.state.vouchersUploading = true;\n\n let uploads = $scope.formValues.VoucherFiles.map((f) => FileUploadService.uploadOwnershipVoucher(f));\n\n $q.all(uploads)\n .then(function success(responses) {\n $scope.state.vouchersUploading = false;\n $scope.state.vouchersUploaded = true;\n $scope.state.deviceIDs = responses.map((r) => r.data.guid);\n })\n .catch(function error(err) {\n $scope.state.vouchersUploading = false;\n if ($scope.formValues.VoucherFiles.length === 1) {\n Notifications.error('Failure', err, 'Unable to upload the Ownership Voucher');\n } else {\n Notifications.error('Failure', null, 'Unable to upload the Ownership Vouchers, please check the logs');\n }\n });\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.formValues.TagIds = $scope.formValues.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create tag');\n }\n }\n\n $scope.createEndpointAndConfigureDevice = function () {\n return $async(async () => {\n $scope.state.actionInProgress = true;\n\n let suffix = $scope.formValues.Suffix;\n\n for (const deviceID of $scope.state.deviceIDs) {\n let deviceName = $scope.formValues.DeviceName + suffix;\n\n try {\n var endpoint = await EndpointService.createRemoteEndpoint(\n deviceName,\n PortainerEndpointCreationTypes.EdgeAgentEnvironment,\n $scope.formValues.PortainerURL,\n '',\n $scope.formValues.GroupId,\n $scope.formValues.TagIds,\n false,\n false,\n false,\n null,\n null,\n null,\n null,\n true\n );\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create the environment');\n $scope.state.actionInProgress = false;\n return;\n }\n\n suffix++;\n\n const config = {\n edgeID: endpoint.EdgeID || uuidv4(),\n edgeKey: endpoint.EdgeKey,\n name: deviceName,\n profile: $scope.formValues.DeviceProfile,\n };\n\n try {\n await configureDevice(deviceID, config);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to import device');\n return;\n } finally {\n $scope.state.actionInProgress = false;\n }\n }\n\n Notifications.success('Device(s) successfully imported');\n $state.go('edge.devices');\n });\n };\n\n async function initView() {\n try {\n $scope.profiles = await getProfiles();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to load profiles');\n return;\n }\n\n $q.all({\n groups: GroupService.groups(),\n tags: TagService.tags(),\n })\n .then(function success(data) {\n $scope.groups = data.groups;\n $scope.availableTags = data.tags;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load groups');\n });\n }\n\n initView();\n }\n );\n","import angular from 'angular';\n\nimport { createProfile } from 'Portainer/hostmanagement/fdo/fdo.service';\n\nangular.module('portainer.app').controller('AddProfileController', AddProfileController);\n\nexport default function AddProfileController($scope, $async, $state, $window, ModalService, Authentication, Notifications) {\n $scope.formValues = {\n name: '',\n profileFileContent: '',\n };\n\n $scope.state = {\n method: 'editor',\n actionInProgress: false,\n isEditorDirty: false,\n };\n\n $window.onbeforeunload = () => {\n if ($scope.state.method === 'editor' && $scope.formValues.profileFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.$on('$destroy', function () {\n $scope.state.isEditorDirty = false;\n });\n\n $scope.onChangeFormValues = onChangeFormValues;\n\n $scope.createProfileAsync = function () {\n return $async(async () => {\n const method = $scope.state.method;\n\n const name = $scope.formValues.name;\n const fileContent = $scope.formValues.profileFileContent;\n\n if (method !== 'editor' && fileContent === '') {\n $scope.state.formValidationError = 'Profile file content must not be empty';\n return;\n }\n\n $scope.state.actionInProgress = true;\n\n try {\n await createProfile(name, method, fileContent);\n Notifications.success('Profile successfully created');\n $scope.state.isEditorDirty = false;\n $state.go('portainer.settings.edgeCompute');\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create Profile');\n } finally {\n $scope.state.actionInProgress = false;\n }\n });\n };\n\n $scope.onChangeFileContent = function onChangeFileContent(value) {\n $scope.formValues.profileFileContent = value;\n $scope.state.isEditorDirty = true;\n };\n\n function onChangeFormValues(newValues) {\n $scope.formValues = newValues;\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./addProfile.html');\n\nimport angular from 'angular';\n\nimport controller from './addProfileController';\n\nangular.module('portainer.app').component('addProfileView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","import angular from 'angular';\nimport { getProfile, updateProfile } from 'Portainer/hostmanagement/fdo/fdo.service';\n\nangular.module('portainer.app').controller('EditProfileController', EditProfileController);\n\nexport default function EditProfileController($scope, $async, $state, $window, ModalService, Authentication, Notifications) {\n $scope.formValues = {\n name: '',\n profileFileContent: '',\n };\n\n $scope.state = {\n profileID: $state.params.id,\n method: 'editor',\n actionInProgress: false,\n isEditorDirty: false,\n };\n\n $window.onbeforeunload = () => {\n if ($scope.state.method === 'editor' && $scope.formValues.profileFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.$on('$destroy', function () {\n $scope.state.isEditorDirty = false;\n });\n\n $scope.onChangeFormValues = onChangeFormValues;\n\n $scope.updateProfileAsync = function () {\n return $async(async () => {\n const method = $scope.state.method;\n\n const name = $scope.formValues.name;\n const fileContent = $scope.formValues.profileFileContent;\n\n if (method !== 'editor' && fileContent === '') {\n $scope.state.formValidationError = 'Profile file content must not be empty';\n return;\n }\n\n $scope.state.actionInProgress = true;\n\n try {\n await updateProfile($scope.state.profileID, name, fileContent);\n Notifications.success('Profile successfully updated');\n $scope.state.isEditorDirty = false;\n $state.go('portainer.settings.edgeCompute');\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to update Profile');\n } finally {\n $scope.state.actionInProgress = false;\n }\n });\n };\n\n $scope.onChangeFileContent = function onChangeFileContent(value) {\n $scope.formValues.profileFileContent = value;\n $scope.state.isEditorDirty = true;\n };\n\n function onChangeFormValues(newValues) {\n $scope.formValues = newValues;\n }\n\n async function initView() {\n return $async(async () => {\n try {\n const profile = await getProfile($scope.state.profileID);\n\n $scope.formValues = {\n name: profile.name,\n profileFileContent: profile.fileContent,\n };\n $scope.state.isEditorDirty = false;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve profile details');\n }\n });\n }\n\n initView();\n}\n","const autoNgTemplateLoaderTemplate1 = require('./editProfile.html');\n\nimport angular from 'angular';\n\nimport controller from './editProfileController';\n\nangular.module('portainer.app').component('editProfileView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./registries.html');\n\nangular.module('portainer.app').component('endpointRegistriesView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: 'EndpointRegistriesController',\n bindings: {\n endpoint: '<',\n },\n});\n","import { RegistryTypes } from 'Portainer/models/registryTypes';\n\nclass EndpointRegistriesController {\n /* @ngInject */\n constructor($async, Authentication, Notifications, EndpointService) {\n this.$async = $async;\n this.Authentication = Authentication;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n\n this.canManageAccess = this.canManageAccess.bind(this);\n }\n\n canManageAccess(item) {\n return item.Type !== RegistryTypes.ANONYMOUS;\n }\n\n getRegistries() {\n return this.$async(async () => {\n try {\n const registries = await this.EndpointService.registries(this.endpointId);\n this.registries = registries;\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registries');\n }\n });\n }\n\n $onInit() {\n return this.$async(async () => {\n this.Authentication.redirectIfUnauthorized(['PortainerRegistryList']);\n\n this.state = {\n viewReady: false,\n };\n\n try {\n this.endpointType = this.endpoint.Type;\n this.endpointId = this.endpoint.Id;\n await this.getRegistries();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve registries');\n } finally {\n this.state.viewReady = true;\n }\n });\n }\n}\n\nexport default EndpointRegistriesController;\nangular.module('portainer.app').controller('EndpointRegistriesController', EndpointRegistriesController);\n","import angular from 'angular';\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nclass EndpointAccessController {\n /* @ngInject */\n constructor($state, $transition$, Notifications, EndpointService, GroupService, $async) {\n this.$state = $state;\n this.$transition$ = $transition$;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n this.GroupService = GroupService;\n this.$async = $async;\n\n this.limitedFeature = FeatureId.RBAC_ROLES;\n\n this.updateAccess = this.updateAccess.bind(this);\n this.updateAccessAsync = this.updateAccessAsync.bind(this);\n }\n\n async $onInit() {\n this.state = { actionInProgress: false };\n try {\n this.endpoint = await this.EndpointService.endpoint(this.$transition$.params().id);\n this.group = await this.GroupService.group(this.endpoint.GroupId);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environment information');\n }\n }\n\n updateAccess() {\n return this.$async(this.updateAccessAsync);\n }\n\n async updateAccessAsync() {\n try {\n this.state.actionInProgress = true;\n await this.EndpointService.updateEndpoint(this.$transition$.params().id, this.endpoint);\n this.Notifications.success('Access successfully updated');\n this.$state.reload(this.$state.current);\n } catch (err) {\n this.state.actionInProgress = false;\n this.Notifications.error('Failure', err, 'Unable to update accesses');\n }\n }\n}\n\nexport default EndpointAccessController;\nangular.module('portainer.app').controller('EndpointAccessController', EndpointAccessController);\n","import { PortainerEndpointCreationTypes, PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\nimport { getAgentShortVersion } from 'Portainer/views/endpoints/helpers';\nimport { baseHref } from '@/portainer/helpers/pathHelper';\nimport { EndpointSecurityFormData } from '../../../components/endpointSecurity/porEndpointSecurityModel';\n\nangular\n .module('portainer.app')\n .controller(\n 'CreateEndpointController',\n function CreateEndpointController(\n $async,\n $analytics,\n $q,\n $scope,\n $state,\n $filter,\n clipboard,\n EndpointService,\n GroupService,\n TagService,\n SettingsService,\n Notifications,\n Authentication,\n StateManager\n ) {\n $scope.state = {\n EnvironmentType: $state.params.isEdgeDevice ? 'edge_agent' : 'agent',\n PlatformType: 'linux',\n actionInProgress: false,\n deploymentTab: 0,\n allowCreateTag: Authentication.isAdmin(),\n isEdgeDevice: $state.params.isEdgeDevice,\n availableEdgeAgentCheckinOptions: [\n { key: 'Use default interval', value: 0 },\n {\n key: '5 seconds',\n value: 5,\n },\n {\n key: '10 seconds',\n value: 10,\n },\n {\n key: '30 seconds',\n value: 30,\n },\n { key: '5 minutes', value: 300 },\n { key: '1 hour', value: 3600 },\n { key: '1 day', value: 86400 },\n ],\n };\n\n const agentVersion = StateManager.getState().application.version;\n $scope.agentShortVersion = getAgentShortVersion(agentVersion);\n\n $scope.formValues = {\n Name: '',\n URL: '',\n PublicURL: '',\n GroupId: 1,\n SecurityFormData: new EndpointSecurityFormData(),\n AzureApplicationId: '',\n AzureTenantId: '',\n AzureAuthenticationKey: '',\n TagIds: [],\n CheckinInterval: $scope.state.availableEdgeAgentCheckinOptions[0].value,\n };\n\n $scope.copyAgentCommand = function () {\n if ($scope.state.deploymentTab === 2 && $scope.state.PlatformType === 'linux') {\n clipboard.copyText(\n `curl -L https://downloads.portainer.io/agent-stack-ee${$scope.agentShortVersion}.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml portainer-agent`\n );\n } else if ($scope.state.deploymentTab === 2 && $scope.state.PlatformType === 'windows') {\n clipboard.copyText(\n `curl -L https://downloads.portainer.io/agent-stack-ee${$scope.agentShortVersion}-windows.yml -o agent-stack-windows.yml && docker stack deploy --compose-file=agent-stack-windows.yml portainer-agent`\n );\n } else if ($scope.state.deploymentTab === 1) {\n clipboard.copyText(\n `curl -L https://downloads.portainer.io/portainer-agent-ee${$scope.agentShortVersion}-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml`\n );\n } else {\n clipboard.copyText(\n `curl -L https://downloads.portainer.io/portainer-agent-ee${$scope.agentShortVersion}-k8s-lb.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml`\n );\n }\n $('#copyNotification').show().fadeOut(2500);\n };\n\n $scope.setDefaultPortainerInstanceURL = function () {\n const baseHREF = baseHref();\n $scope.formValues.URL = window.location.origin + (baseHREF !== '/' ? baseHREF : '');\n };\n\n $scope.resetEndpointURL = function () {\n $scope.formValues.URL = '';\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.formValues.TagIds = $scope.formValues.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create tag');\n }\n }\n\n $scope.addDockerEndpoint = function () {\n var name = $scope.formValues.Name;\n var URL = $filter('stripprotocol')($scope.formValues.URL);\n var publicURL = $scope.formValues.PublicURL;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n\n if ($scope.formValues.ConnectSocket) {\n URL = $scope.formValues.SocketPath;\n $scope.state.actionInProgress = true;\n EndpointService.createLocalEndpoint(name, URL, publicURL, groupId, tagIds)\n .then(function success() {\n Notifications.success('Environment created', name);\n $state.go('portainer.endpoints', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create environment');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n } else {\n if (publicURL === '') {\n publicURL = URL.split(':')[0];\n }\n var securityData = $scope.formValues.SecurityFormData;\n var TLS = securityData.TLS;\n var TLSMode = securityData.TLSMode;\n var TLSSkipVerify = TLS && (TLSMode === 'tls_client_noca' || TLSMode === 'tls_only');\n var TLSSkipClientVerify = TLS && (TLSMode === 'tls_ca' || TLSMode === 'tls_only');\n var TLSCAFile = TLSSkipVerify ? null : securityData.TLSCACert;\n var TLSCertFile = TLSSkipClientVerify ? null : securityData.TLSCert;\n var TLSKeyFile = TLSSkipClientVerify ? null : securityData.TLSKey;\n\n addEndpoint(\n name,\n PortainerEndpointCreationTypes.LocalDockerEnvironment,\n URL,\n publicURL,\n groupId,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile\n );\n }\n };\n\n $scope.addKubernetesEndpoint = function () {\n var name = $scope.formValues.Name;\n var tagIds = $scope.formValues.TagIds;\n $scope.state.actionInProgress = true;\n EndpointService.createLocalKubernetesEndpoint(name, tagIds)\n .then(function success(result) {\n Notifications.success('Environment created', name);\n $state.go('portainer.k8sendpoint.kubernetesConfig', { id: result.Id });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create environment');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.addAgentEndpoint = addAgentEndpoint;\n async function addAgentEndpoint() {\n return $async(async () => {\n const name = $scope.formValues.Name;\n const URL = $scope.formValues.URL;\n const publicURL = $scope.formValues.PublicURL === '' ? URL.split(':')[0] : $scope.formValues.PublicURL;\n const groupId = $scope.formValues.GroupId;\n const tagIds = $scope.formValues.TagIds;\n\n const endpoint = await addEndpoint(name, PortainerEndpointCreationTypes.AgentEnvironment, URL, publicURL, groupId, tagIds, true, true, true, null, null, null);\n $analytics.eventTrack('portainer-endpoint-creation', { category: 'portainer', metadata: { type: 'agent', platform: platformLabel(endpoint.Type) } });\n });\n\n function platformLabel(type) {\n switch (type) {\n case PortainerEndpointTypes.DockerEnvironment:\n case PortainerEndpointTypes.AgentOnDockerEnvironment:\n case PortainerEndpointTypes.EdgeAgentOnDockerEnvironment:\n return 'docker';\n case PortainerEndpointTypes.KubernetesLocalEnvironment:\n case PortainerEndpointTypes.AgentOnKubernetesEnvironment:\n case PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment:\n return 'kubernetes';\n }\n }\n }\n\n $scope.addEdgeAgentEndpoint = function () {\n var name = $scope.formValues.Name;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n var URL = $scope.formValues.URL;\n\n addEndpoint(name, PortainerEndpointCreationTypes.EdgeAgentEnvironment, URL, '', groupId, tagIds, false, false, false, null, null, null, $scope.formValues.CheckinInterval);\n };\n\n $scope.addAzureEndpoint = function () {\n var name = $scope.formValues.Name;\n var applicationId = $scope.formValues.AzureApplicationId;\n var tenantId = $scope.formValues.AzureTenantId;\n var authenticationKey = $scope.formValues.AzureAuthenticationKey;\n var groupId = $scope.formValues.GroupId;\n var tagIds = $scope.formValues.TagIds;\n\n createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds);\n };\n\n function createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds) {\n $scope.state.actionInProgress = true;\n EndpointService.createAzureEndpoint(name, applicationId, tenantId, authenticationKey, groupId, tagIds)\n .then(function success() {\n Notifications.success('Environment created', name);\n $state.go('portainer.endpoints', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create environment');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n async function addEndpoint(\n name,\n creationType,\n URL,\n PublicURL,\n groupId,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n CheckinInterval\n ) {\n return $async(async () => {\n $scope.state.actionInProgress = true;\n try {\n const endpoint = await EndpointService.createRemoteEndpoint(\n name,\n creationType,\n URL,\n PublicURL,\n groupId,\n tagIds,\n TLS,\n TLSSkipVerify,\n TLSSkipClientVerify,\n TLSCAFile,\n TLSCertFile,\n TLSKeyFile,\n CheckinInterval,\n $scope.state.isEdgeDevice\n );\n\n Notifications.success('Environment created', name);\n switch (endpoint.Type) {\n case PortainerEndpointTypes.EdgeAgentOnDockerEnvironment:\n case PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment:\n $state.go('portainer.endpoints.endpoint', { id: endpoint.Id });\n break;\n case PortainerEndpointTypes.AgentOnKubernetesEnvironment:\n $state.go('portainer.k8sendpoint.kubernetesConfig', { id: endpoint.Id });\n break;\n default:\n $state.go('portainer.endpoints', {}, { reload: true });\n break;\n }\n\n return endpoint;\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to create environment');\n } finally {\n $scope.state.actionInProgress = false;\n }\n });\n }\n\n function initView() {\n $q.all({\n groups: GroupService.groups(),\n tags: TagService.tags(),\n settings: SettingsService.settings(),\n })\n .then(function success(data) {\n $scope.groups = data.groups;\n $scope.availableTags = data.tags;\n\n const settings = data.settings;\n $scope.state.availableEdgeAgentCheckinOptions[0].key += ` (${settings.EdgeAgentCheckinInterval} seconds)`;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load groups');\n });\n }\n\n initView();\n }\n );\n","import _ from 'lodash-es';\nimport uuidv4 from 'uuid/v4';\n\nimport { PortainerEndpointTypes } from '@/portainer/models/endpoint/models';\nimport { EndpointSecurityFormData } from '@/portainer/components/endpointSecurity/porEndpointSecurityModel';\nimport { getAgentShortVersion } from 'Portainer/views/endpoints/helpers';\nimport EndpointHelper from '@/portainer/helpers/endpointHelper';\nimport { getAMTInfo } from 'Portainer/hostmanagement/open-amt/open-amt.service';\n\nangular.module('portainer.app').controller('EndpointController', EndpointController);\n\n/* @ngInject */\nfunction EndpointController(\n $async,\n $scope,\n $state,\n $transition$,\n $filter,\n clipboard,\n EndpointService,\n GroupService,\n TagService,\n Notifications,\n Authentication,\n SettingsService,\n StateManager,\n ModalService\n) {\n const DEPLOYMENT_TABS = {\n SWARM: 'swarm',\n STANDALONE: 'standalone',\n KUBERNETES: 'kubernetes',\n };\n\n const PLATFORM_TYPES = {\n WINDOWS: 'windows',\n LINUX: 'linux',\n };\n\n $scope.agentVersion = StateManager.getState().application.version;\n $scope.agentShortVersion = getAgentShortVersion($scope.agentVersion);\n\n $scope.state = {\n uploadInProgress: false,\n actionInProgress: false,\n deploymentTab: DEPLOYMENT_TABS.KUBERNETES,\n platformType: PLATFORM_TYPES.LINUX,\n azureEndpoint: false,\n kubernetesEndpoint: false,\n agentEndpoint: false,\n edgeEndpoint: false,\n allowCreate: Authentication.isAdmin(),\n availableEdgeAgentCheckinOptions: [\n { key: 'Use default interval', value: 0 },\n {\n key: '5 seconds',\n value: 5,\n },\n {\n key: '10 seconds',\n value: 10,\n },\n {\n key: '30 seconds',\n value: 30,\n },\n { key: '5 minutes', value: 300 },\n { key: '1 hour', value: 3600 },\n { key: '1 day', value: 86400 },\n ],\n allowSelfSignedCerts: true,\n showAMTInfo: false,\n };\n\n $scope.dockerCommands = {\n [DEPLOYMENT_TABS.STANDALONE]: {\n [PLATFORM_TYPES.LINUX]: buildLinuxStandaloneCommand,\n [PLATFORM_TYPES.WINDOWS]: buildWindowsStandaloneCommand,\n },\n [DEPLOYMENT_TABS.SWARM]: {\n [PLATFORM_TYPES.LINUX]: buildLinuxSwarmCommand,\n [PLATFORM_TYPES.WINDOWS]: buildWindowsSwarmCommand,\n },\n [DEPLOYMENT_TABS.KUBERNETES]: {\n [PLATFORM_TYPES.LINUX]: buildKubernetesCommand,\n [PLATFORM_TYPES.WINDOWS]: () => '',\n },\n };\n\n $scope.formValues = {\n SecurityFormData: new EndpointSecurityFormData(),\n EnvVarSource: '',\n };\n\n $scope.isKubernetesDeploymentTabSelected = function () {\n return $scope.state.deploymentTab === DEPLOYMENT_TABS.KUBERNETES;\n };\n\n $scope.copyEdgeAgentDeploymentCommand = copyEdgeAgentDeploymentCommand;\n function copyEdgeAgentDeploymentCommand() {\n let agentVersion = $scope.agentVersion;\n if ($scope.state.deploymentTab == DEPLOYMENT_TABS.KUBERNETES) {\n agentVersion = $scope.agentShortVersion;\n }\n\n const command = $scope.dockerCommands[$scope.state.deploymentTab][$scope.state.platformType](\n agentVersion,\n $scope.endpoint.EdgeID,\n $scope.endpoint.EdgeKey,\n $scope.state.allowSelfSignedCerts\n );\n clipboard.copyText(command.trim());\n $('#copyNotificationDeploymentCommand').show().fadeOut(2500);\n }\n\n $scope.copyEdgeAgentKey = function () {\n clipboard.copyText($scope.endpoint.EdgeKey);\n $('#copyNotificationEdgeKey').show().fadeOut(2500);\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n $scope.onToggleAllowSelfSignedCerts = function onToggleAllowSelfSignedCerts(checked) {\n return $scope.$evalAsync(() => {\n $scope.state.allowSelfSignedCerts = checked;\n });\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.endpoint.TagIds = $scope.endpoint.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failue', err, 'Unable to create tag');\n }\n }\n\n $scope.onDeassociateEndpoint = async function () {\n ModalService.confirmDeassociate((confirmed) => {\n if (confirmed) {\n deassociateEndpoint();\n }\n });\n };\n\n async function deassociateEndpoint() {\n var endpoint = $scope.endpoint;\n\n try {\n $scope.state.actionInProgress = true;\n await EndpointService.deassociateEndpoint(endpoint.Id);\n Notifications.success('Environment de-associated', $scope.endpoint.Name);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to de-associate environment');\n } finally {\n $scope.state.actionInProgress = false;\n }\n }\n\n $scope.updateEndpoint = function () {\n var endpoint = $scope.endpoint;\n var securityData = $scope.formValues.SecurityFormData;\n var TLS = securityData.TLS;\n var TLSMode = securityData.TLSMode;\n var TLSSkipVerify = TLS && (TLSMode === 'tls_client_noca' || TLSMode === 'tls_only');\n var TLSSkipClientVerify = TLS && (TLSMode === 'tls_ca' || TLSMode === 'tls_only');\n\n var payload = {\n Name: endpoint.Name,\n PublicURL: endpoint.PublicURL,\n GroupID: endpoint.GroupId,\n TagIds: endpoint.TagIds,\n EdgeCheckinInterval: endpoint.EdgeCheckinInterval,\n TLS: TLS,\n TLSSkipVerify: TLSSkipVerify,\n TLSSkipClientVerify: TLSSkipClientVerify,\n TLSCACert: TLSSkipVerify || securityData.TLSCACert === endpoint.TLSConfig.TLSCACert ? null : securityData.TLSCACert,\n TLSCert: TLSSkipClientVerify || securityData.TLSCert === endpoint.TLSConfig.TLSCert ? null : securityData.TLSCert,\n TLSKey: TLSSkipClientVerify || securityData.TLSKey === endpoint.TLSConfig.TLSKey ? null : securityData.TLSKey,\n AzureApplicationID: endpoint.AzureCredentials.ApplicationID,\n AzureTenantID: endpoint.AzureCredentials.TenantID,\n AzureAuthenticationKey: endpoint.AzureCredentials.AuthenticationKey,\n };\n\n if (!$scope.showSecurity) {\n delete payload.TLS;\n }\n\n if (\n $scope.endpointType !== 'local' &&\n endpoint.Type !== PortainerEndpointTypes.AzureEnvironment &&\n endpoint.Type !== PortainerEndpointTypes.KubernetesLocalEnvironment &&\n endpoint.Type !== PortainerEndpointTypes.AgentOnKubernetesEnvironment\n ) {\n payload.URL = 'tcp://' + endpoint.URL;\n }\n\n if (endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment) {\n payload.URL = endpoint.URL;\n }\n\n if (endpoint.Type === PortainerEndpointTypes.KubernetesLocalEnvironment) {\n payload.URL = 'https://' + endpoint.URL;\n }\n\n $scope.state.actionInProgress = true;\n EndpointService.updateEndpoint(endpoint.Id, payload).then(\n function success() {\n Notifications.success('Environment updated', $scope.endpoint.Name);\n $state.go('portainer.endpoints', {}, { reload: true });\n },\n function error(err) {\n Notifications.error('Failure', err, 'Unable to update environment');\n $scope.state.actionInProgress = false;\n },\n function update(evt) {\n if (evt.upload) {\n $scope.state.uploadInProgress = evt.upload;\n }\n }\n );\n };\n\n function decodeEdgeKey(key) {\n let keyInformation = {};\n\n if (key === '') {\n return keyInformation;\n }\n\n let decodedKey = _.split(atob(key), '|');\n keyInformation.instanceURL = decodedKey[0];\n keyInformation.tunnelServerAddr = decodedKey[1];\n\n return keyInformation;\n }\n\n function configureState() {\n if (\n $scope.endpoint.Type === PortainerEndpointTypes.KubernetesLocalEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment\n ) {\n $scope.state.kubernetesEndpoint = true;\n }\n if ($scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment || $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment) {\n $scope.state.edgeEndpoint = true;\n }\n if ($scope.endpoint.Type === PortainerEndpointTypes.AzureEnvironment) {\n $scope.state.azureEndpoint = true;\n }\n if (\n $scope.endpoint.Type === PortainerEndpointTypes.AgentOnDockerEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ||\n $scope.endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment\n ) {\n $scope.state.agentEndpoint = true;\n }\n }\n\n async function initView() {\n return $async(async () => {\n try {\n const [endpoint, groups, tags, settings] = await Promise.all([\n EndpointService.endpoint($transition$.params().id),\n GroupService.groups(),\n TagService.tags(),\n SettingsService.settings(),\n ]);\n\n if (endpoint.URL.indexOf('unix://') === 0 || endpoint.URL.indexOf('npipe://') === 0) {\n $scope.endpointType = 'local';\n } else {\n $scope.endpointType = 'remote';\n }\n\n endpoint.URL = $filter('stripprotocol')(endpoint.URL);\n\n if (endpoint.Type === PortainerEndpointTypes.EdgeAgentOnDockerEnvironment || endpoint.Type === PortainerEndpointTypes.EdgeAgentOnKubernetesEnvironment) {\n $scope.edgeKeyDetails = decodeEdgeKey(endpoint.EdgeKey);\n endpoint.EdgeID = endpoint.EdgeID || uuidv4();\n\n $scope.state.availableEdgeAgentCheckinOptions[0].key += ` (${settings.EdgeAgentCheckinInterval} seconds)`;\n }\n\n $scope.endpoint = endpoint;\n $scope.groups = groups;\n $scope.availableTags = tags;\n\n configureState();\n\n const disconnectedEdge = $scope.state.edgeEndpoint && !endpoint.EdgeID;\n if (EndpointHelper.isDockerEndpoint(endpoint) && !disconnectedEdge) {\n $scope.state.showAMTInfo = settings && settings.openAMTConfiguration && settings.openAMTConfiguration.enabled;\n }\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment details');\n }\n\n if ($scope.state.showAMTInfo) {\n try {\n $scope.endpoint.ManagementInfo = {};\n const amtInfo = await getAMTInfo($state.params.id);\n try {\n $scope.endpoint.ManagementInfo = JSON.parse(amtInfo.RawOutput);\n } catch (err) {\n clearAMTManagementInfo(amtInfo.RawOutput);\n }\n } catch (err) {\n clearAMTManagementInfo('Unable to retrieve AMT environment details');\n }\n }\n });\n }\n\n function clearAMTManagementInfo(versionValue) {\n $scope.endpoint.ManagementInfo['AMT'] = versionValue;\n $scope.endpoint.ManagementInfo['UUID'] = '-';\n $scope.endpoint.ManagementInfo['Control Mode'] = '-';\n $scope.endpoint.ManagementInfo['Build Number'] = '-';\n $scope.endpoint.ManagementInfo['DNS Suffix'] = '-';\n }\n\n function buildEnvironmentSubCommand() {\n if ($scope.formValues.EnvVarSource === '') {\n return [];\n }\n\n return $scope.formValues.EnvVarSource.split(',')\n .map(function (s) {\n if (s !== '') {\n return `-e ${s} \\\\`;\n }\n })\n .filter((s) => s !== undefined);\n }\n\n function buildLinuxStandaloneCommand(agentVersion, edgeId, edgeKey, allowSelfSignedCerts) {\n const env = buildEnvironmentSubCommand();\n\n return [\n 'docker run -d \\\\',\n '-v /var/run/docker.sock:/var/run/docker.sock \\\\',\n '-v /var/lib/docker/volumes:/var/lib/docker/volumes \\\\',\n '-v /:/host \\\\',\n '-v portainer_agent_data:/data \\\\',\n '--restart always \\\\',\n '-e EDGE=1 \\\\',\n `-e EDGE_ID=${edgeId} \\\\`,\n `-e EDGE_KEY=${edgeKey} \\\\`,\n '-e CAP_HOST_MANAGEMENT=1 \\\\',\n `-e EDGE_INSECURE_POLL=${allowSelfSignedCerts ? 1 : 0} \\\\`,\n ...env,\n '--name portainer_edge_agent \\\\',\n `portainer/agent:${agentVersion}`,\n ].join('\\r\\n');\n }\n\n function buildWindowsStandaloneCommand(agentVersion, edgeId, edgeKey, allowSelfSignedCerts) {\n const env = buildEnvironmentSubCommand();\n\n return [\n 'docker run -d \\\\',\n '--mount type=npipe,src=\\\\\\\\.\\\\pipe\\\\docker_engine,dst=\\\\\\\\.\\\\pipe\\\\docker_engine \\\\',\n '--mount type=bind,src=C:\\\\ProgramData\\\\docker\\\\volumes,dst=C:\\\\ProgramData\\\\docker\\\\volumes \\\\',\n '--mount type=volume,src=portainer_agent_data,dst=C:\\\\data \\\\',\n '--restart always \\\\',\n '-e EDGE=1 \\\\',\n `-e EDGE_ID=${edgeId} \\\\`,\n `-e EDGE_KEY=${edgeKey} \\\\`,\n '-e CAP_HOST_MANAGEMENT=1 \\\\',\n `-e EDGE_INSECURE_POLL=${allowSelfSignedCerts ? 1 : 0} \\\\`,\n ...env,\n '--name portainer_edge_agent \\\\',\n `portainer/agent:${agentVersion}`,\n ].join('\\r\\n');\n }\n\n function buildLinuxSwarmCommand(agentVersion, edgeId, edgeKey, allowSelfSignedCerts) {\n const env = buildEnvironmentSubCommand();\n\n return [\n 'docker network create \\\\',\n '--driver overlay \\\\',\n 'portainer_agent_network;',\n '',\n\n 'docker service create \\\\',\n '--name portainer_edge_agent \\\\',\n '--network portainer_agent_network \\\\',\n '-e AGENT_CLUSTER_ADDR=tasks.portainer_edge_agent \\\\',\n '-e EDGE=1 \\\\',\n `-e EDGE_ID=${edgeId} \\\\`,\n `-e EDGE_KEY=${edgeKey} \\\\`,\n '-e CAP_HOST_MANAGEMENT=1 \\\\',\n `-e EDGE_INSECURE_POLL=${allowSelfSignedCerts ? 1 : 0} \\\\`,\n ...env,\n '--mode global \\\\',\n \"--constraint 'node.platform.os == linux' \\\\\",\n '--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \\\\',\n '--mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \\\\',\n '--mount type=bind,src=//,dst=/host \\\\',\n '--mount type=volume,src=portainer_agent_data,dst=/data \\\\',\n `portainer/agent:${agentVersion}`,\n ].join('\\r\\n');\n }\n\n function buildWindowsSwarmCommand(agentVersion, edgeId, edgeKey, allowSelfSignedCerts) {\n const env = buildEnvironmentSubCommand();\n\n return [\n 'docker network create \\\\',\n '--driver overlay \\\\',\n 'portainer_agent_network;',\n '',\n\n 'docker service create \\\\',\n '--name portainer_edge_agent \\\\',\n '--network portainer_agent_network \\\\',\n '-e AGENT_CLUSTER_ADDR=tasks.portainer_edge_agent \\\\',\n '-e EDGE=1 \\\\',\n `-e EDGE_ID=${edgeId} \\\\`,\n `-e EDGE_KEY=${edgeKey} \\\\`,\n '-e CAP_HOST_MANAGEMENT=1 \\\\',\n `-e EDGE_INSECURE_POLL=${allowSelfSignedCerts ? 1 : 0} \\\\`,\n ...env,\n '--mode global \\\\',\n \"--constraint 'node.platform.os == windows' \\\\\",\n '--mount type=npipe,src=\\\\\\\\.\\\\pipe\\\\docker_engine,dst=\\\\\\\\.\\\\pipe\\\\docker_engine \\\\',\n '--mount type=bind,src=C:\\\\ProgramData\\\\docker\\\\volumes,dst=C:\\\\ProgramData\\\\docker\\\\volumes \\\\',\n '--mount type=volume,src=portainer_agent_data,dst=C:\\\\data \\\\',\n `portainer/agent:${agentVersion}`,\n ].join('\\r\\n');\n }\n\n function buildKubernetesCommand(agentVersion, edgeId, edgeKey, allowSelfSignedCerts) {\n return `curl https://downloads.portainer.io/portainer-ee${agentVersion}-edge-agent-setup.sh | bash -s -- ${edgeId} ${edgeKey} ${allowSelfSignedCerts ? '1' : '0'}`;\n }\n\n initView();\n}\n","import angular from 'angular';\nimport EndpointHelper from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.app').controller('EndpointsController', EndpointsController);\n\nfunction EndpointsController($q, $scope, $state, $async, EndpointService, GroupService, ModalService, Notifications, EndpointProvider, StateManager) {\n $scope.state = {\n loadingMessage: '',\n };\n\n $scope.setLoadingMessage = setLoadingMessage;\n function setLoadingMessage(message) {\n $scope.state.loadingMessage = message;\n }\n\n $scope.removeAction = removeAction;\n function removeAction(endpoints) {\n ModalService.confirmDeletion('This action will remove all configurations associated to your environment(s). Continue?', (confirmed) => {\n if (!confirmed) {\n return;\n }\n return $async(removeActionAsync, endpoints);\n });\n }\n\n async function removeActionAsync(endpoints) {\n for (let endpoint of endpoints) {\n try {\n await EndpointService.deleteEndpoint(endpoint.Id);\n\n Notifications.success('Environment successfully removed', endpoint.Name);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to remove environment');\n }\n }\n\n const endpointId = EndpointProvider.endpointID();\n // If the current endpoint was deleted, then clean endpoint store\n if (endpoints.some((item) => item.Id === endpointId)) {\n StateManager.cleanEndpoint();\n // trigger sidebar rerender\n $scope.applicationState.endpoint = {};\n }\n\n $state.reload();\n }\n\n $scope.getPaginatedEndpoints = getPaginatedEndpoints;\n function getPaginatedEndpoints(lastId, limit, search) {\n const deferred = $q.defer();\n $q.all({\n endpoints: EndpointService.endpoints(lastId, limit, { search }),\n groups: GroupService.groups(),\n })\n .then(function success(data) {\n var endpoints = data.endpoints.value;\n var groups = data.groups;\n EndpointHelper.mapGroupNameToEndpoint(endpoints, groups);\n deferred.resolve({ endpoints: endpoints, totalCount: data.endpoints.totalCount });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment information');\n });\n return deferred.promise;\n }\n}\n","export function getAgentShortVersion(agentVersion) {\n const numbers = agentVersion.split('.');\n return numbers[0] + numbers[1];\n}\n","import angular from 'angular';\n\nimport { enableDeviceFeatures } from 'Portainer/hostmanagement/open-amt/open-amt.service';\n\nclass EndpointKVMController {\n /* @ngInject */\n constructor($state, $scope, $async, $transition$, EndpointService, Notifications) {\n this.$state = $state;\n this.$scope = $scope;\n this.$async = $async;\n this.$transition$ = $transition$;\n this.Notifications = Notifications;\n this.EndpointService = EndpointService;\n\n this.$state.maximized = false;\n this.$state.endpointId = $transition$.params().id;\n this.$state.deviceId = $transition$.params().deviceId;\n this.$state.deviceName = $transition$.params().deviceName;\n\n $scope.maximize = function () {\n this.$state.maximized = true;\n };\n\n $scope.minimize = function () {\n this.$state.maximized = false;\n };\n }\n\n async $onInit() {\n this.$async(async () => {\n try {\n this.$state.endpoint = await this.EndpointService.endpoint(this.$state.endpointId);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve environment information');\n }\n\n try {\n const features = {\n ider: true,\n kvm: true,\n sol: true,\n redirection: true,\n userConsent: 'none',\n };\n const mpsAuthorization = await enableDeviceFeatures(this.$state.endpointId, this.$state.deviceId, features);\n\n this.$state.mpsServer = mpsAuthorization.Server;\n this.$state.mpsToken = mpsAuthorization.Token;\n } catch (e) {\n this.Notifications.error('Failure', e, `Failed to load kvm for device`);\n }\n });\n }\n}\n\nexport default EndpointKVMController;\nangular.module('portainer.app').controller('EndpointKVMController', EndpointKVMController);\n","import { KVM } from '@open-amt-cloud-toolkit/ui-toolkit-react/reactjs/src/kvm.bundle';\n\nimport { react2angular } from '@/react-tools/react2angular';\n\nimport './KVMControl.css';\n\nexport interface KVMControlProps {\n deviceId: string;\n server: string;\n token: string;\n}\n\nexport function KVMControl({ deviceId, server, token }: KVMControlProps) {\n if (!deviceId || !server || !token) return
    Loading...
    ;\n\n return (\n \n );\n}\n\nexport const KVMControlAngular = react2angular(KVMControl, [\n 'deviceId',\n 'server',\n 'token',\n]);\n","import angular from 'angular';\n\nimport { KVMControlAngular } from '@/portainer/views/endpoints/kvm/KVMControl';\n\nangular.module('portainer.app').component('kvmControl', KVMControlAngular).name;\n","import { FeatureId } from '@/portainer/feature-flags/enums';\n\nangular.module('portainer.app').controller('GroupAccessController', [\n '$scope',\n '$state',\n '$transition$',\n 'GroupService',\n 'Notifications',\n function ($scope, $state, $transition$, GroupService, Notifications) {\n $scope.limitedFeature = FeatureId.RBAC_ROLES;\n\n $scope.updateAccess = function () {\n $scope.state.actionInProgress = true;\n GroupService.updateGroup($scope.group, $scope.group.AssociatedEndpoints)\n .then(() => {\n Notifications.success('Access successfully updated');\n $state.reload();\n })\n .catch((err) => {\n $scope.state.actionInProgress = false;\n Notifications.error('Failure', err, 'Unable to update accesses');\n });\n };\n\n function initView() {\n var groupId = $transition$.params().id;\n\n $scope.state = { actionInProgress: false };\n GroupService.group(groupId)\n .then(function success(data) {\n $scope.group = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load view');\n });\n }\n\n initView();\n },\n]);\n","import { EndpointGroupDefaultModel } from '../../../models/group';\n\nangular.module('portainer.app').controller('CreateGroupController', function CreateGroupController($async, $scope, $state, GroupService, TagService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.create = function () {\n var model = $scope.model;\n\n var associatedEndpoints = [];\n for (var i = 0; i < $scope.associatedEndpoints.length; i++) {\n var endpoint = $scope.associatedEndpoints[i];\n associatedEndpoints.push(endpoint.Id);\n }\n\n $scope.state.actionInProgress = true;\n GroupService.createGroup(model, associatedEndpoints)\n .then(function success() {\n Notifications.success('Group successfully created');\n $state.go('portainer.groups', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create group');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.model.TagIds = $scope.model.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failue', err, 'Unable to create tag');\n }\n }\n\n function initView() {\n TagService.tags()\n .then((tags) => {\n $scope.availableTags = tags;\n $scope.associatedEndpoints = [];\n $scope.model = new EndpointGroupDefaultModel();\n $scope.loaded = true;\n })\n .catch((err) => {\n Notifications.error('Failure', err, 'Unable to retrieve tags');\n });\n }\n\n initView();\n});\n","angular.module('portainer.app').controller('GroupController', function GroupController($q, $async, $scope, $state, $transition$, GroupService, TagService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.update = function () {\n var model = $scope.group;\n\n $scope.state.actionInProgress = true;\n GroupService.updateGroup(model)\n .then(function success() {\n Notifications.success('Group successfully updated');\n $state.go('portainer.groups', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update group');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.onCreateTag = function onCreateTag(tagName) {\n return $async(onCreateTagAsync, tagName);\n };\n\n async function onCreateTagAsync(tagName) {\n try {\n const tag = await TagService.createTag(tagName);\n $scope.availableTags = $scope.availableTags.concat(tag);\n $scope.group.TagIds = $scope.group.TagIds.concat(tag.Id);\n } catch (err) {\n Notifications.error('Failue', err, 'Unable to create tag');\n }\n }\n\n function initView() {\n var groupId = $transition$.params().id;\n\n $q.all({\n group: GroupService.group(groupId),\n tags: TagService.tags(),\n })\n .then(function success(data) {\n $scope.group = data.group;\n $scope.availableTags = data.tags;\n $scope.loaded = true;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to load group details');\n });\n }\n\n initView();\n});\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nangular.module('portainer.app').controller('GroupsController', GroupsController);\n\nfunction GroupsController($scope, $state, $async, GroupService, Notifications) {\n $scope.removeAction = removeAction;\n\n function removeAction(selectedItems) {\n return $async(removeActionAsync, selectedItems);\n }\n\n async function removeActionAsync(selectedItems) {\n for (let group of selectedItems) {\n try {\n await GroupService.deleteGroup(group.Id);\n\n Notifications.success('Environment group successfully removed', group.Name);\n _.remove($scope.groups, group);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to remove group');\n }\n }\n\n $state.reload();\n }\n\n function initView() {\n GroupService.groups()\n .then(function success(data) {\n $scope.groups = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment groups');\n $scope.groups = [];\n });\n }\n\n initView();\n}\n","import EndpointHelper from '@/portainer/helpers/endpointHelper';\nimport { getEndpoints } from 'Portainer/environments/environment.service';\n\nangular\n .module('portainer.app')\n .controller(\n 'HomeController',\n function (\n $q,\n $scope,\n $state,\n TagService,\n Authentication,\n EndpointService,\n GroupService,\n Notifications,\n EndpointProvider,\n StateManager,\n ModalService,\n MotdService,\n BackupService\n ) {\n $scope.state = {\n connectingToEdgeEndpoint: false,\n homepageLoadTime: '',\n };\n\n $scope.goToEdit = function (id) {\n $state.go('portainer.endpoints.endpoint', { id: id });\n };\n\n $scope.goToDashboard = function (endpoint) {\n if (endpoint.Type === 3) {\n $state.go('azure.dashboard', { endpointId: endpoint.Id });\n return;\n }\n if (endpoint.Type === 4 || endpoint.Type === 7) {\n if (!endpoint.EdgeID) {\n $state.go('portainer.endpoints.endpoint', { id: endpoint.Id });\n return;\n }\n $scope.state.connectingToEdgeEndpoint = true;\n }\n if (endpoint.Type === 5 || endpoint.Type === 6 || endpoint.Type === 7) {\n $state.go('kubernetes.dashboard', { endpointId: endpoint.Id });\n return;\n }\n $state.go('docker.dashboard', { endpointId: endpoint.Id });\n };\n\n $scope.dismissImportantInformation = function (hash) {\n StateManager.dismissImportantInformation(hash);\n };\n\n $scope.dismissInformationPanel = function (id) {\n StateManager.dismissInformationPanel(id);\n };\n\n $scope.triggerSnapshot = function () {\n ModalService.confirmEndpointSnapshot(function (result) {\n if (!result) {\n return;\n }\n triggerSnapshot();\n });\n };\n\n function triggerSnapshot() {\n EndpointService.snapshotEndpoints()\n .then(function success() {\n Notifications.success('Success', 'Environments updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'An error occured during environment snapshot');\n });\n }\n\n $scope.getPaginatedEndpoints = getPaginatedEndpoints;\n function getPaginatedEndpoints(lastId, limit, search) {\n const deferred = $q.defer();\n $q.all({\n endpoints: getEndpoints(lastId, limit, { search, edgeDeviceFilter: false }),\n groups: GroupService.groups(),\n })\n .then(function success(data) {\n var endpoints = data.endpoints.value;\n var groups = data.groups;\n EndpointHelper.mapGroupNameToEndpoint(endpoints, groups);\n EndpointProvider.setEndpoints(endpoints);\n deferred.resolve({ endpoints: endpoints, totalCount: data.endpoints.totalCount });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve environment information');\n });\n return deferred.promise;\n }\n\n async function initView() {\n $scope.state.homepageLoadTime = Math.floor(Date.now() / 1000);\n $scope.isAdmin = Authentication.isAdmin();\n\n MotdService.motd().then(function success(data) {\n $scope.motd = data;\n });\n\n BackupService.getBackupStatus().then(function success(data) {\n $scope.backupStatus = data;\n });\n\n try {\n $scope.tags = await TagService.tags();\n } catch (err) {\n Notifications.error('Failed loading page data', err);\n }\n }\n\n initView();\n }\n );\n","angular.module('portainer.app').controller('InitAdminController', [\n '$scope',\n '$state',\n 'Notifications',\n 'Authentication',\n 'StateManager',\n 'SettingsService',\n 'UserService',\n 'BackupService',\n 'StatusService',\n function ($scope, $state, Notifications, Authentication, StateManager, SettingsService, UserService, BackupService, StatusService) {\n $scope.uploadBackup = uploadBackup;\n $scope.restoreFromS3 = restoreFromS3;\n $scope.logo = StateManager.getState().application.logo;\n $scope.RESTORE_FORM_TYPES = { S3: 's3', FILE: 'file' };\n $scope.formValues = {\n Username: 'admin',\n Password: '',\n ConfirmPassword: '',\n enableTelemetry: process.env.NODE_ENV === 'production',\n restoreFormType: $scope.RESTORE_FORM_TYPES.FILE,\n };\n\n $scope.state = {\n actionInProgress: false,\n showInitPassword: true,\n showRestorePortainer: false,\n };\n\n createAdministratorFlow();\n\n $scope.togglePanel = function () {\n $scope.state.showInitPassword = !$scope.state.showInitPassword;\n $scope.state.showRestorePortainer = !$scope.state.showRestorePortainer;\n };\n\n $scope.createAdminUser = function () {\n var username = $scope.formValues.Username;\n var password = $scope.formValues.Password;\n\n $scope.state.actionInProgress = true;\n UserService.initAdministrator(username, password)\n .then(function success() {\n return Authentication.login(username, password);\n })\n .then(function success() {\n return SettingsService.update({ enableTelemetry: $scope.formValues.enableTelemetry });\n })\n .then(() => {\n return StateManager.initialize();\n })\n .then(function () {\n return $state.go('portainer.init.license');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create administrator user');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function createAdministratorFlow() {\n UserService.administratorExists()\n .then(function success(exists) {\n if (exists) {\n $state.go('portainer.wizard');\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to verify administrator account existence');\n });\n }\n\n async function uploadBackup() {\n $scope.state.backupInProgress = true;\n const file = $scope.formValues.BackupFile;\n const password = $scope.formValues.Password;\n\n restoreAndRefresh(() => BackupService.uploadBackup(file, password));\n }\n\n async function restoreFromS3() {\n $scope.state.backupInProgress = true;\n\n const payload = {\n AccessKeyID: $scope.formValues.AccessKeyId,\n CronRule: $scope.formValues.CronRule,\n Password: $scope.formValues.Password,\n SecretAccessKey: $scope.formValues.SecretAccessKey,\n Region: $scope.formValues.Region,\n BucketName: $scope.formValues.BucketName,\n Filename: $scope.formValues.Filename,\n };\n\n restoreAndRefresh(() => BackupService.restoreFromS3(payload));\n }\n\n async function restoreAndRefresh(restoreAsyncFn) {\n $scope.state.backupInProgress = true;\n\n try {\n await restoreAsyncFn();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to restore the backup');\n $scope.state.backupInProgress = false;\n\n return;\n }\n\n try {\n await waitPortainerRestart();\n Notifications.success('The backup has successfully been restored');\n $state.go('portainer.auth');\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to check for status');\n await wait(2);\n location.reload();\n }\n\n $scope.state.backupInProgress = false;\n }\n\n async function waitPortainerRestart() {\n for (let i = 0; i < 10; i++) {\n await wait(5);\n try {\n const status = await StatusService.status();\n if (status && status.Version) {\n return;\n }\n } catch (e) {\n // pass\n }\n }\n throw new Error('Timeout to wait for Portainer restarting');\n }\n },\n]);\n\nfunction wait(seconds = 0) {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n}\n","import _ from 'lodash-es';\nimport angular from 'angular';\nimport { PortainerEndpointInitFormValueEndpointSections, PortainerEndpointInitFormValues } from 'Portainer/models/endpoint/formValues';\nimport { PortainerEndpointConnectionTypes, PortainerEndpointCreationTypes, PortainerEndpointTypes } from 'Portainer/models/endpoint/models';\n\nrequire('./includes/localDocker.html');\nrequire('./includes/localKubernetes.html');\nrequire('./includes/agent.html');\n\nclass InitEndpointController {\n /* @ngInject */\n constructor($async, $scope, $state, EndpointService, StateManager, Notifications) {\n this.$async = $async;\n this.$scope = $scope;\n this.$state = $state;\n this.EndpointService = EndpointService;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n\n this.createLocalEndpointAsync = this.createLocalEndpointAsync.bind(this);\n this.createLocalKubernetesEndpointAsync = this.createLocalKubernetesEndpointAsync.bind(this);\n this.createAgentEndpointAsync = this.createAgentEndpointAsync.bind(this);\n }\n\n $onInit() {\n if (!_.isEmpty(this.$scope.applicationState.endpoint)) {\n this.$state.go('portainer.home');\n }\n this.logo = this.StateManager.getState().application.logo;\n\n this.state = {\n uploadInProgress: false,\n actionInProgress: false,\n };\n\n this.formValues = new PortainerEndpointInitFormValues();\n this.endpointSections = PortainerEndpointInitFormValueEndpointSections;\n this.PortainerEndpointConnectionTypes = PortainerEndpointConnectionTypes;\n }\n\n isConnectButtonDisabled() {\n switch (this.formValues.ConnectionType) {\n case PortainerEndpointConnectionTypes.DOCKER_LOCAL:\n return this.state.actionInProgress;\n case PortainerEndpointConnectionTypes.KUBERNETES_LOCAL:\n return this.state.actionInProgress;\n case PortainerEndpointConnectionTypes.AGENT:\n return this.state.actionInProgress || !this.formValues.Name || !this.formValues.URL;\n default:\n break;\n }\n }\n\n createEndpoint() {\n switch (this.formValues.ConnectionType) {\n case PortainerEndpointConnectionTypes.DOCKER_LOCAL:\n return this.createLocalEndpoint();\n case PortainerEndpointConnectionTypes.KUBERNETES_LOCAL:\n return this.createLocalKubernetesEndpoint();\n case PortainerEndpointConnectionTypes.AGENT:\n return this.createAgentEndpoint();\n default:\n this.Notifications.error('Failure', null, 'Unable to determine which action to do to create environment');\n }\n }\n\n skipEndpointCreation() {\n this.$state.go('portainer.home');\n }\n\n /**\n * DOCKER_LOCAL (1)\n */\n async createLocalEndpointAsync() {\n try {\n this.state.actionInProgress = true;\n await this.EndpointService.createLocalEndpoint();\n this.$state.go('portainer.home');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect to the Docker environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createLocalEndpoint() {\n return this.$async(this.createLocalEndpointAsync);\n }\n\n /**\n * KUBERNETES_LOCAL (5)\n */\n async createLocalKubernetesEndpointAsync() {\n try {\n this.state.actionInProgress = true;\n const endpoint = await this.EndpointService.createLocalKubernetesEndpoint();\n this.$state.go('portainer.k8sendpoint.kubernetesConfig', { id: endpoint.Id });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect to the Kubernetes environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createLocalKubernetesEndpoint() {\n return this.$async(this.createLocalKubernetesEndpointAsync);\n }\n\n /**\n * DOCKER / KUBERNETES AGENT (2 / 6)\n */\n async createAgentEndpointAsync() {\n try {\n this.state.actionInProgress = true;\n const name = this.formValues.Name;\n const URL = this.formValues.URL;\n const PublicURL = URL.split(':')[0];\n\n const endpoint = await this.EndpointService.createRemoteEndpoint(\n name,\n PortainerEndpointCreationTypes.AgentEnvironment,\n URL,\n PublicURL,\n 1,\n [],\n true,\n true,\n true,\n null,\n null,\n null\n );\n const routeName = endpoint.Type === PortainerEndpointTypes.AgentOnKubernetesEnvironment ? 'portainer.k8sendpoint.kubernetesConfig' : 'portainer.home';\n this.$state.go(routeName, { id: endpoint.Id });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect to the Docker environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n createAgentEndpoint() {\n return this.$async(this.createAgentEndpointAsync);\n }\n}\n\nexport default InitEndpointController;\nangular.module('portainer.app').controller('InitEndpointController', InitEndpointController);\n","const autoNgTemplateLoaderTemplate1 = require('./init-license.view.html');\n\nimport controller from './init-license.view.controller.js';\n\nangular.module('portainer.app').component('initLicenseView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","export default class InitLicenseViewController {\n /* @ngInject */\n constructor($async, $state, LicenseService, Notifications) {\n this.$async = $async;\n this.$state = $state;\n this.LicenseService = LicenseService;\n this.Notifications = Notifications;\n\n this.license = '';\n this.state = {\n actionInProgress: false,\n formError: '',\n };\n\n this.submit = this.submit.bind(this);\n }\n\n isFormValid() {\n return !!this.license;\n }\n\n async submit() {\n return this.$async(async () => {\n this.state.formError = '';\n if (!this.isFormValid()) {\n this.state.formError = 'Form is invalid';\n return;\n }\n\n this.state.actionInProgress = true;\n\n try {\n const { failedKeys } = await this.LicenseService.attach([this.license]);\n\n if (failedKeys[this.license]) {\n throw new Error(failedKeys[this.license]);\n }\n\n this.$state.go('portainer.wizard');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Failed validating licenses');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n}\n","import angular from 'angular';\n\nclass InternalAuthenticationController {\n /* @ngInject */\n constructor(\n $async,\n $analytics,\n $scope,\n $state,\n $stateParams,\n $window,\n Authentication,\n UserService,\n EndpointService,\n StateManager,\n Notifications,\n LocalStorage,\n StatusService,\n LicenseService\n ) {\n this.$async = $async;\n this.$analytics = $analytics;\n this.$scope = $scope;\n this.$state = $state;\n this.$stateParams = $stateParams;\n this.$window = $window;\n this.Authentication = Authentication;\n this.UserService = UserService;\n this.EndpointService = EndpointService;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.StatusService = StatusService;\n this.LicenseService = LicenseService;\n this.logo = this.StateManager.getState().application.logo;\n this.formValues = {\n Username: '',\n Password: '',\n };\n this.state = {\n AuthenticationError: '',\n loginInProgress: true,\n };\n\n this.checkForEndpointsAsync = this.checkForEndpointsAsync.bind(this);\n this.checkForLicensesAsync = this.checkForLicensesAsync.bind(this);\n this.postLoginSteps = this.postLoginSteps.bind(this);\n this.internalLoginAsync = this.internalLoginAsync.bind(this);\n this.authenticateUserAsync = this.authenticateUserAsync.bind(this);\n this.authEnabledFlowAsync = this.authEnabledFlowAsync.bind(this);\n this.onInit = this.onInit.bind(this);\n }\n\n /**\n * UTILS FUNCTIONS SECTION\n */\n\n logout(error) {\n this.Authentication.logout();\n this.state.loginInProgress = false;\n this.LocalStorage.storeLogoutReason(error);\n this.$window.location.reload();\n }\n\n error(err, message) {\n this.state.AuthenticationError = message;\n if (!err) {\n err = {};\n }\n this.Notifications.error('Failure', err, message);\n this.state.loginInProgress = false;\n }\n\n /**\n * END UTILS FUNCTIONS SECTION\n */\n\n /**\n * POST LOGIN STEPS SECTION\n */\n\n async checkForEndpointsAsync() {\n try {\n const endpoints = await this.EndpointService.endpoints(0, 1);\n\n if (endpoints.value.length === 0) {\n return 'portainer.init.endpoint';\n }\n } catch (err) {\n this.error(err, 'Unable to retrieve environments');\n }\n return 'portainer.home';\n }\n\n async checkForLicensesAsync() {\n try {\n const info = await this.LicenseService.info();\n\n if (!info.valid) {\n return 'portainer.init.license';\n }\n } catch (err) {\n this.error(err, 'Unable to retrieve licenses info');\n }\n }\n\n async postLoginSteps() {\n await this.StateManager.initialize();\n\n const isAdmin = this.Authentication.isAdmin();\n this.$analytics.setUserRole(isAdmin ? 'admin' : 'standard-user');\n let path = 'portainer.home';\n if (isAdmin) {\n path = await this.checkForLicensesAsync();\n if (!path) {\n path = await this.checkForEndpointsAsync();\n }\n }\n\n this.$state.go(path);\n }\n /**\n * END POST LOGIN STEPS SECTION\n */\n\n /**\n * LOGIN METHODS SECTION\n */\n\n async internalLoginAsync(username, password) {\n await this.Authentication.login(username, password);\n await this.postLoginSteps();\n }\n\n /**\n * END LOGIN METHODS SECTION\n */\n\n /**\n * AUTHENTICATE USER SECTION\n */\n\n async authenticateUserAsync() {\n try {\n var username = this.formValues.Username;\n var password = this.formValues.Password;\n this.state.loginInProgress = true;\n await this.internalLoginAsync(username, password);\n } catch (err) {\n this.error(err, 'Unable to login');\n }\n }\n\n authenticateUser() {\n return this.$async(this.authenticateUserAsync);\n }\n\n /**\n * END AUTHENTICATE USER SECTION\n */\n\n /**\n * ON INIT SECTION\n */\n\n async authEnabledFlowAsync() {\n try {\n const exists = await this.UserService.administratorExists();\n if (!exists) {\n this.$state.go('portainer.init.admin');\n }\n } catch (err) {\n this.error(err, 'Unable to verify administrator account existence');\n }\n }\n\n async onInit() {\n if (this.$stateParams.logout || this.$stateParams.error) {\n this.logout(this.$stateParams.error);\n return;\n }\n\n const error = this.LocalStorage.getLogoutReason();\n if (error) {\n this.state.AuthenticationError = error;\n this.LocalStorage.cleanLogoutReason();\n }\n\n this.state.loginInProgress = false;\n\n await this.authEnabledFlowAsync();\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * END ON INIT SECTION\n */\n}\n\nexport default InternalAuthenticationController;\nangular.module('portainer.app').controller('InternalAuthenticationController', InternalAuthenticationController);\n","import angular from 'angular';\n\nclass LogoutController {\n /* @ngInject */\n constructor($async, $state, $transition$, $window, Authentication, StateManager, Notifications, LocalStorage, SettingsService) {\n this.$async = $async;\n this.$state = $state;\n this.$transition$ = $transition$;\n this.$window = $window;\n\n this.Authentication = Authentication;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.LocalStorage = LocalStorage;\n this.SettingsService = SettingsService;\n\n this.logo = this.StateManager.getState().application.logo;\n this.logoutAsync = this.logoutAsync.bind(this);\n\n this.onInit = this.onInit.bind(this);\n }\n\n /**\n * UTILS FUNCTIONS SECTION\n */\n async logoutAsync() {\n const error = this.$transition$.params().error;\n const performApiLogout = this.$transition$.params().performApiLogout;\n const settings = await this.SettingsService.publicSettings();\n\n try {\n await this.Authentication.logout(performApiLogout);\n } finally {\n this.LocalStorage.storeLogoutReason(error);\n if (settings.OAuthLogoutURI && this.Authentication.getUserDetails().ID !== 1) {\n this.$window.location.href = settings.OAuthLogoutURI;\n } else {\n this.$state.go('portainer.auth', { reload: true });\n }\n }\n }\n\n logout() {\n return this.$async(this.logoutAsync);\n }\n\n /**\n * END UTILS FUNCTIONS SECTION\n */\n\n async onInit() {\n try {\n await this.logout();\n } catch (err) {\n this.Notifications.error('Failure', err, 'An error occured during logout');\n }\n }\n\n $onInit() {\n return this.$async(this.onInit);\n }\n\n /**\n * END ON INIT SECTION\n */\n}\n\nexport default LogoutController;\nangular.module('portainer.app').controller('LogoutController', LogoutController);\n","angular.module('portainer.app').controller('MainController', [\n '$scope',\n 'LocalStorage',\n 'StateManager',\n 'EndpointProvider',\n 'ThemeManager',\n function ($scope, LocalStorage, StateManager, EndpointProvider, ThemeManager) {\n /**\n * Sidebar Toggle & Cookie Control\n */\n var mobileView = 992;\n $scope.getWidth = function () {\n return window.innerWidth;\n };\n\n $scope.applicationState = StateManager.getState();\n $scope.endpointState = EndpointProvider.endpoint();\n\n $scope.$watch($scope.getWidth, function (newValue) {\n if (newValue >= mobileView) {\n const toggleValue = LocalStorage.getToolbarToggle();\n $scope.toggle = typeof toggleValue === 'boolean' ? toggleValue : true;\n } else {\n $scope.toggle = false;\n }\n });\n\n $scope.toggleSidebar = function () {\n $scope.toggle = !$scope.toggle;\n LocalStorage.storeToolbarToggle($scope.toggle);\n };\n\n window.onresize = function () {\n $scope.$apply();\n };\n\n ThemeManager.autoTheme();\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./createRegistry.html');\n\nimport angular from 'angular';\nimport CreateRegistryController from './createRegistryController';\n\nangular.module('portainer.app').component('createRegistry', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller: CreateRegistryController,\n bindings: {\n $transition$: '<',\n },\n});\n","import { RegistryTypes } from 'Portainer/models/registryTypes';\nimport { RegistryCreateFormValues } from 'Portainer/models/registry';\n\nclass CreateRegistryController {\n /* @ngInject */\n constructor($async, $state, Notifications, RegistryService, RegistryGitlabService) {\n Object.assign(this, { $async, $state, Notifications, RegistryService, RegistryGitlabService });\n\n this.RegistryTypes = RegistryTypes;\n this.state = {\n actionInProgress: false,\n overrideConfiguration: false,\n gitlab: {\n get selectedItemCount() {\n return this.selectedItems.length || 0;\n },\n selectedItems: [],\n },\n originViewReference: 'portainer.registries',\n originalEndpointId: null,\n };\n\n this.createRegistry = this.createRegistry.bind(this);\n this.retrieveGitlabRegistries = this.retrieveGitlabRegistries.bind(this);\n this.createGitlabRegistries = this.createGitlabRegistries.bind(this);\n }\n\n useDefaultQuayConfiguration() {\n this.model.Quay.useOrganisation = false;\n this.model.Quay.organisationName = '';\n }\n\n selectQuayRegistry() {\n this.model.Name = 'Quay';\n this.model.URL = 'quay.io';\n this.model.Authentication = true;\n this.model.Quay = {};\n this.useDefaultQuayConfiguration();\n }\n\n useDefaultGitlabConfiguration() {\n this.model.URL = 'https://registry.gitlab.com';\n this.model.Gitlab.InstanceURL = 'https://gitlab.com';\n }\n\n selectGitlabRegistry() {\n this.model.Name = '';\n this.model.Authentication = true;\n this.model.Gitlab = {};\n this.useDefaultGitlabConfiguration();\n }\n\n selectAzureRegistry() {\n this.model.Name = '';\n this.model.URL = '';\n this.model.Authentication = true;\n }\n\n selectProGetRegistry() {\n this.model.Name = '';\n this.model.URL = '';\n this.model.BaseURL = '';\n this.model.Authentication = true;\n }\n\n selectDockerHub() {\n this.model.Name = '';\n this.model.URL = 'docker.io';\n this.model.Authentication = true;\n }\n\n selectCustomRegistry() {\n this.model.Name = '';\n this.model.URL = '';\n this.model.Authentication = false;\n }\n\n useDefaultEcrConfiguration() {\n this.model.Ecr.Region = '';\n }\n\n selectEcr() {\n this.model.Name = '';\n this.model.URL = '';\n this.model.Authentication = false;\n this.model.Ecr = {};\n this.useDefaultEcrConfiguration();\n }\n\n retrieveGitlabRegistries() {\n return this.$async(async () => {\n this.state.actionInProgress = true;\n try {\n this.gitlabProjects = await this.RegistryGitlabService.projects(this.model.Gitlab.InstanceURL, this.model.Token);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve projects');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n\n createGitlabRegistries() {\n return this.$async(async () => {\n try {\n this.state.actionInProgress = true;\n await this.RegistryService.createGitlabRegistries(this.model, this.state.gitlab.selectedItems);\n this.Notifications.success('Registries successfully created');\n this.$state.go(this.state.originViewReference, { endpointId: this.state.originalEndpointId });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create registries');\n this.state.actionInProgress = false;\n }\n });\n }\n\n createRegistry() {\n return this.$async(async () => {\n try {\n this.state.actionInProgress = true;\n await this.RegistryService.createRegistry(this.model);\n this.Notifications.success('Registry successfully created');\n this.$state.go(this.state.originViewReference, { endpointId: this.state.originalEndpointId });\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to create registry');\n this.state.actionInProgress = false;\n }\n });\n }\n\n $onInit() {\n this.model = new RegistryCreateFormValues();\n\n const from = this.$transition$.from();\n const params = this.$transition$.params('from');\n\n if (from.name && /^[a-z]+\\.registries$/.test(from.name)) {\n this.state.originViewReference = from;\n this.state.originalEndpointId = params.endpointId || null;\n }\n }\n}\n\nexport default CreateRegistryController;\n","import { RegistryTypes } from '@/portainer/models/registryTypes';\n\nangular.module('portainer.app').controller('RegistryController', [\n '$scope',\n '$state',\n 'RegistryService',\n 'Notifications',\n function ($scope, $state, RegistryService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Password: '',\n };\n\n $scope.RegistryTypes = RegistryTypes;\n\n $scope.updateRegistry = function () {\n var registry = $scope.registry;\n registry.Password = $scope.formValues.Password;\n $scope.state.actionInProgress = true;\n RegistryService.updateRegistry(registry)\n .then(function success() {\n Notifications.success('Registry successfully updated');\n $state.go('portainer.registries');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update registry');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function initView() {\n var registryID = $state.params.id;\n RegistryService.registry(registryID)\n .then(function success(data) {\n $scope.registry = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve registry details');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { RegistryTypes } from 'Portainer/models/registryTypes';\n\nangular.module('portainer.app').controller('RegistriesController', [\n '$q',\n '$scope',\n '$state',\n 'RegistryService',\n 'ModalService',\n 'Notifications',\n function ($q, $scope, $state, RegistryService, ModalService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n const nonBrowsableTypes = [RegistryTypes.ANONYMOUS, RegistryTypes.DOCKERHUB, RegistryTypes.QUAY];\n\n $scope.canBrowse = function (item) {\n return !_.includes(nonBrowsableTypes, item.Type);\n };\n\n $scope.removeAction = function (selectedItems) {\n const regAttrMsg = selectedItems.length > 1 ? 'hese' : 'his';\n const registriesMsg = selectedItems.length > 1 ? 'registries' : 'registry';\n const msg = `T${regAttrMsg} ${registriesMsg} might be used by applications inside one or more environments. Removing the ${registriesMsg} could lead to a service interruption for the applications using t${regAttrMsg} ${registriesMsg}. Do you want to remove the selected ${registriesMsg}?`;\n\n ModalService.confirmDeletion(msg, function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedRegistries(selectedItems);\n });\n };\n\n function deleteSelectedRegistries(selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (registry) {\n RegistryService.deleteRegistry(registry.Id)\n .then(function success() {\n Notifications.success('Registry successfully removed', registry.Name);\n var index = $scope.registries.indexOf(registry);\n $scope.registries.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove registry');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function initView() {\n $q.all({\n registries: RegistryService.registries(),\n })\n .then(function success(data) {\n $scope.registries = data.registries;\n })\n .catch(function error(err) {\n $scope.registries = [];\n Notifications.error('Failure', err, 'Unable to retrieve registries');\n });\n }\n\n initView();\n },\n]);\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nimport { FeatureId } from '@/portainer/feature-flags/enums';\nimport { buildLdapSettingsModel, buildAdSettingsModel } from '@/portainer/settings/authentication/ldap/ldap-settings.model';\n\nangular.module('portainer.app').controller('SettingsAuthenticationController', SettingsAuthenticationController);\n\nfunction SettingsAuthenticationController($q, $scope, $state, Notifications, SettingsService, FileUploadService, TeamService, LDAPService) {\n $scope.authMethod = 1;\n\n $scope.state = {\n uploadInProgress: false,\n actionInProgress: false,\n availableUserSessionTimeoutOptions: [\n {\n key: '1 hour',\n value: '1h',\n },\n {\n key: '4 hours',\n value: '4h',\n },\n {\n key: '8 hours',\n value: '8h',\n },\n {\n key: '24 hours',\n value: '24h',\n },\n { key: '1 week', value: `${24 * 7}h` },\n { key: '1 month', value: `${24 * 30}h` },\n { key: '6 months', value: `${24 * 30 * 6}h` },\n { key: '1 year', value: `${24 * 30 * 12}h` },\n ],\n };\n\n $scope.formValues = {\n UserSessionTimeout: $scope.state.availableUserSessionTimeoutOptions[0],\n TLSCACert: '',\n ldap: {\n serverType: 0,\n adSettings: buildAdSettingsModel(),\n ldapSettings: buildLdapSettingsModel(),\n },\n selectedAdminGroups: [],\n };\n\n $scope.authOptions = [\n { id: 'auth_internal', icon: 'fa fa-users', label: 'Internal', description: 'Internal authentication mechanism', value: 1 },\n { id: 'auth_ldap', icon: 'fa fa-users', label: 'LDAP', description: 'LDAP authentication', value: 2 },\n { id: 'auth_ad', icon: 'fab fa-microsoft', label: 'Microsoft Active Directory', description: 'AD authentication', value: 4, feature: FeatureId.HIDE_INTERNAL_AUTH },\n { id: 'auth_oauth', icon: 'fa fa-users', label: 'OAuth', description: 'OAuth authentication', value: 3 },\n ];\n\n $scope.onChangeAuthMethod = function onChangeAuthMethod(value) {\n $scope.authMethod = value;\n\n if (value === 4) {\n $scope.settings.AuthenticationMethod = 2;\n $scope.formValues.ldap.serverType = 2;\n return;\n }\n\n if (value === 2) {\n $scope.settings.AuthenticationMethod = 2;\n $scope.formValues.ldap.serverType = $scope.formValues.ldap.ldapSettings.ServerType;\n return;\n }\n\n $scope.settings.AuthenticationMethod = value;\n };\n\n $scope.authenticationMethodSelected = function authenticationMethodSelected(value) {\n if (!$scope.settings) {\n return false;\n }\n\n if (value === 4) {\n return $scope.settings.AuthenticationMethod === 2 && $scope.formValues.ldap.serverType === 2;\n }\n\n if (value === 2) {\n return $scope.settings.AuthenticationMethod === 2 && $scope.formValues.ldap.serverType !== 2;\n }\n\n return $scope.settings.AuthenticationMethod === value;\n };\n\n $scope.isOauthEnabled = function isOauthEnabled() {\n return $scope.settings && $scope.settings.AuthenticationMethod === 3;\n };\n\n $scope.LDAPConnectivityCheck = LDAPConnectivityCheck;\n function LDAPConnectivityCheck() {\n const settings = angular.copy($scope.settings);\n\n const { settings: ldapSettings, uploadRequired, tlscaFile } = prepareLDAPSettings();\n settings.LDAPSettings = ldapSettings;\n $scope.state.uploadInProgress = uploadRequired;\n\n $scope.state.connectivityCheckInProgress = true;\n\n $q.when(!uploadRequired || FileUploadService.uploadLDAPTLSFiles(tlscaFile, null, null))\n .then(function success() {\n return LDAPService.check(settings.LDAPSettings);\n })\n .then(function success() {\n $scope.state.failedConnectivityCheck = false;\n $scope.state.successfulConnectivityCheck = true;\n Notifications.success('Connection to LDAP successful');\n })\n .catch(function error(err) {\n $scope.state.failedConnectivityCheck = true;\n $scope.state.successfulConnectivityCheck = false;\n Notifications.error('Failure', err, 'Connection to LDAP failed');\n })\n .finally(function final() {\n $scope.state.uploadInProgress = false;\n $scope.state.connectivityCheckInProgress = false;\n });\n }\n\n $scope.saveSettings = function () {\n const settings = angular.copy($scope.settings);\n\n if (!settings.OAuthSettings.AdminAutoPopulate) {\n delete settings.OAuthSettings.AdminGroupClaimsRegexList;\n }\n\n const { settings: ldapSettings, uploadRequired, tlscaFile } = prepareLDAPSettings();\n settings.LDAPSettings = ldapSettings;\n $scope.state.uploadInProgress = uploadRequired;\n\n $scope.state.actionInProgress = true;\n\n $q.when(!uploadRequired || FileUploadService.uploadLDAPTLSFiles(tlscaFile, null, null))\n .then(function success() {\n return SettingsService.update(settings);\n })\n .then(function success() {\n Notifications.success('Authentication settings updated');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update authentication settings');\n })\n .finally(function final() {\n $scope.state.uploadInProgress = false;\n $scope.state.actionInProgress = false;\n });\n };\n\n function prepareLDAPSettings() {\n const tlscaCert = $scope.formValues.TLSCACert;\n\n const tlscaFile = tlscaCert !== $scope.settings.LDAPSettings.TLSConfig.TLSCACert ? tlscaCert : null;\n\n const isADServer = $scope.formValues.ldap.serverType === 2;\n\n const settings = isADServer ? $scope.formValues.ldap.adSettings : $scope.formValues.ldap.ldapSettings;\n\n if (settings.AnonymousMode && !isADServer) {\n settings.ReaderDN = '';\n settings.Password = '';\n }\n\n if (isADServer) {\n settings.AnonymousMode = false;\n }\n\n settings.URLs = settings.URLs.map((url) => {\n if (url.includes(':')) {\n return url;\n }\n return url + (settings.TLSConfig.TLS ? ':636' : ':389');\n });\n\n const uploadRequired = (settings.TLSConfig.TLS || settings.StartTLS) && !settings.TLSConfig.TLSSkipVerify;\n\n if (settings.AdminAutoPopulate && $scope.formValues.selectedAdminGroups.length > 0) {\n settings.AdminGroups = _.map($scope.formValues.selectedAdminGroups, (team) => team.name);\n } else {\n settings.AdminGroups = [];\n }\n\n if ($scope.formValues.selectedAdminGroups.length === 0) {\n settings.AdminAutoPopulate = false;\n }\n\n return { settings, uploadRequired, tlscaFile };\n }\n\n $scope.isLDAPFormValid = isLDAPFormValid;\n function isLDAPFormValid() {\n const ldapSettings = $scope.formValues.ldap.serverType === 2 ? $scope.formValues.ldap.adSettings : $scope.formValues.ldap.ldapSettings;\n const isTLSMode = ldapSettings.TLSConfig.TLS || ldapSettings.StartTLS;\n\n return (\n _.compact(ldapSettings.URLs).length &&\n (ldapSettings.AnonymousMode || (ldapSettings.ReaderDN && ldapSettings.Password)) &&\n (!isTLSMode || $scope.formValues.TLSCACert || ldapSettings.TLSConfig.TLSSkipVerify) &&\n (!$scope.settings.LDAPSettings.AdminAutoPopulate || ($scope.settings.LDAPSettings.AdminAutoPopulate && $scope.formValues.selectedAdminGroups.length > 0))\n );\n }\n\n $scope.isOAuthTeamMembershipFormValid = isOAuthTeamMembershipFormValid;\n function isOAuthTeamMembershipFormValid() {\n if ($scope.settings && $scope.settings.OAuthSettings.OAuthAutoMapTeamMemberships && $scope.settings.OAuthSettings.TeamMemberships) {\n if (!$scope.settings.OAuthSettings.TeamMemberships.OAuthClaimName) {\n return false;\n }\n\n const hasInvalidMapping = $scope.settings.OAuthSettings.TeamMemberships.OAuthClaimMappings.some((m) => !(m.ClaimValRegex && m.Team));\n if (hasInvalidMapping) {\n return false;\n }\n }\n return true;\n }\n\n $scope.isOAuthAdminMappingFormValid = isOAuthAdminMappingFormValid;\n function isOAuthAdminMappingFormValid() {\n if ($scope.settings && $scope.settings.OAuthSettings.AdminAutoPopulate && $scope.settings.OAuthSettings.AdminGroupClaimsRegexList) {\n const hasInvalidMapping =\n $scope.settings.OAuthSettings.AdminGroupClaimsRegexList.length === 0 || $scope.settings.OAuthSettings.AdminGroupClaimsRegexList.some((e) => e === '');\n if (hasInvalidMapping) {\n return false;\n }\n }\n\n return true;\n }\n\n function initView() {\n $q.all({\n settings: SettingsService.settings(),\n teams: TeamService.teams(),\n })\n .then(function success(data) {\n var settings = data.settings;\n $scope.teams = data.teams;\n $scope.settings = settings;\n\n $scope.OAuthSettings = settings.OAuthSettings;\n $scope.authMethod = settings.AuthenticationMethod;\n if (settings.AuthenticationMethod === 2 && settings.LDAPSettings.ServerType === 2) {\n $scope.authMethod = 4;\n }\n\n $scope.formValues.ldap.serverType = settings.LDAPSettings.ServerType;\n if (settings.LDAPSettings.ServerType === 2) {\n $scope.formValues.ldap.adSettings = settings.LDAPSettings;\n } else {\n $scope.formValues.ldap.ldapSettings = settings.LDAPSettings;\n }\n\n if (!settings.LDAPSettings.URLs.length) {\n settings.LDAPSettings.URLs.push('');\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\n }\n\n initView();\n}\n","const autoNgTemplateLoaderTemplate1 = require('./settingsEdgeCompute.html');\n\nimport angular from 'angular';\nimport controller from './settingsEdgeComputeController';\n\nangular.module('portainer.app').component('settingsEdgeComputeView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","import angular from 'angular';\n\nimport { configureFDO } from '@/portainer/hostmanagement/fdo/fdo.service';\nimport { configureAMT } from 'Portainer/hostmanagement/open-amt/open-amt.service';\n\nangular.module('portainer.app').controller('SettingsEdgeComputeController', SettingsEdgeComputeController);\n\n/* @ngInject */\nexport default function SettingsEdgeComputeController($q, $async, $state, Notifications, SettingsService, StateManager) {\n var ctrl = this;\n\n this.onSubmitEdgeCompute = async function (settings) {\n try {\n await SettingsService.update(settings);\n Notifications.success('Settings updated');\n StateManager.updateEnableEdgeComputeFeatures(settings.EnableEdgeComputeFeatures);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to update settings');\n }\n };\n\n this.onSubmitOpenAMT = async function (formValues) {\n try {\n await configureAMT(formValues);\n Notifications.success(`OpenAMT successfully ${formValues.enabled ? 'enabled' : 'disabled'}`);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Failed applying changes');\n }\n };\n\n this.onSubmitFDO = async function (formValues) {\n try {\n await configureFDO(formValues);\n Notifications.success(`FDO successfully ${formValues.enabled ? 'enabled' : 'disabled'}`);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Failed applying changes');\n }\n };\n\n function initView() {\n $async(async () => {\n try {\n ctrl.settings = await SettingsService.settings();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n }\n });\n }\n\n initView();\n}\n","import angular from 'angular';\n\nimport { buildOption } from '@/portainer/components/BoxSelector';\nimport { FeatureId } from '@/portainer/feature-flags/enums';\n\nangular.module('portainer.app').controller('SettingsController', [\n '$scope',\n '$state',\n 'Notifications',\n 'SettingsService',\n 'StateManager',\n 'BackupService',\n 'FileSaver',\n function ($scope, $state, Notifications, SettingsService, StateManager, BackupService, FileSaver) {\n $scope.s3BackupFeatureId = FeatureId.S3_BACKUP_SETTING;\n $scope.backupOptions = [\n buildOption('backup_file', 'fa fa-download', 'Download backup file', '', 'file'),\n buildOption('backup_s3', 'fa fa-upload', 'Store in S3', 'Define a cron schedule', 's3', FeatureId.S3_BACKUP_SETTING),\n ];\n\n $scope.state = {\n actionInProgress: false,\n availableKubeconfigExpiryOptions: [\n {\n key: '1 day',\n value: '24h',\n },\n {\n key: '7 days',\n value: `${24 * 7}h`,\n },\n {\n key: '30 days',\n value: `${24 * 30}h`,\n },\n {\n key: '1 year',\n value: `${24 * 30 * 12}h`,\n },\n {\n key: 'No expiry',\n value: '0',\n },\n ],\n backupInProgress: false,\n featureLimited: false,\n };\n\n $scope.BACKUP_FORM_TYPES = { S3: 's3', FILE: 'file' };\n\n $scope.formValues = {\n customLogo: false,\n labelName: '',\n labelValue: '',\n enableTelemetry: false,\n passwordProtect: false,\n password: '',\n scheduleAutomaticBackups: true,\n cronRule: '',\n accessKeyId: '',\n secretAccessKey: '',\n region: '',\n bucketName: '',\n backupFormType: $scope.BACKUP_FORM_TYPES.FILE,\n };\n\n $scope.onToggleAutoBackups = function onToggleAutoBackups(checked) {\n $scope.$evalAsync(() => {\n $scope.formValues.scheduleAutomaticBackups = checked;\n });\n };\n\n $scope.onBackupOptionsChange = function (type, limited) {\n $scope.formValues.backupFormType = type;\n $scope.state.featureLimited = limited;\n };\n\n $scope.removeFilteredContainerLabel = function (index) {\n var settings = $scope.settings;\n settings.BlackListedLabels.splice(index, 1);\n\n updateSettings(settings);\n };\n\n $scope.addFilteredContainerLabel = function () {\n var settings = $scope.settings;\n var label = {\n name: $scope.formValues.labelName,\n value: $scope.formValues.labelValue,\n };\n settings.BlackListedLabels.push(label);\n\n updateSettings(settings);\n };\n\n $scope.downloadBackup = function () {\n const payload = {};\n if ($scope.formValues.passwordProtect) {\n payload.password = $scope.formValues.password;\n }\n\n $scope.state.backupInProgress = true;\n\n BackupService.downloadBackup(payload)\n .then(function success(data) {\n const downloadData = new Blob([data.file], { type: 'application/gzip' });\n FileSaver.saveAs(downloadData, data.name);\n Notifications.success('Backup successfully downloaded');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to download backup');\n })\n .finally(function final() {\n $scope.state.backupInProgress = false;\n });\n };\n\n $scope.saveApplicationSettings = function () {\n var settings = $scope.settings;\n\n if (!$scope.formValues.customLogo) {\n settings.LogoURL = '';\n }\n\n settings.EnableTelemetry = $scope.formValues.enableTelemetry;\n\n $scope.state.actionInProgress = true;\n updateSettings(settings);\n };\n\n $scope.saveS3BackupSettings = function () {\n const payload = getS3SettingsPayload();\n BackupService.saveS3Settings(payload)\n .then(function success() {\n Notifications.success('S3 Backup settings successfully saved');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to save S3 backup settings');\n })\n .finally(function final() {\n $scope.state.backupInProgress = false;\n });\n };\n\n $scope.exportBackup = function () {\n const payload = getS3SettingsPayload();\n BackupService.exportBackup(payload)\n .then(function success() {\n Notifications.success('Exported backup to S3 successfully');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to export backup to S3');\n })\n .finally(function final() {\n $scope.state.backupInProgress = false;\n });\n };\n\n function getS3SettingsPayload() {\n return {\n Password: $scope.formValues.passwordProtectS3 ? $scope.formValues.passwordS3 : '',\n CronRule: $scope.formValues.scheduleAutomaticBackups ? $scope.formValues.cronRule : '',\n AccessKeyID: $scope.formValues.accessKeyId,\n SecretAccessKey: $scope.formValues.secretAccessKey,\n Region: $scope.formValues.region,\n BucketName: $scope.formValues.bucketName,\n };\n }\n\n function updateSettings(settings) {\n SettingsService.update(settings)\n .then(function success() {\n Notifications.success('Settings updated');\n StateManager.updateLogo(settings.LogoURL);\n StateManager.updateSnapshotInterval(settings.SnapshotInterval);\n StateManager.updateEnableTelemetry(settings.EnableTelemetry);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update settings');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function initView() {\n BackupService.getS3Settings()\n .then(function success(data) {\n $scope.formValues.passwordS3 = data.Password;\n $scope.formValues.cronRule = data.CronRule;\n $scope.formValues.accessKeyId = data.AccessKeyID;\n $scope.formValues.secretAccessKey = data.SecretAccessKey;\n $scope.formValues.region = data.Region;\n $scope.formValues.bucketName = data.BucketName;\n\n $scope.formValues.scheduleAutomaticBackups = $scope.formValues.cronRule ? true : false;\n $scope.formValues.passwordProtectS3 = $scope.formValues.passwordS3 ? true : false;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve S3 backup settings');\n });\n\n SettingsService.settings()\n .then(function success(data) {\n var settings = data;\n $scope.settings = settings;\n\n if (settings.LogoURL !== '') {\n $scope.formValues.customLogo = true;\n }\n $scope.formValues.enableTelemetry = settings.EnableTelemetry;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve application settings');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('SidebarController', SidebarController);\n\nfunction SidebarController($rootScope, $q, $scope, $transitions, StateManager, Notifications, Authentication, UserService, EndpointProvider) {\n $scope.applicationState = StateManager.getState();\n $scope.endpointState = EndpointProvider.endpoint();\n\n function checkPermissions(memberships) {\n var isLeader = false;\n angular.forEach(memberships, function (membership) {\n if (membership.Role === 1) {\n isLeader = true;\n }\n });\n $scope.isTeamLeader = isLeader;\n }\n\n function isClusterAdmin() {\n return Authentication.isAdmin();\n }\n\n function isEndpointAdmin() {\n return Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n }\n\n async function initView() {\n $scope.uiVersion = StateManager.getState().application.version;\n //$scope.edition = StateManager.getState().application.edition;\n $scope.edition = 'Business Edition';\n $scope.logo = StateManager.getState().application.logo;\n\n $scope.endpointId = EndpointProvider.endpointID();\n $scope.showStacks = shouldShowStacks();\n\n let userDetails = Authentication.getUserDetails();\n const isAdmin = isClusterAdmin();\n $scope.isAdmin = isAdmin;\n $scope.isEndpointAdmin = isEndpointAdmin();\n\n $q.when(!isAdmin ? UserService.userMemberships(userDetails.ID) : [])\n .then(function success(data) {\n checkPermissions(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve user memberships');\n });\n }\n\n initView();\n\n function shouldShowStacks() {\n if (isClusterAdmin() || isEndpointAdmin()) {\n return true;\n }\n\n const endpoint = EndpointProvider.currentEndpoint();\n if (!endpoint || !endpoint.SecuritySettings) {\n return false;\n }\n\n return endpoint.SecuritySettings.allowStackManagementForRegularUsers;\n }\n\n $transitions.onEnter({}, async () => {\n $scope.endpointId = EndpointProvider.endpointID();\n $scope.showStacks = shouldShowStacks();\n $scope.isAdmin = isClusterAdmin();\n $scope.isEndpointAdmin = isEndpointAdmin();\n $scope.endpointState = EndpointProvider.endpoint();\n\n if ($scope.applicationState.endpoint.name) {\n document.title = `${$rootScope.defaultTitle} | ${$scope.applicationState.endpoint.name}`;\n }\n });\n}\n","import angular from 'angular';\nimport uuidv4 from 'uuid/v4';\n\nimport { AccessControlFormData } from '@/portainer/components/accessControlForm/porAccessControlFormModel';\nimport { STACK_NAME_VALIDATION_REGEX } from '@/constants';\nimport { RepositoryMechanismTypes } from '@/kubernetes/models/deploy';\n\nangular\n .module('portainer.app')\n .controller(\n 'CreateStackController',\n function (\n $scope,\n $state,\n $async,\n $window,\n ModalService,\n StackService,\n Authentication,\n Notifications,\n FormValidator,\n ResourceControlService,\n FormHelper,\n StackHelper,\n ContainerHelper,\n CustomTemplateService,\n ContainerService,\n endpoint,\n WebhookHelper,\n clipboard\n ) {\n $scope.onChangeTemplateId = onChangeTemplateId;\n $scope.buildAnalyticsProperties = buildAnalyticsProperties;\n\n $scope.STACK_NAME_VALIDATION_REGEX = STACK_NAME_VALIDATION_REGEX;\n $scope.isAdmin = Authentication.isAdmin();\n\n $scope.formValues = {\n Name: '',\n StackFileContent: '',\n StackFile: null,\n RepositoryURL: '',\n RepositoryReferenceName: '',\n RepositoryAuthentication: false,\n RepositoryUsername: '',\n RepositoryPassword: '',\n Env: [],\n AdditionalFiles: [],\n ComposeFilePathInRepository: 'docker-compose.yml',\n AccessControlData: new AccessControlFormData(),\n RepositoryAutomaticUpdates: false,\n RepositoryAutomaticUpdatesForce: false,\n RepositoryMechanism: RepositoryMechanismTypes.INTERVAL,\n RepositoryFetchInterval: '5m',\n RepositoryWebhookURL: WebhookHelper.returnStackWebhookUrl(uuidv4()),\n ForcePullImage: false,\n ShowForcePullImage: false,\n EnableWebhook: false,\n };\n\n $scope.state = {\n Method: 'editor',\n formValidationError: '',\n actionInProgress: false,\n StackType: null,\n editorYamlValidationError: '',\n uploadYamlValidationError: '',\n isEditorDirty: false,\n selectedTemplate: null,\n selectedTemplateId: null,\n };\n\n $window.onbeforeunload = () => {\n if ($scope.state.Method === 'editor' && $scope.formValues.StackFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.$on('$destroy', function () {\n $scope.state.isEditorDirty = false;\n });\n\n $scope.onChangeFormValues = onChangeFormValues;\n\n $scope.addAdditionalFiles = function () {\n $scope.formValues.AdditionalFiles.push('');\n };\n\n $scope.removeAdditionalFiles = function (index) {\n $scope.formValues.AdditionalFiles.splice(index, 1);\n };\n\n $scope.hasAuthorizations = function (authorizations) {\n return $scope.isAdmin || Authentication.hasAuthorizations(authorizations);\n };\n\n function buildAnalyticsProperties() {\n const metadata = { type: methodLabel($scope.state.Method) };\n\n if ($scope.state.Method === 'repository') {\n metadata.automaticUpdates = 'off';\n if ($scope.formValues.RepositoryAutomaticUpdates) {\n metadata.automaticUpdates = autoSyncLabel($scope.formValues.RepositoryMechanism);\n }\n metadata.auth = $scope.formValues.RepositoryAuthentication;\n }\n\n if ($scope.state.Method === 'template') {\n metadata.templateName = $scope.state.selectedTemplate.Title;\n }\n\n return { metadata };\n\n function methodLabel(method) {\n switch (method) {\n case 'editor':\n return 'web-editor';\n case 'repository':\n return 'git';\n case 'upload':\n return 'file-upload';\n case 'template':\n return 'custom-template';\n }\n }\n\n function autoSyncLabel(type) {\n switch (type) {\n case RepositoryMechanismTypes.INTERVAL:\n return 'polling';\n case RepositoryMechanismTypes.WEBHOOK:\n return 'webhook';\n }\n return 'off';\n }\n }\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function createSwarmStack(name, method) {\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n const endpointId = +$state.params.endpointId;\n const webhook = $scope.formValues.EnableWebhook ? $scope.formValues.RepositoryWebhookURL.split('/').reverse()[0] : '';\n if (method === 'template' || method === 'editor') {\n var stackFileContent = $scope.formValues.StackFileContent;\n return StackService.createSwarmStackFromFileContent(name, stackFileContent, env, endpointId, webhook);\n }\n\n if (method === 'upload') {\n var stackFile = $scope.formValues.StackFile;\n return StackService.createSwarmStackFromFileUpload(name, stackFile, env, endpointId, webhook);\n }\n\n if (method === 'repository') {\n var repositoryOptions = {\n AdditionalFiles: $scope.formValues.AdditionalFiles,\n RepositoryURL: $scope.formValues.RepositoryURL,\n RepositoryReferenceName: $scope.formValues.RepositoryReferenceName,\n ComposeFilePathInRepository: $scope.formValues.ComposeFilePathInRepository,\n RepositoryAuthentication: $scope.formValues.RepositoryAuthentication,\n RepositoryUsername: $scope.formValues.RepositoryUsername,\n RepositoryPassword: $scope.formValues.RepositoryPassword,\n ForcePullImage: $scope.formValues.ForcePullImage,\n };\n\n getAutoUpdatesProperty(repositoryOptions);\n\n return StackService.createSwarmStackFromGitRepository(name, repositoryOptions, env, endpointId);\n }\n }\n\n function getAutoUpdatesProperty(repositoryOptions) {\n if ($scope.formValues.RepositoryAutomaticUpdates) {\n repositoryOptions.AutoUpdate = {\n ForceUpdate: $scope.formValues.RepositoryAutomaticUpdatesForce,\n ForcePullImage: $scope.formValues.ForcePullImage,\n };\n if ($scope.formValues.RepositoryMechanism === RepositoryMechanismTypes.INTERVAL) {\n repositoryOptions.AutoUpdate.Interval = $scope.formValues.RepositoryFetchInterval;\n } else if ($scope.formValues.RepositoryMechanism === RepositoryMechanismTypes.WEBHOOK) {\n repositoryOptions.AutoUpdate.Webhook = $scope.formValues.RepositoryWebhookURL.split('/').reverse()[0];\n }\n }\n }\n\n function createComposeStack(name, method) {\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n const endpointId = +$state.params.endpointId;\n const webhook = $scope.formValues.EnableWebhook ? $scope.formValues.RepositoryWebhookURL.split('/').reverse()[0] : '';\n\n if (method === 'editor' || method === 'template') {\n var stackFileContent = $scope.formValues.StackFileContent;\n return StackService.createComposeStackFromFileContent(name, stackFileContent, env, endpointId, webhook);\n } else if (method === 'upload') {\n var stackFile = $scope.formValues.StackFile;\n return StackService.createComposeStackFromFileUpload(name, stackFile, env, endpointId, webhook);\n } else if (method === 'repository') {\n var repositoryOptions = {\n AdditionalFiles: $scope.formValues.AdditionalFiles,\n RepositoryURL: $scope.formValues.RepositoryURL,\n RepositoryReferenceName: $scope.formValues.RepositoryReferenceName,\n ComposeFilePathInRepository: $scope.formValues.ComposeFilePathInRepository,\n RepositoryAuthentication: $scope.formValues.RepositoryAuthentication,\n RepositoryUsername: $scope.formValues.RepositoryUsername,\n RepositoryPassword: $scope.formValues.RepositoryPassword,\n ForcePullImage: $scope.formValues.ForcePullImage,\n };\n\n getAutoUpdatesProperty(repositoryOptions);\n\n return StackService.createComposeStackFromGitRepository(name, repositoryOptions, env, endpointId);\n }\n }\n\n $scope.copyWebhook = function () {\n clipboard.copyText($scope.formValues.RepositoryWebhookURL);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n };\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $scope.deployStack = function () {\n var name = $scope.formValues.Name;\n var method = $scope.state.Method;\n\n var accessControlData = $scope.formValues.AccessControlData;\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n\n if (method === 'editor' && $scope.formValues.StackFileContent === '') {\n $scope.state.formValidationError = 'Stack file content must not be empty';\n return;\n }\n\n if (!validateForm(accessControlData, isAdmin)) {\n return;\n }\n\n var type = $scope.state.StackType;\n var action = createSwarmStack;\n if (type === 2) {\n action = createComposeStack;\n }\n $scope.state.actionInProgress = true;\n action(name, method)\n .then(function success(data) {\n if (data.data) {\n data = data.data;\n }\n const userId = userDetails.ID;\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $scope.state.isEditorDirty = false;\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Deployment error', err, 'Unable to deploy stack');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.onChangeFileContent = function onChangeFileContent(value) {\n $scope.formValues.StackFileContent = value;\n $scope.state.editorYamlValidationError = StackHelper.validateYAML($scope.formValues.StackFileContent, $scope.containerNames);\n $scope.state.isEditorDirty = true;\n };\n\n async function onFileLoadAsync(event) {\n $scope.state.uploadYamlValidationError = StackHelper.validateYAML(event.target.result, $scope.containerNames);\n }\n\n function onFileLoad(event) {\n return $async(onFileLoadAsync, event);\n }\n\n $scope.uploadFile = function (file) {\n $scope.formValues.StackFile = file;\n\n if (file) {\n const temporaryFileReader = new FileReader();\n temporaryFileReader.fileName = file.name;\n temporaryFileReader.onload = onFileLoad;\n temporaryFileReader.readAsText(file);\n }\n };\n\n function onChangeTemplateId(templateId, template) {\n return $async(async () => {\n try {\n $scope.state.selectedTemplateId = templateId;\n $scope.state.selectedTemplate = template;\n\n const fileContent = await CustomTemplateService.customTemplateFile(templateId);\n $scope.onChangeFileContent(fileContent);\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to retrieve Custom Template file');\n }\n });\n }\n\n async function initView() {\n var endpointMode = $scope.applicationState.endpoint.mode;\n $scope.state.StackType = 2;\n if (endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER') {\n $scope.state.StackType = 1;\n }\n\n $scope.composeSyntaxMaxVersion = endpoint.ComposeSyntaxMaxVersion;\n $scope.formValues.ShowForcePullImage = $scope.state.StackType !== 3;\n try {\n const containers = await ContainerService.containers(true);\n $scope.containerNames = ContainerHelper.getContainerNames(containers);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to retrieve Containers');\n }\n }\n\n this.uiCanExit = async function () {\n if ($scope.state.Method === 'editor' && $scope.formValues.StackFileContent && $scope.state.isEditorDirty) {\n return ModalService.confirmWebEditorDiscard();\n }\n };\n\n initView();\n\n function onChangeFormValues(newValues) {\n $scope.formValues = newValues;\n }\n }\n );\n","import uuidv4 from 'uuid/v4';\nimport { AccessControlFormData } from 'Portainer/components/accessControlForm/porAccessControlFormModel';\n\nangular.module('portainer.app').controller('StackController', [\n '$async',\n '$q',\n '$scope',\n '$state',\n '$window',\n '$transition$',\n 'clipboard',\n 'StackService',\n 'NodeService',\n 'ServiceService',\n 'TaskService',\n 'ContainerService',\n 'ServiceHelper',\n 'TaskHelper',\n 'Notifications',\n 'FormHelper',\n 'EndpointProvider',\n 'EndpointService',\n 'GroupService',\n 'ModalService',\n 'StackHelper',\n 'endpoint',\n 'Authentication',\n 'ContainerHelper',\n 'ResourceControlService',\n 'WebhookHelper',\n function (\n $async,\n $q,\n $scope,\n $state,\n $window,\n $transition$,\n clipboard,\n StackService,\n NodeService,\n ServiceService,\n TaskService,\n ContainerService,\n ServiceHelper,\n TaskHelper,\n Notifications,\n FormHelper,\n EndpointProvider,\n EndpointService,\n GroupService,\n ModalService,\n StackHelper,\n endpoint,\n Authentication,\n ContainerHelper,\n ResourceControlService,\n WebhookHelper\n ) {\n $scope.endpoint = endpoint;\n $scope.isAdmin = Authentication.isAdmin();\n $scope.state = {\n actionInProgress: false,\n migrationInProgress: false,\n showEditorTab: false,\n yamlError: false,\n isEditorDirty: false,\n };\n\n $scope.formValues = {\n Prune: false,\n Endpoint: null,\n Env: [],\n AccessControlData: new AccessControlFormData(),\n WebhookURL: WebhookHelper.returnStackWebhookUrl(uuidv4()),\n EnableWebhook: false,\n };\n\n $scope.handleEnvVarChange = handleEnvVarChange;\n function handleEnvVarChange(value) {\n $scope.formValues.Env = value;\n }\n\n $window.onbeforeunload = () => {\n if ($scope.stackFileContent && $scope.state.isEditorDirty) {\n return '';\n }\n };\n\n $scope.$on('$destroy', function () {\n $scope.state.isEditorDirty = false;\n });\n\n $scope.duplicateStack = function duplicateStack(name, targetEndpointId) {\n var stack = $scope.stack;\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n // sets the targetEndpointID as global for interceptors\n EndpointProvider.setEndpointID(targetEndpointId);\n\n return StackService.duplicateStack(name, $scope.stackFileContent, env, targetEndpointId, stack.Type).then(onDuplicationSuccess).catch(notifyOnError);\n\n function onDuplicationSuccess() {\n Notifications.success('Stack successfully duplicated');\n $scope.state.isEditorDirty = false;\n $state.go('docker.stacks', {}, { reload: true });\n // sets back the original endpointID as global for interceptors\n EndpointProvider.setEndpointID(stack.EndpointId);\n }\n\n function notifyOnError(err) {\n Notifications.error('Failure', err, 'Unable to duplicate stack');\n }\n };\n\n $scope.showEditor = function () {\n $scope.state.showEditorTab = true;\n };\n\n $scope.migrateStack = function (name, endpointId) {\n return $q(function (resolve) {\n ModalService.confirm({\n title: 'Are you sure?',\n message:\n 'This action will deploy a new instance of this stack on the target environment, please note that this does NOT relocate the content of any persistent volumes that may be attached to this stack.',\n buttons: {\n confirm: {\n label: 'Migrate',\n className: 'btn-danger',\n },\n },\n callback: function onConfirm(confirmed) {\n if (!confirmed) {\n return resolve();\n }\n return resolve(migrateStack(name, endpointId));\n },\n });\n });\n };\n\n $scope.removeStack = function () {\n ModalService.confirmDeletion('Do you want to remove the stack? Associated services will be removed as well.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteStack();\n });\n };\n $scope.detachStackFromGit = function () {\n ModalService.confirmDetachment('Do you want to detach the stack from Git?', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n $scope.deployStack();\n });\n };\n\n function migrateStack(name, targetEndpointId) {\n const stack = $scope.stack;\n\n let migrateRequest = StackService.migrateSwarmStack;\n if (stack.Type === 2) {\n migrateRequest = StackService.migrateComposeStack;\n }\n\n // TODO: this is a work-around for stacks created with Portainer version >= 1.17.1\n // The EndpointID property is not available for these stacks, we can pass\n // the current endpoint identifier as a part of the migrate request. It will be used if\n // the EndpointID property is not defined on the stack.\n if (stack.EndpointId === 0) {\n stack.EndpointId = endpoint.Id;\n }\n\n $scope.state.migrationInProgress = true;\n return migrateRequest(stack, targetEndpointId, name)\n .then(function success() {\n Notifications.success('Stack successfully migrated', stack.Name);\n $state.go('docker.stacks', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to migrate stack');\n })\n .finally(function final() {\n $scope.state.migrationInProgress = false;\n });\n }\n\n function deleteStack() {\n var endpointId = +$state.params.endpointId;\n var stack = $scope.stack;\n\n StackService.remove(stack, $transition$.params().external, endpointId)\n .then(function success() {\n Notifications.success('Stack successfully removed', stack.Name);\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove stack ' + stack.Name);\n });\n }\n\n $scope.associateStack = function () {\n var endpointId = +$state.params.endpointId;\n var stack = $scope.stack;\n var accessControlData = $scope.formValues.AccessControlData;\n $scope.state.actionInProgress = true;\n\n StackService.associate(stack, endpointId, $scope.orphanedRunning)\n .then(function success(data) {\n const resourceControl = data.ResourceControl;\n const userDetails = Authentication.getUserDetails();\n const userId = userDetails.ID;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully associated', stack.Name);\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to associate stack ' + stack.Name);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.hasAuthorizations = function (authorizations) {\n return $scope.isAdmin || Authentication.hasAuthorizations(authorizations);\n };\n\n $scope.disabledWebhookButton = function (webhookExists) {\n if (webhookExists) {\n return !$scope.hasAuthorizations(['PortainerWebhookDelete']);\n }\n return !$scope.hasAuthorizations(['PortainerWebhookCreate']);\n };\n\n $scope.deployStack = function () {\n const stack = $scope.stack;\n const isSwarmStack = stack.Type === 1;\n ModalService.confirmStackUpdate('Do you want to force an update of the stack?', isSwarmStack, null, function (result) {\n if (!result) {\n return;\n }\n\n var stackFile = $scope.stackFileContent;\n var env = FormHelper.removeInvalidEnvVars($scope.formValues.Env);\n var prune = $scope.formValues.Prune;\n\n const webhook = $scope.formValues.EnableWebhook ? $scope.formValues.WebhookURL.split('/').reverse()[0] : null;\n // TODO: this is a work-around for stacks created with Portainer version >= 1.17.1\n // The EndpointID property is not available for these stacks, we can pass\n // the current endpoint identifier as a part of the update request. It will be used if\n // the EndpointID property is not defined on the stack.\n if (stack.EndpointId === 0) {\n stack.EndpointId = endpoint.Id;\n }\n\n $scope.state.actionInProgress = true;\n StackService.updateStack(stack, stackFile, env, prune, webhook, !!result[0])\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $scope.state.isEditorDirty = false;\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create stack');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n });\n };\n\n $scope.copyWebhook = function () {\n clipboard.copyText($scope.formValues.WebhookURL);\n $('#copyNotification').show();\n $('#copyNotification').fadeOut(2000);\n };\n $scope.editorUpdate = function (cm) {\n if ($scope.stackFileContent.replace(/(\\r\\n|\\n|\\r)/gm, '') !== cm.getValue().replace(/(\\r\\n|\\n|\\r)/gm, '')) {\n $scope.state.isEditorDirty = true;\n $scope.stackFileContent = cm.getValue();\n $scope.state.yamlError = StackHelper.validateYAML($scope.stackFileContent, $scope.containerNames);\n }\n };\n\n $scope.stopStack = stopStack;\n function stopStack() {\n return $async(stopStackAsync);\n }\n async function stopStackAsync() {\n const confirmed = await ModalService.confirmAsync({\n title: 'Are you sure?',\n message: 'Are you sure you want to stop this stack?',\n buttons: { confirm: { label: 'Stop', className: 'btn-danger' } },\n });\n if (!confirmed) {\n return;\n }\n\n $scope.state.actionInProgress = true;\n try {\n const endpointId = +$state.params.endpointId;\n await StackService.stop($scope.stack.Id, endpointId);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to stop stack');\n }\n $scope.state.actionInProgress = false;\n }\n\n $scope.startStack = startStack;\n function startStack() {\n return $async(startStackAsync);\n }\n async function startStackAsync() {\n $scope.state.actionInProgress = true;\n const id = $scope.stack.Id;\n try {\n await StackService.start(id);\n $state.reload();\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to start stack');\n }\n $scope.state.actionInProgress = false;\n }\n\n function loadStack(id) {\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n EndpointService.endpoints()\n .then(function success(data) {\n $scope.endpoints = data.value;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve environments');\n });\n\n $q.all({\n stack: StackService.stack(id),\n groups: GroupService.groups(),\n containers: ContainerService.containers(true),\n })\n .then(function success(data) {\n var stack = data.stack;\n $scope.groups = data.groups;\n $scope.stack = stack;\n $scope.containerNames = ContainerHelper.getContainerNames(data.containers);\n\n $scope.formValues.Env = $scope.stack.Env;\n $scope.formValues.EnableWebhook = !!$scope.stack.Webhook;\n if ($scope.formValues.EnableWebhook) {\n $scope.formValues.WebhookURL = WebhookHelper.returnStackWebhookUrl($scope.stack.Webhook);\n }\n\n let resourcesPromise = Promise.resolve({});\n if (!stack.Status || stack.Status === 1) {\n resourcesPromise = stack.Type === 1 ? retrieveSwarmStackResources(stack.Name, agentProxy) : retrieveComposeStackResources(stack.Name);\n }\n\n return $q.all({\n stackFile: StackService.getStackFile(id),\n resources: resourcesPromise,\n });\n })\n .then(function success(data) {\n const isSwarm = $scope.stack.Type === 1;\n $scope.stackFileContent = data.stackFile;\n // workaround for missing status, if stack has resources, set the status to 1 (active), otherwise to 2 (inactive) (https://github.com/portainer/portainer/issues/4422)\n if (!$scope.stack.Status) {\n $scope.stack.Status = data.resources && ((isSwarm && data.resources.services.length) || data.resources.containers.length) ? 1 : 2;\n }\n\n if ($scope.stack.Status === 1) {\n if (isSwarm) {\n assignSwarmStackResources(data.resources, agentProxy);\n } else {\n assignComposeStackResources(data.resources);\n }\n }\n $scope.state.yamlError = StackHelper.validateYAML($scope.stackFileContent, $scope.containerNames);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve stack details');\n });\n }\n\n function retrieveSwarmStackResources(stackName, agentProxy) {\n var stackFilter = {\n label: ['com.docker.stack.namespace=' + stackName],\n };\n\n return $q.all({\n services: ServiceService.services(stackFilter),\n tasks: TaskService.tasks(stackFilter),\n containers: agentProxy ? ContainerService.containers(1) : [],\n nodes: NodeService.nodes(),\n });\n }\n\n function assignSwarmStackResources(resources, agentProxy) {\n var services = resources.services;\n var tasks = resources.tasks;\n\n if (agentProxy) {\n var containers = resources.containers;\n for (var j = 0; j < tasks.length; j++) {\n var task = tasks[j];\n TaskHelper.associateContainerToTask(task, containers);\n }\n }\n\n for (var i = 0; i < services.length; i++) {\n var service = services[i];\n ServiceHelper.associateTasksToService(service, tasks);\n }\n\n $scope.nodes = resources.nodes;\n $scope.tasks = tasks;\n $scope.services = services;\n }\n\n function retrieveComposeStackResources(stackName) {\n var stackFilter = {\n label: ['com.docker.compose.project=' + stackName],\n };\n\n return $q.all({\n containers: ContainerService.containers(1, stackFilter),\n });\n }\n\n function assignComposeStackResources(resources) {\n $scope.containers = resources.containers;\n }\n\n function loadExternalStack(name) {\n var stackType = $transition$.params().type;\n if (!stackType || (stackType !== '1' && stackType !== '2')) {\n Notifications.error('Failure', null, 'Invalid type URL parameter.');\n return;\n }\n\n if (stackType === '1') {\n loadExternalSwarmStack(name);\n } else {\n loadExternalComposeStack(name);\n }\n }\n\n function loadExternalSwarmStack(name) {\n var agentProxy = $scope.applicationState.endpoint.mode.agentProxy;\n\n retrieveSwarmStackResources(name, agentProxy)\n .then(function success(data) {\n assignSwarmStackResources(data, agentProxy);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve stack details');\n });\n }\n\n function loadExternalComposeStack(name) {\n retrieveComposeStackResources(name)\n .then(function success(data) {\n assignComposeStackResources(data);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve stack details');\n });\n }\n\n this.uiCanExit = async function () {\n if ($scope.stackFileContent && $scope.state.isEditorDirty) {\n return ModalService.confirmWebEditorDiscard();\n }\n };\n\n async function initView() {\n var stackName = $transition$.params().name;\n $scope.stackName = stackName;\n\n const regular = $transition$.params().regular == 'true';\n $scope.regular = regular;\n\n var external = $transition$.params().external == 'true';\n $scope.external = external;\n\n const orphaned = $transition$.params().orphaned == 'true';\n $scope.orphaned = orphaned;\n\n const orphanedRunning = $transition$.params().orphanedRunning == 'true';\n $scope.orphanedRunning = orphanedRunning;\n\n if (external || (orphaned && orphanedRunning)) {\n loadExternalStack(stackName);\n }\n\n if (regular || orphaned) {\n const stackId = $transition$.params().id;\n loadStack(stackId);\n }\n\n $scope.composeSyntaxMaxVersion = endpoint.ComposeSyntaxMaxVersion;\n\n $scope.stackType = $transition$.params().type;\n\n $scope.editorReadOnly = !Authentication.hasAuthorizations(['PortainerStackUpdate']);\n }\n\n initView();\n },\n]);\n","import { isOfflineEndpoint } from '@/portainer/helpers/endpointHelper';\n\nangular.module('portainer.app').controller('StacksController', StacksController);\n\n/* @ngInject */\nfunction StacksController($scope, $state, Notifications, StackService, ModalService, Authentication, endpoint) {\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected stack(s)? Associated services will be removed as well.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedStacks(selectedItems);\n });\n };\n\n function deleteSelectedStacks(stacks) {\n const endpointId = endpoint.Id;\n let actionCount = stacks.length;\n angular.forEach(stacks, function (stack) {\n StackService.remove(stack, stack.External, endpointId)\n .then(function success() {\n Notifications.success('Stack successfully removed', stack.Name);\n var index = $scope.stacks.indexOf(stack);\n $scope.stacks.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove stack ' + stack.Name);\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n $scope.offlineMode = false;\n $scope.createEnabled = false;\n\n $scope.getStacks = getStacks;\n\n function getStacks() {\n const endpointMode = $scope.applicationState.endpoint.mode;\n const endpointId = endpoint.Id;\n\n const includeOrphanedStacks = Authentication.isAdmin() || Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n StackService.stacks(true, endpointMode.provider === 'DOCKER_SWARM_MODE' && endpointMode.role === 'MANAGER', endpointId, includeOrphanedStacks)\n .then(function success(stacks) {\n $scope.stacks = stacks;\n $scope.offlineMode = isOfflineEndpoint(endpoint);\n })\n .catch(function error(err) {\n $scope.stacks = [];\n Notifications.error('Failure', err, 'Unable to retrieve stacks');\n });\n }\n\n async function loadCreateEnabled() {\n return endpoint.SecuritySettings.allowStackManagementForRegularUsers || Authentication.isAdmin() || Authentication.hasAuthorizations(['EndpointResourcesAccess']);\n }\n\n async function initView() {\n getStacks();\n $scope.createEnabled = await loadCreateEnabled();\n }\n\n initView();\n}\n","import angular from 'angular';\nimport _ from 'lodash-es';\n\nangular.module('portainer.app').controller('TagsController', TagsController);\n\nfunction TagsController($scope, $state, $async, TagService, Notifications) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Name: '',\n };\n\n $scope.checkNameValidity = function (form) {\n var valid = true;\n for (var i = 0; i < $scope.tags.length; i++) {\n if ($scope.formValues.Name === $scope.tags[i].Name) {\n valid = false;\n break;\n }\n }\n form.name.$setValidity('validName', valid);\n };\n\n $scope.removeAction = removeAction;\n\n function removeAction(tags) {\n return $async(removeActionAsync, tags);\n }\n\n async function removeActionAsync(tags) {\n for (let tag of tags) {\n try {\n await TagService.deleteTag(tag.Id);\n\n Notifications.success('Tag successfully removed', tag.Name);\n _.remove($scope.tags, tag);\n } catch (err) {\n Notifications.error('Failure', err, 'Unable to remove tag');\n }\n }\n\n $state.reload();\n }\n\n $scope.createTag = function () {\n var tagName = $scope.formValues.Name;\n TagService.createTag(tagName)\n .then(function success() {\n Notifications.success('Tag successfully created', tagName);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create tag');\n });\n };\n\n function initView() {\n TagService.tags()\n .then(function success(data) {\n $scope.tags = data;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve tags');\n $scope.tags = [];\n });\n }\n\n initView();\n}\n","angular.module('portainer.app').controller('TeamController', [\n '$q',\n '$scope',\n '$state',\n '$transition$',\n 'TeamService',\n 'UserService',\n 'TeamMembershipService',\n 'ModalService',\n 'Notifications',\n 'PaginationService',\n 'Authentication',\n function ($q, $scope, $state, $transition$, TeamService, UserService, TeamMembershipService, ModalService, Notifications, PaginationService, Authentication) {\n $scope.state = {\n pagination_count_users: PaginationService.getPaginationLimit('team_available_users'),\n pagination_count_members: PaginationService.getPaginationLimit('team_members'),\n };\n\n $scope.sortTypeUsers = 'Username';\n $scope.sortReverseUsers = true;\n $scope.users = [];\n $scope.teamMembers = [];\n $scope.leaderCount = 0;\n\n $scope.orderUsers = function (sortType) {\n $scope.sortReverseUsers = $scope.sortTypeUsers === sortType ? !$scope.sortReverseUsers : false;\n $scope.sortTypeUsers = sortType;\n };\n\n $scope.changePaginationCountUsers = function () {\n PaginationService.setPaginationLimit('team_available_users', $scope.state.pagination_count_users);\n };\n\n $scope.sortTypeGroupMembers = 'TeamRole';\n $scope.sortReverseGroupMembers = false;\n\n $scope.orderGroupMembers = function (sortType) {\n $scope.sortReverseGroupMembers = $scope.sortTypeGroupMembers === sortType ? !$scope.sortReverseGroupMembers : false;\n $scope.sortTypeGroupMembers = sortType;\n };\n\n $scope.changePaginationCountGroupMembers = function () {\n PaginationService.setPaginationLimit('team_members', $scope.state.pagination_count_members);\n };\n\n $scope.deleteTeam = function () {\n ModalService.confirmDeletion('Do you want to delete this team? Users in this team will not be deleted.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteTeam();\n });\n };\n\n $scope.promoteToLeader = function (user) {\n TeamMembershipService.updateMembership(user.MembershipId, user.Id, $scope.team.Id, 1)\n .then(function success() {\n $scope.leaderCount++;\n user.TeamRole = 'Leader';\n Notifications.success('User is now team leader', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user role');\n });\n };\n\n $scope.demoteToMember = function (user) {\n TeamMembershipService.updateMembership(user.MembershipId, user.Id, $scope.team.Id, 2)\n .then(function success() {\n user.TeamRole = 'Member';\n $scope.leaderCount--;\n Notifications.success('User is now team member', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user role');\n });\n };\n\n $scope.addAllUsers = function () {\n var teamMembershipQueries = [];\n angular.forEach($scope.users, function (user) {\n teamMembershipQueries.push(TeamMembershipService.createMembership(user.Id, $scope.team.Id, 2));\n });\n $q.all(teamMembershipQueries)\n .then(function success(data) {\n var users = $scope.users;\n for (var i = 0; i < users.length; i++) {\n var user = users[i];\n user.MembershipId = data[i].Id;\n user.TeamRole = 'Member';\n }\n $scope.teamMembers = $scope.teamMembers.concat(users);\n $scope.users = [];\n Notifications.success('All users successfully added');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n $scope.addUser = function (user) {\n TeamMembershipService.createMembership(user.Id, $scope.team.Id, 2)\n .then(function success(data) {\n removeUserFromArray(user.Id, $scope.users);\n user.TeamRole = 'Member';\n user.MembershipId = data.Id;\n $scope.teamMembers.push(user);\n Notifications.success('User added to team', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n $scope.removeAllUsers = function () {\n var teamMembershipQueries = [];\n angular.forEach($scope.teamMembers, function (user) {\n teamMembershipQueries.push(TeamMembershipService.deleteMembership(user.MembershipId));\n });\n $q.all(teamMembershipQueries)\n .then(function success() {\n $scope.users = $scope.users.concat($scope.teamMembers);\n $scope.teamMembers = [];\n $scope.leaderCount = 0;\n Notifications.success('All users successfully removed');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n $scope.removeUser = function (user) {\n TeamMembershipService.deleteMembership(user.MembershipId)\n .then(function success() {\n removeUserFromArray(user.Id, $scope.teamMembers);\n if (user.TeamRole === 'Leader') {\n $scope.leaderCount--;\n }\n $scope.users.push(user);\n Notifications.success('User removed from team', user.Username);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update team members');\n });\n };\n\n function deleteTeam() {\n TeamService.deleteTeam($scope.team.Id)\n .then(function success() {\n Notifications.success('Team successfully deleted', $scope.team.Name);\n $state.go('portainer.teams');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove team');\n });\n }\n\n function removeUserFromArray(id, users) {\n for (var i = 0, l = users.length; i < l; i++) {\n if (users[i].Id === id) {\n users.splice(i, 1);\n return;\n }\n }\n }\n\n function assignUsersAndMembers(users, memberships) {\n for (var i = 0; i < users.length; i++) {\n var user = users[i];\n var member = false;\n for (var j = 0; j < memberships.length; j++) {\n var membership = memberships[j];\n if (user.Id === membership.UserId) {\n member = true;\n if (membership.Role === 1) {\n user.TeamRole = 'Leader';\n $scope.leaderCount++;\n } else {\n user.TeamRole = 'Member';\n }\n user.MembershipId = membership.Id;\n $scope.teamMembers.push(user);\n break;\n }\n }\n if (!member) {\n $scope.users.push(user);\n }\n }\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n $q.all({\n team: TeamService.team($transition$.params().id),\n users: UserService.users(false),\n memberships: TeamService.userMemberships($transition$.params().id),\n })\n .then(function success(data) {\n var users = data.users;\n $scope.team = data.team;\n assignUsersAndMembers(users, data.memberships);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve team details');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('TeamsController', [\n '$q',\n '$scope',\n '$state',\n 'TeamService',\n 'UserService',\n 'ModalService',\n 'Notifications',\n 'Authentication',\n function ($q, $scope, $state, TeamService, UserService, ModalService, Notifications, Authentication) {\n $scope.state = {\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Name: '',\n Leaders: [],\n };\n\n $scope.checkNameValidity = function (form) {\n var valid = true;\n for (var i = 0; i < $scope.teams.length; i++) {\n if ($scope.formValues.Name === $scope.teams[i].Name) {\n valid = false;\n break;\n }\n }\n form.team_name.$setValidity('validName', valid);\n };\n\n $scope.addTeam = function (formValues) {\n const teamName = formValues.name;\n\n $scope.state.actionInProgress = true;\n TeamService.createTeam(teamName, formValues.leaders)\n .then(function success() {\n Notifications.success('Team successfully created', teamName);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create team');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to delete the selected team(s)? Users in the team(s) will not be deleted.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedTeams(selectedItems);\n });\n };\n\n function deleteSelectedTeams(selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (team) {\n TeamService.deleteTeam(team.Id)\n .then(function success() {\n Notifications.success('Team successfully removed', team.Name);\n var index = $scope.teams.indexOf(team);\n $scope.teams.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove team');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n function initView() {\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n $scope.isAdmin = isAdmin;\n $q.all({\n users: UserService.users(false),\n teams: isAdmin ? TeamService.teams() : UserService.userLeadingTeams(userDetails.ID),\n })\n .then(function success(data) {\n var teams = data.teams;\n $scope.teams = teams;\n $scope.users = _.orderBy(data.users, 'Username', 'asc');\n })\n .catch(function error(err) {\n $scope.teams = [];\n $scope.users = [];\n Notifications.error('Failure', err, 'Unable to retrieve teams');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\nimport { AccessControlFormData } from '../../components/accessControlForm/porAccessControlFormModel';\n\nangular.module('portainer.app').controller('TemplatesController', [\n '$scope',\n '$q',\n '$state',\n '$anchorScroll',\n 'ContainerService',\n 'ImageService',\n 'NetworkService',\n 'TemplateService',\n 'TemplateHelper',\n 'VolumeService',\n 'Notifications',\n 'ResourceControlService',\n 'Authentication',\n 'FormValidator',\n 'StackService',\n 'endpoint',\n function (\n $scope,\n $q,\n $state,\n $anchorScroll,\n ContainerService,\n ImageService,\n NetworkService,\n TemplateService,\n TemplateHelper,\n VolumeService,\n Notifications,\n ResourceControlService,\n Authentication,\n FormValidator,\n StackService,\n endpoint\n ) {\n const DOCKER_STANDALONE = 'DOCKER_STANDALONE';\n const DOCKER_SWARM_MODE = 'DOCKER_SWARM_MODE';\n\n $scope.state = {\n selectedTemplate: null,\n showAdvancedOptions: false,\n formValidationError: '',\n actionInProgress: false,\n };\n\n $scope.formValues = {\n network: '',\n name: '',\n AccessControlData: new AccessControlFormData(),\n };\n\n $scope.addVolume = function () {\n $scope.state.selectedTemplate.Volumes.push({ containerPath: '', bind: '', readonly: false, type: 'auto' });\n };\n\n $scope.removeVolume = function (index) {\n $scope.state.selectedTemplate.Volumes.splice(index, 1);\n };\n\n $scope.addPortBinding = function () {\n $scope.state.selectedTemplate.Ports.push({ hostPort: '', containerPort: '', protocol: 'tcp' });\n };\n\n $scope.removePortBinding = function (index) {\n $scope.state.selectedTemplate.Ports.splice(index, 1);\n };\n\n $scope.addExtraHost = function () {\n $scope.state.selectedTemplate.Hosts.push('');\n };\n\n $scope.removeExtraHost = function (index) {\n $scope.state.selectedTemplate.Hosts.splice(index, 1);\n };\n\n $scope.addLabel = function () {\n $scope.state.selectedTemplate.Labels.push({ name: '', value: '' });\n };\n\n $scope.removeLabel = function (index) {\n $scope.state.selectedTemplate.Labels.splice(index, 1);\n };\n\n function validateForm(accessControlData, isAdmin) {\n $scope.state.formValidationError = '';\n var error = '';\n error = FormValidator.validateAccessControl(accessControlData, isAdmin);\n\n if (error) {\n $scope.state.formValidationError = error;\n return false;\n }\n return true;\n }\n\n function createContainerFromTemplate(template, userId, accessControlData) {\n var templateConfiguration = createTemplateConfiguration(template);\n var generatedVolumeCount = TemplateHelper.determineRequiredGeneratedVolumeCount(template.Volumes);\n var generatedVolumeIds = [];\n VolumeService.createXAutoGeneratedLocalVolumes(generatedVolumeCount)\n .then(function success(data) {\n angular.forEach(data, function (volume) {\n var volumeId = volume.Id;\n generatedVolumeIds.push(volumeId);\n });\n TemplateService.updateContainerConfigurationWithVolumes(templateConfiguration, template, data);\n return ImageService.pullImage(template.RegistryModel, true);\n })\n .then(function success() {\n return ContainerService.createAndStartContainer(templateConfiguration);\n })\n .then(function success(data) {\n const resourceControl = data.Portainer.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl, generatedVolumeIds);\n })\n .then(function success() {\n Notifications.success('Container successfully created');\n $state.go('docker.containers', {}, { reload: true });\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, err.msg);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function createComposeStackFromTemplate(template, userId, accessControlData) {\n var stackName = $scope.formValues.name;\n\n for (var i = 0; i < template.Env.length; i++) {\n var envvar = template.Env[i];\n if (envvar.preset) {\n envvar.value = envvar.default;\n }\n }\n\n var repositoryOptions = {\n RepositoryURL: template.Repository.url,\n ComposeFilePathInRepository: template.Repository.stackfile,\n FromAppTemplate: true,\n };\n\n const endpointId = +$state.params.endpointId;\n StackService.createComposeStackFromGitRepository(stackName, repositoryOptions, template.Env, endpointId)\n .then(function success(data) {\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Deployment error', err);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n function createStackFromTemplate(template, userId, accessControlData) {\n var stackName = $scope.formValues.name;\n var env = _.filter(\n _.map(template.Env, function transformEnvVar(envvar) {\n return {\n name: envvar.name,\n value: envvar.preset || !envvar.value ? envvar.default : envvar.value,\n };\n }),\n function removeUndefinedVars(envvar) {\n return envvar.value && envvar.name;\n }\n );\n\n var repositoryOptions = {\n RepositoryURL: template.Repository.url,\n ComposeFilePathInRepository: template.Repository.stackfile,\n FromAppTemplate: true,\n };\n\n const endpointId = +$state.params.endpointId;\n\n StackService.createSwarmStackFromGitRepository(stackName, repositoryOptions, env, endpointId)\n .then(function success(data) {\n const resourceControl = data.ResourceControl;\n return ResourceControlService.applyResourceControl(userId, accessControlData, resourceControl);\n })\n .then(function success() {\n Notifications.success('Stack successfully deployed');\n $state.go('docker.stacks');\n })\n .catch(function error(err) {\n Notifications.error('Deployment error', err);\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n }\n\n $scope.createTemplate = function () {\n var userDetails = Authentication.getUserDetails();\n var userId = userDetails.ID;\n var accessControlData = $scope.formValues.AccessControlData;\n\n if (!validateForm(accessControlData, $scope.isAdmin)) {\n return;\n }\n\n var template = $scope.state.selectedTemplate;\n\n $scope.state.actionInProgress = true;\n if (template.Type === 2) {\n createStackFromTemplate(template, userId, accessControlData);\n } else if (template.Type === 3) {\n createComposeStackFromTemplate(template, userId, accessControlData);\n } else {\n createContainerFromTemplate(template, userId, accessControlData);\n }\n };\n\n $scope.unselectTemplate = function (template) {\n template.Selected = false;\n $scope.state.selectedTemplate = null;\n };\n\n $scope.selectTemplate = function (template) {\n if (!Authentication.isAdmin() && !Authentication.hasAuthorizations(['DockerContainerCreate', 'PortainerStackCreate'])) {\n return;\n }\n\n if ($scope.state.selectedTemplate) {\n $scope.unselectTemplate($scope.state.selectedTemplate);\n }\n\n template.Selected = true;\n if (template.Network) {\n $scope.formValues.network = _.find($scope.availableNetworks, function (o) {\n return o.Name === template.Network;\n });\n } else {\n $scope.formValues.network = _.find($scope.availableNetworks, function (o) {\n return o.Name === 'bridge';\n });\n }\n\n $scope.formValues.name = template.Name ? template.Name : '';\n $scope.state.selectedTemplate = template;\n $scope.state.deployable = isDeployable($scope.applicationState.endpoint, template.Type);\n $anchorScroll('view-top');\n };\n\n function isDeployable(endpoint, templateType) {\n let deployable = false;\n switch (templateType) {\n case 1:\n deployable = endpoint.mode.provider === DOCKER_SWARM_MODE || endpoint.mode.provider === DOCKER_STANDALONE;\n break;\n case 2:\n deployable = endpoint.mode.provider === DOCKER_SWARM_MODE;\n break;\n case 3:\n deployable = endpoint.mode.provider === DOCKER_SWARM_MODE || endpoint.mode.provider === DOCKER_STANDALONE;\n break;\n }\n\n return deployable;\n }\n\n function createTemplateConfiguration(template) {\n var network = $scope.formValues.network;\n var name = $scope.formValues.name;\n return TemplateService.createTemplateConfiguration(template, name, network);\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n var endpointMode = $scope.applicationState.endpoint.mode;\n var apiVersion = $scope.applicationState.endpoint.apiVersion;\n const endpointId = +$state.params.endpointId;\n\n $q.all({\n templates: TemplateService.templates(endpointId),\n volumes: VolumeService.getVolumes(),\n networks: NetworkService.networks(\n endpointMode.provider === 'DOCKER_STANDALONE' || endpointMode.provider === 'DOCKER_SWARM_MODE',\n false,\n endpointMode.provider === 'DOCKER_SWARM_MODE' && apiVersion >= 1.25\n ),\n })\n .then(function success(data) {\n var templates = data.templates;\n $scope.templates = templates;\n $scope.availableVolumes = _.orderBy(data.volumes.Volumes, [(volume) => volume.Name.toLowerCase()], ['asc']);\n var networks = data.networks;\n $scope.availableNetworks = networks;\n $scope.allowBindMounts = endpoint.SecuritySettings.allowBindMountsForRegularUsers;\n })\n .catch(function error(err) {\n $scope.templates = [];\n Notifications.error('Failure', err, 'An error occurred during apps initialization.');\n });\n }\n\n initView();\n },\n]);\n","angular.module('portainer.app').controller('UserController', [\n '$q',\n '$scope',\n '$state',\n '$transition$',\n 'UserService',\n 'ModalService',\n 'Notifications',\n 'SettingsService',\n 'Authentication',\n function ($q, $scope, $state, $transition$, UserService, ModalService, Notifications, SettingsService, Authentication) {\n $scope.state = {\n updatePasswordError: '',\n };\n\n $scope.formValues = {\n username: '',\n newPassword: '',\n confirmPassword: '',\n Administrator: false,\n };\n\n $scope.deleteUser = function () {\n ModalService.confirmDeletion('Do you want to remove this user? This user will not be able to login into Portainer anymore.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteUser();\n });\n };\n\n $scope.updateUser = async function () {\n const role = $scope.formValues.Administrator ? 1 : 2;\n const oldUsername = $scope.user.Username;\n const username = $scope.formValues.username;\n let promise = Promise.resolve(true);\n if (username != oldUsername) {\n promise = new Promise((resolve) =>\n ModalService.confirm({\n title: 'Are you sure?',\n message: `Are you sure you want to rename the user ${oldUsername} to ${username}?`,\n buttons: {\n confirm: {\n label: 'Update',\n className: 'btn-primary',\n },\n },\n callback: resolve,\n })\n );\n }\n const confirmed = await promise;\n if (!confirmed) {\n return;\n }\n UserService.updateUser($scope.user.Id, { role, username })\n .then(function success() {\n Notifications.success('User successfully updated');\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user permissions');\n });\n };\n\n $scope.updatePassword = async function () {\n const isCurrentUser = Authentication.getUserDetails().ID === $scope.user.Id;\n const confirmed = !isCurrentUser || (await ModalService.confirmChangePassword());\n if (!confirmed) {\n return;\n }\n UserService.updateUser($scope.user.Id, { password: $scope.formValues.newPassword })\n .then(function success() {\n Notifications.success('Password successfully updated');\n if (isCurrentUser) {\n $state.go('portainer.logout');\n } else {\n $state.reload();\n }\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to update user password');\n });\n };\n\n function deleteUser() {\n UserService.deleteUser($scope.user.Id)\n .then(function success() {\n Notifications.success('User successfully deleted', $scope.user.Username);\n $state.go('portainer.users');\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove user');\n });\n }\n\n $scope.isSubmitEnabled = isSubmitEnabled;\n function isSubmitEnabled() {\n const { user, formValues } = $scope;\n return user && (user.Username !== formValues.username || (formValues.Administrator && user.Role !== 1) || (!formValues.Administrator && user.Role === 1));\n }\n\n $scope.isDeleteDisabled = isDeleteDisabled;\n function isDeleteDisabled() {\n const { user } = $scope;\n return user && user.Id === 1;\n }\n\n function initView() {\n $scope.isAdmin = Authentication.isAdmin();\n\n $q.all({\n user: UserService.user($transition$.params().id),\n settings: SettingsService.publicSettings(),\n })\n .then(function success(data) {\n var user = data.user;\n $scope.user = user;\n $scope.formValues.Administrator = user.Role === 1;\n $scope.formValues.username = user.Username;\n $scope.AuthenticationMethod = data.settings.AuthenticationMethod;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve user information');\n });\n }\n\n initView();\n },\n]);\n","import _ from 'lodash-es';\n\nangular.module('portainer.app').controller('UsersController', [\n '$q',\n '$scope',\n '$state',\n 'UserService',\n 'TeamService',\n 'TeamMembershipService',\n 'ModalService',\n 'Notifications',\n 'Authentication',\n 'SettingsService',\n function ($q, $scope, $state, UserService, TeamService, TeamMembershipService, ModalService, Notifications, Authentication, SettingsService) {\n $scope.state = {\n userCreationError: '',\n validUsername: false,\n actionInProgress: false,\n };\n\n $scope.formValues = {\n Username: '',\n Password: '',\n ConfirmPassword: '',\n Administrator: false,\n Teams: [],\n };\n\n $scope.checkUsernameValidity = function () {\n var valid = true;\n for (var i = 0; i < $scope.users.length; i++) {\n if ($scope.formValues.Username.toLocaleLowerCase() === $scope.users[i].Username.toLocaleLowerCase()) {\n valid = false;\n break;\n }\n }\n $scope.state.validUsername = valid;\n $scope.state.userCreationError = valid ? '' : 'Username already taken';\n };\n\n $scope.addUser = function () {\n $scope.state.actionInProgress = true;\n $scope.state.userCreationError = '';\n var username = $scope.formValues.Username;\n var password = $scope.formValues.Password;\n var role = $scope.formValues.Administrator ? 1 : 2;\n var teamIds = [];\n angular.forEach($scope.formValues.Teams, function (team) {\n teamIds.push(team.Id);\n });\n UserService.createUser(username, password, role, teamIds)\n .then(function success() {\n Notifications.success('User successfully created', username);\n $state.reload();\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to create user');\n })\n .finally(function final() {\n $scope.state.actionInProgress = false;\n });\n };\n\n function deleteSelectedUsers(selectedItems) {\n var actionCount = selectedItems.length;\n angular.forEach(selectedItems, function (user) {\n UserService.deleteUser(user.Id)\n .then(function success() {\n Notifications.success('User successfully removed', user.Username);\n var index = $scope.users.indexOf(user);\n $scope.users.splice(index, 1);\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to remove user');\n })\n .finally(function final() {\n --actionCount;\n if (actionCount === 0) {\n $state.reload();\n }\n });\n });\n }\n\n $scope.removeAction = function (selectedItems) {\n ModalService.confirmDeletion('Do you want to remove the selected users? They will not be able to login into Portainer anymore.', function onConfirm(confirmed) {\n if (!confirmed) {\n return;\n }\n deleteSelectedUsers(selectedItems);\n });\n };\n\n function assignTeamLeaders(users, memberships) {\n for (var i = 0; i < users.length; i++) {\n var user = users[i];\n user.isTeamLeader = false;\n for (var j = 0; j < memberships.length; j++) {\n var membership = memberships[j];\n if (user.Id === membership.UserId && membership.Role === 1) {\n user.isTeamLeader = true;\n user.RoleName = 'team leader';\n break;\n }\n }\n }\n }\n\n function initView() {\n var userDetails = Authentication.getUserDetails();\n var isAdmin = Authentication.isAdmin();\n $scope.isAdmin = isAdmin;\n $q.all({\n users: UserService.users(true),\n teams: isAdmin ? TeamService.teams() : UserService.userLeadingTeams(userDetails.ID),\n memberships: TeamMembershipService.memberships(),\n settings: SettingsService.publicSettings(),\n })\n .then(function success(data) {\n var users = data.users;\n assignTeamLeaders(users, data.memberships);\n $scope.users = users;\n $scope.teams = _.orderBy(data.teams, 'Name', 'asc');\n $scope.AuthenticationMethod = data.settings.AuthenticationMethod;\n })\n .catch(function error(err) {\n Notifications.error('Failure', err, 'Unable to retrieve users and teams');\n $scope.users = [];\n $scope.teams = [];\n });\n }\n\n initView();\n },\n]);\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-view.html');\n\nimport angular from 'angular';\nimport controller from './wizard-view.controller.js';\n\nangular.module('portainer.app').component('wizardView', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-endpoints.html');\n\nimport angular from 'angular';\nimport controller from './wizard-endpoints.controller.js';\nimport './wizard-endpoints.css';\n\nangular.module('portainer.app').component('wizardEndpoints', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n});\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-aci.html');\n\nimport angular from 'angular';\nimport controller from './wizard-aci.controller.js';\n\nangular.module('portainer.app').component('wizardAci', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n onUpdate: '<',\n onAnalytics: '<',\n },\n});\n","import { buildOption } from '@/portainer/components/BoxSelector';\n\nexport default class WizardAciController {\n /* @ngInject */\n constructor($async, EndpointService, Notifications, NameValidator) {\n this.$async = $async;\n this.EndpointService = EndpointService;\n this.Notifications = Notifications;\n this.NameValidator = NameValidator;\n\n this.state = {\n actionInProgress: false,\n endpointType: 'api',\n availableOptions: [buildOption('API', 'fa fa-bolt', 'API', '', 'api')],\n };\n this.formValues = {\n name: '',\n azureApplicationId: '',\n azureTenantId: '',\n azureAuthenticationKey: '',\n };\n\n this.onChangeEndpointType = this.onChangeEndpointType.bind(this);\n }\n\n onChangeEndpointType(endpointType) {\n this.state.endpointType = endpointType;\n }\n\n addAciEndpoint() {\n return this.$async(async () => {\n const { name, azureApplicationId, azureTenantId, azureAuthenticationKey } = this.formValues;\n const groupId = 1;\n const tagIds = [];\n\n try {\n this.state.actionInProgress = true;\n // Check name is duplicated or not\n let nameUsed = await this.NameValidator.validateEnvironmentName(name);\n if (nameUsed) {\n this.Notifications.error('Failure', null, 'This name is been used, please try another one');\n return;\n }\n await this.EndpointService.createAzureEndpoint(name, azureApplicationId, azureTenantId, azureAuthenticationKey, groupId, tagIds);\n this.Notifications.success('Environment connected', name);\n this.clearForm();\n this.onUpdate();\n this.onAnalytics('aci-api');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect your environment');\n } finally {\n this.state.actionInProgress = false;\n }\n });\n }\n\n clearForm() {\n this.formValues = {\n name: '',\n azureApplicationId: '',\n azureTenantId: '',\n azureAuthenticationKey: '',\n };\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-docker.html');\n\nimport angular from 'angular';\nimport controller from './wizard-docker.controller.js';\n\nangular.module('portainer.app').component('wizardDocker', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n onUpdate: '<',\n onAnalytics: '<',\n },\n});\n","import { getAgentShortVersion } from 'Portainer/views/endpoints/helpers';\nimport { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\nimport { EndpointSecurityFormData } from 'Portainer/components/endpointSecurity/porEndpointSecurityModel';\nimport { buildOption } from '@/portainer/components/BoxSelector';\n\nexport default class WizardDockerController {\n /* @ngInject */\n constructor($async, $scope, EndpointService, StateManager, Notifications, clipboard, $filter, NameValidator) {\n this.$async = $async;\n this.$scope = $scope;\n this.EndpointService = EndpointService;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.clipboard = clipboard;\n this.$filter = $filter;\n this.NameValidator = NameValidator;\n\n this.state = {\n endpointType: 'agent',\n ConnectSocket: false,\n actionInProgress: false,\n endpoints: [],\n availableOptions: [\n buildOption('Agent', 'fa fa-bolt', 'Agent', '', 'agent'),\n buildOption('API', 'fa fa-cloud', 'API', '', 'api'),\n buildOption('Socket', 'fab fa-docker', 'Socket', '', 'socket'),\n ],\n agentShortVersion: null,\n };\n\n this.formValues = {\n name: '',\n url: '',\n publicURL: '',\n groupId: 1,\n tagIds: [],\n environmentUrl: '',\n dockerApiurl: '',\n socketPath: '',\n overrideSocket: false,\n skipCertification: false,\n tls: false,\n securityFormData: new EndpointSecurityFormData(),\n };\n\n this.command = {};\n\n this.onChangeEndpointType = this.onChangeEndpointType.bind(this);\n this.onToggleSkipCert = this.onToggleSkipCert.bind(this);\n this.onToggleTls = this.onToggleTls.bind(this);\n }\n\n onToggleTls(checked) {\n this.$scope.$evalAsync(() => {\n this.formValues.tls = checked;\n });\n }\n\n onToggleSkipCert(checked) {\n this.$scope.$evalAsync(() => {\n this.formValues.skipCertification = checked;\n });\n }\n\n onChangeEndpointType(endpointType) {\n this.state.endpointType = endpointType;\n }\n\n copyLinuxCommand() {\n this.clipboard.copyText(this.command.linuxCommand);\n $('#linuxCommandNotification').show().fadeOut(2500);\n }\n\n copyWinCommand() {\n this.clipboard.copyText(this.command.winCommand);\n $('#winCommandNotification').show().fadeOut(2500);\n }\n\n copyLinuxSocket() {\n this.clipboard.copyText(this.command.linuxSocket);\n $('#linuxSocketNotification').show().fadeOut(2500);\n }\n\n copyWinSocket() {\n this.clipboard.copyText(this.command.winSocket);\n $('#winSocketNotification').show().fadeOut(2500);\n }\n\n onChangeFile(file) {\n this.formValues.securityFormData = file;\n }\n\n // connect docker environment\n connectEnvironment(type) {\n return this.$async(async () => {\n const name = this.formValues.name;\n const url = this.$filter('stripprotocol')(this.formValues.url);\n const publicUrl = url.split(':')[0];\n const overrideUrl = this.formValues.socketPath;\n const groupId = this.formValues.groupId;\n const tagIds = this.formValues.tagIds;\n const securityData = this.formValues.securityFormData;\n const socketUrl = this.formValues.overrideSocket ? overrideUrl : url;\n\n var creationType = null;\n\n if (type === 'agent') {\n creationType = PortainerEndpointCreationTypes.AgentEnvironment;\n }\n\n if (type === 'api') {\n creationType = PortainerEndpointCreationTypes.LocalDockerEnvironment;\n }\n\n // Check name is duplicated or not\n const nameUsed = await this.NameValidator.validateEnvironmentName(name);\n if (nameUsed) {\n this.Notifications.error('Failure', null, 'This name is been used, please try another one');\n return;\n }\n switch (type) {\n case 'agent':\n await this.addDockerAgentEndpoint(name, creationType, url, publicUrl, groupId, tagIds);\n break;\n case 'api':\n await this.addDockerApiEndpoint(name, creationType, url, publicUrl, groupId, tagIds, securityData);\n break;\n case 'socket':\n await this.addDockerLocalEndpoint(name, socketUrl, publicUrl, groupId, tagIds);\n break;\n }\n });\n }\n\n // Docker Agent Endpoint\n async addDockerAgentEndpoint(name, creationType, url, publicUrl, groupId, tagIds) {\n const tsl = true;\n const tlsSkipVerify = true;\n const tlsSkipClientVerify = true;\n const tlsCaFile = null;\n const tlsCertFile = null;\n const tlsKeyFile = null;\n\n await this.addRemoteEndpoint(name, creationType, url, publicUrl, groupId, tagIds, tsl, tlsSkipVerify, tlsSkipClientVerify, tlsCaFile, tlsCertFile, tlsKeyFile);\n }\n\n // Docker Api Endpoint\n async addDockerApiEndpoint(name, creationType, url, publicUrl, groupId, tagIds, securityData) {\n const tsl = this.formValues.tls;\n const tlsSkipVerify = this.formValues.skipCertification;\n const tlsSkipClientVerify = this.formValues.skipCertification;\n const tlsCaFile = tlsSkipVerify ? null : securityData.TLSCACert;\n const tlsCertFile = tlsSkipClientVerify ? null : securityData.TLSCert;\n const tlsKeyFile = tlsSkipClientVerify ? null : securityData.TLSKey;\n\n await this.addRemoteEndpoint(name, creationType, url, publicUrl, groupId, tagIds, tsl, tlsSkipVerify, tlsSkipClientVerify, tlsCaFile, tlsCertFile, tlsKeyFile);\n }\n\n async addDockerLocalEndpoint(name, url, publicUrl, groupId, tagIds) {\n this.state.actionInProgress = true;\n try {\n await this.EndpointService.createLocalEndpoint(name, url, publicUrl, groupId, tagIds);\n this.Notifications.success('Environment connected', name);\n this.clearForm();\n this.onUpdate();\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect your environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n async addRemoteEndpoint(name, creationType, url, publicURL, groupId, tagIds, TLS, tlsSkipVerify, tlsSkipClientVerify, tlsCaFile, tlsCertFile, tlsKeyFile) {\n this.state.actionInProgress = true;\n try {\n await this.EndpointService.createRemoteEndpoint(\n name,\n creationType,\n url,\n publicURL,\n groupId,\n tagIds,\n TLS,\n tlsSkipVerify,\n tlsSkipClientVerify,\n tlsCaFile,\n tlsCertFile,\n tlsKeyFile\n );\n this.Notifications.success('Environment connected', name);\n this.clearForm();\n this.onUpdate();\n\n if (creationType === PortainerEndpointCreationTypes.AgentEnvironment) {\n this.onAnalytics('docker-agent');\n }\n\n if (creationType === PortainerEndpointCreationTypes.LocalDockerEnvironment) {\n this.onAnalytics('docker-api');\n }\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to connect your environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n clearForm() {\n this.formValues = {\n name: '',\n url: '',\n publicURL: '',\n groupId: 1,\n tagIds: [],\n environmentUrl: '',\n dockerApiurl: '',\n socketPath: '',\n overrodeSocket: false,\n skipCertification: false,\n tls: false,\n securityFormData: new EndpointSecurityFormData(),\n };\n }\n\n $onInit() {\n return this.$async(async () => {\n const agentVersion = await this.StateManager.getState().application.version;\n this.state.agentShortVersion = getAgentShortVersion(agentVersion);\n\n this.command = {\n linuxCommand: `curl -L https://downloads.portainer.io/agent-stack-ee${this.state.agentShortVersion}.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml portainer-agent `,\n winCommand: `curl -L https://downloads.portainer.io/agent-stack-ee${this.state.agentShortVersion}-windows.yml -o agent-stack-windows.yml && docker stack deploy --compose-file=agent-stack-windows.yml portainer-agent `,\n linuxSocket: `-v \"/var/run/docker.sock:/var/run/docker.sock\" `,\n winSocket: `-v \\.\\pipe\\docker_engine:\\.\\pipe\\docker_engine `,\n };\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-kubernetes.html');\n\nimport angular from 'angular';\nimport controller from './wizard-kubernetes.controller.js';\n\nangular.module('portainer.app').component('wizardKubernetes', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n controller,\n bindings: {\n onUpdate: '<',\n onAnalytics: '<',\n },\n});\n","import { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\nimport { getAgentShortVersion } from 'Portainer/views/endpoints/helpers';\nimport { buildOption } from '@/portainer/components/BoxSelector';\n\nexport default class WizardKubernetesController {\n /* @ngInject */\n constructor($async, EndpointService, StateManager, Notifications, $filter, clipboard, NameValidator) {\n this.$async = $async;\n this.EndpointService = EndpointService;\n this.StateManager = StateManager;\n this.Notifications = Notifications;\n this.$filter = $filter;\n this.clipboard = clipboard;\n this.NameValidator = NameValidator;\n\n this.state = {\n endpointType: 'agent',\n actionInProgress: false,\n formValues: {\n name: '',\n url: '',\n },\n availableOptions: [buildOption('Agent', 'fa fa-bolt', 'Agent', '', 'agent')],\n agentShortVersion: null,\n };\n\n this.onChangeEndpointType = this.onChangeEndpointType.bind(this);\n }\n\n onChangeEndpointType(endpointType) {\n this.state.endpointType = endpointType;\n }\n\n addKubernetesAgent() {\n return this.$async(async () => {\n const name = this.state.formValues.name;\n const groupId = 1;\n const tagIds = [];\n const url = this.$filter('stripprotocol')(this.state.formValues.url);\n const publicUrl = url.split(':')[0];\n const creationType = PortainerEndpointCreationTypes.AgentEnvironment;\n const tls = true;\n const tlsSkipVerify = true;\n const tlsSkipClientVerify = true;\n const tlsCaFile = null;\n const tlsCertFile = null;\n const tlsKeyFile = null;\n\n // Check name is duplicated or not\n let nameUsed = await this.NameValidator.validateEnvironmentName(name);\n if (nameUsed) {\n this.Notifications.error('Failure', null, 'This name is been used, please try another one');\n return;\n }\n await this.addRemoteEndpoint(name, creationType, url, publicUrl, groupId, tagIds, tls, tlsSkipVerify, tlsSkipClientVerify, tlsCaFile, tlsCertFile, tlsKeyFile);\n });\n }\n\n async addRemoteEndpoint(name, creationType, url, publicURL, groupId, tagIds, tls, tlsSkipVerify, tlsSkipClientVerify, tlsCaFile, tlsCertFile, tlsKeyFile) {\n this.state.actionInProgress = true;\n try {\n await this.EndpointService.createRemoteEndpoint(\n name,\n creationType,\n url,\n publicURL,\n groupId,\n tagIds,\n tls,\n tlsSkipVerify,\n tlsSkipClientVerify,\n tlsCaFile,\n tlsCertFile,\n tlsKeyFile\n );\n this.Notifications.success('Environment connected', name);\n this.clearForm();\n this.onUpdate();\n this.onAnalytics('kubernetes-agent');\n } catch (err) {\n this.Notifications.error('Failure', err, 'Unable to conect your environment');\n } finally {\n this.state.actionInProgress = false;\n }\n }\n\n copyLoadBalancer() {\n this.clipboard.copyText(this.command.loadBalancer);\n $('#loadBalancerNotification').show().fadeOut(2500);\n }\n\n copyNodePort() {\n this.clipboard.copyText(this.command.nodePort);\n $('#nodePortNotification').show().fadeOut(2500);\n }\n\n clearForm() {\n this.state.formValues = {\n name: '',\n url: '',\n };\n }\n\n $onInit() {\n return this.$async(async () => {\n const agentVersion = await this.StateManager.getState().application.version;\n this.state.agentShortVersion = getAgentShortVersion(agentVersion);\n\n this.command = {\n loadBalancer: `curl -L https://downloads.portainer.io/portainer-agent-ee${this.state.agentShortVersion}-k8s-lb.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml `,\n nodePort: `curl -L https://downloads.portainer.io/portainer-agent-ee${this.state.agentShortVersion}-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f portainer-agent-k8s.yaml `,\n };\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-endpoint-list.html');\n\nimport angular from 'angular';\nimport './wizard-endpoint-list.css';\n\nangular.module('portainer.app').component('wizardEndpointList', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointList: '<',\n },\n});\n","export default class WizardEndpointsController {\n /* @ngInject */\n constructor($async, $scope, $state, EndpointService, $analytics) {\n this.$async = $async;\n this.$scope = $scope;\n this.$state = $state;\n this.EndpointService = EndpointService;\n this.$analytics = $analytics;\n\n this.updateEndpoint = this.updateEndpoint.bind(this);\n this.addAnalytics = this.addAnalytics.bind(this);\n }\n /**\n * WIZARD ENDPOINT SECTION\n */\n\n async updateEndpoint() {\n const updateEndpoints = await this.EndpointService.endpoints();\n this.endpoints = updateEndpoints.value;\n }\n\n startWizard() {\n const options = this.state.options;\n this.state.selections = options.filter((item) => item.selected === true);\n this.state.maxStep = this.state.selections.length;\n\n if (this.state.selections.length !== 0) {\n this.state.section = this.state.selections[this.state.currentStep].endpoint;\n this.state.selections[this.state.currentStep].stage = 'active';\n }\n\n if (this.state.currentStep === this.state.maxStep - 1) {\n this.state.nextStep = 'Finish';\n }\n\n this.$analytics.eventTrack('endpoint-wizard-endpoint-select', {\n category: 'portainer',\n metadata: {\n environment: this.state.analytics.docker + this.state.analytics.kubernetes + this.state.analytics.aci,\n },\n });\n this.state.currentStep++;\n }\n\n previousStep() {\n this.state.section = this.state.selections[this.state.currentStep - 2].endpoint;\n this.state.selections[this.state.currentStep - 2].stage = 'active';\n this.state.selections[this.state.currentStep - 1].stage = '';\n this.state.nextStep = 'Next Step';\n this.state.currentStep--;\n }\n\n async nextStep() {\n if (this.state.currentStep >= this.state.maxStep - 1) {\n this.state.nextStep = 'Finish';\n }\n if (this.state.currentStep === this.state.maxStep) {\n // the Local Endpoint Counter from endpoints array due to including Local Endpoint been added Automatic before Wizard start\n const endpointsAdded = await this.EndpointService.endpoints();\n const endpointsArray = endpointsAdded.value;\n const filter = endpointsArray.filter((item) => item.Type === 1 || item.Type === 5);\n\n // NOTICE: This is the temporary fix for excluded docker api endpoint been counted as local endpoint\n this.state.counter.localEndpoint = filter.length - this.state.counter.dockerApi;\n\n this.$analytics.eventTrack('endpoint-wizard-environment-add-finish', {\n category: 'portainer',\n metadata: {\n 'docker-agent': this.state.counter.dockerAgent,\n 'docker-api': this.state.counter.dockerApi,\n 'kubernetes-agent': this.state.counter.kubernetesAgent,\n 'aci-api': this.state.counter.aciApi,\n 'local-endpoint': this.state.counter.localEndpoint,\n },\n });\n this.$state.go('portainer.home');\n } else {\n this.state.section = this.state.selections[this.state.currentStep].endpoint;\n this.state.selections[this.state.currentStep].stage = 'active';\n this.state.selections[this.state.currentStep - 1].stage = 'completed';\n this.state.currentStep++;\n }\n }\n\n addAnalytics(endpoint) {\n switch (endpoint) {\n case 'docker-agent':\n this.state.counter.dockerAgent++;\n break;\n case 'docker-api':\n this.state.counter.dockerApi++;\n break;\n case 'kubernetes-agent':\n this.state.counter.kubernetesAgent++;\n break;\n case 'aci-api':\n this.state.counter.aciApi++;\n break;\n }\n }\n\n endpointSelect(endpoint) {\n switch (endpoint) {\n case 'docker':\n if (this.state.options[0].selected) {\n this.state.options[0].selected = false;\n this.state.dockerActive = '';\n this.state.analytics.docker = '';\n } else {\n this.state.options[0].selected = true;\n this.state.dockerActive = 'wizard-active';\n this.state.analytics.docker = 'Docker/';\n }\n break;\n case 'kubernetes':\n if (this.state.options[1].selected) {\n this.state.options[1].selected = false;\n this.state.kubernetesActive = '';\n this.state.analytics.kubernetes = '';\n } else {\n this.state.options[1].selected = true;\n this.state.kubernetesActive = 'wizard-active';\n this.state.analytics.kubernetes = 'Kubernetes/';\n }\n break;\n case 'aci':\n if (this.state.options[2].selected) {\n this.state.options[2].selected = false;\n this.state.aciActive = '';\n this.state.analytics.aci = '';\n } else {\n this.state.options[2].selected = true;\n this.state.aciActive = 'wizard-active';\n this.state.analytics.aci = 'ACI';\n }\n break;\n }\n const options = this.state.options;\n this.state.selections = options.filter((item) => item.selected === true);\n }\n\n $onInit() {\n return this.$async(async () => {\n (this.state = {\n currentStep: 0,\n section: '',\n dockerActive: '',\n kubernetesActive: '',\n aciActive: '',\n maxStep: '',\n previousStep: 'Previous',\n nextStep: 'Next Step',\n selections: [],\n analytics: {\n docker: '',\n kubernetes: '',\n aci: '',\n },\n counter: {\n dockerAgent: 0,\n dockerApi: 0,\n kubernetesAgent: 0,\n aciApi: 0,\n localEndpoint: 0,\n },\n options: [\n {\n endpoint: 'docker',\n selected: false,\n stage: '',\n nameClass: 'docker',\n icon: 'fab fa-docker',\n },\n {\n endpoint: 'kubernetes',\n selected: false,\n stage: '',\n nameClass: 'kubernetes',\n icon: 'fas fa-dharmachakra',\n },\n {\n endpoint: 'aci',\n selected: false,\n stage: '',\n nameClass: 'aci',\n icon: 'fab fa-microsoft',\n },\n ],\n selectOption: '',\n }),\n (this.endpoints = []);\n\n const endpoints = await this.EndpointService.endpoints();\n this.endpoints = endpoints.value;\n });\n }\n}\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-stepper.html');\n\nimport angular from 'angular';\nimport './wizard-stepper.css';\n\nangular.module('portainer.app').component('wizardStepper', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointSelections: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-endpoint-type.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('wizardEndpointType', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n endpointTitle: '@',\n description: '@',\n icon: '@',\n active: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-link.html');\n\nimport angular from 'angular';\nimport './wizard-link.css';\n\nangular.module('portainer.app').component('wizardLink', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n linkTitle: '@',\n description: '@',\n icon: '<',\n },\n});\n","const autoNgTemplateLoaderTemplate1 = require('./wizard-tls.html');\n\nimport angular from 'angular';\n\nangular.module('portainer.app').component('wizardTls', {\n templateUrl: autoNgTemplateLoaderTemplate1,\n bindings: {\n formData: '<',\n onChange: '<',\n },\n});\n","import { PortainerEndpointCreationTypes } from 'Portainer/models/endpoint/models';\n\nexport default class WizardViewController {\n /* @ngInject */\n constructor($async, $state, EndpointService, $analytics) {\n this.$async = $async;\n this.$state = $state;\n this.EndpointService = EndpointService;\n this.$analytics = $analytics;\n }\n\n /**\n * WIZARD APPLICATION\n */\n manageLocalEndpoint() {\n this.$state.go('portainer.home');\n }\n\n addRemoteEndpoint() {\n this.$state.go('portainer.wizard.endpoints');\n }\n\n async createLocalKubernetesEndpoint() {\n this.state.endpoint.loading = true;\n try {\n await this.EndpointService.createLocalKubernetesEndpoint();\n this.state.endpoint.loading = false;\n this.state.endpoint.added = true;\n this.state.endpoint.connected = 'kubernetes';\n this.state.local.icon = 'fas fa-dharmachakra';\n } catch (err) {\n this.state.endpoint.kubernetesError = true;\n }\n }\n\n async createLocalDockerEndpoint() {\n try {\n await this.EndpointService.createLocalEndpoint();\n this.state.endpoint.loading = false;\n this.state.endpoint.added = true;\n this.state.endpoint.connected = 'docker';\n this.state.local.icon = 'fab fa-docker';\n } finally {\n this.state.endpoint.loading = false;\n }\n }\n\n $onInit() {\n return this.$async(async () => {\n this.state = {\n local: {\n icon: '',\n },\n remote: {\n icon: 'fa fa-plug',\n },\n endpoint: {\n kubernetesError: false,\n connected: '',\n loading: false,\n added: false,\n },\n };\n\n const endpoints = await this.EndpointService.endpoints();\n if (endpoints.totalCount === '0') {\n await this.createLocalKubernetesEndpoint();\n if (this.state.endpoint.kubernetesError) {\n await this.createLocalDockerEndpoint();\n }\n } else {\n const addedLocalEndpoint = endpoints.value[0];\n if (addedLocalEndpoint.Type === PortainerEndpointCreationTypes.LocalDockerEnvironment) {\n this.state.endpoint.added = true;\n this.state.endpoint.connected = 'docker';\n this.state.local.icon = 'fab fa-docker';\n }\n\n if (addedLocalEndpoint.Type === PortainerEndpointCreationTypes.LocalKubernetesEnvironment) {\n this.state.endpoint.added = true;\n this.state.endpoint.connected = 'kubernetes';\n this.state.local.icon = 'fas fa-dharmachakra';\n }\n }\n });\n }\n}\n","import 'regenerator-runtime/runtime';\n\nexport default function setupTests() {\n // pass\n}\n","import angular from 'angular';\nimport 'moment';\nimport 'ui-select';\nimport 'angular-sanitize';\nimport 'ng-file-upload';\nimport 'angular-messages';\nimport 'angular-resource';\nimport 'angular-utils-pagination';\nimport 'angular-local-storage';\nimport 'angular-jwt';\nimport 'angular-json-tree';\nimport 'angular-loading-bar';\nimport 'angular-clipboard';\nimport 'angular-file-saver';\nimport 'angularjs-scroll-glue';\nimport 'angularjs-slider';\nimport 'bootstrap/dist/js/bootstrap.js';\nimport 'js-yaml/dist/js-yaml.js';\nimport 'angular-ui-bootstrap';\nimport 'angular-moment-picker';\nimport 'angular-multiselect/isteven-multi-select.js';\nimport 'angulartics/dist/angulartics.min.js';\n\nwindow.angular = angular;\n","var _module_exports = \"\\n\";;\nvar path = 'app/agent/components/file-uploader/fileUploader.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Last modification\\n \\n \\n \\n Actions
    \\n Go to parent\\n
    \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.Name }} \\n {{ item.Size | humansize }}\\n {{ item.ModTime | getisodatefromtimestamp }}\\n \\n \\n Download\\n \\n \\n Rename\\n \\n \\n Delete\\n \\n
    Loading...
    No files found.
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/agent/components/files-datatable/filesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\\n\";;\nvar path = 'app/agent/components/host-browser/hostBrowser.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/agent/components/node-selector/nodeSelector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\";;\nvar path = 'app/agent/components/volume-browser/volumeBrowser.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Azure configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/azure/components/azure-endpoint-config/azureEndpointConfig.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Dashboard\\n\\n\\n\\n Container instances\\n\\n\";;\nvar path = 'app/azure/components/azure-sidebar/azure-sidebar.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Location\\n \\n \\n \\n Published Ports \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name | truncate: 50 }}\\n {{ item.Location }}\\n 0\\\" ng-repeat=\\\"p in item.Ports\\\" class=\\\"image-tag\\\" ng-href=\\\"http://{{ item.IPAddress }}:{{ p.host }}\\\" target=\\\"_blank\\\">\\n {{ item.IPAddress }}:{{ p.host }}\\n \\n -\\n \\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No container available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/azure/components/datatables/containergroups-datatable/containerGroupsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Container instances > {{ $ctrl.container.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    Azure settings
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Container configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    0\\\">\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n host\\n \\n
    \\n \\n \\n \\n \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Container resources
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n
    \\n\";;\nvar path = 'app/azure/views/containerinstances/container-instance-details/containerInstanceDetails.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Container instances\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/azure/views/containerinstances/containerinstances.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Dashboard\\n\\n\\n\\n\";;\nvar path = 'app/azure/views/dashboard/dashboard.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Container capabilities
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/container-capabilities/containerCapabilities.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n Name\\n \\n \\n \\n \\n
    Maximum Retry Count\\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/container-restart-policy/container-restart-policy.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Nodes in the cluster{{ $ctrl.agentCount }}
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfo.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Creation Date\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.CreatedAt | getisodate }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No config available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/configs-datatable/configsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n Join network\\n Joining network...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Network\\n IP Address\\n \\n \\n \\n GatewayMAC AddressActions
    \\n \\n \\n \\n {{ key }}\\n {{ value.IPAddress || '-' }}{{ value.Gateway || '-' }}{{ value.MacAddress || '-' }}\\n \\n Leave network\\n Leaving network...\\n \\n
    \\n {{ value.GlobalIPv6Address }}\\n \\n {{ value.IPv6Gateway || '-' }}\\n
    Loading...
    No network available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n {{ header }}\\n
    {{ info }}
    Loading...
    No process available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Date\\n \\n \\n \\n \\n \\n Category\\n \\n \\n \\n \\n \\n Details\\n \\n \\n \\n
    {{ item.Time | getisodatefromtimestamp }}{{ item.Type }}{{ item.Details }}
    Loading...
    No event available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/events-datatable/eventsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n Toggle Dropdown\\n \\n \\n
    \\n \\n \\n \\n \\n Export\\n Export in progress...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Id\\n \\n \\n \\n
    \\n Filter \\n Filter \\n
    \\n
    \\n
    \\n
    Filter by usage
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Tags\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item.Id | truncate: 40\\n }}\\n {{ item.Id | truncate: 40 }}\\n Unused\\n \\n {{ tag }}\\n {{ item.VirtualSize | humansize }}{{ item.Created | getisodatefromtimestamp }}{{ item.NodeName ? item.NodeName : '-' }}
    Loading...
    No image available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/images-datatable/imagesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Engine\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Hostname }}\\n {{ item.Hostname }}\\n {{ item.Role }}{{ item.EngineVersion }}{{ item.Addr }}\\n {{ item.Status }}\\n
    Loading...
    No node available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n\\n\\n\\n {{ item.Name | truncate: 40 }}\\n {{ item.Name | truncate: 40 }}\\n System\\n\\n{{ item.StackName ? item.StackName : '-' }}\\n{{ item.Driver }}\\n{{ item.Attachable }}\\n{{ item.IPAM.Driver }}\\n{{ item.IPAM.IPV4Configs[0].Subnet ? item.IPAM.IPV4Configs[0].Subnet : '-' }}\\n{{ item.IPAM.IPV4Configs[0].Gateway ? item.IPAM.IPV4Configs[0].Gateway : '-' }}\\n{{ item.IPAM.IPV6Configs[0].Subnet ? item.IPAM.IPV6Configs[0].Subnet : '-' }}\\n{{ item.IPAM.IPV6Configs[0].Gateway ? item.IPAM.IPV6Configs[0].Gateway : '-' }}\\n{{ item.NodeName ? item.NodeName : '-' }}\\n\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = RCO.ADMINISTRATORS }}\\n \\n\\n\";;\nvar path = 'app/docker/components/datatables/networks-datatable/network-row-content/networkRowContent.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Driver\\n \\n \\n \\n \\n \\n Attachable\\n \\n \\n \\n \\n \\n IPAM Driver\\n \\n \\n \\n \\n \\n IPV4 IPAM Subnet\\n \\n \\n \\n \\n \\n IPV4 IPAM Gateway\\n \\n \\n \\n \\n \\n IPV6 IPAM Subnet\\n \\n \\n \\n \\n \\n IPV6 IPAM Gateway\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    Loading...
    No network available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/networks-datatable/networksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Id }}\\n {{ item.Status.State }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Id\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Slot\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n
    {{ item.Slot ? item.Slot : '-' }}{{ item.Spec.ContainerSpec.Image | hideshasum }}{{ item.Updated | getisodate }}
    Loading...
    No task available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status }}\\n {{ item.Availability }}\\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n CPU\\n \\n \\n \\n \\n \\n Memory\\n \\n \\n \\n \\n \\n Engine\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Availability\\n \\n \\n \\n
    \\n {{ item.Name || item.Hostname }}\\n {{ item.Name || item.Hostname }}\\n {{ item.Role }}{{ item.CPUs / 1000000000 }}{{ item.Memory | humansize }}{{ item.EngineVersion }}{{ item.Addr }}
    Loading...
    No node available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/nodes-datatable/nodesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Creation Date\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.CreatedAt | getisodate }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No secret available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/secrets-datatable/secretsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Status\\n \\n \\n \\n \\n Filter \\n Filter \\n \\n
    \\n
    \\n
    Filter by state
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    TaskActions\\n \\n Slot\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n
    \\n {{ item.Status.State }}\\n \\n {{ item.Id }}\\n {{\\n item.Id\\n }}\\n \\n \\n \\n {{ item.Slot ? item.Slot : '-' }}{{ item.NodeId | tasknodename: $ctrl.nodes }}{{ item.Updated | getisodate }}
    No task matching filter.
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n Update\\n \\n \\n Remove\\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Scheduling Mode\\n \\n \\n \\n \\n \\n Published Ports\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.StackName ? item.StackName : '-' }}{{ item.Image | hideshasum }}\\n {{ item.Mode }}\\n {{ item.Tasks | runningtaskscount }} / {{ item.Mode === 'replicated' ? item.Replicas : ($ctrl.nodes | availablenodecount: item) }}\\n \\n \\n Scale\\n \\n \\n \\n \\n \\n \\n \\n \\n 0 && p.PublishedPort\\\"\\n ng-repeat=\\\"p in item.Ports\\\"\\n class=\\\"image-tag\\\"\\n ng-href=\\\"http://{{ $ctrl.endpointPublicUrl }}:{{ p.PublishedPort }}\\\"\\n target=\\\"_blank\\\"\\n ng-click=\\\"$event.stopPropagation();\\\"\\n >\\n {{ p.PublishedPort }}:{{ p.TargetPort }}\\n \\n -\\n {{ item.UpdatedAt | getisodate }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    \\n \\n
    Loading...
    No service available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/services-datatable/servicesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status.State }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Status\\n \\n \\n \\n \\n \\n Id\\n \\n \\n \\n Actions\\n \\n Slot\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Last Update\\n \\n \\n \\n
    \\n {{ item.ServiceName }}{{ item.Slot ? '.' + item.Slot : '' }}{{ '.' + item.Id }}\\n {{ item.ServiceName }}{{ item.Slot ? '.' + item.Slot : '' }}{{ '.' + item.Id }}\\n \\n \\n \\n {{ item.Slot ? item.Slot : '-' }}{{ item.NodeId | tasknodename: $ctrl.nodes }}{{ item.Updated | getisodate }}
    Loading...
    No task available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/tasks-datatable/tasksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n Filter \\n Filter \\n
    \\n
    \\n
    \\n
    Filter by usage
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Stack\\n \\n \\n \\n \\n \\n Driver\\n \\n \\n \\n \\n \\n Mount point\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n \\n \\n Host\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item.Id | truncate: 40\\n }}\\n {{ item.Id | truncate: 40 }}\\n \\n \\n \\n browse\\n \\n \\n \\n Unused\\n {{ item.StackName ? item.StackName : '-' }}{{ item.Driver }}{{ item.Mountpoint | truncatelr }}{{ item.CreatedAt | getisodate }}{{ item.NodeName ? item.NodeName : '-' }}\\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No volume available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/datatables/volumes-datatable/volumesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Dashboard\\n\\n\\n\\n \\n Custom Templates\\n \\n\\n\\n\\n Stacks\\n\\n\\n\\n Services\\n\\n\\n\\n Containers\\n\\n\\n\\n Images\\n\\n\\n\\n Networks\\n\\n\\n\\n Volumes\\n\\n\\n= 1.3 && $ctrl.swarmManagement\\\"\\n path=\\\"docker.configs\\\"\\n path-params=\\\"{ endpointId: $ctrl.endpointId }\\\"\\n icon-class=\\\"fa-file-code fa-fw\\\"\\n class-name=\\\"sidebar-list\\\"\\n data-cy=\\\"dockerSidebar-configs\\\"\\n>\\n Configs\\n\\n\\n= 1.25 && $ctrl.swarmManagement\\\"\\n path=\\\"docker.secrets\\\"\\n path-params=\\\"{ endpointId: $ctrl.endpointId }\\\"\\n icon-class=\\\"fa-user-secret fa-fw\\\"\\n class-name=\\\"sidebar-list\\\"\\n data-cy=\\\"dockerSidebar-secrets\\\"\\n>\\n Secrets\\n\\n\\n\\n Events\\n\\n\\n\\n \\n Setup\\n \\n\\n \\n Registries\\n \\n\\n\\n\\n \\n Setup\\n \\n\\n \\n Registries\\n \\n\\n\";;\nvar path = 'app/docker/components/docker-sidebar/docker-sidebar.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Docker\\n\\n\\n\\n\\n 1 && !$ctrl.offlineMode && $ctrl.hostFeaturesEnabled\\\"\\n browse-url=\\\"{{ $ctrl.browseUrl }}\\\"\\n>\\n\\n\\n\\n 1 && !$ctrl.offlineMode && $ctrl.hostFeaturesEnabled\\\" devices=\\\"$ctrl.devices\\\">\\n 1 && !$ctrl.offlineMode && $ctrl.hostFeaturesEnabled\\\" disks=\\\"$ctrl.disks\\\">\\n\\n\\n\";;\nvar path = 'app/docker/components/host-overview/host-overview.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameVendor
    {{ device.Name }}{{ device.Vendor }}
    Loading...
    No device available.
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/devices-panel/devices-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    VendorSize
    {{ disk.Vendor }}{{ disk.Size | humansize }}
    Loading...
    No disks available.
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/disks-panel/disks-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n {{ $ctrl.engine.releaseVersion }} (API: {{ $ctrl.engine.apiVersion }})\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Version
    Root directory{{ $ctrl.engine.rootDirectory }}
    Storage Driver{{ $ctrl.engine.storageDriver }}
    Logging Driver{{ $ctrl.engine.loggingDriver }}
    Volume Plugins{{ $ctrl.engine.volumePlugins | arraytostr: ', ' }}
    Network Plugins{{ $ctrl.engine.networkPlugins | arraytostr: ', ' }}
    Engine Labels{{ $ctrl.engine.engineLabels | labelsToStr: ', ' }}
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Hostname{{ $ctrl.host.name }}
    OS Information{{ $ctrl.host.os.type }} {{ $ctrl.host.os.arch }} {{ $ctrl.host.os.name }}
    Kernel Version{{ $ctrl.host.kernelVersion }}
    Total CPU{{ $ctrl.host.totalCPU }}
    Total memory{{ $ctrl.host.totalMemory | humansize }}
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/host-details-panel/host-details-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/node-availability-select/node-availability-select.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    There are no labels for this node.
    \\n\\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/node-labels-table/node-labels-table.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ $ctrl.details.status }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Node name{{ $ctrl.details.name }}
    Role{{ $ctrl.details.role }} {{ $ctrl.state.managerAddress }}
    Availability\\n \\n \\n
    Status
    \\n
    \\n label \\n
    \\n Node Labels\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    0\\\" class=\\\"text-muted\\\">\\n \\n \\n You are currently using a free account to pull images from DockerHub and will be limited to 200 pulls every 6 hours. Remaining pulls:\\n {{ $ctrl.pullRateLimits.remaining }}/{{ $ctrl.pullRateLimits.limit }}\\n \\n \\n \\n You are currently using an anonymous account to pull images from DockerHub and will be limited to 100 pulls every 6 hours. You can configure DockerHub authentication in\\n the\\n Registries View. Remaining pulls:\\n {{ $ctrl.pullRateLimits.remaining }}/{{ $ctrl.pullRateLimits.limit }}\\n \\n \\n You are currently using an anonymous account to pull images from DockerHub and will be limited to 100 pulls every 6 hours. Contact your administrator to configure\\n DockerHub authentication. Remaining pulls: {{ $ctrl.pullRateLimits.remaining }}/{{ $ctrl.pullRateLimits.limit }}\\n \\n \\n
    \\n
    \\n \\n \\n Your authorized pull count quota as a free user is now exceeded.\\n You will not be able to pull any image from the DockerHub registry.\\n \\n \\n Your authorized pull count quota as an anonymous user is now exceeded.\\n You will not be able to pull any image from the DockerHub registry.\\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/imageRegistry/por-image-registry-rate-limits.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n {{ $ctrl.displayedRegistryURL() }}\\n \\n \\n \\n Search\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n

    \\n \\n When using advanced mode, image and repository must be publicly available.\\n

    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n Image name is required.\\n Tag must be specified otherwise Portainer will pull all tags associated to the image.\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n\\n
    \\n\\n \\n \\n
    \\n\";;\nvar path = 'app/docker/components/imageRegistry/por-image-registry.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n Copy\\n Copy selected lines\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n      

    -1 }\\\">{{ span.text }}

    \\n

    No log line matching the '{{ $ctrl.state.search }}' filter

    \\n

    No logs available

    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/log-viewer/logViewer.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Macvlan configuration
    \\n \\n
    \\n \\n \\n To create a MACVLAN network you need to create a configuration, then create the network from this configuration.\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Parent network card must be specified.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n = 1.25\\\"\\n access-to-node-details=\\\"$ctrl.isAdmin\\\"\\n name=\\\"node_selector\\\"\\n ng-model=\\\"tmp\\\"\\n ng-required=\\\"$ctrl.requiredNodeSelection()\\\"\\n >\\n
    \\n
    \\n
    \\n
    \\n
    \\n

    At least one node must be selected.

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n

    Select a configuration network.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/components/network-macvlan-form/networkMacvlanForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n \\n
    CIFS Settings
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/docker/components/volumesCIFSForm/volumesCifsForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n \\n
    NFS Settings
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/docker/components/volumesNFSForm/volumesnfsForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Configs\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/configs/configs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Configs > Add config \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ ctrl.state.formValidationError }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/configs/create/createconfig.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Configs > {{ config.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name{{ config.Name }}
    ID\\n {{ config.Id }}\\n
    Created{{ config.CreatedAt | getisodate }}
    Last updated{{ config.UpdatedAt | getisodate }}
    Labels\\n \\n \\n \\n \\n \\n
    {{ k }}{{ v }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/configs/edit/config.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Console\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n

    \\n \\n The interactive-flag is not set. You might not be able to use the console properly.\\n

    \\n
    \\n\\n
    \\n

    \\n \\n The TTY-flag is not set. You might not be able to use the console properly.\\n

    \\n
    \\n\\n
    \\n

    \\n \\n The container is not running.\\n

    \\n
    \\n\\n \\n Attach to Container\\n Detach\\n Attaching...\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/console/attach.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Console\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n The container is not running.\\n \\n
    \\n
    \\n
    \\n
    \\n Exec into container as {{ ::formValues.user || 'default user' }} using command\\n {{ formValues.isCustomCommand ? formValues.customCommand : formValues.command }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/console/exec.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Containers\\n\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/containers.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Containers > Add container \\n\\n\\n\\n \\n

    \\n \\n The new container may fail to start if the image is changed, and settings from the previous container aren't compatible. Common causes include entrypoint, cmd or\\n other settings set by an image.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Image configuration
    \\n
    \\n \\n \\n The Docker registry for the {{ config.Image }} image is not registered inside Portainer, you will not be able to create a container. Please register that\\n registry first.\\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n\\n \\n
    \\n
    Webhooks
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n
    Network ports configuration
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n publish a new network port\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n host\\n \\n
    \\n \\n \\n \\n \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    Deployment
    \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    Actions
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Deploy the container\\n Deployment in progress...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n\\n
    Logging
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Logging driver that will override the default docker daemon driver. Select Default logging driver if you don't want to override it. Supported logging drivers\\n can be found in the Docker documentation.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add logging driver option\\n \\n
    \\n \\n
    \\n
    \\n
    \\n option\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n map additional volume\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n volume\\n \\n
    \\n \\n \\n
    \\n host\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n You don't have any shared networks. Head over to the networks view to create one.\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add additional entry\\n \\n
    \\n \\n
    \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n add label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    Runtime
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    = 1.37\\\">\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n add device\\n \\n
    \\n \\n
    \\n
    \\n
    \\n host\\n \\n
    \\n
    \\n container\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add sysctl\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    Resources
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    Memory soft limit (MB)

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    Memory limit (MB)

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Maximum CPU usage

    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n Update Limits\\n Update in progress...\\n \\n
    \\n
    \\n

    \\n Updating any resource value to ‘unlimited' will redeploy this container.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/create/createcontainer.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }}\\n \\n\\n\\n\\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n Recreate\\n Recreation in progress...\\n \\n Duplicate/Edit\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID{{ container.Id }}
    Name\\n {{ container.Name | trimcontainername }}\\n \\n \\n
    \\n \\n \\n \\n
    \\n
    IP address{{ container.NetworkSettings.IPAddress }}
    Status\\n \\n \\n {{ container.State | getstatetext }} for {{ activityTime\\n }} with exit code {{ container.State.ExitCode }}\\n
    Created{{ container.Created | getisodate }}
    Start time{{ container.State.StartedAt | getisodate }}
    Finished{{ container.State.FinishedAt | getisodate }}
    \\n Container webhook\\n \\n \\n \\n {{ WebhookURL | truncatelr }}\\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Status\\n \\n {{ container.State.Health.Status }}\\n
    Failure count{{ container.State.Health.FailingStreak }}
    Last output{{ container.State.Health.Log[container.State.Health.Log.length - 1].Output }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n You can create an image from this container, this allows you to backup important data or save helpful configurations. You'll be able to spin up another container\\n based on this image afterward.\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n Note: if you don't specify the tag in the image name, latest will be used.\\n
    \\n
    \\n \\n
    \\n
    \\n \\n Create\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n {{ container.Config.Image }}@{{ container.Image }}\\n \\n 0\\\">\\n \\n \\n \\n \\n \\n {{ container.Config.Cmd | command }}\\n \\n \\n \\n {{ container.Config.Entrypoint ? (container.Config.Entrypoint | command) : 'null' }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Image
    Port configuration\\n
    {{ portMapping.host }} {{ portMapping.container }}
    \\n
    CMD
    ENTRYPOINT
    ENV\\n \\n \\n \\n \\n \\n
    {{ var|key: '=' }}{{ var|value: '=' }}
    \\n
    Labels\\n \\n \\n \\n \\n \\n
    {{ k }}{{ v }}
    \\n
    Restart policies\\n \\n \\n
    Sysctls\\n \\n \\n \\n \\n \\n
    {{ k }}{{ v }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Host/volumePath in container
    {{ vol.Source }}{{ vol.Name }}\\n {{ vol.Destination }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/edit/container.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Containers > {{ containerInfo.Name | trimcontainername }} >\\n Inspect\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n
    {{ containerInfo | json: 4 }}
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/inspect/containerinspect.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Logs\\n \\n\\n\\n\\n\";;\nvar path = 'app/docker/views/containers/logs/containerlogs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Containers > {{ container.Name | trimcontainername }} > Stats\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n This view displays real-time statistics about the container {{ container.Name | trimcontainername }} as well as a list of the running processes inside this\\n container.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n Network stats are unavailable for this container. \\n
    \\n
    \\n
    \\n
    \\n I/O stats are unavailable for this container. \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/containers/stats/containerstats.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Environment summary\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n\\n \\n

    \\n \\n Portainer is connected to a node that is part of a Swarm cluster. Some resources located on other nodes in the cluster might not be available for management, have a look at\\n our agent setup for more details.\\n

    \\n

    \\n \\n Portainer is connected to a worker node. Swarm management features will not be available.\\n

    \\n
    \\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Environment\\n {{ endpoint.Name }}\\n \\n {{ endpoint.Snapshots[0].TotalCPU }} {{ endpoint.Snapshots[0].TotalMemory | humansize }}\\n \\n \\n - {{ info.Swarm && info.Swarm.NodeID !== '' ? 'Swarm' : 'Standalone' }} {{ info.ServerVersion }}\\n + Agent\\n
    URL{{ endpoint.URL | stripprotocol }}
    Tags{{ endpointTags }}
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n\";;\nvar path = 'app/docker/views/dashboard/dashboard.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Docker configuration\\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    Host and Filesystem
    \\n
    \\n \\n \\n These features are only available for an Agent enabled Environment.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n \\n
    Change Window Settings
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n
    Automatic updates to stacks or applications outside the defined change window will not occur.\\n\\n \\n
    Docker Security Settings
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n Note: The recreate/duplicate/edit feature is currently disabled (for non-admin users) by one or more security settings.\\n \\n
    \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/docker-features-configuration/docker-features-configuration.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Events\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/events/events.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Host > {{ $ctrl.host.Name }} > browse\\n \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/host/host-browser-view/host-browser-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\";;\nvar path = 'app/docker/views/host/host-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Images > Build image \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n Builder \\n
    \\n
    Naming
    \\n \\n
    \\n You can specify multiple names to your image. \\n
    \\n
    \\n
    \\n \\n \\n add additional name\\n \\n
    \\n
    \\n \\n
    \\n \\n You must specify at least one name for the image.\\n \\n
    \\n \\n
    0\\\">\\n
    \\n \\n A name must be specified in one of the following formats: name:tag, repository/name:tag or\\n registryfqdn:port/repository/name:tag format. If you omit the tag the default latest value is assumed.\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n name\\n \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    Build method
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Web editor
    \\n
    \\n \\n You can get more information about Dockerfile format in the\\n official documentation.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Upload
    \\n
    \\n \\n You can upload a Dockerfile or a tar archive containing a Dockerfile from your computer. When using a tarball, the root folder will be used as the build\\n context.\\n \\n
    \\n
    \\n
    \\n \\n \\n {{ formValues.UploadFile.name }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n Indicate the path to the Dockerfile within the tarball. \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    URL
    \\n
    \\n \\n Specify the URL to a Dockerfile, a tarball or a public Git repository (suffixed by .git). When using a tarball or a Git repository URL, the root folder\\n will be used as the build context.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n Indicate the path to the Dockerfile within the tarball/repository (ignored when using a Dockerfile). \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    Deployment
    \\n \\n \\n \\n
    \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Build the image\\n Image building in progress...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n \\n
    \\n \\n Output \\n
    \\n              

    {{ line }}

    \\n

    No build output available.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/images/build/buildimage.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Images > {{ image.Id }}\\n \\n\\n\\n
    0\\\">\\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ tag }}\\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Note: you can click on the upload icon to push an image or on the download icon\\n to pull an image or on the trash icon to delete a\\n tag.\\n \\n
    \\n
    \\n \\n Download in progress...\\n \\n \\n \\n Upload in progress...\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n Note: if you don't specify the tag in the image name, latest will be used.\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ image.Parent }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID\\n {{ image.Id }}\\n \\n
    Parent
    Size{{ image.VirtualSize | humansize }}
    Created{{ image.Created | getisodate }}
    BuildDocker {{ image.DockerVersion }} on {{ image.Os }}, {{ image.Architecture }}
    Labels\\n \\n \\n \\n \\n \\n
    {{ k }}{{ v }}
    \\n
    Author{{ image.Author }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n {{ image.Command | command }}\\n \\n \\n \\n {{ image.Entrypoint | command }}\\n \\n 0\\\">\\n \\n \\n \\n 0\\\">\\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n
    CMD
    ENTRYPOINT
    EXPOSE\\n \\n {{ port }}\\n \\n
    VOLUME\\n \\n {{ volume }}\\n \\n
    ENV\\n \\n \\n \\n \\n \\n
    {{ var|key: '=' }}{{ var|value: '=' }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    0\\\">\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Order\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Layer\\n \\n \\n \\n
    \\n {{ layer.Order }}\\n \\n {{ layer.Size | humansize }}\\n \\n
    130\\\">\\n \\n {{ layer.CreatedBy | imagelayercommand }}\\n \\n \\n {{ layer.CreatedBy | imagelayercommand | truncate: 130 }}\\n 130\\\" style=\\\"margin-left: 5px\\\">\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n {{ layer.CreatedBy | imagelayercommand }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/images/edit/image.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Images\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n
    \\n
    Deployment
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n Pull the image\\n Download in progress...\\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/images/images.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Images > Import image \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    Upload
    \\n
    \\n You can upload a tar archive containing your images. \\n
    \\n
    \\n
    \\n \\n \\n {{ formValues.UploadFile.name }}\\n \\n \\n
    \\n
    \\n \\n
    \\n
    Deployment
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Upload\\n Images uploading in progress...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/images/import/importimage.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Networks > Add network \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Driver configuration
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add driver option\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    IPV4 Network configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n

    Exclude ip cannot be the same as gateway.

    \\n
    \\n
    \\n \\n
    \\n \\n add excluded IP\\n \\n
    \\n
    \\n
    \\n
    IPV6 Network configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n

    Exclude ip cannot be the same as gateway.

    \\n
    \\n
    \\n \\n
    \\n \\n add excluded IP\\n \\n
    \\n
    \\n
    Advanced configuration
    \\n \\n
    \\n
    \\n \\n add label \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    Deployment
    \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create the network\\n Creating network...\\n \\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/networks/create/createnetwork.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Networks > {{ network.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n 0\\\" ng-repeat-start=\\\"config in network.IPAM.IPV4Configs\\\">\\n \\n \\n \\n 0\\\" ng-repeat-end>\\n \\n IPV4 Excluded Ips - {{ auxAddress }}\\n \\n 0\\\" ng-repeat-start=\\\"config in network.IPAM.IPV6Configs\\\">\\n \\n \\n \\n 0\\\" ng-repeat-end>\\n \\n IPV6 Excluded Ips - {{ auxAddress }}\\n \\n \\n
    Name{{ network.Name }}
    ID\\n {{ network.Id }}\\n
    Driver{{ network.Driver }}
    Scope{{ network.Scope }}
    Attachable{{ network.Attachable }}
    Internal{{ network.Internal }}
    IPV4 Subnet - {{ config.Subnet }}IPV4 Gateway - {{ config.Gateway }}
    IPV4 IP range - {{ config.IPRange }}
    IPV6 Subnet - {{ config.Subnet }}IPV6 Gateway - {{ config.Gateway }}
    IPV6 IP range - {{ config.IPRange }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\\n\\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    {{ key }}{{ value }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ container.Name }}\\n \\n \\n \\n \\n \\n \\n
    Container NameIPv4 AddressIPv6 AddressMacAddressActions
    {{ container.IPv4Address || '-' }}{{ container.IPv6Address || '-' }}{{ container.MacAddress || '-' }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/networks/edit/network.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Networks\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/networks/networks.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Swarm > {{ $ctrl.node.Hostname }} > browse\\n \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/nodes/node-browser/node-browser.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n\\n\";;\nvar path = 'app/docker/views/nodes/node-details/node-details-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Registries > {{ $ctrl.registry.Name }} > Access management \\n\\n\\n\\n\\n\\n\\n\";;\nvar path = 'app/docker/views/registries/access/registryAccess.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Secrets > Add secret \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n add label \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create the secret\\n Creating secret...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/secrets/create/createsecret.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Secrets > {{ secret.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name{{ secret.Name }}
    ID\\n {{ secret.Id }}\\n
    Created{{ secret.CreatedAt | getisodate }}
    Last updated{{ secret.UpdatedAt | getisodate }}
    Labels\\n \\n \\n \\n \\n \\n
    {{ k }}{{ v }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\";;\nvar path = 'app/docker/views/secrets/edit/secret.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Secrets\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/secrets/secrets.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Services > Add service \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Image configuration
    \\n \\n \\n \\n \\n
    Scheduling
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    Ports configuration
    \\n \\n
    \\n
    \\n \\n \\n map additional port\\n \\n
    \\n
    \\n
    \\n \\n
    \\n host\\n \\n
    \\n \\n \\n \\n \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    Webhooks
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create the service\\n Creating service...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    Command
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Logging
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Logging driver for service that will override the default docker daemon driver. Select Default logging driver if you don't want to override it. Supported\\n logging drivers can be found\\n in the Docker documentation.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add logging driver option\\n \\n
    \\n \\n
    \\n
    \\n
    \\n option\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n map additional volume\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n container\\n \\n
    \\n
    Target is required.
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n volume\\n \\n \\n \\n
    \\n
    Source is required.
    \\n
    \\n \\n \\n
    \\n
    \\n host\\n \\n
    \\n
    Source is required.
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add extra network\\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    = 1.25\\\">\\n
    \\n \\n \\n add additional entry\\n \\n
    \\n \\n
    \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n add service label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add container label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    = 1.25\\\" ng-include=\\\"'app/docker/views/services/create/includes/secret.html'\\\">
    \\n \\n \\n
    = 1.3\\\" ng-include=\\\"'app/docker/views/services/create/includes/config.html'\\\">
    \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/create/createservice.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n \\n add a config \\n
    \\n \\n
    \\n
    \\n {{ formValues.Configs.$error }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n config\\n \\n
    \\n
    \\n Path in container\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/create/includes/config.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Resources
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    Minimum memory available on a node to run a task (MB)

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    Maximum memory usage per task (MB)

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Minimum CPU available on a node to run a task

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Maximum CPU usage per task

    \\n
    \\n
    \\n \\n
    Placement
    \\n \\n
    \\n
    \\n \\n \\n placement constraint\\n \\n
    \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    = 1.3\\\">\\n
    \\n \\n \\n placement preference\\n \\n
    \\n
    \\n
    \\n
    \\n strategy\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/docker/views/services/create/includes/resources-placement.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n By default, secrets will be available under /run/secrets/$SECRET_NAME in containers (Linux) or\\n C:\\\\ProgramData\\\\Docker\\\\secrets\\\\$SECRET_NAME (Windows).\\n
    \\n
    \\n
    \\n \\n add a secret \\n
    \\n \\n
    \\n
    \\n {{ formValues.Secrets.$error }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n secret\\n \\n
    \\n
    = 1.3 && secret.overrideTarget\\\">\\n target\\n \\n
    \\n
    \\n
    = 1.3\\\">\\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n\";;\nvar path = 'app/docker/views/services/create/includes/secret.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Update config
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Maximum number of tasks to be updated simultaneously (0 to update all at once).

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Amount of time between updates expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 0s, 0 seconds.

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    Action taken on failure to start after update.

    \\n
    \\n
    \\n \\n \\n
    = 1.29\\\">\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    Operation order on failure.

    \\n
    \\n
    \\n \\n\\n
    Restart policy
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n

    Restart when condition is met (default condition \\\"any\\\").

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Delay between restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 5s, 5 seconds.

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    Maximum attempts to restart a given task before giving up (default value is 0, which means unlimited).

    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n

    \\n Time window to evaluate restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 0 seconds, which is unbounded.\\n

    \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/docker/views/services/create/includes/update-restart.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    = 1.3\\\" id=\\\"service-configs\\\" ng-submit=\\\"updateService(service)\\\">\\n \\n \\n \\n
    \\n Add a config:\\n \\n add config \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ config.Name }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NamePath in containerUIDGIDMode
    \\n \\n {{ config.Uid }}{{ config.Gid }}{{ config.Mode }}\\n \\n
    No configs associated to this service.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/configs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    There are no placement constraints for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameOperatorValue
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/constraints.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n {{ service.Command | command }}\\n \\n \\n \\n \\n {{ service.Arguments }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    CMD\\n

    Command to execute.

    \\n
    Args\\n

    Arguments passed to command in container.

    \\n
    User{{ service.User }}\\n

    Username or UID.

    \\n
    Working directory{{ service.Dir }}\\n

    Working directory inside the container.

    \\n
    Stop grace period{{ service.StopGracePeriod }}\\n

    Time to wait before force killing a container (default none).

    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/container-specs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    There are no container labels for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    LabelValue
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n value\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/containerlabels.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n

    There are no environment variables for this service.

    \\n
    \\n 0\\\">\\n \\n \\n \\n
    \\n
    \\n \\n Apply changes\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/environmentvariables.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    The Hosts file has no extra entries.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    HostnameIP
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/hosts.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n

    Image modification is disabled while service is updating.

    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/image.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n Driver:\\n \\n \\n add logging driver option\\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    OptionValue
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n value\\n \\n \\n \\n \\n
    \\n
    No options associated to this logging driver.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/logging.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    There are no mounts for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    TypeSourceTargetRead onlyActions
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Source is required.
    \\n
    \\n \\n
    Target is required.
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/mounts.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    This service is not connected to any networks.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameIDIP addressActions
    \\n \\n \\n \\n {{ network.Name }}\\n \\n {{ network.Id }}\\n \\n {{ network.Addr }}\\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/networks.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    There are no placement preferences for this service.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StrategyValue
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/placementPreferences.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    This service has no ports published.

    \\n
    \\n 0\\\" classes=\\\"no-padding\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Host portContainer portProtocolPublish modeActions
    \\n
    \\n host\\n \\n
    \\n
    \\n
    \\n container\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/ports.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Memory reservation (MB) \\n \\n \\n

    Minimum memory available on a node to run a task (set to 0 for unlimited)

    \\n
    Memory limit (MB) \\n \\n \\n

    Maximum memory usage per task (set to 0 for unlimited)

    \\n
    \\n
    CPU reservation
    \\n
    \\n \\n \\n

    Minimum CPU available on a node to run a task

    \\n
    \\n
    CPU limit
    \\n
    \\n \\n \\n

    Maximum CPU usage per task

    \\n
    \\n
    \\n \\n
    \\n
    \\n Apply changes\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/resources.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Restart condition\\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n

    Condition for restart.

    \\n
    Restart delay\\n \\n \\n

    \\n Delay between restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 5s, 5 seconds.\\n

    \\n
    Restart max attempts\\n \\n \\n

    Maximum attempts to restart a given task before giving up (default value is 0, which means unlimited).

    \\n
    Restart window\\n \\n \\n

    \\n Time window to evaluate restart attempts expressed by a number followed by unit (ns|us|ms|s|m|h). Default value is 0 seconds, which is unbounded.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n Apply changes\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/restart.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    = 1.25\\\" id=\\\"service-secrets\\\">\\n \\n \\n \\n
    \\n Add a secret:\\n \\n
    = 1.3 && state.addSecret.override\\\">\\n Target:\\n \\n
    \\n
    = 1.3\\\">\\n \\n \\n
    \\n add secret \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ secret.Name }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameFile nameUIDGIDMode
    {{ secret.FileName }}{{ secret.Uid }}{{ secret.Gid }}{{ secret.Mode }}\\n \\n
    No secrets associated to this service.
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/secrets.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n

    There are no labels for this service.

    \\n
    \\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Label Value
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n value\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/servicelabels.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    0 && nodes\\\" id=\\\"service-tasks\\\">\\n = 1.30\\\"\\n agent-proxy=\\\"applicationState.endpoint.mode.agentProxy\\\"\\n >\\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/tasks.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n = 1.29\\\">\\n \\n \\n \\n \\n \\n
    Update Parallelism\\n \\n \\n

    Maximum number of tasks to be updated simultaneously (0 to update all at once).

    \\n
    Update Delay\\n \\n \\n

    Amount of time between updates expressed by a number followed by unit (ns|us|ms|s|m|h). Example: 1m.

    \\n
    Update Failure Action\\n
    \\n \\n \\n
    \\n
    \\n

    Action taken on failure to start after update.

    \\n
    Order\\n
    \\n \\n \\n
    \\n
    \\n

    Operation order on failure.

    \\n
    \\n
    \\n \\n
    \\n
    \\n Apply changes\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/includes/updateconfig.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Services > {{ service.Name }}\\n \\n\\n\\n
    \\n
    \\n
    \\n

    This service is being updated. Editing this service is currently disabled.

    \\n Refresh to see if this service has finished updated.\\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n \\n = 1.25\\\">\\n {{ service.Name }}\\n
    ID\\n {{ service.Id }}\\n
    Created at{{ service.CreatedAt | getisodate }}
    Last updated at{{ service.UpdatedAt | getisodate }}
    Version{{ service.Version }}
    Scheduling mode{{ service.Mode }}
    Replicas\\n \\n \\n \\n
    Image{{ service.Image }}
    \\n Service webhook\\n \\n \\n \\n {{ webhookURL | truncatelr }}\\n \\n \\n \\n \\n
    \\n

    \\n Note: you can only rollback one level of changes. Clicking the rollback button without making a new change will undo your previous rollback

    \\n = 1.3\\\"\\n class=\\\"btn btn-primary btn-sm\\\"\\n type=\\\"button\\\"\\n ui-sref=\\\"docker.services.service.logs({id: service.Id})\\\"\\n >Service logs\\n = 1.25\\\"\\n >\\n Update the service\\n Update in progress...\\n \\n = 1.25\\\"\\n >\\n Rollback the service\\n Rollback in progress...\\n \\n \\n Delete the service\\n Deletion in progress...\\n \\n

    \\n
    \\n
    \\n \\n

    \\n Do you need help? View the Docker Service documentation here.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n\\n\\n \\n\\n\\n
    \\n
    \\n
    \\n

    Container specification

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Networks & ports

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Service specification

    \\n
    \\n
    \\n = 1.3\\\"\\n class=\\\"padding-top\\\"\\n ng-include=\\\"'app/docker/views/services/edit/includes/placementPreferences.html'\\\"\\n >
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    = 1.25\\\" class=\\\"padding-top\\\" ng-include=\\\"'app/docker/views/services/edit/includes/secrets.html'\\\">
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/edit/service.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Services > {{ service.Name }} > Logs\\n \\n\\n\\n\\n\";;\nvar path = 'app/docker/views/services/logs/servicelogs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Services\\n\\n\\n
    \\n
    \\n = 1.25\\\"\\n show-task-logs-button=\\\"applicationState.endpoint.apiVersion >= 1.30\\\"\\n show-add-action=\\\"true\\\"\\n show-stack-column=\\\"true\\\"\\n refresh-callback=\\\"getServices\\\"\\n endpoint-public-url=\\\"endpoint.PublicURL\\\"\\n endpoint-id=\\\"endpoint.Id\\\"\\n >\\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/services/services.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Swarm\\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Nodes{{ info.Swarm.Nodes }}
    Docker API version{{ docker.ApiVersion }}
    Total CPU{{ totalCPU }}
    Total memory{{ totalMemory | humansize: 2 }}
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n = 1.25\\\"\\n access-to-node-details=\\\"isAdmin\\\"\\n refresh-callback=\\\"getNodes\\\"\\n >\\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/swarm/swarm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Swarm > Cluster visualizer \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Nodes{{ nodes.length }}
    Services{{ services.length }}
    Tasks{{ tasks.length }}
    \\n
    \\n
    Options
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    Refresh
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ node.Name || node.Hostname }}\\n \\n \\n \\n \\n
    \\n
    \\n
    {{ node.Role }}
    \\n
    CPU: {{ node.CPUs / 1000000000 }}
    \\n
    Memory: {{ node.Memory | humansize: 2 }}
    \\n {{ node.Status }}\\n
    0 && state.DisplayNodeLabels\\\">\\n
    Labels
    \\n
    \\n \\n {{ label.key }}\\n \\n = {{ label.value }} \\n
    \\n
    \\n
    \\n
    \\n \\n
    {{ task.ServiceName }}
    \\n
    Image: {{ task.Spec.ContainerSpec.Image | hideshasum }}
    \\n
    Status: {{ task.Status.State }}
    \\n
    Update: {{ task.Updated | getisodate }}
    \\n
    Memory limit: {{ task.Spec.Resources.Limits.MemoryBytes | humansize: 2:2 }}
    \\n
    CPU limit: {{ task.Spec.Resources.Limits.NanoCPUs / 1000000000 }}
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/swarm/visualizer/swarmvisualizer.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Services > {{ service.Name }} > {{ task.Id }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ task.Status.State }}\\n \\n \\n \\n \\n \\n \\n \\n {{ task.Status.Err }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n = 1.3 && task.Status.State | taskhaslogs\\\">\\n \\n \\n
    ID{{ task.Id }}
    State
    State Message{{ task.Status.Message }}
    Error message
    Image{{ task.Spec.ContainerSpec.Image | hideshasum }}
    Slot{{ task.Slot }}
    Created{{ task.Created | getisodate }}
    Container ID{{ task.Status.ContainerStatus.ContainerID }}
    Task logs\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/tasks/edit/task.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Services > {{ service.Name }} >\\n {{ task.Id }} > Logs\\n \\n\\n\\n\\n\";;\nvar path = 'app/docker/views/tasks/logs/tasklogs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Volumes > {{ volumeId }} > browse\\n \\n\\n\\n
    \\n
    \\n 1\\\" endpoint-id=\\\"endpointId\\\">\\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/volumes/browse/browsevolume.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Volumes > Add volume \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Driver configuration
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add driver option\\n \\n
    \\n \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    Ensure nfs-utils are installed on your hosts.
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n
    Ensure cifs-utils are installed on your hosts.
    \\n
    \\n \\n \\n
    \\n
    Deployment
    \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create the volume\\n Creating volume...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/volumes/create/createvolume.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Volumes > {{ volume.Id }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID\\n {{ volume.Id }}\\n
    Created{{ volume.CreatedAt | getisodate }}
    Mount path{{ volume.Mountpoint }}
    Driver{{ volume.Driver }}
    Labels\\n \\n \\n \\n \\n \\n
    {{ k }}{{ v }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    {{ key }}{{ value }}
    \\n
    \\n
    \\n
    \\n
    \\n
    0\\\">\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ container | containername }}\\n \\n \\n \\n \\n
    Container NameMounted AtRead-only
    {{ container.volumeData.Destination }}{{ !container.volumeData.RW }}
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/volumes/edit/volume.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Volumes\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/docker/views/volumes/volumes.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Group\\n \\n \\n \\n
    \\n {{ item.Name }}\\n {{ item.GroupName }}
    Loading...
    No environment available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/associated-endpoints-datatable/associatedEndpointsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\\n \\n \\n {{ $item.Name }}\\n \\n \\n \\n \\n {{ item.Name }}\\n \\n \\n\\n\";;\nvar path = 'app/edge/components/edge-groups-selector/edgeGroupsSelector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Edge job configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    Allowed characters are: [a-zA-Z0-9_.-]

    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    Edge job configuration
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    Time should be set according to the chosen environments' timezone.
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    Time should be set according to the chosen environments' timezone.
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field format is invalid.

    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    Job content
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Web editor
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Upload
    \\n
    \\n You can upload a script file from your computer. \\n
    \\n
    \\n
    \\n \\n \\n {{ $ctrl.model.File.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n
    Target environments
    \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n\\n\";;\nvar path = 'app/edge/components/edge-job-form/edgeJobForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n Environment\\n \\n Actions
    \\n {{ item.Endpoint.Name }}\\n \\n \\n \\n \\n Logs marked for collection, please wait until the logs are available. \\n
    Loading...
    No result available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/edge-job-results-datatable/edgeJobResultsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Cron expression\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.CronExpression }}\\n {{ item.Created | getisodatefromtimestamp }}
    Loading...
    No Edge job available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/edge-jobs-datatable/edgeJobsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Deployment type
    \\n\\n\";;\nvar path = 'app/edge/components/edge-stack-deployment-type-selector/edge-stack-deployment-type-selector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Error\\n \\n \\n \\n
    {{ item.Name }}{{ $ctrl.statusMap[item.Status.Type] || 'Pending' }}{{ item.Status.Error ? item.Status.Error : '-' }}
    Loading...
    No environment available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/edge-stack-endpoints-datatable/edgeStackEndpointsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"{{ $ctrl.status.acknowledged || 0 }}\\n{{ $ctrl.status.ok || 0 }}\\n{{ $ctrl.status.error || 0 }}\\n\";;\nvar path = 'app/edge/components/edge-stack-status/edgeStackStatus.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    \\n \\n Edge Stacks\\n
    \\n
    \\n \\n Settings \\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n Status \\n \\n Creation Date\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.CreationDate | getisodatefromtimestamp }}
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/edge-stacks-datatable/edgeStacksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Edge Groups
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n One or more of the selected Edge group contains Edge Docker endpoints that cannot be used with a Kubernetes Edge stack.\\n
    \\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n
    \\n \\n Portainer uses Kompose to convert your Compose manifest to a Kubernetes compliant manifest. Be wary that not all the\\n Compose format options are supported by Kompose at the moment.\\n
    \\n
    \\n
    \\n\\n \\n \\n
    \\n You can get more information about Compose file format in the\\n official documentation \\n .\\n
    \\n
    \\n \\n\\n \\n \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n
    \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Update the stack\\n Update in progress...\\n \\n
    \\n
    \\n \\n\\n\";;\nvar path = 'app/edge/components/edit-edge-stack-form/editEdgeStackForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n This field is required.\\n

    \\n
    \\n
    \\n
    \\n\\n
    Group type
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n
    Associated environments
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n No Edge environments are available. Head over to the Environments view to add environments.\\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    Tags
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n No tags available. Head over to the Tags view to add tags\\n
    \\n
    \\n
    Associated environments by tags
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/group-form/groupForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Environments Count\\n \\n \\n \\n \\n \\n Group Type\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n in use\\n {{ item.Endpoints.length }}{{ item.Dynamic ? 'Dynamic' : 'Static' }}
    Loading...
    No Edge group available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/components/groups-datatable/groupsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Edge Devices\\n\\n\\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n {{ $ctrl.loadingMessage }}\\n \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-devices/edgeDevicesView/edgeDevicesView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Edge groups > Add edge group \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-groups/createEdgeGroupView/createEdgeGroupView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Edge Groups\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-groups/edgeGroupsView/edgeGroupsView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Edge Groups > {{ $ctrl.model.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-groups/editEdgeGroupView/editEdgeGroupView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Edge Jobs > Create Edge job \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-jobs/createEdgeJobView/createEdgeJobView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Edge jobs > {{ ::$ctrl.edgeJob.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n Configuration \\n\\n \\n \\n\\n \\n Results \\n\\n \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-jobs/edgeJob/edgeJob.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Edge Jobs\\n\\n\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-jobs/edgeJobsView/edgeJobsView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Edge Stacks > Create Edge stack \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n
    Edge Groups
    \\n
    \\n
    \\n \\n
    \\n
    \\n No Edge groups are available. Head over to the Edge groups view to create one.\\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n
    \\n \\n Portainer uses Kompose to convert your Compose manifest to a Kubernetes compliant manifest. Be wary that not all\\n the Compose format options are supported by Kompose at the moment.\\n
    \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Deploy the stack\\n Deployment in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-stacks/createEdgeStackView/create-edge-stack-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Build method
    \\n\\n\\n\\n \\n You can get more information about Compose file format in the\\n official documentation \\n .\\n \\n\\n\\n\\n You can upload a Compose file from your computer. \\n\\n\\n\\n\\n\\n
    \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    Information
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n \\n \\n\\n \\n
    \\n\";;\nvar path = 'app/edge/views/edge-stacks/createEdgeStackView/docker-compose-form/docker-compose-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"

    \\n \\n This feature allows you to deploy any kind of Kubernetes resource in this environment (Deployment, Secret, ConfigMap...).\\n

    \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n\";;\nvar path = 'app/edge/views/edge-stacks/createEdgeStackView/kube-deploy-description/kube-deploy-description.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Build method
    \\n\\n\\n\\n \\n \\n \\n\\n\\n\\n \\n \\n \\n\\n\\n\\n\";;\nvar path = 'app/edge/views/edge-stacks/createEdgeStackView/kube-manifest-form/kube-manifest-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Edge Stacks\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-stacks/edgeStacksView/edgeStacksView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Edge Stacks > {{ $ctrl.stack.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n Stack\\n\\n
    \\n \\n
    \\n
    \\n \\n Environments\\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/edge/views/edge-stacks/editEdgeStackView/editEdgeStackView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Pod\\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Image Pull Policy\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n \\n \\n Pod IP\\n \\n \\n \\n \\n \\n Creation date\\n \\n \\n \\n Actions
    {{ item.PodName }}{{ item.Name }}{{ item.Image | truncate: 64 }}{{ item.ImagePullPolicy }}\\n \\n \\n {{ item.Node }}\\n \\n {{ item.Node }}\\n \\n -\\n {{ item.PodIP }}{{ item.CreationDate | getisodate }}\\n \\n Stats\\n \\n Logs \\n \\n Console\\n \\n
    Loading...
    No pod available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/application/containers-datatable/containersDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Secrets
    \\n\\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/applications-datatable-details/applications-datatable-details.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Published URL
    \\n {{ $ctrl.publishedUrl }} \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/applications-datatable-url/applications-datatable-url.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n Application Type\\n \\n \\n \\n
    \\n Filter \\n Filter \\n
    \\n
    \\n
    \\n
    Filter by application type
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    Status Published \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.Name }}\\n \\n system\\n external\\n {{ item.StackName || '-' }}\\n {{ item.ResourcePool }}\\n {{ item.Image | truncate: 64 }} 1\\\">+ {{ item.Containers.length - 1 }}\\n {{ item.ApplicationType | kubernetesApplicationTypeText }}\\n 0 && item.TotalPodsCount === item.RunningPodsCount) || item.Status === 'Ready'\\\">\\n Replicated\\n Global\\n = 0 && item.TotalPodsCount >= 0\\\"\\n >{{ item.RunningPodsCount }} / {{ item.TotalPodsCount }}\\n {{ item.Status }}\\n \\n {{ item.Pods[0].Status }}\\n \\n \\n {{ item.Services.length === 0 ? 'No' : 'Yes' }}\\n \\n {{ item.CreationDate | getisodate }} {{ item.ApplicationOwner ? 'by ' + item.ApplicationOwner : '' }}
    \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Loading...
    No application available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/applications-datatable/applicationsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Application\\n \\n \\n \\n Publishing mode \\n \\n Exposed port\\n \\n \\n \\n \\n \\n Container port\\n \\n \\n \\n HTTP route
    \\n \\n \\n \\n \\n {{ item.Name }}\\n system\\n external\\n \\n \\n \\n LoadBalancer \\n \\n {{ item.LoadBalancerIPAddress }}\\n pending\\n \\n \\n \\n \\n ClusterIP\\n \\n \\n NodePort \\n \\n \\n {{ item.Ports[0].Port }}\\n \\n access\\n \\n \\n \\n {{ item.Ports[0].TargetPort }}/{{ item.Ports[0].Protocol }} \\n \\n \\n -\\n \\n pending\\n \\n \\n \\n {{ $ctrl.buildIngressRuleURL(item.Ports[0].IngressRules[0]) | stripprotocol }}\\n \\n \\n \\n \\n
    --\\n {{ port.Port }}\\n \\n access\\n \\n {{ port.TargetPort }}/{{ port.Protocol }}-
    --\\n {{ port.Port }}\\n \\n access\\n \\n {{ port.TargetPort }}/{{ port.Protocol }}\\n pending\\n \\n \\n \\n {{ $ctrl.buildIngressRuleURL(rule) | stripprotocol }}\\n \\n \\n
    Loading...
    No application port mapping available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/applications-ports-datatable/applicationsPortsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Applications\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.ResourcePool }}\\n system\\n {{ item.Applications.length }}\\n Logs \\n
    \\n {{ app.Name }}\\n external\\n
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/applications-stacks-datatable/applicationsStacksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n external\\n unused\\n system\\n \\n {{ item.Namespace }}\\n {{ item.Type | kubernetesConfigurationTypeText }}{{ item.CreationDate | getisodate }} {{ item.ConfigurationOwner ? 'by ' + item.ConfigurationOwner : '' }}
    Loading...
    No configuration available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/configurations-datatable/configurationsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Type }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Date\\n \\n \\n \\n \\n \\n Kind\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Message\\n \\n \\n \\n
    {{ item.Date | getisodate }}{{ item.Involved.kind }}{{ item.Message }}
    Loading...
    No event available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/events-datatable/eventsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n \\n Table settings \\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n
    {{ item.StackName || '-' }}{{ item.Image | truncate: 64 }}
    Loading...
    No application available.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/integrated-applications-datatable/integratedApplicationsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n \\n Table settings \\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n CPU reservation\\n \\n \\n \\n \\n \\n Memory reservation\\n \\n \\n \\n
    \\n {{ item.Name }}\\n system\\n external\\n {{ item.StackName || '-' }}\\n {{ item.ResourcePool }}\\n {{ item.Image | truncate: 64 }} 1\\\">+ {{ item.Containers.length - 1 }}\\n {{ item.CPU | kubernetesApplicationCPUValue }}{{ item.Memory | humansize }}
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/node-applications-datatable/nodeApplicationsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.Status }}\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n CPU\\n \\n \\n \\n \\n \\n Memory\\n \\n \\n \\n \\n \\n Version\\n \\n \\n \\n \\n \\n IP Address\\n \\n \\n \\n Actions
    \\n \\n {{ item.Name }}\\n \\n {{ item.Name }}\\n api\\n {{ item.Role }}{{ item.CPU }}{{ item.Memory | humansize }}{{ item.Version }}{{ item.IPAddress }}\\n Stats \\n
    Loading...
    No node available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/nodes-datatable/nodesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.titleText }}\\n
    \\n
    \\n \\n Table settings \\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Stack\\n \\n \\n \\n \\n \\n Image\\n \\n \\n \\n \\n \\n CPU reservation\\n \\n \\n \\n \\n \\n Memory reservation\\n \\n \\n \\n
    \\n {{ item.Name }}\\n external\\n {{ item.StackName || '-' }}{{ item.Image | truncate: 64 }} 1\\\">+ {{ item.Containers.length - 1 }}\\n {{ item.CPU | kubernetesApplicationCPUValue }}{{ item.Memory | humansize }}
    Loading...
    No application available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/resource-pool-applications-datatable/resourcePoolApplicationsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Status\\n \\n \\n \\n \\n \\n Quota\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n {{ item.Namespace.Name }}\\n system\\n \\n {{ item.Namespace.Status }}\\n {{ item.Quota ? 'Yes' : 'No' }} {{ item.Namespace.CreationDate | getisodate }} {{ item.Namespace.ResourcePoolOwner ? 'by ' + item.Namespace.ResourcePoolOwner : '' }}\\n \\n Manage access\\n \\n -\\n
    Loading...
    No namespace available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/resource-pools-datatable/resourcePoolsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n \\n \\n System resources are hidden, this can be changed in the table settings.\\n \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Used by\\n \\n \\n \\n \\n \\n Storage\\n \\n \\n \\n \\n \\n Size\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{\\n item.PersistentVolumeClaim.Name\\n }}\\n system\\n external\\n unused\\n \\n {{ item.ResourcePool.Namespace.Name }}\\n \\n {{ item.Applications[0].Name }}\\n 1\\\"> + {{ item.Applications.length - 1 }}\\n -\\n \\n {{ item.PersistentVolumeClaim.StorageClass.Name }}\\n \\n {{ item.PersistentVolumeClaim.Storage }}\\n \\n {{ item.PersistentVolumeClaim.CreationDate | getisodate }}\\n {{ item.PersistentVolumeClaim.ApplicationOwner ? 'by ' + item.PersistentVolumeClaim.ApplicationOwner : '' }}\\n
    Loading...
    No volume available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/datatables/volumes-datatable/volumesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n
    \\n
    \\n
    \\n Add a Helm repository. All Helm charts in the repository will be added to the list. \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    A valid URL beginning with http(s) is required.

    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    Helm repo already exists.
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Add repository\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/helm/helm-templates/helm-add-repository/helm-add-repository.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.model.name }}\\n \\n \\n \\n \\n \\n Helm \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n {{ $ctrl.model.description }}\\n \\n \\n {{ $ctrl.model.annotations.category }}\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list-item/helm-templates-list-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n {{ $select.selected }}\\n \\n \\n {{ category }}\\n \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n Loading...\\n
    Initial download of Helm Charts can take a few minutes
    \\n
    \\n
    No helm charts available.
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/helm/helm-templates/helm-templates-list/helm-templates-list.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Charts \\n\\n\\n \\n

    \\n \\n This is a first version for Helm charts, for more information see this blog post.\\n

    \\n

    \\n \\n The Global Helm Repository is not configured.\\n Configure Global Helm Repository in Settings\\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    Description
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    Configuration
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n You do not have access to any namespace. Contact your administrator to get access to a namespace.\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    \\n This field must consist of lower case alphanumeric characters or '-', start with an alphabetic\\n character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123').\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Show custom values\\n \\n Loading values.yaml... \\n \\n Hide custom values\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    Web editor
    \\n
    \\n \\n You can get more information about Helm values file format in the\\n official documentation.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Install\\n Helm installing in progress\\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/kubernetes/components/helm/helm-templates/helm-templates.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n

    \\n No Load balancer is available in this cluster, click\\n here to configure load balancer.\\n

    \\n
    \\n
    \\n

    No Load balancer is available in this cluster, contract your administrator.

    \\n
    \\n\\n \\n
    \\n \\n \\n publish a new port\\n \\n
    \\n
    \\n
    \\n container port\\n \\n
    \\n\\n
    \\n service port\\n \\n
    \\n\\n
    \\n nodeport\\n \\n
    \\n\\n
    \\n loadbalancer port\\n \\n
    \\n\\n
    \\n ingress\\n \\n \\n \\n
    \\n\\n
    \\n hostname\\n \\n \\n \\n
    \\n\\n
    \\n route\\n \\n
    \\n\\n
    \\n
    \\n TCP\\n UDP\\n
    \\n \\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n

    \\n This container port is already used.\\n

    \\n
    \\n
    \\n

    Container port number is required.

    \\n

    Container port number must be inside the range 1-65535.

    \\n

    Container port number must be inside the range 1-65535.

    \\n
    \\n
    \\n\\n
    \\n
    \\n

    \\n This service port is already used.\\n

    \\n
    \\n
    \\n
    \\n

    Service port number is required.

    \\n

    Container port number must be inside the range 1-65535.

    \\n

    Container port number must be inside the range 1-65535.

    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Node port number must be inside the range 30000-32767 or blank for system allocated.\\n

    Node port number must be inside the range 30000-32767 or blank for system allocated.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Ingress selection is required.

    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Host is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Route is required.

    \\n

    This field must consist of alphanumeric characters or the special characters: '-', '_' or '/'. It\\n must start and end with an alphanumeric character (e.g. 'my-route', or 'route-123').\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/kubernetes/components/kube-services/kube-services-item/kube-services-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Publishing the application
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n \\n {{ $ctrl.serviceType(service.Type) }}\\n
    \\n \\n \\n Remove\\n \\n
    \\n\\n
    \\n
    \\n \\n Ingress\\n
    \\n
    \\n

    \\n Ingress is not configured in this namespace, select another namespace or click\\n here to configure ingress.\\n

    \\n
    \\n
    \\n

    \\n Ingress is not configured in this namespace, select another namespace or contact your administrator.\\n

    \\n
    \\n \\n Remove\\n \\n
    \\n\\n
    \\n
    \\n \\n Ingress\\n
    \\n \\n \\n Remove\\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/kube-services/kube-services.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n kubectl shell\\n\\n\\n
    \\n
    \\n
    kubectl shell
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    Loading Terminal...
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/kubectl-shell/kubectl-shell.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    Data
    \\n\\n
    \\n \\n
    \\n \\n Switch to advanced mode to copy and paste multiple key/values\\n
    \\n
    \\n \\n Generate a configuration entry per line, use YAML format\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n

    This field is required.

    \\n
    \\n

    This key is already defined.

    \\n

    This key is invalid. A valid key must consist of alphanumeric characters, '-', '_' or '.'\\n

    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    Binary data
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Remove entry\\n \\n \\n \\n This key is currently used by one or more applications\\n \\n
    \\n
    \\n \\n\\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/kubernetes-configuration-data/kubernetesConfigurationData.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Dashboard\\n\\n\\n\\n Custom Templates\\n\\n\\n\\n Namespaces\\n\\n\\n\\n Helm\\n\\n\\n\\n Applications\\n\\n\\n\\n ConfigMaps & Secrets\\n\\n\\n\\n Volumes\\n\\n\\n\\n \\n Setup\\n \\n\\n \\n Registries\\n \\n\\n\";;\nvar path = 'app/kubernetes/components/kubernetes-sidebar/kubernetes-sidebar.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Resource reservation
    \\n
    \\n \\n

    \\n {{ $ctrl.description }}\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n {{ $ctrl.memoryReservation }} / {{ $ctrl.memoryLimit }} MB - {{ $ctrl.memoryReservationPercent }}% \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n {{ $ctrl.memoryUsage }} / {{ $ctrl.memoryLimit }} MB - {{ $ctrl.memoryUsagePercent }}% \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n {{ $ctrl.cpuReservation | kubernetesApplicationCPUValue }} / {{ $ctrl.cpuLimit }} - {{ $ctrl.cpuReservationPercent }}% \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n {{ $ctrl.cpuUsage | kubernetesApplicationCPUValue }} / {{ $ctrl.cpuLimit }} - {{ $ctrl.cpuUsagePercent }}% \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/resource-reservation/resourceReservation.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\";;\nvar path = 'app/kubernetes/components/view-header/viewHeader.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/view-loading/viewLoading.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n Copy to clipboard\\n \\n {{ $ctrl.expanded ? 'Collapse' : 'Expand' }}\\n copied \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/components/yaml-inspector/yamlInspector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Custom Templates > Create Custom template \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n
    Build method
    \\n \\n\\n \\n \\n

    Templates allow deploying any kind of Kubernetes resource (Deployment, Secret, ConfigMap...)

    \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n
    \\n \\n\\n \\n You can upload a Manifest file from your computer. \\n \\n\\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create custom template\\n Creation in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/custom-templates/kube-create-custom-template-view/kube-create-custom-template-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Custom Templates \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/custom-templates/kube-custom-templates-view/kube-custom-templates-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Custom templates > {{ $ctrl.formValues.Title }} \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n \\n

    Templates allow deploying any kind of Kubernetes resource (Deployment, Secret, ConfigMap...)

    \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n
    \\n \\n\\n \\n\\n
    Actions
    \\n
    \\n
    \\n \\n Update the template\\n Update in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/custom-templates/kube-edit-custom-template-view/kube-edit-custom-template-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Registries > {{ $ctrl.registry.Name }} > Access management \\n\\n\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n No namespaces available. \\n \\n \\n
    \\n
    \\n \\n Note: adding this registry will expose the registry credentials to all users of this namespace\\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n Create access\\n Creating access...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/registries/kube-registry-access-view/kube-registry-access-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Applications \\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Applications \\n \\n \\n \\n \\n Port mappings \\n \\n \\n \\n \\n Stacks \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/applications.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications >\\n {{ ctrl.application.Name }} > Pods >\\n {{ ctrl.podName }} > Containers > {{ ctrl.containerName }} > Console\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Console
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Connect\\n Connection in progress...\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/console/console.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Applications > Create an application\\n\\n\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications >\\n {{ ctrl.application.Name }} > Edit\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    Namespace
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the application. Contact your administrator to expand the capacity of the\\n namespace.\\n
    \\n
    \\n
    \\n
    \\n \\n You do not have access to any namespace. Contact your administrator to get access to a namespace.\\n
    \\n
    \\n \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n

    \\n \\n Portainer uses Kompose to convert your Compose manifest to a Kubernetes compliant manifest. Be wary that not\\n all the Compose format options are supported by Kompose at the moment.\\n

    \\n

    \\n You can get more information about Compose file format in the\\n official documentation.\\n

    \\n
    \\n \\n

    \\n \\n This feature allows you to deploy any kind of Kubernetes resource in this environment (Deployment, Secret, ConfigMap...).\\n

    \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    Application
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    \\n \\n This field must consist of lower case alphanumeric characters or '-', contain at most 63 characters, start with an alphabetic character, and end with an\\n alphanumeric character (e.g. 'my-name', or 'abc-123').\\n

    \\n
    \\n

    \\n \\n An application with the same name already exists inside the selected namespace.\\n

    \\n
    \\n
    \\n \\n\\n \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    Stack
    \\n \\n
    \\n
    \\n \\n Portainer can automatically bundle multiple applications inside a stack. Enter a name of a new stack or select an existing stack in the list. Leave empty to\\n use the application name.\\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n
    Environment
    \\n \\n
    \\n
    \\n \\n \\n add environment variable\\n \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n name\\n 1\\\"\\n data-cy=\\\"k8sAppCreate-envVarName_{{ $index }}\\\"\\n required\\n />\\n
    \\n
    \\n\\n
    \\n value\\n 1\\\"\\n data-cy=\\\"k8sAppCreate-envVarValue_{{ $index }}\\\"\\n />\\n
    \\n\\n
    \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n

    Environment variable name is required.

    \\n

    This field must consist of alphabetic characters, digits, '_', '-', or '.', and\\n must not start with a digit (e.g. 'my.env-name', or 'MY_ENV.NAME', or 'MyEnvName1'.\\n \\n

    This environment variable is already defined.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    Configurations
    \\n \\n
    \\n
    \\n \\n \\n add configuration\\n \\n
    \\n
    \\n \\n Portainer will automatically expose all the keys of a configuration as environment variables. This behavior can be overriden to filesystem mounts for each key\\n via the override button.\\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n 1\\\"\\n data-cy=\\\"k8sAppCreate-addConfigSelect_{{ $index }}\\\"\\n >\\n
    \\n
    \\n 1\\\"\\n data-cy=\\\"k8sAppCreate-configOverrideButton_{{ $index }}\\\"\\n >\\n Override\\n \\n 1\\\"\\n data-cy=\\\"k8sAppCreate-configAutoButton_{{ $index }}\\\"\\n >\\n Auto\\n \\n \\n Remove\\n \\n
    \\n \\n
    \\n
    \\n
    \\n The following keys will be loaded from the {{ config.SelectedConfiguration.Name }} configuration as environment variables:\\n \\n {{ key }}{{ $last ? '' : ', ' }}\\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n configuration key\\n \\n
    \\n\\n
    \\n
    \\n path on disk\\n 1\\\"\\n required\\n ng-change=\\\"ctrl.onChangeConfigurationPath()\\\"\\n data-cy=\\\"k8sAppCreate-pathOnDiskInput\\\"\\n />\\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n

    Path is required.

    \\n
    \\n

    This path is already used.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n\\n
    Persisting data
    \\n \\n
    \\n
    \\n \\n No storage option is available to persist data, contact your administrator to enable a storage option.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n add persisted folder\\n \\n
    \\n\\n
    \\n \\n \\n This namespace has exhausted its storage capacity. Contact your administrator to expand the capacity of the namespace.\\n \\n
    \\n\\n
    \\n
    \\n
    \\n path in container\\n 1\\\"\\n placeholder=\\\"/data\\\"\\n required\\n data-cy=\\\"k8sAppCreate-containerPathInput_{{ $index }}\\\"\\n />\\n
    \\n\\n
    \\n \\n New volume\\n Existing volume\\n \\n
    \\n\\n
    \\n requested size\\n 1\\\"\\n ng-change=\\\"ctrl.onChangeVolumeRequestedSize()\\\"\\n />\\n \\n 1\\\"\\n ng-change=\\\"ctrl.onChangeVolumeRequestedSize()\\\"\\n >\\n \\n
    \\n\\n
    \\n storage\\n 1\\\"\\n data-cy=\\\"k8sAppCreate-storageSelect_{{ $index }}\\\"\\n >\\n \\n
    \\n\\n
    \\n volume\\n 1\\\"\\n required\\n >\\n \\n \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n

    Path is required.

    \\n
    \\n

    This path is already defined.\\n

    \\n
    \\n\\n
    \\n\\n
    \\n \\n \\n

    Size is required.

    \\n

    This value must be greater than zero.

    \\n
    \\n

    \\n \\n You can only request up to\\n {{ ctrl.state.storages.availabilities[persistedFolder.StorageClass.Name] | kubernetesAppStorageRequestSizeHumanReadable }} for\\n {{ persistedFolder.StorageClass.Name }}\\n

    \\n
    \\n \\n \\n

    Volume is required.

    \\n
    \\n

    This volume is already used.\\n

    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    Specify how the data will be used across instances.
    \\n
    \\n\\n \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n Isolated\\n
    \\n

    Application will be deployed as a StatefulSet with each instantiating their own data

    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n Shared\\n
    \\n

    Application will be deployed as a Deployment with a shared storage access

    \\n \\n
    \\n
    \\n \\n \\n \\n \\n\\n
    Resource reservations
    \\n \\n
    \\n
    \\n \\n Resource reservations are applied per instance of the application.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n A resource quota is set on this namespace, you must specify resource reservations. Resource reservations are applied per instance of the application. Maximums\\n are inherited from the namespace quota.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the application. Contact your administrator to expand the capacity of\\n the namespace.\\n
    \\n
    \\n\\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n

    Maximum memory usage (MB)

    \\n
    \\n \\n
    \\n
    \\n
    \\n Value must be between {{ ctrl.state.sliders.memory.min }} and\\n {{ ctrl.state.sliders.memory.max }}\\n

    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n

    Maximum CPU usage

    \\n
    \\n \\n\\n
    \\n
    \\n \\n These reservations would exceed the resources currently available in the cluster.\\n
    \\n
    \\n \\n \\n\\n
    Deployment
    \\n \\n
    \\n
    Select how you want to deploy your application inside the cluster.
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n Global\\n
    \\n

    Application will be deployed as a DaemonSet with an instance on each node of the cluster

    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n

    Instance count is required.

    \\n

    Instance count must be greater than 0.

    \\n
    \\n
    \\n
    \\n \\n\\n 1 && (ctrl.formValues.CpuLimit !== 0 || ctrl.formValues.MemoryLimit !== 0)\\\"\\n >\\n
    \\n \\n This application will reserve the following resources:\\n {{ ctrl.formValues.CpuLimit * ctrl.formValues.ReplicaCount | kubernetesApplicationCPUValue }} CPU and\\n {{ ctrl.formValues.MemoryLimit * ctrl.formValues.ReplicaCount }} MB of memory.\\n
    \\n \\n\\n
    \\n
    \\n \\n This application would exceed available resources. Please review resource reservations or the instance count.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n This application would exceed available storage. Please review the persisted folders or the instance count.\\n
    \\n
    \\n\\n
    \\n
    \\n \\n The following storage option(s) do not support concurrent access from multiples instances: {{ ctrl.getNonScalableStorage() }}. You will not be able to scale that application.\\n
    \\n
    \\n \\n\\n \\n
    Auto-scaling
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n

    This feature is currently disabled and must be enabled by an administrator user.

    \\n

    \\n Server metrics features must be enabled in the\\n environment configuration view.\\n

    \\n
    \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Minimum instancesMaximum instances\\n Target CPU usage (%)\\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n

    Minimum instances is required.

    \\n

    Minimum instances must be greater than 0.

    \\n

    Minimum instances must be smaller than maximum instances.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n

    Maximum instances is required.

    \\n

    Maximum instances must be greater than minimum instances.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n

    Target CPU usage is required.

    \\n

    Target CPU usage must be greater than 0.

    \\n

    Target CPU usage must be smaller than 100.

    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n This application would exceed available resources. Please review resource reservations or the maximum instance count of the auto-scaling policy.\\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    Placement preferences and constraints
    \\n\\n \\n
    \\n
    \\n \\n \\n add rule\\n \\n
    \\n\\n
    0\\\" style=\\\"margin-top: 10px\\\">\\n \\n Deploy this application on nodes that respect ALL of the following placement rules. Placement rules are based on node labels.\\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n This label is already defined.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    Specify the policy associated to the placement rules.
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n\\n \\n \\n \\n\\n \\n \\n \\n \\n \\n
    \\n
    Namespace
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the application. Contact your administrator to expand the capacity of the\\n namespace.\\n
    \\n
    \\n
    \\n
    \\n \\n You do not have access to any namespace. Contact your administrator to get access to a namespace.\\n
    \\n
    \\n \\n \\n \\n
    \\n\\n \\n \\n \\n
    Actions
    \\n \\n
    \\n
    \\n \\n Deploy application\\n Deployment in progress...\\n Update application\\n Update in progress...\\n \\n \\n Cancel\\n \\n \\n \\n Update the application\\n Update in progress...\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n\\n\";;\nvar path = 'app/kubernetes/views/applications/create/createApplication.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications > {{ ctrl.application.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Application \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.application.Name }}\\n external\\n
    Stack{{ ctrl.application.StackName || '-' }}
    Namespace\\n {{ ctrl.application.ResourcePool }}\\n system\\n
    Application Type\\n {{ ctrl.application.ApplicationType | kubernetesApplicationTypeText }}\\n
    Status\\n Replicated\\n Global\\n {{ ctrl.application.RunningPodsCount }} /\\n {{ ctrl.application.TotalPodsCount }}\\n \\n {{ ctrl.application.Pods[0].Status }}\\n
    \\n
    Resource reservations
    \\n
    per instance
    \\n
    \\n
    CPU {{ ctrl.application.Requests.Cpu | kubernetesApplicationCPUValue }}\\n
    Memory {{ ctrl.application.Requests.Memory | humansize }}
    \\n
    Creation\\n {{ ctrl.application.ApplicationOwner }} \\n {{ ctrl.application.CreationDate | getisodate }}\\n \\n Deployed from {{ ctrl.state.appType }}\\n
    \\n
    \\n
    \\n
    \\n Note\\n {{ ctrl.state.expandedNote ? 'Collapse' : 'Expand' }}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n {{ ctrl.application.Note ? 'Update' : 'Save' }} note\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n \\n \\n Placement\\n
    \\n \\n warning\\n
    \\n
    \\n
    \\n \\n The placement component helps you understand whether or not this application can be deployed on a specific node.\\n
    \\n \\n
    \\n\\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n
    \\n\\n \\n YAML \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n \\n Edit this application\\n \\n \\n Edit External application\\n \\n \\n Redeploy\\n \\n \\n Rollback to previous configuration\\n \\n \\n Create template from application\\n \\n
    \\n\\n \\n
    Accessing the application
    \\n\\n
    \\n \\n This application is not exposing any port.\\n
    \\n\\n
    \\n \\n
    \\n
    \\n

    \\n \\n This application is exposed through service(s) as below:\\n

    \\n
    \\n
    \\n\\n \\n \\n \\n\\n \\n \\n \\n
    \\n \\n \\n
    Auto-scaling
    \\n\\n
    \\n \\n This application does not have an autoscaling policy defined.\\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Minimum instancesMaximum instances\\n Target CPU usage\\n \\n \\n
    {{ ctrl.application.AutoScaler.MinReplicas }}{{ ctrl.application.AutoScaler.MaxReplicas }}{{ ctrl.application.AutoScaler.TargetCPUUtilization }}%
    \\n
    \\n
    \\n \\n\\n \\n
    Configuration
    \\n\\n
    0 && !ctrl.hasVolumeConfiguration()\\\" style=\\\"margin-bottom: 15px\\\">\\n \\n This application is not using any environment variable or configuration.\\n
    \\n\\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ContainerEnvironment variableValueConfiguration
    \\n {{ container.Name }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (init container)\\n {{ envvar.name }}\\n {{ envvar.value }}\\n {{ envvar.valueFrom.configMapKeyRef.key }}\\n {{ envvar.valueFrom.secretKeyRef.key }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (downward API)\\n -\\n \\n -\\n {{ envvar.valueFrom.configMapKeyRef.name }}\\n {{ envvar.valueFrom.secretKeyRef.name }}\\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ContainerConfiguration pathValueConfiguration
    \\n {{ container.Name }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (init container)\\n \\n {{ volume.fileMountPath }}\\n {{ volume.configurationKey ? volume.configurationKey : '-' }} \\n {{ volume.configurationName }}\\n
    \\n \\n\\n \\n
    Data persistence
    \\n\\n
    \\n \\n This application has no persisted folders.\\n
    \\n\\n
    \\n
    \\n Data access policy: \\n {{ ctrl.application.DataAccessPolicy | kubernetesApplicationDataAccessPolicyText }}\\n \\n
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Persisted folderPersistence
    \\n {{ volume.MountPath }}\\n \\n {{ volume.PersistentVolumeClaimName }}\\n {{ volume.HostPath }} on host filesystem
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Container namePod namePersisted folderPersistence
    \\n {{ container.Name }}\\n {{ envvar.valueFrom.fieldRef.fieldPath }} (init container)\\n {{ container.PodName }}\\n {{ volume.MountPath }}\\n \\n \\n {{ volume.PersistentVolumeClaimName + '-' + container.PodName }}\\n {{ volume.HostPath }} on host filesystem
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/edit/application.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ ingress.Host }}{{ ingress.Path }}\\n \\n \\n
    Ingress nameService nameHostPortPathHTTP Route
    {{ ingress.IngressName }}{{ ingress.ServiceName }}{{ ingress.Host }}{{ ingress.Port }}{{ ingress.Path }}
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/edit/components/ingress-table/ingress-table.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Node\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n
    \\n This application is missing a toleration for the taint {{ taint.Key }}{{ taint.Value ? '=' + taint.Value : '' }}:{{ taint.Effect }}\\n
    Placement constraint not respected for that node.
    \\n This application can only be scheduled on a node where the label {{ label.key }} is set to {{ label.value }}\\n
    Placement label not respected for that node.
    This application can only be scheduled on nodes respecting one of the following labels combination:
    \\n \\n {{ term.key }} {{ term.operator }} {{ term.values | kubernetesApplicationConstraintNodeAffinityValue: term.operator }}\\n \\n {{ $last ? '' : ' + ' }}\\n
    Loading...
    No node available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/edit/components/placements-datatable/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n
    Service nameTypeCluster IPExternal IPContainer portService port(s)
    {{ service.metadata.name }}{{ service.spec.type }}{{ service.spec.clusterIP }}\\n \\n
    \\n {{ service.spec.externalIP ? service.spec.externalIP : 'pending...' }}\\n
    \\n
    {{ service.spec.externalIP ? service.spec.externalIP : '-' }}\\n
    {{ port.targetPort }}
    \\n
    \\n
    \\n \\n \\n \\n {{ port.port }}\\n \\n {{ port.nodePort ? ':' : '' }}\\n {{ port.nodePort }}/{{ port.protocol }} \\n \\n\\n
    \\n \\n {{ port.port }}\\n \\n {{ port.nodePort ? ':' : '' }}\\n {{ port.nodePort }}/{{ port.protocol }} \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/edit/components/services-table/services-table.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Applications > {{ $ctrl.state.params.name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n
    Information
    \\n

    \\n \\n This is a first version for Helm charts, for more information see this\\n blog post.\\n

    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ $ctrl.state.release.name }}\\n
    Chart\\n {{ $ctrl.state.release.chart }}\\n
    App version\\n {{ $ctrl.state.release.app_version }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/helm/helm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.application.ResourcePool }} >\\n Applications >\\n {{ ctrl.application.Name }} > Pods >\\n {{ ctrl.podName }} > Containers > {{ ctrl.containerName }} > Logs\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Actions
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n

    {{ line }}

    No log line matching the '{{ ctrl.state.search }}' filter

    No logs available

    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/logs/logs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.state.transition.namespace }} >\\n Applications >\\n {{\\n ctrl.state.transition.applicationName\\n }}\\n > Pods > {{ ctrl.state.transition.podName }} > Containers > {{ ctrl.state.transition.containerName }} > Stats\\n\\n\\n\\n\\n
    \\n \\n \\n \\n Portainer was unable to retrieve any metrics associated to that container. Please contact your administrator to ensure that the Kubernetes metrics feature is properly\\n configured.\\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n This view displays real-time statistics about the container {{ ctrl.state.transition.containerName | trimcontainername }}.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n Network stats are unavailable for this container. \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/applications/stats/stats.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Cluster information \\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n \\n \\n\\n \\n
    0\\\">\\n
    Leader status
    \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ComponentLeader node
    \\n {{ ep.Name }}\\n \\n {{ ep.HolderIdentity }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/cluster/cluster.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Cluster > {{ ctrl.node.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Node \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Hostname\\n {{ ctrl.node.Name }}\\n api\\n
    Kubernetes API {{ ctrl.node.IPAddress }}:{{ ctrl.node.Port }}
    Role{{ ctrl.node.Role }}
    Kubelet version{{ ctrl.node.Version }}
    Creation date{{ ctrl.node.CreationDate | getisodate }}
    Status\\n \\n {{ ctrl.node.Status }}\\n \\n \\n {{ ctrl.node.Conditions | kubernetesNodeConditionsMessage }}\\n \\n
    Availability \\n \\n \\n \\n Cannot use this action while another node is currently being drained.\\n \\n \\n \\n Cannot drain a node where this Portainer instance is running.\\n \\n \\n {{ ctrl.formValues.Availability }}\\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    Labels
    \\n\\n
    \\n add label \\n
    \\n\\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Restore\\n \\n used\\n system\\n
    \\n
    \\n \\n \\n

    Label key is required.

    \\n
    \\n

    This label key is already defined.\\n

    \\n
    \\n\\n \\n\\n \\n\\n 0)\\\"\\n >\\n Taints\\n
    \\n\\n
    \\n add taint \\n
    \\n\\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n Effect\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n

    Taint key is required.

    \\n
    \\n

    This taint key is already defined.\\n

    \\n
    \\n\\n \\n\\n \\n\\n
    Actions
    \\n\\n
    \\n
    \\n \\n Update node\\n \\n \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n \\n
    \\n \\n YAML \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n\\n
    0\\\">\\n
    \\n \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/kubernetes/views/cluster/node/node.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Cluster > {{ ctrl.state.transition.nodeName }} >\\n {{ ctrl.state.transition.nodeName }}\\n\\n\\n\\n\\n
    \\n \\n \\n \\n Portainer was unable to retrieve any metrics associated to that node. Please contact your administrator to ensure that the Kubernetes metrics feature is properly configured.\\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n This view displays real-time statistics about the node {{ ctrl.state.transition.nodeName }}.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/cluster/node/stats/stats.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" ConfigMaps & Secrets \\n\\n\\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/configurations/configurations.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n ConfigMaps and Secrets > Create a configuration\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field must consist of lower case alphanumeric characters, '-' or '.', and contain at most 63\\n characters, and must start and end with an alphanumeric character.\\n

    \\n

    A configuration with the same name already exists inside the selected namespace.\\n

    \\n
    \\n \\n\\n
    Namespace
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n This namespace has exhausted its resource capacity and you will not be able to deploy the configuration. Contact your administrator to expand the capacity of the\\n namespace.\\n
    \\n
    \\n
    \\n
    \\n \\n You do not have access to any namespace. Contact your administrator to get access to a namespace.\\n
    \\n
    \\n \\n\\n
    \\n
    Configuration type
    \\n\\n
    \\n
    Select the type of data that you want to save in the configuration.
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n
    Information
    \\n
    \\n
    \\n Creating a sensitive configuration will create a Kubernetes Secret of type Opaque. You can find more information about this in the\\n official documentation.\\n
    \\n
    \\n\\n \\n
    \\n\\n \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create {{ ctrl.formValues.Type | kubernetesConfigurationTypeText }}\\n Creation in progress...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/configurations/create/createConfiguration.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.configuration.Namespace }} >\\n ConfigMaps and Secrets > {{ ctrl.configuration.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Configuration \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.configuration.Name }}\\n system\\n
    Namespace\\n {{ ctrl.configuration.Namespace }}\\n system\\n
    Configuration type\\n {{ ctrl.configuration.Type | kubernetesConfigurationTypeText }}\\n
    \\n
    \\n
    \\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n \\n
    \\n \\n YAML \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Update {{ ctrl.configuration.Type | kubernetesConfigurationTypeText }}\\n Update in progress...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    Data
    \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n
    KeyValue
    {{ item.Key }}\\n
    {{ item.Value }}
    \\n
    \\n Copy \\n \\n copied\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/configurations/edit/configuration.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Environments > {{ ctrl.endpoint.Name }} > Kubernetes\\n configuration\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Networking
    \\n\\n
    \\n \\n Enabling the load balancer feature will allow users to expose application they deploy over an external IP address assigned by cloud provider.\\n

    \\n \\n Ensure that your cloud provider allows you to create load balancers if you want to use this feature. Might incur costs.\\n

    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n Configuring ingress controllers will allow users to expose application they deploy over a HTTP route.
    \\n

    \\n \\n Ingress classes must be manually specified for each controller you want to use in the cluster. Make sure that each controller is running inside your cluster.\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n configure ingress controller\\n \\n
    \\n\\n
    \\n
    \\n
    \\n Ingress class\\n \\n
    \\n
    \\n Type\\n \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n

    Ingress class name is required.

    \\n

    This field must consist of lower case alphanumeric characters or '-', start with an\\n alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123').\\n

    \\n

    \\n This ingress class is already defined.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Ingress class type is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n

    \\n \\n Traefik support is experimental.\\n

    \\n
    \\n
    \\n\\n \\n
    Change Window Settings
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n
    Automatic updates to stacks or applications outside the defined change window will not occur.\\n\\n \\n
    Security
    \\n\\n
    \\n \\n By default, all the users have access to the default namespace. Enable this option to set accesses on the default namespace.\\n \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n
    Resources and Metrics
    \\n\\n
    \\n \\n By ENABLING resource over-commit, you are able to assign more resources to namespaces than is physically available in the cluster. This may lead to unexpected\\n deployment failures if there is insufficient resource to service demand.\\n

    \\n \\n By DISABLING resource over-commit (highly recommended), you are only able to assign resources to namespaces that are less (in aggregate) than the cluster total\\n minus any system resource reservation.\\n

    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n

    System resource reservation is required.

    \\n

    System resource reservation must be greater than 0.

    \\n

    System resource reservation must be smaller than 100.

    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n Enabling this feature will allow users to use specific features like autoscaling and to see container and node resource usage.\\n

    \\n \\n Ensure that metrics server or\\n prometheus is running inside your cluster.\\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Checking metrics API... \\n
    \\n \\n Successfully reached metrics API\\n
    \\n \\n Unable to reach metrics API, make sure metrics server is properly deployed inside\\n that cluster.\\n
    \\n
    \\n\\n
    Available storage options
    \\n\\n
    \\n
    \\n \\n Unable to detect any storage class available to persist data. Users won't be able to persist application data inside this cluster.\\n
    \\n
    \\n\\n
    \\n \\n

    \\n Select which storage options will be available for use when deploying applications. Have a look at your storage driver documentation to figure out which access\\n policy to configure and if the volume expansion capability is supported.\\n

    \\n

    \\n You can find more information about access modes\\n in the official Kubernetes documentation.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    StorageShared access policyVolume expansion
    \\n
    \\n \\n {{ class.Name }}\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n Shared access policy configuration required\\n \\n
    \\n
    \\n\\n
    Actions
    \\n \\n
    \\n
    \\n \\n Save configuration\\n Saving configuration...\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n\\n\";;\nvar path = 'app/kubernetes/views/configure/configure.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Environment summary \\n\\n\\n\\n\\n\";;\nvar path = 'app/kubernetes/views/dashboard/dashboard.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Deploy Kubernetes resources \\n\\n\\n\\n
    \\n \\n\\n
    \\n
    \\n \\n \\n \\n \\n Deploy \\n
    Namespace
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n You do not have access to any namespace. Contact your administrator to get access to a namespace.\\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    Build method
    \\n \\n\\n
    \\n
    Deployment type
    \\n \\n
    \\n\\n \\n \\n \\n\\n \\n\\n \\n \\n \\n \\n

    \\n \\n Portainer uses Kompose to convert your Compose manifest to a Kubernetes compliant manifest. Be wary that\\n not all the Compose format options are supported by Kompose at the moment.\\n

    \\n

    \\n You can get more information about Compose file format in the\\n official documentation.\\n

    \\n
    \\n \\n

    \\n \\n This feature allows you to deploy any kind of Kubernetes resource in this environment (Deployment, Secret, ConfigMap...).\\n

    \\n

    \\n You can get more information about Kubernetes file format in the\\n official documentation.\\n

    \\n
    \\n
    \\n \\n\\n \\n\\n \\n
    \\n
    URL
    \\n
    \\n Indicate the URL to the manifest. \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Deploy\\n Deployment in progress...\\n \\n
    \\n
    \\n \\n \\n
    \\n\\n \\n Logs \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/deploy/deploy.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.pool.Namespace.Name }} > Access management\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.pool.Namespace.Name }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n

    \\n \\n Adding user access will require the affected user(s) to logout and login for the changes to be taken into account.\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n No user nor team access has been set on the environment. Head over to the\\n environment access view to manage them.\\n \\n 0\\\"\\n input-model=\\\"ctrl.availableUsersAndTeams\\\"\\n output-model=\\\"ctrl.formValues.multiselectOutput\\\"\\n button-label=\\\"icon Name | Role.Name\\\"\\n item-label=\\\"icon Name | Role.Name\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users and/or teams', search: 'Search...'}\\\"\\n >\\n \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n Create access\\n Creating access...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/resource-pools/access/resourcePoolAccess.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/resource-pools/components/storage-class-switch/storage-class-switch.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces > Create a namespace\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field must consist of lower case alphanumeric characters or '-', and contain at most 63\\n characters, and must start and end with an alphanumeric character.\\n

    \\n

    Prefix \\\"kube-\\\" is reserved for Kubernetes system namespaces.

    \\n
    \\n
    \\n \\n\\n
    Resource quota
    \\n \\n \\n
    \\n
    \\n

    \\n \\n A namespace is a logical abstraction of a Kubernetes cluster, to provide for more flexible management of resources. Best practice is to set a quota assignment as\\n this ensures greatest security/stability; alternatively, you can disable assigning a quota for unrestricted access (not recommended).\\n

    \\n
    \\n
    \\n

    \\n \\n A namespace is a logical abstraction of a Kubernetes cluster, to provide for more flexible management of resources. Resource over-commit is disabled, please\\n assign a capped limit of resources to this namespace.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    Not enough resources available in the cluster to apply a resource reservation.

    \\n
    \\n
    \\n
    \\n \\n

    At least a single limit must be set for the quota to be valid.

    \\n
    \\n
    \\n \\n
    \\n
    Resource limits
    \\n
    \\n \\n
    \\n \\n
    0\\\">\\n \\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    0\\\">\\n

    Maximum memory usage (MB)

    \\n
    \\n
    \\n

    \\n Not enough memory available in the cluster to apply a reservation. Please contact\\n your cluster administrator.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    0\\\">\\n Value must be between {{ $ctrl.defaults.MemoryLimit }} and {{ $ctrl.state.sliderMaxMemory }}\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    0\\\">\\n \\n \\n
    \\n
    0\\\">\\n

    Maximum CPU usage

    \\n
    \\n
    \\n

    \\n Not enough CPU available in the cluster to apply a reservation. Please contact your\\n cluster administrator.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    Load balancers
    \\n\\n
    \\n
    \\n

    \\n \\n You can set a quota on the amount of external load balancers that can be created inside this namespace. Set this quota to 0 to effectively disable the use of\\n load balancers in this namespace.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Max load balancers value is required.

    \\n

    Max load balancers value must be a positive number.

    \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    Ingresses
    \\n \\n
    \\n
    \\n The ingress feature must be enabled in the\\n environment configuration view to be able to register ingresses inside this\\n namespace.\\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n

    \\n \\n Enable and configure ingresses available to users when deploying applications.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n {{ ic.IngressClass.Name }}\\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n add hostname\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Hostname\\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n \\n \\n

    Hostname is required.

    \\n

    \\n \\n This field must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com').\\n

    \\n
    \\n

    \\n This hostname is already used.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n

    \\n \\n You can specify a list of annotations that will be associated to the ingress.\\n

    \\n
    \\n\\n
    \\n \\n \\n add annotation\\n \\n
    \\n\\n
    \\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n \\n
    Registries
    \\n
    \\n
    \\n

    \\n \\n Define which registry can be used by users who have access to this namespace.\\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n No registries available. Head over registry view to define container registry.\\n \\n \\n No registries available. Contact your administrator to create a container registry.\\n \\n \\n \\n
    \\n
    \\n \\n\\n
    \\n
    Storage
    \\n
    \\n
    \\n

    \\n \\n Quotas can be set on each storage option to prevent users from exceeding a specific threshold when deploying applications. You can set a quota to 0 to\\n effectively prevent the usage of a specific storage option inside this namespace.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    {{ sc.Name }}
    \\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Size is required.

    \\n

    Invalid number.

    \\n

    This value must be greater than zero.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n\\n
    Actions
    \\n \\n
    \\n
    \\n \\n Create namespace\\n Creation in progress...\\n \\n
    \\n
    \\n\\n \\n \\n \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/kubernetes/views/resource-pools/create/createResourcePool.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n Ingress\\n \\n \\n \\n
    \\n \\n {{ item.Name }}\\n
    \\n \\n {{ path.Host ? path.Host : path.IP }}{{ path.Path }}\\n \\n \\n \\n {{ path.ApplicationName }}\\n \\n unused\\n
    Loading...
    No ingresses available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/resource-pools/edit/components/ingresses-datatable/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces > {{ ctrl.pool.Namespace.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Namespace \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.pool.Namespace.Name }}\\n system\\n
    \\n
    \\n
    \\n \\n
    Resource quota
    \\n \\n
    \\n
    \\n

    \\n \\n A namespace is a logical abstraction of a Kubernetes cluster, to provide for more flexible management of resources. Best practice is to set a quota assignment\\n as this ensures greatest security/stability; alternatively, you can disable assigning a quota for unrestricted access (not recommended).\\n

    \\n
    \\n
    \\n

    \\n \\n A namespace is a logical abstraction of a Kubernetes cluster, to provide for more flexible management of resources. Resource over-commit is disabled, please\\n assign a capped limit of resources to this pool.\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n

    Not enough resources available in the cluster to apply a resource reservation.

    \\n
    \\n
    \\n
    \\n \\n

    At least a single limit must be set for the quota to be valid.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    Resource limits
    \\n
    \\n \\n
    \\n \\n
    0\\\">\\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    0\\\">\\n

    Memory limit (MB)

    \\n
    \\n
    \\n

    \\n Not enough memory available in the cluster to apply a reservation. Please\\n contact your cluster administrator.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    0\\\">\\n Value must be between {{ ctrl.ResourceQuotaDefaults.MemoryLimit }} and\\n {{ ctrl.state.sliderMaxMemory }}\\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    0\\\">\\n \\n \\n
    \\n
    0\\\">\\n

    Maximum CPU usage

    \\n
    \\n
    \\n

    \\n Not enough CPU available in the cluster to apply a reservation. Please contact\\n your cluster administrator.\\n

    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    0))\\\">\\n
    Load balancers
    \\n\\n
    \\n
    \\n
    \\n

    \\n \\n You can set a quota on the amount of external load balancers that can be created inside this namespace. Set this quota to 0 to effectively disable the use\\n of load balancers in this namespace.\\n

    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    ctrl.formValues.LoadBalancers\\\">\\n
    \\n
    \\n

    Max load balancers value is required.

    \\n

    Max load balancers value must be a positive number.

    \\n

    ctrl.formValues.LoadBalancers && ctrl.formValues.LoadBalancers >= 0\\\">\\n Max load balancers value must be greater than the existing number of load balancers inside this namespace.\\n

    \\n
    \\n
    \\n
    \\n
    \\n\\n
    0\\\">\\n \\n
    \\n \\n {{ ctrl.state.loadBalancersUsed }} / {{ ctrl.oldQuota.LoadBalancers }} - {{ ctrl.state.loadBalancersUsage }}% \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    Ingresses
    \\n \\n
    \\n
    \\n The ingress feature must be enabled in the\\n environment configuration view to be able to register ingresses inside this\\n namespace.\\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n

    \\n \\n Enable and configure ingresses available to users when deploying applications.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n {{ ic.IngressClass.Name }}\\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n add hostname\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n Hostname\\n \\n
    \\n
    0\\\">\\n \\n \\n
    \\n
    \\n \\n \\n

    Hostname is required.

    \\n

    \\n \\n This field must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g.\\n 'example.com').\\n

    \\n
    \\n

    \\n \\n This hostname is already used.\\n

    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n

    \\n \\n You can specify a list of annotations that will be associated to the ingress.\\n

    \\n
    \\n\\n
    \\n \\n \\n add annotation\\n \\n
    \\n\\n
    \\n
    \\n
    \\n Key\\n \\n
    \\n
    \\n Value\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    Registries
    \\n\\n
    \\n \\n
    \\n {{ ctrl.selectedRegistries ? ctrl.selectedRegistries : 'None' }}\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    \\n \\n Define which registry can be used by users who have access to this namespace.\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n No registries available. Head over registry view to define container registry.\\n \\n \\n No registries available. Contact your administrator to create a container registry.\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    Storage
    \\n
    \\n
    \\n

    \\n \\n Quotas can be set on each storage option to prevent users from exceeding a specific threshold when deploying applications. You can set a quota to 0 to\\n effectively prevent the usage of a specific storage option inside this namespace.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n {{ sc.Name }}\\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n

    Size is required.

    \\n

    Invalid number.

    \\n

    This value must be greater than zero.

    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n {{ sc.Used.Size }} {{ sc.Used.SizeUnit }} / {{ sc.Size }} {{ sc.SizeUnit }} - {{ sc.Usage }}% \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Update namespace\\n Update in progress...\\n \\n \\n Unmark as system\\n Mark as system\\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n
    \\n \\n YAML \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n \\n \\n
    \\n
    \\n\\n
    0\\\">\\n
    \\n \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/kubernetes/views/resource-pools/edit/resourcePool.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Namespaces \\n\\n\\n\\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/resource-pools/resourcePools.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces\\n > {{ ctrl.state.transition.namespace }} >\\n Applications > Stacks > {{ ctrl.state.transition.name }} > Logs\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Actions
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n

    {{ line.AppName }} {{ line.Line }}

    No log line matching the '{{ ctrl.state.search }}' filter

    No logs available

    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/stacks/logs/logs.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" 0\\\"\\n>\\n Summary\\n \\n expand\\n collapse\\n \\n\\n\\n
    \\n
    \\n \\n Portainer will execute the following Kubernetes actions.\\n
    \\n\\n
    0\\\">\\n
      \\n
    • \\n {{ summary.action }}\\n {{ $ctrl.getArticle(summary.kind, summary.action) }}\\n {{ summary.kind }} named {{ summary.name }}\\n \\n of type {{ summary.type }}\\n
    • \\n
    • \\n Set the memory resources limits and requests to {{ $ctrl.state.limits.memory }}M\\n
    • \\n
    • \\n Set the CPU resources limits and requests to {{ $ctrl.state.limits.cpu }}\\n
    • \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/summary/summary.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n Table settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Storage\\n \\n \\n \\n \\n \\n Usage\\n \\n \\n \\n
    \\n \\n \\n \\n {{ item.Name }}{{ item.Size }}
    \\n \\n {{ vol.PersistentVolumeClaim.Name }}\\n \\n \\n {{ vol.PersistentVolumeClaim.Storage }}\\n
    Loading...
    No storage available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/volumes/components/volumes-storages-datatable/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Namespaces >\\n {{ ctrl.volume.ResourcePool.Namespace.Name }} >\\n Volumes > {{ ctrl.volume.PersistentVolumeClaim.Name }}\\n\\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Volume \\n\\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.volume.PersistentVolumeClaim.Name }}\\n external\\n unused\\n
    Namespace\\n {{\\n ctrl.volume.ResourcePool.Namespace.Name\\n }}\\n system\\n
    Storage{{ ctrl.volume.PersistentVolumeClaim.StorageClass.Name }}
    Shared Access Policy{{ ctrl.state.volumeSharedAccessPolicy }}\\n
    Provisioner{{\\n ctrl.volume.PersistentVolumeClaim.StorageClass.Provisioner ? ctrl.volume.PersistentVolumeClaim.StorageClass.Provisioner : '-'\\n }}
    Creation date{{ ctrl.volume.PersistentVolumeClaim.CreationDate | getisodate }}
    Size\\n {{ ctrl.volume.PersistentVolumeClaim.Storage }}\\n Increase size\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n \\n Update size\\n \\n \\n
    \\n\\n
    \\n \\n
    \\n

    This field is required.

    \\n
    \\n

    The new size must be greater than the actual size.\\n

    The new volume size cannot exceed\\n {{ ctrl.state.quota.maxSize | kubernetesAppStorageRequestSizeHumanReadable }}\\n

    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n \\n Events\\n
    \\n \\n {{ ctrl.state.eventWarningCount }} warning(s)\\n
    \\n
    \\n \\n \\n
    \\n\\n \\n YAML \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/volumes/edit/volume.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \" Volumes \\n\\n\\n\\n
    \\n
    \\n
    \\n \\n \\n \\n \\n Volumes\\n \\n \\n \\n \\n Storage\\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/kubernetes/views/volumes/volumes.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Business Edition Feature\\n\\n\";;\nvar path = 'app/portainer/components/BEFeatureIndicator/BEFeatureIndicator.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/PageHeader/HeaderContainer.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/PageHeader/HeaderContent.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n {{ $ctrl.titleText }}\\n \\n {{ $ctrl.username }} \\n
    \\n\";;\nvar path = 'app/portainer/components/PageHeader/HeaderTitle.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n Access tagged as inherited are inherited from the group access. They cannot be removed or modified at the environment level but they can be overriden.\\n
    \\n
    Access tagged as override are overriding the group access for the related users/teams.
    \\n
    \\n \\n \\n Updating user access will require the affected user(s) to logout and login for the changes to be taken into account.\\n \\n
    \\n
    \\n \\n \\n Update\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n inherited\\n override\\n {{ item.Type }}\\n \\n {{ item.Role.Name }}\\n \\n Edit\\n \\n \\n \\n \\n \\n \\n
    Loading...
    No authorized users or teams.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/access-datatable/accessDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n
    \\n {{ item.Name }}\\n \\n inherited\\n \\n \\n {{ item.Type }}\\n
    Loading...
    {{ $ctrl.emptyDatasetMessage }}
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/access-table/accessTable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Access control
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    0\\\">\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n 1))\\\"\\n >\\n
    \\n \\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n 0) || (!$ctrl.isAdmin && $ctrl.availableTeams.length > 1)\\\"\\n input-model=\\\"$ctrl.availableTeams\\\"\\n output-model=\\\"$ctrl.formData.AuthorizedTeams\\\"\\n button-label=\\\"Name\\\"\\n item-label=\\\"Name\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more teams', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px\\\"\\n >\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n You have not yet created any users. Head over to the Users view to manage users.\\n \\n 0\\\"\\n input-model=\\\"$ctrl.availableUsers\\\"\\n output-model=\\\"$ctrl.formData.AuthorizedUsers\\\"\\n button-label=\\\"Username\\\"\\n item-label=\\\"Username\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Username\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px\\\"\\n >\\n \\n
    \\n
    \\n \\n\\n\";;\nvar path = 'app/portainer/components/accessControlForm/porAccessControlForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n 1))\\\">\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Ownership\\n \\n \\n administrators\\n \\n \\n \\n {{ $ctrl.resourceControl.Ownership }}\\n \\n \\n \\n \\n
    \\n \\n Access control on this resource is inherited from the following service:\\n {{ $ctrl.resourceControl.ResourceId | truncate }}\\n \\n
    \\n \\n Access control on this resource is inherited from the following container:\\n {{ $ctrl.resourceControl.ResourceId | truncate }}\\n \\n
    \\n \\n Access control on this resource is inherited from the following stack: {{ $ctrl.resourceControl.ResourceId }}\\n \\n
    Authorized users\\n {{ user.Username }}{{ $last ? '' : ', ' }} \\n
    Authorized teams\\n {{ team.Name }}{{ $last ? '' : ', ' }} \\n
    \\n Change ownership\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    0\\\">\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Teams\\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n 0) || (!$ctrl.isAdmin && $ctrl.availableTeams.length > 1)\\\"\\n input-model=\\\"$ctrl.availableTeams\\\"\\n output-model=\\\"$ctrl.formValues.Ownership_Teams\\\"\\n button-label=\\\"Name\\\"\\n item-label=\\\"Name\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n max-labels=\\\"3\\\"\\n translation=\\\"{nothingSelected: 'Select one or more teams', search: 'Search...'}\\\"\\n >\\n \\n
    \\n Users\\n \\n You have not yet created any users. Head over to the Users view to manage users.\\n \\n 0\\\"\\n input-model=\\\"$ctrl.availableUsers\\\"\\n output-model=\\\"$ctrl.formValues.Ownership_Users\\\"\\n button-label=\\\"Username\\\"\\n item-label=\\\"Username\\\"\\n tick-property=\\\"selected\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Username\\\"\\n max-labels=\\\"3\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users', search: 'Search...'}\\\"\\n >\\n \\n
    \\n
    \\n Cancel\\n Update ownership\\n {{ $ctrl.state.formValidationError }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/accessControlPanel/porAccessControlPanel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n No users or teams available. \\n 0\\\"\\n input-model=\\\"$ctrl.options\\\"\\n output-model=\\\"$ctrl.value\\\"\\n button-label=\\\"icon Name\\\"\\n item-label=\\\"icon Name\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more users and/or teams', search: 'Search...'}\\\"\\n data-cy=\\\"component-selectUser\\\"\\n >\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/accessManagement/por-access-management-users-selector/por-access-management-users-selector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n

    \\n \\n Adding user access will require the affected user(s) to logout and login for the changes to be taken into account.\\n

    \\n
    \\n
    \\n\\n \\n\\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n Create access\\n Creating access...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/accessManagement/porAccessManagement.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n You can select which environment should be part of this group by moving them to the associated environments table. Simply click on any environment entry to move it from one table\\n to the other.\\n
    \\n
    \\n \\n
    \\n
    Available environments
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    Associated environments
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/associated-endpoints-selector/associatedEndpointsSelector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n

    \\n \\n This is a beta feature.\\n

    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/beta-panel/betaPanel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\";;\nvar path = 'app/portainer/components/code-editor/codeEditor.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n copied \\n\\n\";;\nvar path = 'app/portainer/components/copy-button/copy-button.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Title is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    Description is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/custom-template-common-fields/customTemplateCommonFields.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n
    \\n \\n \\n \\n No custom templates are available. Head over to the custom template view to create one. \\n
    \\n
    \\n\\n \\n
    \\n
    Information
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/custom-template-selector/custom-template-selector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n \\n Edit\\n \\n \\n
    \\n
    \\n \\n
    Loading...
    \\n
    No templates available.
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/custom-templates-list/customTemplatesList.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Description\\n \\n \\n \\n \\n \\n Prefix\\n \\n \\n \\n \\n \\n Created\\n \\n \\n \\n \\n \\n Last Used\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.description }}\\n \\n {{ item.prefix }}\\n \\n {{ item.dateCreated | getisodatefromtimestamp }}\\n \\n 0\\\">{{ item.lastUsed | getisodatefromtimestamp }}\\n
    Loading...
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/access-tokens-datatable/access-tokens-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n Columns\\n
    \\n
    \\n
    Show / Hide Columns
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/datatable-columns-visibility/datatable-columns-visibility.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n URL\\n \\n \\n \\n \\n \\n Group\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n \\n \\n {{ item.Type | endpointtypename }}\\n \\n \\n {{ item.URL | stripprotocol }}\\n -\\n {{ item.GroupName }}\\n Manage access \\n
    Loading...
    No environment available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/endpoints-datatable/endpointsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n Filter\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/filter/datatable-filter.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n Manage access \\n
    Loading...
    No group available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/groups-datatable/groupsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/pagination/pagination.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n URL\\n \\n \\n \\n Actions
    \\n \\n \\n \\n \\n DockerHub (anonymous)\\n docker.io -
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.Name }}\\n authentication-enabled\\n \\n {{ item.URL }}\\n \\n \\n Manage access\\n \\n \\n Browse\\n \\n - \\n
    Loading...
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/registries-datatable/registriesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/searchbar/datatable-searchbar.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n\";;\nvar path = 'app/portainer/components/datatables/sort-icon/datatable-sort-icon.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n \\n \\n Settings\\n
    \\n
    \\n
    Table settings
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Remove\\n \\n \\n Add stack\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n Filter\\n \\n \\n
    \\n
    \\n
    \\n
    Filter by activity
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n Close\\n
    \\n
    \\n
    \\n
    \\n \\n Type\\n \\n \\n \\n Control\\n \\n Created\\n \\n \\n \\n \\n \\n Updated\\n \\n \\n \\n \\n \\n Ownership\\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n {{ item.Name }}\\n \\n {{ item.Name }}\\n Inactive\\n {{ item.Type === 1 ? 'Swarm' : 'Compose' }}\\n \\n Orphaned \\n \\n \\n Limited \\n \\n Total\\n \\n {{ item.CreationDate | getisodatefromtimestamp }} {{ item.CreatedBy ? 'by ' + item.CreatedBy : '' }}\\n - \\n \\n {{ item.UpdateDate | getisodatefromtimestamp }} {{ item.UpdatedBy ? 'by ' + item.UpdatedBy : '' }}\\n - \\n \\n \\n \\n {{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = $ctrl.RCO.ADMINISTRATORS }}\\n \\n
    Loading...
    No stack available.
    \\n
    \\n
    \\n
    \\n {{ $ctrl.state.selectedItemCount }}\\n item(s) selected\\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/stacks-datatable/stacksDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n {{ $ctrl.columnHeader }}\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.value }}\\n
    {{ $ctrl.emptyDatasetMessage }}
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/strings-datatable/strings-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n
    Loading...
    No tag available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/tags-datatable/tagsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Name }}\\n
    Loading...
    No team available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/teams-datatable/teamsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n {{ $ctrl.title }}\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/titlebar/datatable-titlebar.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n Remove\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n \\n \\n Authentication\\n \\n \\n \\n
    \\n \\n \\n \\n \\n {{ item.Username }}\\n \\n \\n \\n \\n \\n {{ item.RoleName ? item.RoleName : '-' }}\\n \\n \\n Internal\\n LDAP\\n OAuth\\n
    Loading...
    No user available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/datatables/users-datatable/usersDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\";;\nvar path = 'app/portainer/components/date-range-picker/date-range-picker.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n\\n \\n
    \\n \\n \\n {{ $ctrl.model.Name }}\\n \\n \\n \\n associated\\n \\n heartbeat\\n \\n {{ $ctrl.model.LastCheckInDate | getisodatefromtimestamp }}\\n \\n \\n \\n\\n \\n \\n {{ $ctrl.model.Status === 1 ? 'up' : 'down' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].Time | getisodatefromtimestamp }}\\n \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].Time | getisodatefromtimestamp }}\\n \\n \\n \\n \\n \\n Group: {{ $ctrl.model.GroupName }} \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].StackCount }}\\n {{ $ctrl.model.Snapshots[0].StackCount === 1 ? 'stack' : 'stacks' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].ServiceCount }}\\n {{ $ctrl.model.Snapshots[0].ServiceCount === 1 ? 'service' : 'services' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].RunningContainerCount + $ctrl.model.Snapshots[0].StoppedContainerCount }}\\n {{ $ctrl.model.Snapshots[0].RunningContainerCount + $ctrl.model.Snapshots[0].StoppedContainerCount === 1 ? 'container' : 'containers' }}\\n 0 || $ctrl.model.Snapshots[0].StoppedContainerCount > 0\\\">\\n -\\n {{ $ctrl.model.Snapshots[0].RunningContainerCount }}\\n {{ $ctrl.model.Snapshots[0].StoppedContainerCount }}\\n /\\n {{ $ctrl.model.Snapshots[0].HealthyContainerCount }}\\n {{ $ctrl.model.Snapshots[0].UnhealthyContainerCount }}\\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].VolumeCount }}\\n {{ $ctrl.model.Snapshots[0].VolumeCount === 1 ? 'volume' : 'volumes' }}\\n \\n \\n {{ $ctrl.model.Snapshots[0].ImageCount }}\\n {{ $ctrl.model.Snapshots[0].ImageCount === 1 ? 'image' : 'images' }}\\n \\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].Swarm ? 'Swarm' : 'Standalone' }} {{ $ctrl.model.Snapshots[0].DockerVersion }}\\n + Agent\\n \\n {{ $ctrl.model.Snapshots[0].NodeCount }}\\n {{ $ctrl.model.Snapshots[0].NodeCount === 1 ? 'node' : 'nodes' }}\\n \\n \\n
    \\n\\n
    \\n No snapshot available \\n
    \\n\\n
    \\n \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].TotalCPU }} CPU \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].TotalMemory | humansize }} RAM\\n \\n \\n \\n \\n Kubernetes {{ $ctrl.model.Kubernetes.Snapshots[0].KubernetesVersion }}\\n \\n \\n {{ $ctrl.model.Kubernetes.Snapshots[0].NodeCount }} {{ $ctrl.model.Kubernetes.Snapshots[0].NodeCount === 1 ? 'node' : 'nodes' }}\\n \\n \\n
    \\n\\n
    \\n - \\n
    \\n\\n
    \\n \\n \\n \\n {{ $ctrl.model.Snapshots[0].TotalCPU }} {{ $ctrl.model.Snapshots[0].TotalMemory | humansize }}\\n \\n -\\n \\n No tags \\n 0\\\">\\n \\n {{ $ctrl.endpointTags }}\\n \\n \\n \\n {{ $ctrl.model.URL | stripprotocol }}\\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/endpoint-list/endpoint-item/endpointItem.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n
    Click on an environment to manage\\n
    \\n \\n \\n kubeconfig\\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    Loading...
    \\n
    No environment available.
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/endpoint-list/endpointList.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n {{ $select.selected.Name }}\\n \\n \\n {{ endpoint.Name }}\\n \\n\\n\";;\nvar path = 'app/portainer/components/endpoint-selector/endpointSelector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    TLS mode
    \\n \\n
    \\n
    \\n \\n You can find out more information about how to protect a Docker environment with TLS in the\\n Docker documentation.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    Required TLS files
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSCACert.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSCert.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSKey.name }}\\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/endpointSecurity/porEndpointSecurity.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    Environment variables
    \\n
    \\n {{::$ctrl.explanation}}\\n
    \\n\\n \\n\\n
    \\n \\n
    \\n \\n Switch to simple mode to define variables line by line, or load from .env file\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/environment-variables-panel/environment-variables-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n name\\n \\n
    \\n
    \\n
    \\n
    \\n

    Name is required.

    \\n

    \\n \\n This field must consist alphanumeric characters, '-' or '_', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-var', or 'MY_VAR123').\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Value is required.

    \\n

    Value is invalid.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode-item/environment-variables-simple-mode-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n Switch to advanced mode to copy & paste multiple variables\\n
    \\n
    \\n \\n \\n Load variables from .env file\\n \\n \\n \\n File too large! Try uploading a file smaller than 1MB\\n \\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/environment-variables-panel/environment-variables-simple-mode/environment-variables-simple-mode.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    Upload
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/form-components/file-upload-form/file-upload-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    Web editor
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/form-components/web-editor-form/web-editor-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n
    \\n path\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    Path is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-file-item/git-form-additional-file-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n add file \\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-additional-files-panel/git-form-additional-files-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Enabling authentication will store the credentials and it is advisable to use a git service account\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-auth-fieldset/git-form-auth-fieldset.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n Any changes to this stack or application made locally in Portainer will be overridden, which may cause service interruption.\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n {{ $ctrl.model.RepositoryWebhookURL | truncatelr }} \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n When enabled, enforces automatic deployment at each interval or webhook invocation.\\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    Please enter a valid time interval.

    \\n

    Minimum interval is 1m

    \\n
    \\n
    \\n
    \\n
    \\n \\n When enabled, updates from the git repository will occur automatically at an interval or webhook.\\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-auto-update-fieldset/git-form-auto-update-fieldset.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n Indicate the path to the {{ $ctrl.deployMethod == 'compose' ? 'Compose' : 'Manifest' }} file from the root of your repository. \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-compose-path-field/git-form-compose-path-field.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n

    \\n This {{ $ctrl.type }} was deployed from the git repository {{ $ctrl.url }}\\n .\\n

    \\n

    \\n Update\\n {{ $ctrl.configFilePath }} 0\\\">, {{ $ctrl.additionalFiles.join(',') }}\\n in git and pull from here to update the {{ $ctrl.type }}.\\n

    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-info-panel/git-form-info-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n Specify a reference of the repository using the following syntax: branches with refs/heads/branch_name or tags with refs/tags/tag_name. If not\\n specified, will use the default HEAD reference normally the master branch.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-ref-field/git-form-ref-field.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n You can use the URL of a git repository. \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form-url-field/git-form-url-field.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    Git repository
    \\n \\n \\n \\n\\n \\n\\n \\n\\n \\n\\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/git-form/git-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    Metadata
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    Associated environments
    \\n
    \\n
    \\n You can select which environment should be part of this group by moving them to the associated environments table. Simply click on any environment entry to move it from one\\n table to the other.\\n
    \\n
    \\n \\n
    \\n
    Available environments
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    Associated environments
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    Unassociated environments
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/group-form/groupForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Redeploy from git repository
    \\n
    \\n
    \\n

    Pull the latest manifest from git and redeploy the application.

    \\n
    \\n
    \\n\\n \\n \\n \\n\\n
    Actions
    \\n \\n \\n Pull and update application \\n In progress...\\n \\n \\n Save settings \\n In progress...\\n \\n\\n\";;\nvar path = 'app/portainer/components/forms/kubernetes-app-git-form/kubernetes-app-git-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Redeploy from git repository
    \\n
    \\n
    \\n

    Pull the latest manifest from git and redeploy the application.

    \\n
    \\n
    \\n \\n \\n\\n \\n \\n \\n\\n
    Actions
    \\n \\n \\n Pull and update application \\n In progress...\\n \\n \\n Save settings \\n In progress...\\n \\n\\n\";;\nvar path = 'app/portainer/components/forms/kubernetes-redeploy-app-git-form/kubernetes-redeploy-app-git-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Important notice
    \\n
    \\n \\n For information on how to generate an Access Key, follow the\\n AWS guide.\\n \\n
    \\n\\n
    ECR connection details
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-aws-ecr/registry-form-ecr.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Azure registry details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-azure/registry-form-azure.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Important notice
    \\n
    \\n \\n Docker requires you to connect to a secure registry. You can find more\\n information about how to connect to an insecure registry in the Docker documentation.\\n \\n
    \\n
    Custom registry details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-custom/registry-form-custom.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    DockerHub account details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-dockerhub/registry-form-dockerhub.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Namespace\\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n \\n \\n Path with namespace\\n \\n \\n \\n Description
    \\n \\n \\n \\n \\n {{ item.Namespace }}\\n \\n {{ item.Name }}\\n \\n {{ item.PathWithNamespace }}\\n \\n {{ item.Description }}\\n
    No projects available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-gitlab/gitlab-projects-datatable/gitlabProjectsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Important notice
    \\n
    \\n \\n

    \\n For information on how to generate a Gitlab Personal Access Token, follow the\\n gitlab guide.\\n

    \\n
    \\n
    \\n
    Gitlab registry connection details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    Gitlab projects
    \\n
    \\n Select the project's registries you want to manage. Portainer will create one registry for each selected project. \\n \\n \\n If you can't select a project, make sure that registry feature is activated on it.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n Create registries\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-gitlab/registry-form-gitlab.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Important notice
    \\n
    \\n
    \\n Any Portainer user that has access to this registry will be able to use the Registry Manager features against the content of any Feed in the ProGet registry that the ProGet\\n user has access to.\\n
    \\n
    \\n
    ProGet registry details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-proget/registry-form-proget.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Quay account details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n {{ $ctrl.formActionLabel }}\\n In progress...\\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/registry-form-quay/registry-form-quay.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n \\n
    \\n
    Information
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    Configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n\\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Deploy the stack\\n Deployment in progress...\\n \\n \\n
    {{ $ctrl.state.formValidationError }}
    \\n
    This template type cannot be deployed on this environment.\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/forms/stack-from-template-form/stackFromTemplateForm.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Redeploy from git repository
    \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n Pull and redeploy \\n In progress...\\n \\n \\n Save settings \\n In progress...\\n \\n\\n\";;\nvar path = 'app/portainer/components/forms/stack-redeploy-git-form/stack-redeploy-git-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n
    Name Group Tags
    \\n {{ item.Name | truncate: 64 }}\\n \\n {{ $ctrl.groupIdToGroupName(item.GroupId) | truncate: 64 }}\\n \\n {{ $ctrl.tagIdsToTagNames(item.TagIds) | arraytostr | truncate: 64 }}\\n
    \\n {{ item.Name | truncate: 64 }}\\n \\n {{ $ctrl.groupIdToGroupName(item.GroupId) | truncate: 64 }}\\n \\n {{ $ctrl.tagIdsToTagNames(item.TagIds) | truncate: 64 }}\\n
    Loading...
    {{ $ctrl.emptyDatasetMessage }}
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/group-association-table/groupAssociationTable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n

    \\n \\n This environment is currently offline (read-only). Data shown is based on the latest available snapshot.\\n

    \\n

    \\n \\n Last snapshot: {{ $ctrl.snapshotTime | getisodatefromtimestamp }}\\n

    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/information-panel-offline/informationPanelOffline.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n
    \\n \\n {{ $ctrl.titleText }}\\n \\n \\n dismiss\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/information-panel/informationPanel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.motd.Title }}\\n \\n \\n dismiss\\n \\n
    \\n
    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/motd-panel/motdPanel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n {{ $ctrl.model.Name }}\\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n {{ $ctrl.model.ShortDescription }}\\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/product-list/product-item/productItem.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/product-list/productList.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ $ctrl.registry.Name }}\\n
    URL\\n {{ $ctrl.registry.URL }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/registry-details/registry-details.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    {{ $ctrl.key }}
    \\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/sensitive-details/sensitive-details.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n ********\\n {{ $ctrl.value }}\\n
    \\n\\n\\n\";;\nvar path = 'app/portainer/components/show-hide/show-hide.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
  • \\n \\n \\n \\n \\n
  • \\n\";;\nvar path = 'app/portainer/components/sidebar/sidebar-menu-item/sidebar-menu-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
  • \\n \\n
    \\n \\n {{ ::$ctrl.label }}\\n
    \\n
    \\n\\n
    \\n \\n
    \\n
  • \\n\";;\nvar path = 'app/portainer/components/sidebar/sidebar-menu/sidebar-menu.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
  • \\n {{ ::$ctrl.title }}\\n
  • \\n\\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/sidebar/sidebar-section/sidebar-section.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/slider/slider.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Stack duplication / migration
    \\n \\n \\n
    \\n
    \\n \\n

    This feature allows you to duplicate or migrate this stack.

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').\\n

    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n Migrate \\n Migration in progress...\\n \\n \\n Duplicate \\n Duplication in progress...\\n \\n
    \\n\\n
    \\n
    \\n {{ $ctrl.yamlError }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/stack-duplication-form/stack-duplication-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\";;\nvar path = 'app/portainer/components/status-indicator/status-indicator.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    0\\\" class=\\\"col-sm-12\\\" style=\\\"padding: 0; margin-bottom: 15px\\\">\\n \\n
    \\n \\n {{ tag.Name }}\\n \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    0\\\">\\n \\n
    \\n
    \\n No tags available. \\n
    \\n
    \\n
    \\n No tags matching your filter. \\n
    \\n\";;\nvar path = 'app/portainer/components/tag-selector/tagSelector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.model.Title }}\\n \\n \\n \\n \\n & \\n \\n \\n \\n \\n \\n \\n {{ $ctrl.typeLabel }}\\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n {{ $ctrl.model.Description }}\\n \\n 0\\\">\\n {{ $ctrl.model.Categories.join(', ') }}\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/template-list/template-item/templateItem.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n {{ $select.selected }}\\n \\n \\n {{ category }}\\n \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n \\n \\n
    Loading...
    \\n \\n No templates available.\\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/template-list/templateList.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n

    \\n \\n Dark and High-contrast theme are experimental. Some UI components might not display properly.\\n

    \\n
    \\n
    \\n\\n \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/components/theme/theme-settings.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n A change window is enabled, automatic updates will not occur outside of\\n {{ $ctrl.state.startTimeUtc | date: 'shortTime' }} - {{ $ctrl.state.endTimeUtc | date: 'shortTime' }} UTC ({{ $ctrl.state.startTimeUser | date: 'shortTime' }} -\\n {{ $ctrl.state.endTimeUser | date: 'shortTime' }} {{ $ctrl.state.dst ? 'DST' : '' }} {{ $ctrl.state.timezone }}).\\n \\n
    \\n\";;\nvar path = 'app/portainer/components/time-window-display/time-window-display.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n
    \\n
    to
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n Automatic updates to stacks or applications outside the defined change window will not occur.\\n
    \\n \\n The chosen time configuration is invalid\\n
    \\n
    \\n \\n\\n
    \\n Automatic updates to stacks or applications outside\\n \\n {{ $ctrl.state.utcStartTime | date: 'shortTime' }} - {{ $ctrl.state.utcEndTime | date: 'shortTime' }} UTC ({{ $ctrl.state.setStartTime | date: 'shortTime' }} -\\n {{ $ctrl.state.setEndTime | date: 'shortTime' }} {{ $ctrl.state.dst ? 'DST' : '' }} {{ $ctrl.state.timeZoneSelected }})\\n \\n will not occur.\\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/components/time-window-picker/time-window-picker.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Licenses > Add Licenses\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/license-management/add-license.view/add-license.view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n {{ $ctrl.keyValidation.message }}\\n\\n \\n \\n license is required.\\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/license-management/add-license.view/licenses-form/license-item/license-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n
    \\n
    \\n
    \\n
    License registration
    \\n\\n
    Please input your license keys.
    \\n \\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n \\n Submit\\n In progress...\\n \\n {{ $ctrl.state.formError }}\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/license-management/add-license.view/licenses-form/licenses-form.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n The number of nodes for your license has been exceeded. Please contact your administrator.\\n \\n\\n\";;\nvar path = 'app/portainer/license-management/license-node-panel.component/license-node-panel.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n

    \\n Portainer {{ $ctrl.productEdition() }} licensed to {{ $ctrl.info.company }}\\n for up to {{ $ctrl.info.nodes }} {{ $ctrl.info.nodes !== 1 ? 'Nodes' : 'Node' }}\\n

    \\n

    \\n Current Usage:\\n {{ $ctrl.usedNodes }}/{{ $ctrl.info.nodes }}\\n

    \\n

    \\n One or more of you licenses will expire on {{ $ctrl.expiresAt() }}\\n

    \\n
    \\n

    Your license has expired. Please contact your administrator to renew your license.

    \\n\\n \\n
    \\n\";;\nvar path = 'app/portainer/license-management/licenses.view/license-info/license-info.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Company\\n \\n \\n \\n \\n \\n Type\\n \\n \\n \\n \\n \\n Nodes\\n \\n \\n \\n \\n \\n Expires\\n \\n \\n \\n Valid Actions
    \\n \\n \\n \\n \\n {{ item.company }}\\n {{ item.type === 1 ? 'Trial' : 'Subscription' }}{{ item.nodes ? item.nodes : '-' }}{{ item.showExpiresAt }}\\n \\n \\n \\n
    Loading...
    No licenses available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/license-management/licenses.view/licenses-datatable/licenses-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Licenses\\n\\n\\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/license-management/licenses.view/licenses.view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Provider
    \\n\\n\\n\";;\nvar path = 'app/portainer/oauth/components/oauth-providers-selector/oauth-providers-selector.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    Single Sign-On
    \\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n \\n With automatic user provisioning enabled, Portainer will create user(s) automatically with the standard user role. If disabled, users must be created beforehand in Portainer\\n in order to login.\\n \\n \\n\\n
    \\n
    \\n \\n

    The users created by the automatic provisioning feature can be added to a default team on creation.

    \\n

    \\n By assigning newly created users to a team, they will be able to access the environments associated to that team. This setting is optional and if not set, newly created\\n users won't be able to access any environments.\\n

    \\n
    \\n
    \\n
    \\n \\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n\\n
    0\\\">\\n
    \\n

    \\n \\n The default team option will be disabled when automatic team membership is enabled\\n

    \\n
    \\n
    \\n \\n \\n \\n
    \\n 0\\\"\\n >\\n \\n
    \\n
    \\n
    \\n\\n
    Team membership
    \\n
    \\n
    Automatic team membership synchronizes the team membership based on a custom claim in the token from the OAuth provider.
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n add team mapping\\n \\n\\n
    \\n
    \\n claim value regex\\n \\n
    \\n maps to\\n
    \\n team\\n \\n \\n \\n
    \\n \\n\\n
    \\n Claim value regex is required.\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    The default team will be assigned when the user does not belong to any other team
    \\n \\n \\n You have not yet created any teams. Head over to the Teams view to manage teams.\\n \\n\\n
    0\\\">\\n
    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n add admin mapping \\n\\n
    \\n
    \\n claim value regex\\n \\n
    \\n \\n
    \\n Claim value regex is required.\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n\\n
    OAuth Configuration
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n
    \\n\";;\nvar path = 'app/portainer/oauth/components/oauth-settings/oauth-settings.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{ item.TeamName ? 'Team' : 'User' }} {{ item.TeamName }} access defined on {{ item.AccessLocation }}\\n {{ item.GroupName }}\\n Manage access\\n \\n Manage access\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Environment\\n \\n \\n \\n \\n \\n Role\\n \\n \\n \\n Access origin
    {{ item.EndpointName }}{{ item.RoleName }}
    Select a user to show associated access and role
    The selected user does not have access to any environment(s)
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/rbac/components/access-viewer/access-viewer-datatable/access-viewer-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n Effective access viewer\\n \\n \\n \\n \\n
    \\n
    User
    \\n
    \\n
    \\n No user available \\n 0\\\" ng-model=\\\"$ctrl.selectedUser\\\" ng-change=\\\"$ctrl.onUserSelect()\\\">\\n \\n {{ $select.selected.Username }}\\n \\n \\n {{ item.Username }}\\n \\n \\n
    \\n
    \\n\\n
    Access
    \\n
    \\n
    \\n \\n Effective role for each environment will be displayed for the selected user\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/rbac/components/access-viewer/access-viewer.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Description\\n \\n \\n \\n
    {{ item.Name }}{{ item.Description }}\\n \\n \\n \\n Default\\n
    Loading...
    No role available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/rbac/components/roles-datatable/roles-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Role management\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/rbac/views/roles/roles.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Repository\\n \\n \\n \\n Tags count
    \\n {{ item.Name }}\\n {{ item.TagsCount }}
    Loading...
    No repository available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n Name\\n \\n \\n \\n Os/ArchitectureImage IDCompressed sizeActions
    \\n \\n \\n \\n \\n {{ item.Name }}\\n {{ item.Os }}/{{ item.Architecture }}{{ item.ImageId | trimshasum }}{{ item.Size | humansize }}\\n \\n \\n Retag\\n \\n \\n \\n \\n \\n \\n \\n \\n
    Loading...
    No tag available.
    \\n
    \\n
    \\n
    {{ $ctrl.state.selectedItemCount }} item(s) selected
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Registries > {{ $ctrl.registry.Name }} > Management\\n configuration\\n \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    Information
    \\n
    \\n \\n The following configuration will be used to access this registry API to provide Portainer\\n management features.\\n \\n
    \\n
    Registry details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    Required TLS files
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.model.TLSCACertFile.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.model.TLSCertFile.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.model.TLSKeyFile.name }}\\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Test configuration\\n Test in progress...\\n \\n \\n Save configuration\\n Saving configuration...\\n \\n
    \\n
    \\n \\n \\n \\n \\n\\n\";;\nvar path = 'app/portainer/registry-management/views/configure/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n

    \\n \\n {{ $ctrl.resolve.message }}\\n

    \\n
    \\n   {{ $ctrl.resolve.progressLabel }} : {{ $ctrl.resolve.context.progression }}% - {{ $ctrl.resolve.context.elapsedTime | number: 0 }}s \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/registry-management/views/repositories/edit/progression-modal/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Registries > {{ registry.Name }} >\\n {{ repository.Name }} \\n \\n\\n\\n
    \\n \\n \\n

    \\n \\n Portainer needs to retrieve additional information to enable tags modifications (addition, removal, rename) and repository removal features.
    \\n As this repository contains more than {{ state.tagsRetrieval.limit }} tags, the additional retrieval wasn't started automatically.
    \\n Once started you can still navigate this page, leaving the page will cancel the retrieval process.
    \\n
    \\n Note: on very large repositories or high latency environments the retrieval process can take a few minutes.\\n

    \\n \\n \\n
    \\n \\n   Retrieval progress : {{ state.tagsRetrieval.progression }}% - {{ state.tagsRetrieval.elapsedTime | number: 0 }}s\\n \\n \\n Retrieval completed in {{ state.tagsRetrieval.elapsedTime | number: 0 }}s\\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Repository\\n {{ repository.Name }}\\n \\n \\n
    Tags count{{ repository.Tags.length }}
    Images count{{ short.Images.length }}
    \\n
    \\n
    \\n
    \\n\\n
    0\\\">\\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n {{ $select.selected | trimshasum }}\\n \\n \\n {{ image | trimshasum }}\\n \\n \\n
    \\n
    \\n
    \\n \\n Add tag\\n Adding tag...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n 0\\\"\\n pagination-action=\\\"paginationAction\\\"\\n loading=\\\"state.loading\\\"\\n >\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/registry-management/views/repositories/edit/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Registries > {{ $ctrl.registry.Name }} >\\n {{ $ctrl.context.repository }} >\\n {{ $ctrl.context.tag }}\\n \\n\\n\\n
    0\\\">\\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n {{ tag }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    ID\\n {{ $ctrl.details.Id }}\\n
    Parent{{ $ctrl.details.Parent }}
    Created{{ $ctrl.details.Created | getisodate }}
    BuildDocker {{ $ctrl.details.DockerVersion }} on {{ $ctrl.details.Os }}, {{ $ctrl.details.Architecture }}
    Author{{ $ctrl.details.Author }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n {{ $ctrl.details.Command | command }}\\n \\n \\n \\n {{ $ctrl.details.Entrypoint | command }}\\n \\n 0\\\">\\n \\n \\n \\n 0\\\">\\n \\n \\n \\n 0\\\">\\n \\n \\n \\n \\n
    CMD
    ENTRYPOINT
    EXPOSE\\n \\n {{ port }}\\n \\n
    VOLUME\\n \\n {{ volume }}\\n \\n
    ENV\\n \\n \\n \\n \\n \\n
    {{ var|key: '=' }}{{ var|value: '=' }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Order\\n \\n \\n \\n \\n \\n Layer\\n \\n \\n \\n
    \\n {{ layer.Order }}\\n \\n
    130\\\">\\n \\n {{ layer.CreatedBy }}\\n \\n \\n {{ layer.CreatedBy | truncate: 130 }}\\n 130\\\" style=\\\"margin-left: 5px\\\">\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n {{ layer.CreatedBy }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/registry-management/views/repositories/tag/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Registries >\\n {{ $ctrl.registry.Name }}\\n {{ $ctrl.registry.Name }} > Repositories\\n \\n\\n\\n
    \\n \\n \\n

    \\n \\n Portainer was not able to use this registry management features. You might need to update the configuration used by Portainer to access this registry.\\n

    \\n

    \\n Note: Portainer registry management features are only supported with registries exposing the\\n v2 registry API.\\n

    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/registry-management/views/repositories/template.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Automatic user provisioning
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/auto-user-provision-toggle/auto-user-provision-toggle.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Information
    \\n
    When using internal authentication, Portainer will encrypt user passwords and store credentials locally.
    \\n\\n\\n\";;\nvar path = 'app/portainer/settings/authentication/internal-auth/internal-auth.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n\\n \\n \\n With automatic user provisioning enabled, Portainer will create user(s) automatically with standard user role and assign them to team(s) which matches to LDAP group name(s).\\n If disabled, users must be created in Portainer beforehand.\\n \\n \\n\\n
    \\n
    Information
    \\n
    \\n When using Microsoft AD authentication, Portainer will delegate user authentication to the Domain Controller(s) configured below; if there is no connectivity, Portainer will\\n fallback to internal authentication.\\n
    \\n
    \\n\\n
    AD configuration
    \\n\\n
    \\n
    \\n

    \\n \\n You can configure multiple AD Controllers for authentication fallback. Make sure all servers are using the same configuration (i.e. if TLS is enabled, they should all use\\n the same certificates).\\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n \\n 0\\\"\\n class=\\\"btn btn-sm btn-danger\\\"\\n type=\\\"button\\\"\\n ng-click=\\\"$ctrl.removeLDAPUrl($index)\\\"\\n limited-feature-dir=\\\"{{::$ctrl.limitedFeatureId}}\\\"\\n limited-feature-tabindex=\\\"-1\\\"\\n >\\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ad-settings/ad-settings.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n Test connectivity\\n Testing connectivity...\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-connectivity-check/ldap-connectivity-check.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Auto-populate team admins
    \\n\\n\\n \\n
    0\\\" style=\\\"margin-bottom: 10px\\\">\\n Extra search configuration \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n Fetch Admin Group(s)\\n \\n \\n No groups found\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-custom-admin-group/ldap-custom-admin-group.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Group search configurations
    \\n\\n\\n \\n
    0\\\" style=\\\"margin-bottom: 10px\\\">\\n Extra search configuration \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n Display User/Group matching\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-custom-group-search/ldap-custom-group-search.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    User search configurations
    \\n\\n\\n \\n
    0\\\" style=\\\"margin-bottom: 10px\\\">\\n Extra search configuration \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    0\\\">\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n Display Users\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-custom-user-search/ldap-custom-user-search.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n
    0\\\" style=\\\"margin-bottom: 10px\\\">\\n Extra search configuration \\n \\n \\n \\n
    \\n\\n \\n\\n
    \\n \\n
    \\n {{ $ctrl.config.GroupBaseDN }}\\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n add another group\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n {{ $ctrl.config.GroupFilter }}\\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-group-search-item/ldap-group-search-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Group search configurations
    \\n\\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n add group search configuration\\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-group-search/ldap-group-search.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n User Name\\n \\n \\n \\n Groups
    \\n {{ item.Name }}\\n \\n

    {{ group }}

    \\n
    Loading...
    No groups found.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-groups-datatable/ldap-groups-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    Information
    \\n
    \\n When using LDAP authentication, Portainer will delegate user authentication to a LDAP server and fallback to internal authentication if LDAP authentication fails.\\n
    \\n
    \\n\\n
    LDAP configuration
    \\n\\n
    \\n
    \\n

    \\n \\n You can configure multiple LDAP Servers for authentication fallback. Make sure all servers are using the same configuration (i.e. if TLS is enabled, they should all use the\\n same certificates).\\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
    \\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings-custom/ldap-settings-custom.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n add another entry\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings-dn-builder/ldap-settings-dn-builder.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\\n\\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings-group-dn-builder/ldap-settings-group-dn-builder.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n\\n
    \\n
    Information
    \\n
    \\n When using LDAP authentication, Portainer will delegate user authentication to a LDAP server and fallback to internal authentication if LDAP authentication fails.\\n
    \\n
    \\n\\n
    LDAP configuration
    \\n\\n
    \\n
    \\n

    \\n \\n You can configure multiple LDAP Servers for authentication fallback. Make sure all servers are using the same configuration (i.e. if TLS is enabled, they should all use the\\n same certificates).\\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n \\n 0\\\"\\n class=\\\"btn btn-sm btn-danger\\\"\\n type=\\\"button\\\"\\n ng-click=\\\"$ctrl.removeLDAPUrl($index)\\\"\\n limited-feature-dir=\\\"{{::$ctrl.limitedFeatureId}}\\\"\\n limited-feature-tabindex=\\\"-1\\\"\\n >\\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings-openldap/ldap-settings-openldap.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n {{ $ctrl.title || 'LDAP security' }}\\n
    \\n\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n\\n
    \\n \\n
    \\n \\n Select file\\n \\n \\n {{ $ctrl.tlscaCert.name }}\\n \\n \\n \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings-security/ldap-settings-security.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Test login
    \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n Test\\n Testing...\\n \\n \\n \\n
    \\n\\n \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings-test-login/ldap-settings-test-login.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n With automatic user provisioning enabled, Portainer will create user(s) automatically with standard user role and assign them to team(s) which matches to LDAP group name(s).\\n If disabled, users must be created in Portainer beforehand.\\n \\n \\n\\n
    Server Type
    \\n\\n \\n\\n \\n\\n \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-settings/ldap-settings.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n
    0\\\" style=\\\"margin-bottom: 10px\\\">\\n Extra search configuration \\n 0\\\"\\n class=\\\"btn btn-sm btn-danger\\\"\\n type=\\\"button\\\"\\n ng-click=\\\"$ctrl.onRemoveClick($ctrl.index)\\\"\\n limited-feature-dir=\\\"{{::$ctrl.limitedFeatureId}}\\\"\\n limited-feature-tabindex=\\\"-1\\\"\\n >\\n \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n username\\n user@domainname\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n {{ $ctrl.config.BaseDN }}\\n
    \\n
    \\n\\n \\n\\n
    \\n
    \\n \\n \\n add another group\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n {{ $ctrl.config.Filter }}\\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-user-search-item/ldap-user-search-item.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    User search configurations
    \\n\\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n add user search configuration\\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-user-search/ldap-user-search.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    {{ $ctrl.titleText }}
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n
    \\n {{ item }}\\n
    Loading...
    No users found.
    \\n
    \\n
    \\n
    \\n
    \\n \\n Items per page \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/ldap/ldap-users-datatable/ldap-users-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Actions
    \\n
    \\n
    \\n \\n Save settings\\n Saving...\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/authentication/save-auth-settings-button/save-auth-settings-button.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n \\n \\n
    \\n \\n

    \\n \\n Forcing HTTPs only will cause Portainer to stop listening on the HTTP port. Any edge agent environment that is using HTTP will no longer be available.\\n

    \\n
    \\n\\n \\n\\n
    \\n\\n
    \\n Provide a new SSL Certificate to replace the existing one that is used for HTTPS connections. \\n
    \\n\\n
    \\n Upload a X.509 certificate, commonly a crt, a cer, or a pem file. \\n
    \\n\\n
    \\n
    \\n \\n \\n {{ $ctrl.formValues.certFile.name }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    File type is invalid.

    \\n
    \\n
    \\n
    \\n\\n
    \\n Upload a private key, commonly a key, or a pem file. \\n
    \\n\\n
    \\n
    \\n \\n \\n {{ $ctrl.formValues.keyFile.name }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    File type is invalid.

    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n \\n Apply Changes\\n Saving in progress...\\n Reloading Page...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/settings/general/ssl-certificate/ssl-certificate.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Time\\n \\n \\n \\n \\n User\\n \\n \\n \\n \\n Environment\\n \\n \\n Action Payload
    \\n {{ item.timestamp | getisodatefromtimestamp }}\\n {{ item.username }}{{ item.context }}\\n {{ item.action }}\\n \\n \\n -\\n
    \\n \\n
    Loading...
    No logs available.
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/user-activity/activity-logs-view/activity-logs-datatable/activity-logs-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Activity Logs\\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n

    \\n \\n Portainer user activity logs have a maximum retention of 7 days.\\n

    \\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/user-activity/activity-logs-view/activity-logs-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Time\\n \\n \\n \\n \\n Origin\\n \\n \\n \\n \\n Context\\n \\n \\n \\n \\n \\n User\\n \\n \\n \\n Result\\n \\n
    \\n {{ item.timestamp | getisodatefromtimestamp }}\\n {{ item.origin }}{{ $ctrl.contextType(item.context) }}{{ item.username }}\\n {{ $ctrl.activityType(item.type) }}\\n \\n
    Loading...
    No logs available.
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/user-activity/auth-logs-view/auth-logs-datatable/auth-logs-datatable.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n User authentication activity\\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n\\n

    \\n \\n Portainer user authentication activity logs have a maximum retention of 7 days.\\n

    \\n\\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/user-activity/auth-logs-view/auth-logs-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n User settings\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n = 8]\\\" aria-hidden=\\\"true\\\">\\n Your new password must be at least 8 characters long\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n Update password\\n \\n \\n You cannot change your password when using LDAP authentication.\\n \\n \\n \\n You cannot change your password when using OAuth authentication.\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/account/account.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n User settings > Add access token \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/account/create-user-access-token/create-user-access-token.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\\"Portainer\\\"\\n \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n
    \\n \\n\\n \\n
    \\n
    \\n
    or
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    Use internal authentication
    \\n
    \\n
    \\n\\n \\n
    \\n \\n \\n
    \\n\\n \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n \\n Login\\n Login in progress...\\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n {{ ctrl.state.AuthenticationError }}\\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n Authentication in progress... \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/views/auth/auth.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Custom Templates > Create Custom template \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n
    \\n
    Build method
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Web editor
    \\n
    \\n \\n You can get more information about Compose file format in the\\n official documentation \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Upload
    \\n
    \\n You can upload a Compose file from your computer. \\n
    \\n
    \\n
    \\n \\n \\n {{ $ctrl.formValues.File.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n\\n \\n
    Actions
    \\n
    \\n
    \\n \\n Create custom template\\n Creation in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/custom-templates/create-custom-template-view/createCustomTemplateView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Custom Templates\\n\\n
    \\n \\n \\n \\n
    \\n \\n
    Web editor
    \\n
    \\n \\n You can get more information about Compose file format in the\\n official documentation \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/custom-templates/custom-templates-view/customTemplatesView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Custom templates > {{ $ctrl.formValues.Title }} \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n\\n \\n
    Web editor
    \\n
    \\n \\n You can get more information about Compose file format in the\\n official documentation \\n .\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n\\n
    Actions
    \\n
    \\n
    \\n \\n Update the template\\n Update in progress...\\n \\n \\n {{ $ctrl.state.formValidationError }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/custom-templates/edit-custom-template-view/editCustomTemplateView.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Environments > Import FDO Device \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n \\n

    \\n \\n You are setting up a Portainer Edge Agent that will initiate the communications with the Portainer instance and your FDO Devices.\\n

    \\n
    \\n \\n \\n
    Import Voucher
    \\n
    \\n
    \\n \\n

    \\n \\n Import one or more Manufacturer's Ownership Vouchers to initiate device attestation\\n

    \\n
    \\n
    \\n \\n Upload \\n Uploading Voucher...\\n \\n
    \\n
    \\n
    \\n
    \\n

    Connecting to the Owner service...

    \\n
    \\n
    \\n
    \\n
    \\n

    Ownership Voucher Uploaded

    \\n
    \\n
    \\n
    \\n \\n \\n
    Device details
    \\n
    \\n \\n

    \\n \\n Device name will serve as your reference name in Portainer\\n

    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n \\n

    \\n \\n Suffix starting number will be appended to the end of the Device name, if initiating multiple devices this will be incrementally increased\\n

    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This field needs to be a positive integer number.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    Set up Tags
    \\n
    \\n \\n

    \\n \\n This is just an option if your device is under a certain group\\n

    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n Save Configuration\\n Saving...\\n \\n Cancel\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/devices/import/importDevice.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Settings > Edge Compute \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    Device Profile Details
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    Profile configuration
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n \\n\\n \\n
    \\n
    \\n Cancel\\n \\n Save Profile\\n Saving...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/devices/profiles/add/addProfile.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Settings > Edge Compute \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    Device Profile Details
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    Profile configuration
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n \\n\\n \\n
    \\n
    \\n Cancel\\n \\n Update Profile\\n Saving...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/devices/profiles/edit/editProfile.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Manage registry access inside this environment\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/endpoint-registries/registries.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Environments > {{ ctrl.endpoint.Name }} > Access management\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ ctrl.endpoint.Name }}\\n
    URL\\n {{ ctrl.endpoint.URL | stripprotocol }}\\n
    Group\\n {{ ctrl.group.Name }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\\n\";;\nvar path = 'app/portainer/views/endpoints/access/endpointAccess.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Environments > Add environment \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    Environment type
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    Important notice
    \\n
    \\n

    \\n You can connect Portainer to a Docker environment via socket or via TCP. You can find more information about how to expose the Docker API over TCP\\n in the Docker documentation.\\n

    \\n\\n

    \\n When using the socket, ensure that you have started the Portainer container with the following Docker flag\\n -v \\\"/var/run/docker.sock:/var/run/docker.sock\\\" \\n (on Linux) or\\n -v \\\\.\\\\pipe\\\\docker_engine:\\\\.\\\\pipe\\\\docker_engine \\n (on Windows).\\n

    \\n
    \\n
    \\n
    \\n
    Information
    \\n
    \\n \\n Ensure that you have deployed the Portainer agent in your cluster first. Refer to the platform related command below to deploy it.\\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n curl -L https://downloads.portainer.io/portainer-agent-ee{{ agentShortVersion }}-k8s-lb.yaml -o portainer-agent-k8s.yaml; kubectl apply -f\\n portainer-agent-k8s.yaml\\n \\n\\n \\n curl -L https://downloads.portainer.io/portainer-agent-ee{{ agentShortVersion }}-k8s-nodeport.yaml -o portainer-agent-k8s.yaml; kubectl apply -f\\n portainer-agent-k8s.yaml\\n \\n\\n \\n curl -L https://downloads.portainer.io/agent-stack-ee{{ agentShortVersion }}.yml -o agent-stack.yml && docker stack deploy --compose-file=agent-stack.yml\\n portainer-agent\\n curl -L https://downloads.portainer.io/agent-stack-ee{{ agentShortVersion }}-windows.yml -o agent-stack-windows.yml && docker stack deploy\\n --compose-file=agent-stack-windows.yml portainer-agent\\n \\n \\n
    \\n Copy command\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    Information
    \\n
    \\n \\n

    \\n Allows you to create an environment that can be registered with an Edge agent. The Edge agent will initiate the communications with the Portainer instance. All\\n the required information on how to connect an Edge agent to this environment will be available after environment creation.\\n

    \\n

    You can read more about the Edge agent in the userguide available here.

    \\n
    \\n
    \\n
    \\n
    \\n
    Important notice
    \\n
    \\n

    This will allow you to manage the Kubernetes environment where Portainer is running.

    \\n\\n

    \\n \\n In order to manage a remote Kubernetes environment, please use the Agent or Edge agent options.\\n

    \\n
    \\n
    \\n
    \\n
    Information
    \\n
    \\n
    \\n \\n

    This feature is experimental.

    \\n

    Connect to Microsoft Azure to manage Azure Container Instances (ACI).

    \\n

    \\n \\n Have a look at\\n the Azure documentation\\n to retrieve the credentials required below.\\n

    \\n
    \\n
    \\n
    \\n
    \\n
    Environment details
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n
    Metadata
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n \\n
    Actions
    \\n \\n
    \\n
    \\n \\n Add environment\\n Creating environment...\\n \\n \\n Add environment\\n Creating environment...\\n \\n \\n Add environment\\n Creating environment...\\n \\n \\n Add environment\\n Creating environment...\\n \\n \\n Add environment\\n Creating environment...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/endpoints/create/createendpoint.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n \\n Environments > {{ endpoint.Name }}\\n \\n\\n\\n
    \\n \\n \\n

    \\n \\n This Edge environment is associated to an Edge environment {{ state.kubernetesEndpoint ? '(Kubernetes)' : '(Docker)' }}.\\n

    \\n

    \\n Edge key: {{ endpoint.EdgeKey }}\\n

    \\n

    \\n Edge identifier: {{ endpoint.EdgeID }}\\n

    \\n

    \\n \\n De-associate\\n \\n

    \\n
    \\n
    \\n \\n \\n

    \\n \\n Refer to the platform related command below to deploy the Edge agent in your remote cluster.\\n

    \\n

    \\n The agent will communicate with Portainer via {{ edgeKeyDetails.instanceURL }} and tcp://{{ edgeKeyDetails.tunnelServerAddr }}\\n

    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n {{\\n dockerCommands[state.deploymentTab][state.platformType](agentShortVersion, endpoint.EdgeID, endpoint.EdgeKey, state.allowSelfSignedCerts)\\n }}\\n \\n \\n {{\\n dockerCommands[state.deploymentTab][state.platformType](agentVersion, endpoint.EdgeID, endpoint.EdgeKey, state.allowSelfSignedCerts)\\n }}\\n \\n \\n {{\\n dockerCommands[state.deploymentTab][state.platformType](agentVersion, endpoint.EdgeID, endpoint.EdgeKey, state.allowSelfSignedCerts)\\n }}\\n \\n \\n
    \\n Copy command\\n copied \\n
    \\n
    \\n
    Join token
    \\n

    \\n \\n For those prestaging the edge agent, use the following join token to associate the Edge agent with this environment.\\n

    \\n

    You can read more about pre-staging in the userguide available here.

    \\n
    \\n \\n {{ endpoint.EdgeKey }}\\n \\n
    \\n Copy token\\n copied \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n You should configure the features available in this Kubernetes environment in the\\n Kubernetes configuration view.\\n \\n \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    Configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    Metadata
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    Security
    \\n \\n
    \\n \\n \\n
    \\n
    Open Active Management Technology
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Update environment...\\n Updating environment...\\n \\n Cancel\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/endpoints/edit/endpoint.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Environment management\\n\\n\\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n {{ state.loadingMessage }}\\n \\n \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/endpoints/endpoints.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Environments > {{ $state.endpoint.Name }} >\\n {{ $state.deviceName }} > KVM Control\\n \\n\\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    KVM Control
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/endpoints/kvm/endpointKVM.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Groups > {{ group.Name }} > Access management\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ group.Name }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\";;\nvar path = 'app/portainer/views/groups/access/groupAccess.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Environment groups > Add group \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/groups/create/creategroup.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Groups > {{ ::group.Name }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/groups/edit/group.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Environment group management\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/groups/groups.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n\\n\\n \\n \\n \\n \\n \\n Environments\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n \\n

    \\n \\n You do not have access to any environment. Please contact your administrator.\\n

    \\n
    \\n
    \\n\\n\\n Connecting to the Edge environment...\\n \\n\\n\\n\\n \\n

    \\n \\n No environment available for management. Please head over the\\n environment view \\n to add an environment.\\n

    \\n
    \\n
    \\n\\n\\n \\n

    \\n \\n The latest automated backup has failed at {{ backupStatus.TimestampUTC | date: 'yyyy-MM-dd HH:mm:ss' }}. For details please see the log files and have a look at the\\n settings\\n to verify the backup configuration.\\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/home/home.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\\"Portainer\\\"\\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n\\n \\n
    \\n \\n
    \\n
    \\n Please create the initial administrator user. \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n = 8]\\\" aria-hidden=\\\"true\\\">\\n The password must be at least 8 characters long\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Create user\\n Creating user...\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Allow collection of anonymous statistics. You can find more information about this in our\\n privacy policy.\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n \\n\\n \\n
    \\n \\n
    \\n
    \\n \\n This will restore the Portainer metadata which contains information about the environments, stacks and applications, as well as the configured users.\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n You can upload a backup file from your computer. \\n
    \\n
    \\n \\n \\n
    \\n
    \\n Select file\\n \\n {{ formValues.BackupFile.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n You are about to restore Portainer from this backup. \\n
    \\n
    \\n After restoring has completed, please log in as a user that was known by the Portainer that was restored. \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Restore Portainer\\n Restoring Portainer...\\n \\n \\n Restore Portainer\\n Restoring Portainer...\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/views/init/admin/initAdmin.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Information
    \\n
    \\n
    \\n \\n

    Connect directly to a Portainer agent running inside a Docker or Kubernetes environment.

    \\n
    \\n
    \\n
    \\n
    Environment
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/portainer/views/init/endpoint/includes/agent.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Information
    \\n
    \\n
    \\n \\n

    Manage the Docker environment where Portainer is running.

    \\n

    \\n \\n Ensure that you have started the Portainer container with the following Docker flag:\\n

    \\n

    -v \\\"/var/run/docker.sock:/var/run/docker.sock\\\" (Linux).

    \\n

    or

    \\n

    -v \\\\\\\\.\\\\pipe\\\\docker_engine:\\\\\\\\.\\\\pipe\\\\docker_engine (Windows).

    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/init/endpoint/includes/localDocker.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    Information
    \\n
    \\n
    \\n \\n

    Manage the Kubernetes environment where Portainer is running.

    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/init/endpoint/includes/localKubernetes.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\\"Portainer\\\"\\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n Connect Portainer to the container environment you want to manage. \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n Connect\\n Connecting...\\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/views/init/endpoint/initEndpoint.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\\"Portainer\\\"\\n
    \\n \\n\\n
    \\n
    \\n \\n
    \\n
    License registration
    \\n\\n
    \\n \\n

    Please register your Portainer license.

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Submit\\n In progress...\\n \\n \\n {{ $ctrl.state.formError }}\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/init/init-license.view/init-license.view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\\"Portainer\\\"\\n \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n\\n \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n \\n Login\\n Login in progress...\\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n {{ ctrl.state.AuthenticationError }}\\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n
    \\n Authentication in progress... \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/views/internal-auth/internal-auth.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n
    \\n
    \\n \\n
    \\n \\\"Portainer\\\"\\n \\n
    \\n
    \\n Logout in progress...\\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/logout/logout.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Registries > Add registry \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n
    Registry provider
    \\n\\n
    \\n\\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/registries/create/createRegistry.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Registries > {{ registry.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n\\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n
    \\n
    \\n \\n Update registry\\n Updating registry...\\n \\n Cancel\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/registries/edit/registry.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Registry management\\n\\n\\n\\n View registries via an environment to manage access for user(s) and/or team(s) \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/registries/registries.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Settings > Authentication \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    Configuration
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n Changing from default is only recommended if you have additional layers of authentication in front of Portainer. \\n
    \\n\\n
    Authentication method
    \\n \\n\\n \\n\\n \\n\\n \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/settings/authentication/settingsAuthentication.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Settings > Edge Compute \\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/settings/edge-compute/settingsEdgeCompute.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Settings\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n You can specify the URL to your logo here. For an optimal display, logo dimensions should be 155px by 55px. \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n You can find more information about this in our\\n privacy policy.\\n
    \\n
    \\n \\n \\n
    App Templates
    \\n
    \\n
    \\n \\n You can specify the URL to your own template definitions file here. See\\n Portainer documentation for more details.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    Helm Repository
    \\n
    \\n
    \\n \\n You can specify the URL to your own helm repository here. See the\\n official documentation for more details.\\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    Kubernetes
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Save settings\\n Saving...\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n You can hide containers with specific labels from Portainer UI. You need to specify the label name and value. \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    NameValue
    {{ label.name }}{{ label.value }}
    No filter available.
    Loading...
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    Backup configuration
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    Please enter a valid cron rule.

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    Security settings
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Export backup\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Save backup settings\\n \\n
    \\n
    \\n
    \\n
    \\n
    Security settings
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n Download backup\\n Downloading backup\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/settings/settings.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n
    \\n
    \\n \\n \\n \\\"Portainer\\\"\\n \\n \\n
    \\n
    \\n
      \\n Home\\n\\n
    • \\n {{ applicationState.endpoint.name }}\\n \\n
    • \\n
      \\n \\n\\n \\n\\n \\n
      \\n\\n \\n Edge Devices\\n Edge Groups\\n Edge Stacks\\n Edge Jobs\\n \\n\\n \\n \\n Teams\\n Roles\\n \\n\\n
      \\n \\n Groups\\n Tags\\n \\n\\n Registries\\n\\n Licenses\\n\\n \\n Activity Logs\\n \\n\\n \\n Authentication\\n Edge Compute\\n\\n
      \\n Help / About\\n
      \\n \\n
      \\n
      \\n
    \\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/portainer/views/sidebar/sidebar.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Stacks > Add stack \\n\\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n This field must consist of lower case alphanumeric characters, '_' or '-' (e.g. 'my-name', or 'abc-123').\\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n This stack will be deployed using the equivalent of the docker stack deploy command.\\n \\n
    \\n
    \\n This stack will be deployed using the equivalent of docker-compose. Only Compose file format version 2 is supported at the moment.\\n
    \\n \\n Note: Due to a limitation of libcompose, the name of the stack will be standardized to remove all special characters and uppercase letters.\\n
    \\n 2\\\">\\n This stack will be deployed using docker-compose.\\n \\n
    \\n \\n
    Build method
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n
    \\n
    Upload
    \\n
    \\n You can upload a Compose file from your computer. \\n
    {{ state.uploadYamlValidationError }}\\n
    \\n
    \\n
    \\n \\n \\n {{ formValues.StackFile.name }}\\n \\n \\n
    \\n
    \\n
    \\n \\n\\n \\n\\n \\n\\n \\n \\n \\n You can get more information about Compose file format in the official documentation.\\n \\n
    \\n {{ state.editorYamlValidationError }}\\n
    \\n
    \\n \\n\\n
    \\n
    Webhooks
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n\\n \\n \\n \\n \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Deploy the stack\\n Deployment in progress...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/stacks/create/createstack.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Stacks > {{ stackName }} \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n Stack \\n
    \\n \\n
    \\n
    Information
    \\n
    \\n \\n

    \\n \\n This stack was created outside of Portainer. Control over this stack is limited.\\n This stack is orphaned. You can reassociate it with the current environment using the \\\"Associate to this environment\\\" feature.\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    Stack details
    \\n
    \\n {{ stackName }}\\n\\n \\n \\n Start this stack\\n \\n\\n \\n \\n Stop this stack\\n \\n\\n \\n\\n \\n \\n Create template from stack\\n \\n\\n \\n \\n Detach from Git\\n Detachment in progress...\\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    Associate to this environment
    \\n

    This feature allows you to reassociate this stack to the current environment.

    \\n
    \\n \\n
    \\n
    \\n \\n \\n Associate\\n Association in progress...\\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n
    \\n
    \\n \\n\\n \\n \\n 0\\\"\\n endpoints=\\\"endpoints\\\"\\n groups=\\\"groups\\\"\\n current-endpoint-id=\\\"endpoint.Id\\\"\\n on-duplicate=\\\"duplicateStack(name, endpointId)\\\"\\n on-migrate=\\\"migrateStack(name, endpointId)\\\"\\n yaml-error=\\\"state.yamlError\\\"\\n >\\n \\n
    \\n
    \\n \\n \\n \\n Editor \\n
    \\n
    \\n \\n This stack will be deployed using the equivalent of docker-compose. Only Compose file format version 2 is supported at the moment.\\n \\n 2\\\">\\n This stack will be deployed using docker-compose.\\n \\n \\n You can get more information about Compose file format in the official documentation.\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    Webhooks
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n {{ formValues.WebhookURL | truncatelr }} \\n \\n \\n \\n \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n \\n \\n
    = 1.27\\\" authorization=\\\"PortainerStackUpdate\\\">\\n
    Options
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    Actions
    \\n
    \\n
    \\n \\n Update the stack\\n Deployment in progress...\\n \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n = 1.25\\\"\\n show-task-logs-button=\\\"applicationState.endpoint.apiVersion >= 1.30\\\"\\n show-add-action=\\\"false\\\"\\n show-stack-column=\\\"false\\\"\\n not-auto-focus=\\\"true\\\"\\n endpoint-public-url=\\\"endpoint.PublicURL\\\"\\n endpoint-id=\\\"endpoint.Id\\\"\\n >\\n
    \\n
    \\n\\n\\n\\n\\n\\n\";;\nvar path = 'app/portainer/views/stacks/edit/stack.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Stacks\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/stacks/stacks.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Tag management\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n

    This field is required.

    \\n

    This tag already exists.

    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Create tag\\n Creating tag...\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/tags/tags.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Teams > {{ team.Name }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    Name\\n {{ team.Name }}\\n
    Leaders{{ leaderCount }}
    Total users in team{{ teamMembers.length }}
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n Items per page:\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n
    \\n {{ user.Username }}\\n \\n Add\\n \\n
    Loading...
    No users.
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n Items per page:\\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n Name\\n \\n \\n \\n \\n \\n Team Role\\n \\n \\n \\n
    \\n {{ user.Username }}\\n \\n Remove\\n \\n \\n \\n \\n {{ user.TeamRole }}\\n \\n Leader\\n Member\\n \\n
    Loading...
    No team members.
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/teams/edit/team.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Teams management\\n\\n\\n\\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/teams/teams.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n Templates\\n\\n\\n
    \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n
    Information
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    Configuration
    \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n map additional port\\n \\n
    \\n
    0\\\">\\n Portainer will automatically assign a port if you leave the host port empty.\\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n host\\n \\n
    \\n \\n \\n \\n \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n map additional volume\\n \\n
    \\n
    0\\\">\\n Portainer will automatically create and map a local volume when using the auto option.\\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n container\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n \\n
    \\n
    \\n volume\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n host\\n \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add additional entry\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n add label\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n name\\n \\n
    \\n
    \\n value\\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n
    \\n \\n \\n
    Actions
    \\n
    \\n
    \\n \\n Deploy the container\\n Deployment in progress...\\n \\n \\n {{ state.formValidationError }}\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\\n
    \\n
    \\n = 1.25\\\"\\n >\\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/templates/templates.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n Users > {{ formValues.username }}\\n \\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n Update password\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/users/edit/user.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n \\n \\n \\n User management\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n \\n \\n You don't seem to have any teams to add users into. Head over to the Teams view to create some.\\n \\n 0\\\"\\n input-model=\\\"teams\\\"\\n output-model=\\\"formValues.Teams\\\"\\n button-label=\\\"Name\\\"\\n item-label=\\\"Name\\\"\\n tick-property=\\\"ticked\\\"\\n helper-elements=\\\"filter\\\"\\n search-property=\\\"Name\\\"\\n translation=\\\"{nothingSelected: 'Select one or more teams', search: 'Search...'}\\\"\\n style=\\\"margin-left: 20px\\\"\\n data-cy=\\\"user-teamSelect\\\"\\n >\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n Note: non-administrator users who aren't in a team don't have access to any environments by default. Head over to the\\n Environments view to manage their accesses.\\n \\n
    \\n
    \\n
    \\n
    \\n \\n Create user\\n Creating user...\\n \\n \\n {{ state.userCreationError }}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/users/users.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Connect \\n Connecting environment...\\n \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-aci/wizard-aci.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    CLI script for installing agent on your Linux environment with Docker Swarm
    {{ $ctrl.command.linuxCommand\\n }}
    \\n
    \\n\\n \\n
    CLI script for installing agent on your Windows environment with Docker Swarm
    {{ $ctrl.command.winCommand\\n }}
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    When using the socket, ensure that you have started the Portainer container with the following Docker flag on Linux{{ $ctrl.command.linuxSocket }}\\n \\n\\n \\n
    When using the socket, ensure that you have started the Portainer container with the following Docker flag on Windows{{ $ctrl.command.winSocket }}\\n \\n \\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Connect \\n Connecting environment...\\n \\n \\n Connect \\n Connecting environment...\\n \\n \\n Connect \\n Connecting environment...\\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-docker/wizard-docker.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n
    CLI script for installing agent on your endpoint
    {{ $ctrl.command.loadBalancer\\n }}
    \\n
    \\n\\n \\n
    CLI script for installing agent on your endpoint
    {{ $ctrl.command.nodePort\\n }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n\\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n Connect \\n Connecting environment...\\n \\n
    \\n
    \\n\\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-kubernetes/wizard-kubernetes.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n \\n
    \\n
    \\n
    {{ endpoint.Name }}
    \\n
    URL: {{ endpoint.URL | stripprotocol }}
    \\n
    Type: {{ endpoint.Type | endpointtypename }}
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-endpoint-list/wizard-endpoint-list.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Environment Wizard\\n\\n\\n
    \\n
    \\n
    \\n
    \\n \\n \\n \\n \\n \\n \\n\\n
    Connect to your {{ $ctrl.state.section }} environment
    \\n\\n
    \\n \\n \\n \\n
    \\n\\n
    \\n \\n {{ $ctrl.state.previousStep }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    Select your environment(s)
    \\n
    \\n You can onboard different types of environments, select all that apply.\\n
    \\n
    \\n \\n\\n \\n\\n \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-endpoints.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    {{ $ctrl.endpointTitle }}

    \\n
    {{ $ctrl.description }}
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-stepper/wizard-endpoint-type/wizard-endpoint-type.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    {{ $index + 1 }}
    \\n
    {{ selection.endpoint }}
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-endpoints/wizard-stepper/wizard-stepper.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n
    \\n

    {{ $ctrl.linkTitle }}

    \\n
    {{ $ctrl.description }}
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-link/wizard-link.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSCACert.name }}\\n \\n \\n \\n
    \\n
    \\n \\n\\n \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSCert.name }}\\n \\n \\n \\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n \\n \\n {{ $ctrl.formData.TLSKey.name }}\\n \\n \\n \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-tls/wizard-tls.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","var _module_exports = \"\\n \\n Environment Wizard\\n\\n\\n
    \\n
    \\n \\n \\n \\n
    \\n
    Welcome to Portainer
    \\n
    \\n \\n We have connected your local environment of {{ $ctrl.state.endpoint.connected }} to Portainer. \\n \\n We could not connect your local environment to Portainer.
    \\n Please ensure your environment is correctly exposed. For help with installation vist\\n https://documentation.portainer.io/quickstart
    \\n
    \\n Get started below with your local portainer or connect more container environments. \\n
    \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\";;\nvar path = 'app/portainer/views/wizard/wizard-view.html';\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","getResourceGroups","environmentId","subscriptionId","axios","buildUrl","params","value","data","parseAxiosError","azureErrorParser","resourceGroupName","url","getSubscriptions","axiosError","message","response","error","details","startContainer","endpointId","urlBuilder","transformResponse","genericHandler","stopContainer","restartContainer","killContainer","pauseContainer","resumeContainer","renameContainer","name","removeContainer","container","removeVolumes","Id","v","force","PortainerError","action","i18n","Backend","use","LanguageDetector","initReactI18next","init","debug","fallbackLng","interpolation","escapeValue","getFeatureDetails","featureId","limitedToBE","isLimitedToBE","BeIndicatorController","this","feature","BEFeatureIndicator","children","className","href","target","rel","beFeatureIndicatorAngular","templateUrl","require","controller","bindings","transclude","BoxSelectorItem","radioName","option","onChange","selectedValue","disabled","tooltip","tooltipId","clsx","business","limited","type","checked","htmlFor","icon","label","description","place","BoxSelector","options","role","buildOption","BoxSelectorAngular","template","formCtrl","BoxSelectorController","$scope","handleChange","bind","$evalAsync","$setValidity","BoxSelectorReact","react2angular","angular","component","Button","color","size","dataCy","onClick","title","sizeClass","ButtonGroup","LoadingButton","loadingText","isLoading","buttonProps","AddButton","Link","props","UISref","Breadcrumbs","breadcrumbs","crumb","index","Fragment","renderCrumb","length","link","to","linkParams","LicenseExpirationPanelContainer","useQuery","getLicenseInfo","info","useEffect","notifyError","useState","remainingDays","setRemainingDays","expiresAt","moment","diff","startOf","parseInfo","useRemainingDays","LicenseExpirationPanel","expirationMessage","days","expiringText","LicenseExpirationPanelAngular","r2a","autoNgTemplateLoaderTemplate1","Context","createContext","useHeaderContext","useContext","HeaderContainer","Provider","HeaderAngular","HeaderContent","user","useUser","styles","performApiLogout","HeaderContentAngular","requires","HeaderTitle","Username","HeaderTitleAngular","titleText","PageHeader","reload","router","useRouter","stateService","TextTip","Tooltip","position","multiline","effect","arrowColor","TooltipAngular","UsersSelector","users","inputId","placeholder","isMulti","getOptionLabel","getOptionValue","classNamePrefix","filter","includes","closeMenuOnSelect","selectedUsers","ColumnVisibilityMenu","columns","useTableContext","isExpanded","column","isVisible","Header","colId","visible","DefaultFilter","filterValue","setFilter","preFilteredRows","useMemo","Set","forEach","row","add","values","Array","from","MultipleSelectionFilter","filterKey","enabled","SearchBar","SearchBarContext","SearchBarProvider","storageKey","defaultValue","state","useLocalStorage","sessionStorage","useSearchBarContext","context","SelectedRowsCount","TableContainer","TableFooter","TableSettingsMenuAutoRefresh","isCheckVisible","setIsCheckVisible","isEnabled","Checkbox","Number","onTransitionEnd","style","marginTop","multiple","rows","columnIds","Table","TableActions","TableTitleActions","TableHeaderCell","headerProps","canSort","render","onSortClick","isSorted","isSortedDesc","canFilter","renderFilter","SortWrapper","TableSettingsMenu","quickActions","TableTitle","TableHeaderRow","headers","onSortChange","getHeaderProps","width","disableResizing","desc","toggleSortBy","disableFilters","TableRow","cells","cell","cellProps","getCellProps","key","useRepeater","refreshRate","onRefresh","intervalId","setIntervalId","stopRepeater","useCallback","clearInterval","startRepeater","setInterval","useRowSelect","hooks","getToggleRowSelectedProps","defaultGetToggleRowSelectedProps","getToggleAllRowsSelectedProps","defaultGetToggleAllRowsSelectedProps","getToggleAllPageRowsSelectedProps","defaultGetToggleAllPageRowsSelectedProps","stateReducers","push","reducer","useInstance","prepareRow","instance","manualRowSelectedKey","toggleRowSelected","cursor","original","isSelected","indeterminate","isSomeSelected","isRowSelectable","toggleAllRowsSelected","isAllRowsSelected","Boolean","selectedRowIds","toggleAllPageRowsSelected","isAllPageRowsSelected","page","some","_previousState","actions","initialState","setSelected","rowsById","nonGroupedRowsById","defaultIsRowSelectable","selectAll","rowId","selectSubRows","getSubRows","shouldExist","newSelectedRowIds","handleRowById","isGrouped","getHooks","plugins","autoResetSelectedRows","dispatch","ensurePluginOrder","selectedFlatRows","getRowIsSelected","getAutoResetSelectedRows","useGetLatest","useMountedLayoutEffect","getInstance","makePropGetter","assign","set","subRows","allChildrenSelected","someSelected","subRow","pluginName","TableSettingsContext","useTableSettings","getContextType","TableSettingsProvider","defaults","storage","setStorage","settings","setTableSettings","mutation","newTableSettings","Function","contextValue","forwardRef","ref","defaultRef","useRef","resolvedRef","current","FileUploadField","accept","required","fileRef","createRef","event","files","click","FileUploadFieldAngular","FormControl","errors","sizeClassLabel","sizeClassChildren","FormError","FormSectionTitle","Select","item","Input","Switch","SwitchField","labelClass","toggleName","SwitchFieldAngular","ItemsPerPageSelector","showAll","MAX_SAFE_INTEGER","calculatePageNumber","currentPage","paginationRange","totalPages","halfWay","Math","ceil","PageButton","active","onPageChange","PageSelector","totalCount","itemsPerPage","maxSize","directionLinks","boundaryLinks","pages","collectionLength","rowsPerPage","ellipsesNeeded","i","pageNumber","generatePagesArray","last","PaginationControls","pageLimit","onPageLimitChange","Loading","LoadingAngular","useWidgetContext","Widget","WidgetBody","loading","WidgetTitle","classes","baseUrl","arrayToJson","arr","JSON","stringify","getEndpoints","start","limit","types","tagIds","endpointIds","query","parseInt","snapshotEndpoint","deleteEndpoint","trustEndpoint","UserTrusted","endpoint","EnvironmentType","EnvironmentStatus","EnvironmentCreationTypes","PlatformType","msg","err","Edition","FeatureState","FeatureId","currentEdition","features","edition","selectShow","useDebounce","delay","debouncedValue","setDebouncedValue","timer","setTimeout","clearTimeout","keyBuilder","localStorage","get","setValue","getItem","parse","setItem","UserContext","useAuthorizations","authorizations","authorizationsArray","useCurrentStateAndParams","isAdmin","EndpointAuthorizations","userEndpointAuthorizations","authorization","Authorized","UserProvider","jwt","setUser","loadUser","jwtDecode","providerState","getUser","Role","BASE_URL","configureFDO","formValues","configureDevice","deviceId","deviceConfig","createProfile","method","profileFileContent","payload","getProfiles","profiles","getProfile","profileId","profile","deleteProfile","updateProfile","duplicateProfile","configureAMT","getAMTInfo","amtInformation","activateDevice","getDevices","devices","executeDeviceAction","deviceGUID","actionPayload","enableDeviceFeatures","featuresPayload","authorizationResponse","store","listeners","invalidated","getLicenses","attachLicense","licenseKeys","failedKeys","removeLicense","lastLoaded","abs","Date","now","listener","subscribe","unsubscribe","LicenseService","licenses","attach","remove","ResourceControlType","ResourceControlViewModel","resourceControl","Type","ResourceId","UserAccesses","TeamAccesses","Public","System","Ownership","RCO","ResourceControlOwnership","axiosOrigin","baseURL","agentInterceptor","config","newConfig","portainerAgentTargetHeader","portainerAgentManagerOperation","parseError","defaultErrorParser","resultErr","resultMsg","loadProgressBar","undefined","interceptors","request","localStorageGet","Authorization","agentTargetQueue","agentManagerOperation","agentTargetLastValue","registryAuthenticationHeader","registryAuthentication","setRegistryAuthenticationHeader","headerValue","lastValue","shift","setPortainerAgentTargetHeader","setPortainerAgentManagerOperation","resetAgentHeaders","HttpRequestHelperAngular","confirmWebEditorDiscard","buttons","confirm","Promise","callback","confirmed","confirmAsync","box","bootbox","confirmButtons","applyBoxCSS","confirmAccessControlUpdate","confirmImageForceRemoval","cancelRegistryRepositoryAction","confirmDeletion","sanitize","confirmDetachment","confirmDeassociate","confirmUpdate","confirmRedeploy","cancel","confirmDeletionAsync","confirmEndpointSnapshot","confirmImageExport","confirmChangePassword","promptAsync","prompt","result","inputType","inputOptions","confirmContainerDeletion","text","selectRegistry","confirmContainerRecreation","customizeCheckboxPrompt","confirmServiceForceUpdate","sanitizedMessage","confirmStackUpdate","defaultToggle","confirmButtonClass","confirmKubeconfigSelection","expiryMessage","toggleCheckbox","showCheck","find","prepend","checkbox","prop","addClass","css","top","height","success","toastr","warning","timeOut","fallbackText","pickErrorMsg","console","Notifications","val","closeButton","progressBar","tapToDismiss","queryClient","QueryClient","RootProvider","showReactQueryDevtools","setShowReactQueryDevtools","process","SHOW_REACT_QUERY_DEV_TOOLS","StrictMode","QueryClientProvider","client","ReactQueryDevtools","Component","propNames","fromEntries","Controller","$element","$q","el","$onChanges","args","toProps","ReactDOM","Suspense","fallback","$onDestroy","FileUploaderController","constructor","$async","uploadInProgress","onFileSelected","onFileSelectedAsync","file","uploadFile","titleIcon","dataset","tableKey","orderBy","reverseOrder","isRoot","goToParent","browse","rename","download","delete","isUploadAllowed","onFileSelectedForUpload","ROOT_PATH","HostBrowserController","HostBrowserService","FileSaver","ModalService","path","confirmDeleteFile","getRelativePath","getFilesForPath","getFilesForPathAsync","downloadFile","downloadFileAsync","renameFile","renameFileAsync","deleteFile","deleteFileAsync","onFileSelectedForUploadAsync","rootPathRegex","RegExp","replace","parentPath","folder","buildPath","ls","newName","filePath","newFilePath","fileName","downloadData","Blob","saveAs","$onInit","split","parent","lastIndexOf","upload","onFileUploaded","refreshList","NodeSelectorController","model","AgentService","agents","NodeName","VolumeBrowserController","volumeId","nodeName","isUploadEnabled","HttpRequestHelper","VolumeBrowserService","renameAsync","confirmDelete","downloadAsync","up","parentFolder","AgentViewModel","IPAddress","NodeRole","AgentFactory","$resource","API_ENDPOINT_ENDPOINTS","EndpointProvider","StateManager","endpointID","version","getAgentApiVersion","isArray","factory","BrowseFactory","browseGetResponse","responseType","AgentDockerhub","limits","HostFactory","AgentPingFactory","ping","interceptor","resource","responseError","status","reject","AgentServiceFactory","Agent","AgentVersion1","Host","async","agentVersion","getState","agentApiVersion","service","$promise","hostInfo","HostBrowserServiceFactory","Browse","Upload","newPath","CurrentFilePath","NewFilePath","Path","onProgress","then","AgentPingService","AgentPing","VolumeBrowserServiceFactory","BrowseVersion1","getBrowseService","volumeID","DimensionConfig","categories","setPortainerStatus","instanceID","setCustomDimension","PortainerInstanceID","PortainerVersion","setUserRole","PortainerUserRole","clearUserRole","deleteCustomDimension","setUserEndpointRole","PortainerEndpointUserRole","clearUserEndpointRole","dimensionId","toString","window","_paq","trackEvent","properties","metadata","dimensions","category","parsed","isNaN","metadataString","kebabCasedMetadata","entries","toLowerCase","$analyticsProvider","$windowProvider","$window","$get","pageTracking","trackRelativePath","api","setCustomVariable","varIndex","varName","scope","deleteCustomVariable","trackSiteSearch","keyword","searchCount","trackGoal","goalID","revenue","trackLink","linkType","registerSetUsername","username","registerPageTrack","document","registerEventTrack","registerExceptionTrack","stack","onStartupAngular","$rootScope","$state","$interval","LocalStorage","SystemService","cfpLoadingBar","$transitions","initialize","defaultTitle","originalSet","n","apply","arguments","onBefore","currentEndpoint","PortainerEndpointTypes","$","ajaxSend","jqXhr","jqOpts","hasNoContentType","contentType","setRequestHeader","getJWT","UsersField","TeamsSelector","teams","team","Name","String","selectedTeams","TeamsField","overrideTooltip","AccessControlForm","hideTitle","formNamespace","getTeams","isError","notifications","useTeams","isLoadingTeams","getUsers","useUsers","isLoadingUsers","useLoadState","setOptions","ownershipIcon","nonAdminOptions","useOptions","partialValues","accessControlEnabled","withNamespace","ownership","authorizedUsers","authorizedTeams","validationSchema","object","shape","bool","string","oneOf","when","is","schema","array","number","test","ButtonSelector","OptionItem","selected","useInputGroupContext","InputGroup","Addon","ButtonWrapper","InputList","itemBuilder","defaultItemBuilder","DefaultItem","addLabel","itemKeyGetter","movable","Item","newItem","handleChangeItem","handleMove","handleMoveUp","handleMoveDown","handleRemoveItem","checkValidIndex","slice","targetIndex","arrayMove","fromIndex","newItemValue","newItems","I","PortsMappingField","host","protocol","margin","parseViewModel","namespace","resourceTypes","resourceType","locations","AccessControlFormData","parseFromResourceControl","resourceControlOwnership","formData","accessControl","getSubscriptionResourceGroups","resourceGroups","getSubscriptionLocations","containerInstanceProviders","provider","location","transformToPayload","containerGroupName","containerPorts","addressPorts","ports","p","binding","port","osType","os","containers","image","resources","requests","cpu","memoryInGB","memory","ipAddress","allocatePublicIP","parseOwnershipParameters","userId","subResources","adminOnly","publicOnly","administratorsOnly","public","applyResourceControl","accessControlData","ownershipParameters","updateResourceControl","resourceControlId","CreateContainerInstanceForm","isUserAdmin","subscriptions","useSubscriptions","isLoadingSubscriptions","queries","useQueries","subscription","queryKey","queryFn","failedQuery","q","useResourceGroups","isLoadingResourceGroups","getContainerInstanceProvider","providers","useProviders","isLoadingProviders","subscriptionOptions","s","displayName","initSubscriptionId","getFirstValue","subscriptionResourceGroups","initialValues","resourceGroup","useLoadFormState","mutateAsync","useQueryClient","useMutation","r","createContainerGroup","onSuccess","containerGroup","Portainer","ResourceControl","invalidateQueries","useCreateInstance","positive","boolean","min","accessControlSchema","onSubmit","validateOnMount","validateOnChange","enableReinitialize","handleSubmit","isSubmitting","isValid","setFieldValue","noValidate","as","go","CreateContainerInstanceViewAngular","containerInstancesModule","autoNgTemplateLoaderTemplate2","$stateRegistryProvider","containerInstances","views","dashboard","register","abstract","onEnter","setEndpointID","setEndpointPublicURL","PublicURL","setOfflineModeFromStatus","Status","updateEndpointState","applicationId","tenantId","authenticationKey","removeAction","ContainerGroupDefaultModel","Location","OSType","Image","AllocatePublicIP","Ports","CPU","Memory","AccessControlData","ContainerGroupViewModel","ip","LocationViewModel","SubscriptionId","DisplayName","ResourceGroupViewModel","SubscriptionViewModel","$http","apiVersion","base","withResourceGroup","create","providerNamespace","AzureService","Azure","ContainerGroupService","retrieveResourcesForEachSubscription","resourceQuery","deferred","defer","resourceQueries","all","catch","promise","deleteContainerGroup","containerGroups","aggregate","resourcesBySubscription","aggregatedResources","concat","ContainerGroup","ResourceGroup","group","Subscription","ContainerInstanceDetailsController","ResourceGroupService","SubscriptionService","resourceGroupId","containerGroupId","match","parseId","deleteAction","selectedItems","actionCount","indexOf","splice","finally","configApp","$urlRouterProvider","$httpProvider","localStorageServiceProvider","jwtOptionsProvider","$uibTooltipProvider","$compileProvider","cfpLoadingBarProvider","setPrefix","tokenGetter","post","put","patch","Terminal","fit","setTriggers","mouseenter","focus","outsideClick","includeSpinner","parentSelector","latencyThreshold","otherwise","API_ENDPOINT_AUTH","API_ENDPOINT_BACKUP","API_ENDPOINT_CUSTOM_TEMPLATES","API_ENDPOINT_EDGE_GROUPS","API_ENDPOINT_EDGE_JOBS","API_ENDPOINT_EDGE_STACKS","API_ENDPOINT_EDGE_TEMPLATES","API_ENDPOINT_ENDPOINT_GROUPS","API_ENDPOINT_KUBERNETES","API_ENDPOINT_MOTD","API_ENDPOINT_REGISTRIES","API_ENDPOINT_RESOURCE_CONTROLS","API_ENDPOINT_SETTINGS","API_ENDPOINT_STACKS","API_ENDPOINT_STATUS","API_ENDPOINT_SUPPORT","API_ENDPOINT_USERS","API_ENDPOINT_TAGS","API_ENDPOINT_TEAMS","API_ENDPOINT_TEAM_MEMBERSHIPS","API_ENDPOINT_TEMPLATES","API_ENDPOINT_WEBHOOKS","DEFAULT_TEMPLATES_URL","PAGINATION_MAX_ITEMS","APPLICATION_CACHE_VALIDITY","CONSOLE_COMMANDS_LABEL_PREFIX","PREDEFINED_NETWORKS","PORTAINER_FADEOUT","STACK_NAME_VALIDATION_REGEX","TEMPLATE_NAME_VALIDATION_REGEX","NEW_LINE_BREAKER","navigator","userAgent","constant","EnvironmentContext","useEnvironment","EnvironmentProvider","environment","QuickActionsSettings","hiddenQuickActions","buildAction","ContainersDatatableActions","isAddActionVisible","selectedItemCount","hasPausedItemsSelected","hasStoppedItemsSelected","hasRunningItemsSelected","isAuthorized","executeActionOnContainerList","onStartClick","onStopClick","onKillClick","onRestartClick","onPauseClick","onResumeClick","isOneContainerRunning","cleanVolumes","removeSelectedContainers","onRemoveClick","successMessage","errorMessage","Names","ContainersDatatableSettings","isRefreshVisible","truncateContainerName","autoRefreshRate","created","accessor","Cell","isoDateFromTimestamp","canHide","Filter","sortType","imageName","offlineMode","shortImageName","substring","trimSHASum","linkProps","useSref","IP","truncate","shortName","publicUrl","disableSortBy","ContainerQuickActions","taskId","containerId","TaskQuickActions","isActive","showQuickActionLogs","showQuickActionInspect","showQuickActionStats","showQuickActionExec","showQuickActionAttach","ContainerQuickActionsAngular","wrapperState","someOn","StackName","statusNormalized","hasHealthCheck","statusClassName","includeString","getClassName","interactive","ContainersDatatable","isHostColumnVisible","searchBarValue","setSearchBarValue","useTable","defaultCanFilter","filterTypes","pageSize","hiddenColumns","sortBy","globalFilter","IsPortainer","selectCheckboxComponent","useFilters","useGlobalFilter","useSortBy","usePagination","useRowSelectColumn","getTableProps","getTableBodyProps","headerGroups","allColumns","gotoPage","setPageSize","setHiddenColumns","toggleHideColumn","setGlobalFilter","pageIndex","debouncedSearchValue","columnsToHide","colInstance","columnDef","c","tableProps","tbodyProps","headerGroup","getHeaderGroupProps","handleSortChange","getRowProps","colSpan","ContainersDatatableAngular","componentsModule","autoNgTemplateLoaderTemplate3","autoNgTemplateLoaderTemplate4","autoNgTemplateLoaderTemplate5","autoNgTemplateLoaderTemplate6","autoNgTemplateLoaderTemplate7","autoNgTemplateLoaderTemplate8","autoNgTemplateLoaderTemplate9","autoNgTemplateLoaderTemplate10","autoNgTemplateLoaderTemplate11","autoNgTemplateLoaderTemplate12","autoNgTemplateLoaderTemplate13","autoNgTemplateLoaderTemplate14","autoNgTemplateLoaderTemplate15","autoNgTemplateLoaderTemplate16","autoNgTemplateLoaderTemplate17","autoNgTemplateLoaderTemplate18","autoNgTemplateLoaderTemplate19","autoNgTemplateLoaderTemplate20","autoNgTemplateLoaderTemplate21","autoNgTemplateLoaderTemplate22","autoNgTemplateLoaderTemplate23","autoNgTemplateLoaderTemplate24","autoNgTemplateLoaderTemplate25","autoNgTemplateLoaderTemplate26","autoNgTemplateLoaderTemplate27","autoNgTemplateLoaderTemplate28","autoNgTemplateLoaderTemplate29","autoNgTemplateLoaderTemplate30","autoNgTemplateLoaderTemplate31","autoNgTemplateLoaderTemplate32","autoNgTemplateLoaderTemplate33","autoNgTemplateLoaderTemplate34","autoNgTemplateLoaderTemplate35","autoNgTemplateLoaderTemplate36","autoNgTemplateLoaderTemplate37","autoNgTemplateLoaderTemplate38","autoNgTemplateLoaderTemplate39","containersModule","docker","EndpointService","checkEndpointStatus","updateEndpoint","updateEndpointStatus","Snapshots","Swarm","configs","controllerAs","configCreation","containerAttachConsole","containerExecConsole","containerCreation","containerInspect","containerLogs","containerStats","events","images","imageBuild","imageImport","networks","network","networkCreation","secrets","secret","secretCreation","services","serviceCreation","serviceLogs","stacks","stackCreation","swarm","swarmVisualizer","task","taskLogs","templates","volumes","volume","volumeBrowse","volumeCreation","fileContent","capabilities","ctrl","editModel","save","maximumRetryCount","updateRestartPolicy","agentCount","refreshCallback","availableNetworks","joinNetworkAction","joinNetworkActionInProgress","leaveNetworkActionInProgress","leaveNetworkAction","$controller","DatatableService","extend","expandedItems","expandAll","expandItem","expanded","itemCanExpand","Expanded","Highlighted","GlobalIPv6Address","hasExpandableItems","setDefaults","prepareTableFromDataset","storedOrder","getDataTableOrder","reverse","textFilter","getDataTableTextFilters","onTextFilterChange","storedFilters","getDataTableFilters","filters","open","storedSettings","getDataTableSettings","headerset","showHostColumn","downloadAction","forceRemoveAction","exportInProgress","showUsedImages","showUnusedImages","applyFilters","ContainerCount","onstateFilterChange","filtered","setDataTableFilters","onSettingsRepeaterChange","showIpAddressColumn","accessToNodeDetails","directive","restrict","parentCtrl","allowCheckbox","allowExpand","NetworkHelper","disableRemove","isSystemNetwork","allowSelection","Subs","filteredDataSet","serviceId","nodes","agentProxy","showTaskLogsButton","showQuickActionConsole","State","display","onStateFilterChange","availableStateFilters","showUpdateAction","showAddAction","ServiceService","ServiceHelper","WebhookService","scaleAction","serviceToConfig","Model","Mode","Replicated","Replicas","update","Scale","ReplicaCount","webhooks","deleteWebhook","updateAction","pullImage","forceUpdateService","forceUpdateServices","showStackColumn","notAutoFocus","endpointPublicUrl","expandPreviouslyExpandedItem","storedExpandedItems","storedId","columnVisibility","updated","onColumnVisibilityChange","setColumnVisibilitySettings","setDataTableExpandedItems","expandItems","expandedItemCount","onDataRefresh","getDataTableExpandedItems","storedColumnVisibility","getColumnVisibilitySettings","showSlotColumn","showLogsButton","showBrowseAction","showUsedVolumes","showUnusedVolumes","dangling","isSidebarOpen","endpointApiVersion","swarmManagement","standaloneManagement","adminAccess","currentRouteName","showStacks","hostDetails","engineDetails","disks","isAgent","refreshUrl","browseUrl","hostFeaturesEnabled","engine","isBrowseEnabled","onSave","availability","originalValue","removeLabel","labels","onChangedLabels","updateLabel","originalKey","NodeService","LabelHelper","managerAddress","hasChanges","nodeLabels","updateNodeLabels","updateNodeAvailability","saveChanges","originalNode","Availability","Labels","fromKeyValueToLabelHash","Version","updateNode","cancelChanges","porImageRegistryContainerController","DockerHubService","pullRateLimits","registryId","fetchRateLimits","EndpointHelper","checkRateLimits","setValidity","remaining","isDockerHubRegistry","isAuthenticated","rateLimitExceeded","porImageRegistryController","ImageHelper","RegistryService","ImageService","onRegistryChange","onImageChange","registries","defaultRegistry","DockerHubViewModel","$watch","Registry","isKnownRegistry","registry","URL","getRegistryURL","RegistryTypes","Gitlab","ProjectPath","prepareAutocomplete","registryImages","reg","imagesWithoutKnown","imageContainsURL","availableImages","UseRegistry","displayedRegistryURL","showDefaultRegistry","sort","a","b","localeCompare","autoComplete","getUniqueTagListFromImages","reloadRegistries","loadImages","pullWarning","inputClass","form","displayTimestamps","logCollectionChange","sinceTimestamp","lineCount","resourceName","clipboard","availableSinceDatetime","subtract","format","copySupported","supported","logCollection","autoScroll","wrapLines","search","filteredLogs","selectedLines","copy","copyText","log","line","join","show","fadeOut","copySelection","clearSelection","selectLine","idx","downloadLogs","acc","applicationState","NetworkService","Authentication","requiredNodeSelection","Scope","DatatableState","requiredConfigSelection","SelectedNetworkConfig","mode","ConfigOnly","MacvlanFormData","ParentNetworkCard","VolumesCIFSFormData","useCIFS","serverAddress","share","versions","versionsNumber","password","VolumesNFSFormData","useNFS","mountPoint","str","hash","charCodeAt","strToHash","hashToHexColor","labelStyle","Dead","Ghost","Running","Paused","RepoTags","command","ConstraintsHelper","availableNodes","node","matchesServiceConstraints","tasks","runningTasks","DesiredState","totalImageSize","VirtualSize","nodeId","Hostname","createdBy","fullName","versionIdx","flattenConfig","ConfigID","ConfigName","FileName","File","Uid","UID","Gid","GID","configConfig","ConstraintModel","op","patterns","matchesConstraint","constraint","matchesLabel","extractValue","pop","trim","extractCustomLabelKey","baseLabelKey","transformConstraints","constraints","transform","nodeHostname","nodeRole","engineLabels","Constraints","EngineLabels","portPattern","parsePort","parsePortRange","portRange","stringPorts","intPorts","isValidPortRange","createPortRange","portRangeText","hostIp","colonIndex","substr","startPort","endPort","max","helper","splitargs","elem","Config","HostConfig","NetworkMode","NetworkingConfig","EndpointsConfig","NetworkSettings","Networks","ExposedPorts","binds","Mounts","hasOwnProperty","call","mount","Source","containerPath","Destination","RW","Binds","Volumes","portBindings","portBinding","containerPort","hostPort","containerPortRange","startHostPort","endHostPort","hostAndPort","hostPortRange","bindKey","HostIp","HostPort","portBindingKeys","portBindingKeysByProtocol","portKey","portBindingKeysByHostIp","sortedPortBindingKeys","previousHostPort","previousContainerPort","portKeySplit","bindingHostPort","buildImageFullURI","imageModel","ensureTag","slash","startsWith","buildImageURIForGitLab","Quay","UseOrganisation","OrganisationName","buildImageURIForQuay","buildImageURIForOtherRegistry","buildImageFullURIWithRegistry","defaultTag","isValidTag","tag","createImageConfigForContainer","fromImage","getImagesNamesForDownload","names","removeDigestFromRepository","repository","NodeID","ControlAvailable","fromLabelHashToKeyValue","added","labelKV","FOREGROUND_COLORS_BY_ANSI","black","x256","red","green","yellow","blue","magenta","cyan","white","brightBlack","brightRed","brightGreen","brightYellow","brightBlue","brightMagenta","brightCyan","brightWhite","BACKGROUND_COLORS_BY_ANSI","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","bgBrightBlack","bgBrightRed","bgBrightGreen","bgBrightYellow","bgBrightBlue","bgBrightMagenta","bgBrightCyan","bgBrightWhite","stripEscapeCodes","logs","cssColorFromRgb","rgb","g","extendedColorForToken","token","colorMode","formatLogs","skipHeaders","stripHeaders","tokens","tokenize","formattedLogs","foregroundColor","backgroundColor","spans","tokenLines","DockerNetworkHelper","Subnet","getIPV4Configs","nodeToConfig","Spec","flattenSecret","SecretID","SecretName","secretConfig","Tasks","otherServicesTasks","ServiceId","ServiceName","TaskTemplate","UpdateConfig","EndpointSpec","keyValuePreferences","preferences","preference","strategy","Spread","SpreadDescriptor","keyValueConstraints","operator","operatorIndices","indexEquals","getOperator","humanDuration","nanos","matches","duration","unit","asMilliseconds","conversionFromNano","logOptions","keyValueLogDriverOpts","ipHostEntries","entry","keyValue","hostname","ContainerId","Container","optionArray","mounts","j","rejection","SnapshotRaw","Containers","Images","Info","ConfigViewModel","ID","CreatedAt","UpdatedAt","Index","Data","decodeURIComponent","atob","b64DecodeUnicode","createStatus","statusText","ContainerViewModel","Created","ImageID","Command","Checked","PublicPort","private","PrivatePort","ContainerStatsViewModel","read","preread","memory_stats","privateworkingset","MemoryUsage","MemoryCache","NumProcs","num_procs","isWindows","stats","usage","cache","PreviousCPUTotalUsage","precpu_stats","cpu_usage","total_usage","PreviousCPUSystemUsage","system_cpu_usage","CurrentCPUTotalUsage","cpu_stats","CurrentCPUSystemUsage","CPUCores","percpu_usage","online_cpus","blkio_stats","io_service_bytes_recursive","readData","d","BytesRead","writeData","BytesWrite","noIOdata","ContainerDetailsViewModel","Args","capDesc","SETPCAP","MKNOD","AUDIT_WRITE","CHOWN","NET_RAW","DAC_OVERRIDE","FOWNER","FSETID","KILL","SETGID","SETUID","NET_BIND_SERVICE","SYS_CHROOT","SETFCAP","SYS_MODULE","SYS_RAWIO","SYS_PACCT","SYS_ADMIN","SYS_NICE","SYS_RESOURCE","SYS_TIME","SYS_TTY_CONFIG","AUDIT_CONTROL","MAC_ADMIN","MAC_OVERRIDE","NET_ADMIN","SYSLOG","DAC_READ_SEARCH","LINUX_IMMUTABLE","NET_BROADCAST","IPC_LOCK","IPC_OWNER","SYS_PTRACE","SYS_BOOT","LEASE","WAKE_ALARM","BLOCK_SUSPEND","ContainerCapabilities","ContainerCapability","capability","cap","allowed","EventViewModel","Time","time","Details","eventAttr","Actor","Attributes","Action","extra","hasColon","exitCode","createEventDetails","ImageViewModel","Tag","Repository","RepoDigests","digest","ImageBuildModel","hasError","buildLogs","stream","errorDetail","ImageDetailsViewModel","Parent","DockerVersion","Os","Architecture","Author","Cmd","Entrypoint","ContainerConfig","Env","ImageLayerViewModel","order","Order","CreatedBy","Size","Comment","Tags","NetworkViewModel","Driver","Attachable","Internal","IPAM","Options","Ingress","ConfigFrom","NodeViewModel","Description","Engine","PlatformArchitecture","Platform","PlatformOS","OS","CPUs","Resources","NanoCPUs","MemoryBytes","EngineVersion","Plugins","Addr","ManagerStatus","Leader","Reachability","ManagerAddr","PluginViewModel","Enabled","PorImageRegistryModel","SecretViewModel","ServiceViewModel","allTasks","ContainerSpec","Limits","LimitNanoCPUs","LimitMemoryBytes","Reservations","ReservationNanoCPUs","ReservationMemoryBytes","RestartPolicy","RestartCondition","Condition","RestartDelay","Delay","RestartMaxAttempts","MaxAttempts","RestartWindow","Window","LogDriver","LogDriverName","LogDriverOpts","Placement","Preferences","Platforms","containerSpec","ContainerLabels","Arguments","Dir","User","Groups","TTY","OpenStdin","ReadOnly","StopSignal","StopGracePeriod","HealthCheck","Hosts","DNSConfig","Secrets","Configs","Endpoint","Runtime","VirtualIPs","UpdateParallelism","Parallelism","UpdateDelay","UpdateFailureAction","FailureAction","UpdateOrder","RollbackConfig","EditName","SwarmViewModel","TaskViewModel","Updated","Slot","ServiceID","NodeId","ContainerStatus","ContainerID","VolumeViewModel","Mountpoint","ResourceID","buildImage","ignoreLoadingBar","jsonObjectsToArrayHandler","buildImageOverride","commitContainer","repo","ContainersInterceptor","logsHandler","exec","inspect","prune","resize","h","w","ImagesInterceptor","history","insert","imageGetResponse","deleteImageHandler","NetworksInterceptor","connect","disconnect","isJSON","jsonString","fromJson","prototype","json","rollback","InfoInterceptor","VersionInterceptor","since","until","auth","dataUsage","subAction","VolumesInterceptor","Build","FileUploadService","t","remote","dockerfile","content","configId","ContainerServiceFactory","LogHelper","$timeout","withEndpointId","updateLimits","MemoryReservation","MemorySwap","NanoCpus","timeout","restartPolicy","maximumRetryCounts","MaximumRetryCount","configuration","createContainer","execConfig","stdout","stderr","timestamps","tail","parameters","func","Exec","execId","ContainerService","imageId","withUsage","layers","imageLayer","registryModel","authenticationDetails","encodedCredentials","imageConfiguration","ignoreErrors","pullImageAndIgnoreErrors","detail","pullImageAndAcknowledgeErrors","forceRemoval","Network","networkConfiguration","localNetworks","swarmNetworks","swarmAttachableNetworks","filteredNetworks","networkId","Force","aliases","EndpointConfig","Aliases","Node","rawNode","Plugin","servicePlugins","systemOnly","pluginType","pluginVersion","system","aggregatedPlugins","systemPlugins","plugin","Interface","Types","volumePlugins","networkPlugins","loggingPlugins","Secret","secretId","Service","TaskService","ResourceControlService","serv","SystemEndpoint","Task","Volume","VolumeHelper","driver","driverOptions","DriverOpts","createDriverOptions","volumeConfiguration","volumeConfigurations","createVolumeQueries","createVolume","x","ConfigsController","ConfigService","removeActionAsync","getConfigs","getConfigsAsync","CreateConfigController","$transition$","FormValidator","ConfigContent","formValidationError","isEditorDirty","editorUpdate","createAsync","onbeforeunload","displayCodeEditor","labelName","labelValue","prepareLabelsConfig","prepareConfigData","configData","btoa","unescape","encodeURIComponent","prepareConfiguration","validateForm","validateAccessControl","userDetails","getUserDetails","cm","getValue","removeConfig","ContainerHelper","ExecService","socket","term","states","freeze","disconnected","connecting","connected","restcall","termWidth","cols","initTerm","resizeRestCall","resizefun","WebSocket","onopen","on","send","terminal_container","getElementById","setOption","onresize","$apply","onmessage","write","onerror","onclose","loaded","containerCommands","$on","connectAttach","attachId","origin","baseHref","k","resizeTTY","connectExec","isCustomCommand","customCommand","AttachStdin","AttachStdout","AttachStderr","Tty","commandStringToArray","createExec","close","dispose","autoconnectAttachView","initView","containerLabels","imageOS","ContainersController","getContainers","$filter","PluginService","prepareResources","MemoryLimit","memoryLimit","round","toFixed","memoryReservation","CpuLimit","oldContainer","findCurrentContainer","actionInProgress","alwaysPull","RegistryModel","stopAndRenameContainer","createNewContainer","createContainerWebhook","connectToExtraNetworks","removeOldContainer","onCreationProcessFail","EnableWebhook","registryID","createWebhook","restoreOldContainerName","restoreError","stopContainerIfNeeded","CmdMode","prepareCmd","EntrypointMode","prepareEntrypoint","NetworkContainer","containerName","networkMode","MacAddress","IPAMConfig","IPv4Address","IPv4","IPv6Address","IPv6","fromContainer","dnsServers","DnsPrimary","DnsSecondary","Dns","ExtraHosts","prepareNetworkConfig","imageConfig","prepareImageConfig","preparePortBindings","PortBindings","_","Console","openStdin","tty","prepareConsole","envVarsUtils","prepareEnvironmentVariables","readOnly","prepareVolumes","prepareLabels","Devices","pathOnHost","pathInContainer","PathOnHost","PathInContainer","CgroupPermissions","prepareDevices","logOpts","LogConfig","opt","prepareLogDriver","notAllowed","getCapName","CapAdd","CapDrop","prepareCapabilities","sysctls","Sysctls","sysctl","prepareSysctls","createAndStartContainer","newContainer","newContainerId","extraNetworks","connectionPromises","networkName","connectContainer","checkIfAdminOrEndpointAdmin","hasAuthorizations","settingUnlimitedResources","pullImageValidity","handleEnvVarChange","refreshSlider","$broadcast","onImageNameChange","setPullImageValidity","validity","PublishAllPorts","AutoRemove","Privileged","Init","addVolume","removeVolume","addPortBinding","removePortBinding","addExtraHost","removeExtraHost","addDevice","removeDevice","addSysctl","removeSysctl","addLogDriverOpt","removeLogDriverOpt","fromContainerMultipleNetworks","resetNetworkConfig","handleResourceChange","showDeviceMapping","SecuritySettings","allowDeviceMappingForRegularUsers","areContainerCapabilitiesEnabled","allowContainerCapabilitiesForRegularUsers","availableVolumes","vol1","vol2","runningContainers","logConfig","AccessControlEnabled","configFromContainer","commandArrayToString","sortAndCombinePorts","loadFromContainerPortBindings","loadFromContainerVolumes","netContainer","firstNetwork","extraHosts","loadFromContainerNetworkConfig","l","loadFromContainerLabels","dev","device","loadFromContainerDevices","retrievePorRegistryModelFromRepository","loadFromContainerResources","hasCapability","loadFromContainerCapabilities","loadFromContainerSysctls","availableRuntimes","Runtimes","sliderMaxCpu","NCPU","sliderMaxMemory","MemTotal","floor","allowBindMounts","allowBindMountsForRegularUsers","allowPrivilegedMode","allowPrivilegedModeForRegularUsers","allowSysctl","AllowSysctlSettingForRegularUsers","loggingDrivers","availableLoggingDrivers","Commit","WebhookHelper","activityTime","displayRecreateButton","displayWebhookButton","WebhookExists","WebhookURL","WebhookID","commitInProgress","recreateContainerInProgress","joinNetworkInProgress","leaveNetworkInProgress","disabledWebhookButton","webhookExists","updateWebhook","recreate","copyWebhook","returnWebhookUrl","Token","edit","newContainerName","StartedAt","utc","humanize","FinishedAt","portMapping","mapping","inSwarm","autoRemove","admin","allowHostNamespaceForRegularUsers","allowSysctlSettingForRegularUsers","settingRestrictsRegularUsers","webhook","executeContainerAction","commitContainerAsync","stop","kill","pause","unpause","restart","containerLeaveNetwork","disconnectContainer","containerJoinNetwork","commit","confirmRemove","cleanAssociatedVolumes","isRunning","networksNames","createContainerData","oldResourceControl","newResourceControl","duplicateResourceControl","recreateContainer","DisplayTextView","containerInfo","repeater","isDefined","setUpdateRepeater","unix","changeLogCollection","logCollectionStatus","$document","ChartService","updateNetworkChart","chart","rx","rx_bytes","tx","tx_bytes","UpdateNetworkChart","updateMemoryChart","UpdateMemoryChart","updateIOChart","noIOData","UpdateIOChart","updateCPUChart","possIntervals","parseFloat","valueOf","windowsCpuUsage","calculateCPUPercentWindows","cpuPercent","cpuDelta","systemDelta","calculateCPUPercentUnix","UpdateCPUChart","networkChart","cpuChart","memoryChart","ioChart","containerTop","processInfo","networkStatsUnavailable","ioStatsUnavailable","changeUpdateRepeater","ready","networkChartCtx","CreateNetworkChart","cpuChartCtx","CreateCPUChart","memoryChartCtx","CreateMemoryChart","ioChartCtx","CreateIOChart","startChartUpdate","initCharts","VolumeService","StackService","TagService","dismissInformationPanel","endpointMode","allowStackManagementForRegularUsers","shouldShowStacks","tags","volumeCount","networkCount","serviceCount","stackCount","endpointTags","TagIds","isOfflineEndpoint","DockerFeaturesConfigurationController","$analytics","limitedFeature","enableHostManagementFeatures","allowVolumeBrowserForRegularUsers","disableBindMountsForRegularUsers","disablePrivilegedModeForRegularUsers","disableHostNamespaceForRegularUsers","disableStackManagementForRegularUsers","disableDeviceMappingForRegularUsers","disableContainerCapabilitiesForRegularUsers","disableSysctlSettingForRegularUsers","autoUpdateSettings","timeZone","onChangeField","onToggleAutoUpdate","onChangeEnableHostManagementFeatures","onChangeAllowVolumeBrowserForRegularUsers","onChangeDisableBindMountsForRegularUsers","onChangeDisablePrivilegedModeForRegularUsers","onChangeDisableHostNamespaceForRegularUsers","onChangeDisableStackManagementForRegularUsers","onChangeDisableDeviceMappingForRegularUsers","onChangeDisableContainerCapabilitiesForRegularUsers","onChangeDisableSysctlSettingForRegularUsers","field","isContainerEditDisabled","securitySettings","changeWindow","updateSettings","ChangeWindow","eventTrack","StartTime","EndTime","checkAgent","jobs","versionDetails","releaseVersion","ApiVersion","rootDirectory","DockerRootDir","storageDriver","loggingDriver","LoggingDriver","buildEngineDetails","arch","OperatingSystem","kernelVersion","KernelVersion","totalCPU","totalMemory","agentHostInfo","PCIDevices","PhysicalDisks","BuildImageController","BuildService","BuildType","activeTab","ImageNames","UploadFile","DockerFileContent","addImageName","removeImageName","imageNames","buildType","dockerfilePath","buildImageFromUpload","buildImageFromURL","dockerfileContent","buildImageFromDockerfileContent","buildImageBasedOnBuildType","validImageNames","uiCanExit","RegistryModalService","sortReverse","toggleLayerCommand","layerId","toggleClass","toggle","tagImage","pushTag","registryModal","pushImage","hide","pullTag","removeTag","deleteImage","removeImage","exportImage","downloadImages","loadRegistriesForDropdown","getImages","pullRateValid","confirmRemovalAction","isAuthorizedToDownload","uploadImage","imageIds","checkAuxiliaryAddress","excludedIP","gateway","prepareAuxiliaryAddresses","ipamConfig","ipFormValues","AuxiliaryAddresses","auxAddress","createNetwork","managerOperation","DriverOptions","IPV4","Gateway","IPRange","IPV6","Macvlan","availableNetworkDrivers","CheckDuplicate","EnableIPv6","addDriverOption","removeDriverOption","addIPV4AuxAddress","addIPV6AuxAddress","removeIPV4AuxAddress","IPV4AuxiliaryAddressesError","removeIPV6AuxAddress","IPV6AuxiliaryAddressesError","checkIPV4AuxiliaryAddress","checkIPV6AuxiliaryAddress","validIPV4","validIPV6","prepareIPAMConfiguration","prepareDriverOptions","creationContext","selectedNetworkConfig","modifyNetworkConfigurationForMacvlanConfigFrom","selectedNodes","filterContainersInNetwork","containersInNetwork","containerInNetwork","removeNetwork","allowRemove","IPV4Configs","IPV6Configs","getNetworks","nonSwarmNetworks","grouped","sorted","agent","getRole","groupSwarmNetworksManagerNodesFirst","$stateParams","transformPlugins","pluginsList","fetchJobs","buildHostDetails","nodeDetails","buildNodeDetails","DockerRegistryAccessController","GroupService","RoleService","updateAccess","filterUsers","updateRegistryAccess","registryEndpointAccesses","endpointUsers","UserAccessPolicies","endpointTeams","TeamAccessPolicies","endpointGroupUsers","endpointGroup","endpointGroupTeams","userOrTeam","userAccess","UserAccessViewModel","teamAccess","TeamAccessViewModel","entityAccess","roleId","RoleId","roles","isStandardRole","Authorizations","redirectIfUnauthorized","viewReady","RegistryAccesses","GroupId","SecretService","encodeSecret","secretConfiguration","prepareSecretData","removeSecret","getSecrets","ConfigHelper","SecretHelper","commandToArray","cmd","EntryPoint","WorkingDir","ExtraNetworks","HostsEntries","PlacementConstraints","PlacementPreferences","CpuReservation","MemoryLimitUnit","MemoryReservationUnit","Webhook","PublishedPort","TargetPort","Protocol","PublishMode","addExtraNetwork","removeExtraNetwork","addHostsEntry","removeHostsEntry","Target","addConfig","checkIfConfigDuplicated","addSecret","overrideTarget","checkIfSecretDuplicated","addPlacementConstraint","removePlacementConstraint","addPlacementPreference","removePlacementPreference","addContainerLabel","removeContainerLabel","$invalid","$error","volumesAreValid","every","input","rcPromise","webhookPromise","createNewService","Global","prepareSchedulingConfig","preparePortsConfig","prepareCommandConfig","prepareEnvConfig","volumeObject","readonly","VolumeOptions","DriverConfig","prepareNetworks","hostsEntries","host_ip","keyVal","prepareHostsEntries","translateHumanDurationToNanos","prepareUpdateConfig","prepareConfigConfig","prepareSecretConfig","translateKeyValueToPlacementConstraints","translateKeyValueToPlacementPreferences","preparePlacementConfig","prepareResourcesCpuConfig","prepareResourcesMemoryConfig","prepareRestartPolicy","prepareLogDriverConfig","checkIfAllowedBindMounts","availableSecrets","availableConfigs","maxCpus","maxMemory","initSlidersMaxValuesBasedOnNodeData","$location","$anchorScroll","TaskHelper","updateInProgress","deletionInProgress","rollbackInProgress","lastVersion","originalService","previousServiceValues","buildChanges","ServiceLabels","EnvironmentVariables","ServiceContainerLabels","Editable","ServiceSecrets","ServiceConfigs","translateHostnameIPToHostsEntries","ServiceMounts","ServiceConstraints","ServicePreferences","translateKeyValueToLogDriverOpts","isUpdating","transformResources","v1","v2","translateLogDriverOptsToKeyValue","translateConstraintsToKeyValue","translatePreferencesToKeyValue","translateHostsEntriesToHostnameIP","translateServiceArrays","translateNanosToHumanDuration","transformDurations","serviceNetworks","ingressNetwork","unshift","addr","webhookID","webhookURL","associateContainerToTask","associateTasksToService","initialRegistryID","override","updateServiceArray","goToItem","addEnvironmentVariable","onChangeEnvVars","env","orgEnv","orgVar","serviceConfig","updateConfig","newSecret","filename","serviceSecret","updateContainerLabel","addMount","removeMount","onChangeMountType","updateMount","addNetwork","removedElement","updateNetwork","updatePlacementConstraint","updatePlacementPreference","addPublishedPort","updatePublishedPort","removePortPublishedBinding","updateLogDriverOpt","variable","updateLogDriverName","updateHostsEntry","updateWebhookRegistryId","newRegistryID","registryChanged","updateServiceWebhook","attribute","elements","originalImage","currentImage","mountsAreValid","rollbackService","updateService","removeService","updateServiceAttribute","filterNetworks","serviceNetwork","getServices","extractNodeInfo","offset","getNodes","processTotalCPUAndMemory","systemStatus","SystemStatus","node_count","node_offset","extractNodesInfo","extractSwarmInfo","prepareVisualizerData","visualizerData","assignServiceInfo","assignTasksToNode","ShowInformationPanel","DisplayOnlyRunningTasks","DisplayNodeLabels","changeShowInformationPanel","storeSwarmVisualizerSettings","changeDisplayOnlyRunningTasks","changeDisplayNodeLabels","showInfoPanel","getSwarmVisualizerSettings","displayOnlyRunningTasks","displayNodeLabels","loadState","BrowseVolumeController","NFSData","CIFSData","availableVolumeDrivers","prepareNFSConfiguration","versionNumber","prepareCIFSConfiguration","createVolumeConfiguration","containerFilter","isCioDriver","volumeData","getVolumeDataFromContainer","containersUsingVolume","getVolumes","endpointProvider","endpointRole","attached","isVolumeUsedByAService","EdgeDevicesDatatableSettings","EdgeDevicesDatatableActions","isOpenAMTEnabled","isFDOEnabled","setLoadingMessage","onDeleteEdgeDeviceClick","onAddNewDeviceClick","onAssociateOpenAMTClick","selectedEnvironment","InnerDatatable","RowContext","RowProvider","useReducer","toggleIsLoading","useRowContext","DeviceAction","PowerState","PowerStateCode","connectionStatus","powerState","parsePowerState","On","SleepLight","SleepDeep","Sleep","OffHard","OffSoft","OffHardGraceful","Off","Hibernate","PowerCycle","ActionsMenu","ActionsMenuTitle","kvmLinkProps","guid","deviceName","onSelect","handleDeviceActionClick","PowerOn","PowerOff","Restart","AMTDevicesDatatable","useAMTDevices","userMessage","disableTrustOnFirstConnect","isOpenAmtEnabled","ExpandingCell","showExpandArrow","getToggleRowExpandedProps","showExpandedRow","AMTDeviceGUID","heartbeat","LastCheckInDate","GroupName","environmentRoute","envType","EdgeID","platform","getPlatformType","getRoute","browseLinkProps","EdgeDevicesDatatable","isFdoEnabled","mpsServer","autoResetExpanded","selectColumnWidth","useExpanded","someDeviceHasAMTActivated","EdgeDevicesDatatableAngular","edgeStackModule","edgeDevicesModule","tab","AssociatedEndpointsDatatableController","PaginationService","extendGenericController","totalFilteredDataset","paginationChanged","changePaginationLimit","updateKey","currentValue","isFirstChange","newPageNumber","setPaginationLimit","paginatedItemLimit","setDataTableTextFilters","retrievePage","endpoints","totalFilteredDataSet","items","EdgeJobFormController","scheduleValues","displayed","cron","datetime","scheduleValue","cronMethod","cronRegex","associateEndpoint","dissociateEndpoint","onChangeModel","defaultTime","CronExpression","cronToDatetime","Recurring","date","FileContent","minutes","hours","month","formAction","Endpoints","strings","groups","addLabelAction","removeLabelAction","formActionLabel","EdgeJobResultsDatatableController","collectLogs","autoRefresh","onCollectLogsClick","onDatasetChange","anyCollecting","LogsStatus","onDownloadLogsClick","onClearLogsClick","EdgeStackDeploymentTypeSelectorController","deploymentOptions","hasDockerEndpoint","edgeStackDeploymentTypeSelector","EdgeStackEndpointsDatatableController","paginationChangedAsync","statusMap","EdgeStackStatusController","stackStatus","aggregateStatus","ok","acknowledged","EditEdgeStackFormController","endpointTypes","fileContents","onChangeGroups","onChangeFileContent","onChangeComposeConfig","onChangeKubeManifest","hasKubeEndpoint","onChangeDeploymentType","removeLineBreaks","EdgeGroups","checkEndpointTypes","isFormValid","StackFileContent","validateEndpointsForDeployment","edgeGroups","flatMap","EndpointTypes","oldValue","deploymentType","DeploymentType","submitAction","EdgeGroupFormController","getDynamicEndpointsAsync","getDynamicEndpoints","Dynamic","tagsPartialMatch","PartialMatch","pageType","EdgeGroupsDatatableController","HasEdgeStack","EdgeJobResultsFactory","logFile","clearLogs","EdgeJobsFactory","groupId","EdgeJobService","EdgeJobs","EdgeJobResults","edgeJobId","ScheduleCreateRequest","createSchedule","ScheduleUpdateRequest","EdgeStacks","createEdgeStack","repositoryOptions","RepositoryURL","RepositoryReferenceName","FilePathInRepository","RepositoryAuthentication","RepositoryUsername","RepositoryPassword","EdgeTemplateService","EdgeTemplates","edgeTemplates","fetch","stackFile","EdgeDevicesViewController","SettingsService","edgeDevices","getEnvironments","endpointsResponse","getSettings","EnableEdgeComputeFeatures","fdoConfiguration","DisableTrustOnFirstConnect","openAMTConfiguration","loadingMessage","CreateEdgeGroupController","EdgeGroupService","createGroup","createGroupAsync","endpointGroups","EdgeGroupsController","EditEdgeGroupController","updateGroup","updateGroupAsync","CreateEdgeJobViewController","createEdgeJob","createEdgeJobFromFileContent","createEdgeJobFromFileUpload","EdgeJobController","showEditorTab","updateAsync","downloadLogsAsync","collectLogsAsync","clearLogsAsync","refresh","refreshAsync","showEditor","edgeJob","updateEdgeJob","logFileName","associateEndpointsToResults","results","EndpointId","jobResults","oldFileContent","getScriptFile","EdgeJobsViewController","deleteJobsAsync","deleteJobs","edgeJobs","CreateEdgeStackViewController","EdgeStackService","StackFile","ComposeFilePathInRepository","Method","StackType","createStack","createStackByMethod","createStackFromFileContent","createStackFromFileUpload","createStackFromGitRepository","buildAnalyticsProperties","methodLabel","templateName","selectedTemplate","noGroups","checkIfEndpointTypes","formIsInvalid","createEdgeStackView","DockerComposeFormController","methodOptions","onChangeFile","onChangeTemplate","onChangeMethod","onChangeFormValues","edgeTemplate","edgeStacksDockerComposeForm","kubeManifestForm","kubeDeployDescription","KubeManifestFormController","EdgeStacksViewController","getStacks","EditEdgeStackViewController","deployStack","deployStackAsync","getPaginatedEndpoints","getPaginatedEndpointsAsync","stackId","stackEndpointIds","filterStackEndpoints","originalFileContent","groupIds","updateStack","lastId","createModule","initFeatureService","UI_ROUTER_REACT_HYBRID","analyticsModule","run","registriesModule","customTemplateModule","kubernetes","KubernetesHealthService","KubernetesNamespaceService","templateId","showConsole","accessNode","isPod","useServerMetrics","configurations","KubernetesConfigurationTypes","publishedUrl","settingsKey","onPublishingModeClick","isPrimary","showSystem","isItemExpanded","isExpandable","KubernetesApplications","hasConfigurationSecrets","getPublishedUrl","onSettingsShowSystemChange","setDataTableSettings","isExternalApplication","KubernetesApplicationHelper","isSystemNamespace","app","KubernetesNamespaceHelper","ResourcePool","isDisplayed","ingressUrls","PublishedPorts","pp","IngressRules","Port","loadBalancerURLs","LoadBalancerIPAddress","publishedUrls","Configurations","ApplicationType","availableTypeFilters","KubernetesApplicationDeploymentTypes","KubernetesApplicationTypes","KubernetesServiceTypes","buildIngressRuleURL","rule","portHasIngressRules","ruleCanBeDisplayed","Applications","Namespace","isSystemToken","KubernetesConfigurationHelper","isSystemConfig","IsRegistrySecret","isExternalConfiguration","Used","hasK8sClusterNodeR","canManageAccess","Kubernetes","Configuration","RestrictDefaultNamespace","namespaceStatusColor","KubernetesVolumesDatatableController","onInit","isUsed","KubernetesVolumeHelper","isExternalVolume","HelmAddRepositoryController","HelmService","doesRepoExist","repos","isAddingRepo","addHelmRepository","HelmTemplatesListController","updateCategories","annotationCategories","charts","annotations","availableCategories","clearCategory","selectedCategory","selectAction","HelmTemplatesController","KubernetesResourcePoolService","installHelmchart","getHelmValues","selectHelmChart","getHelmRepoURLs","getLatestCharts","getResourcePools","contentvalues","originalvalues","appName","Repo","Chart","Values","resourcePool","install","loadingValues","showCustomValues","reposLoading","GlobalRepository","UserRepositories","getHelmRepositories","globalRepository","userHelmReposUrls","uniqueHelmRepos","helmRepos","chartsLoading","promiseList","chartPromises","allSettled","latestCharts","tp","resourcePoolsLoading","nonSystemNamespaces","resourcePools","canInstallChart","KubeServicesItemViewController","KubernetesApplicationPublishingTypes","addPort","KubernetesServicePort","nodePort","targetPort","ingressType","route","KubernetesIngressServiceRoute","serviceName","serviceType","originalIngresses","IngressName","ingress","servicePorts","removePort","servicePort","onChangeContainerPort","duplicates","source","sp","KubernetesFormValidationHelper","refs","hasRefs","onChangeServicePort","onChangeNodePort","KubernetesFormValidationReferences","serviceRoutes","isEdit","multiItemDisable","serviceIndex","loadbalancerEnabled","KubeServicesViewController","addEntry","KubernetesService","Selector","getUniqName","nameIndex","Services","deleteService","iconStyle","typeName","typeValue","KubectlShellController","TerminalWindow","shell","terminalclose","screenClear","clear","miniRestore","terminalopen","configureSocketAndTerminal","writeln","readyState","CLOSED","terminalresize","connectConsole","wsProtocol","queryParams","isCreation","KubernetesConfigurationDataController","editorUpdateAsync","onFileLoad","onFileLoadAsync","showSimpleMode","showAdvancedMode","onChangeKey","duplicateKeys","Key","invalidKeys","KubernetesConfigurationFormValuesEntry","removeEntry","DataYaml","encoding","chardet","Buffer","decoder","TextDecoder","IsBinary","stringValue","decode","Value","Base64","addEntryFromFile","temporaryFileReader","FileReader","onload","readAsArrayBuffer","IsSimple","cpuReservation","cpuUsage","cpuLimit","memoryUsage","displayUsage","KubernetesResourceReservationController","usageValues","cpuReservationPercent","memoryReservationPercent","cpuUsagePercent","memoryUsagePercent","KubernetesYamlInspectorController","copyYAML","toggleYAMLInspectorExpansion","KubernetesApplicationConverter","res","pods","ingresses","spec","initContainers","uid","Metadata","StackId","KubernetesPortainerApplicationStackIdLabel","KubernetesPortainerApplicationStackNameLabel","ApplicationKind","KubernetesPortainerApplicationKindLabel","ApplicationOwner","KubernetesPortainerApplicationOwnerLabel","ApplicationName","KubernetesPortainerApplicationNameLabel","Note","KubernetesPortainerApplicationNote","imagePullSecrets","RegistryId","CreationDate","creationTimestamp","Pods","selector","Cpu","KubernetesResourceReservationHelper","filesizeParser","Requests","ServiceType","ClusterIp","clusterIP","ExternalIp","externalIP","loadBalancer","portsRefs","pList","pRefs","KubernetesApplicationPort","NodePort","_apiPortsToPublishedPorts","rules","KubernetesIngressHelper","volumeClaimTemplates","vcTemplates","vc","persistentVolumeClaim","claimName","inexistingPVC","persistedFolders","hostPath","PersistedFolders","volumeMounts","matchingVolumeMount","persistedFolder","KubernetesApplicationPersistedFolder","MountPath","mountPath","PersistentVolumeClaimName","HostPath","ConfigurationVolumes","configMap","configurationName","secretName","configurationVolume","KubernetesApplicationConfigurationVolume","fileMountPath","rootMountPath","configurationKey","KubernetesApplication","applicationCommon","DataAccessPolicy","KubernetesApplicationDataAccessPolicies","RunningPodsCount","availableReplicas","replicas","unavailableReplicas","TotalPodsCount","numberAvailable","desiredNumberScheduled","numberUnavailable","readyReplicas","HeadlessServiceName","persistentVolumeClaims","nodesLabels","KubernetesApplicationFormValues","ImageModel","AutoScaler","isIngress","PublishingType","Affinity","KubernetesCommonHelper","claims","KubernetesPersistentVolumeClaimConverter","rwx","deployment","statefulSet","daemonSet","headlessService","KubernetesDeploymentConverter","KubernetesStatefulSetConverter","KubernetesDaemonSetConverter","KubernetesServiceConverter","KubernetesConfigMapConverter","KubernetesPortainerAccessConfigMap","KubernetesConfigMapCreatePayload","createAccessPayload","yaml","KubernetesConfigMap","ConfigurationOwner","KubernetesPortainerConfigurationOwnerLabel","Yaml","binaryData","configurationOwner","omission","KubernetesConfigMapUpdatePayload","KubernetesConfiguration","volumeClaims","KubernetesDaemonSet","KubernetesDaemonSetCreatePayload","matchLabels","affinity","VolumeMounts","oldDaemonSet","newDaemonSet","oldPayload","createPayload","newPayload","JsonPatch","KubernetesDeployment","KubernetesDeploymentCreatePayload","oldDeployment","newDeployment","KubernetesEvent","lastTimestamp","eventTime","Message","Involved","involvedObject","KubernetesNamespaceConverter","KubernetesNamespace","phase","ResourcePoolName","KubernetesPortainerResourcePoolNameLabel","ResourcePoolOwner","KubernetesPortainerResourcePoolOwnerLabel","IsSystem","systemLabel","KubernetesPortainerNamespaceSystemLabel","KubernetesNamespaceCreatePayload","resourcePoolOwner","storageClasses","KubernetesPersistentVolumeClaim","Storage","StorageClass","storageClassName","NeedsDeletion","pvc","ExistingVolume","PreviousName","SizeUnit","charAt","existantPVC","PersistentVolumeClaim","ContainerPath","KubernetesPersistentVolumClaimCreatePayload","oldPVC","newPVC","KubernetesResourcePool","Owner","quota","KubernetesResourceQuotaConverter","ingMap","IngressClasses","Selected","KubernetesIngressConverter","Registries","Namespaces","KubernetesResourceQuota","hard","KubernetesPortainerResourceQuotaCPULimit","KubernetesPortainerResourceQuotaMemoryLimit","MemoryLimitUsed","used","CpuLimitUsed","LoadBalancers","KubernetesPortainerResourceQuotaLoadbalancers","KubernetesPortainerResourceQuotaStorageSuffix","StorageRequests","sr","KubernetesResourcePoolStorageClassFormValue","KubernetesResourceQuotaCreatePayload","KubernetesResourceQuotaHelper","KubernetesPortainerResourceQuotaCPURequest","KubernetesPortainerResourceQuotaMemoryRequest","oldQuota","newQuota","KubernetesResourcePoolFormValues","KubernetesResourceQuotaDefaults","UseLoadBalancersQuota","HasQuota","StorageClasses","storages","KubernetesSecretCreatePayload","annotation","stringData","KubernetesPortainerConfigurationDataAnnotation","KubernetesSecretUpdatePayload","KubernetesApplicationSecret","publishedPort","IsNew","ContainerPort","LoadBalancerPort","LoadBalancerNodePort","_publishedPortToServicePort","applicationFormValuesToService","KubernetesServiceHelper","Headless","KubernetesServiceCreatePayload","KubernetesServiceHeadlessClusterIP","oldService","newService","KubernetesStatefulSet","KubernetesStatefulSetCreatePayload","VolumeClaims","oldSFS","newSFS","KubernetesStorageClassConverter","KubernetesStorageClass","Provisioner","provisioner","AllowVolumeExpansion","allowVolumeExpansion","scs","sc","fv","storageClass","KubernetesStorageClassCreatePayload","oldStorageClass","newStorageClass","claim","pool","KubernetesVolume","kubeCustomTemplatesView","kubeEditCustomTemplateView","kubeCreateCustomTemplateView","KubeCreateCustomTemplateViewController","CustomTemplateService","Title","Logo","onBeforeOnload","customTemplate","createCustomTemplateByMethod","createCustomTemplateFromFileContent","createCustomTemplateFromFileUpload","customTemplates","addEventListener","removeEventListener","preventDefault","returnValue","KubeCustomTemplatesViewController","allowedDeployment","currentUser","isEditAllowed","getTemplates","selectTemplate","CreatedByUserId","KubeEditCustomTemplateViewController","getTemplate","onBeforeUnload","customTemplateFile","updateCustomTemplate","stripSpaces","KubernetesEndpoint","leaderAnnotation","KubernetesEndpointAnnotationLeader","parsedJson","holderIdentity","HolderIdentity","subsets","Subsets","subset","KubernetesEndpointSubset","Ips","addresses","_KubernetesEndpoint","_KubernetesEndpointSubset","KubernetesEndpointService","KubernetesEndpoints","getAllAsync","KubernetesEndpointConverter","KubernetesApplicationTypeStrings","KubernetesPodNodeAffinityNodeSelectorRequirementOperators","bytes","HelmFactory","helmUrl","templatesUrl","list","output","uninstall","release","listReleases","PodKubernetesInstanceLabel","PodManagedByLabel","application","pf","cv","associateContainerPersistedFoldersAndConfigurations","applications","KubernetesPortMapping","KubernetesPortMappingPort","envVariables","KubernetesApplicationEnvPayload","valueFrom","KubernetesApplicationEnvironmentVariableFormValue","NameIndex","finalRes","cfg","filterCondition","cfgEnv","cfgVol","keyEnv","keyVol","Count","Sum","EnvCount","VolCount","overrideThreshold","KubernetesApplicationConfigurationFormValue","SelectedConfiguration","Overriden","OverridenKeys","fvKey","KubernetesApplicationConfigurationFormValueOverridenKey","KubernetesApplicationConfigurationFormValueOverridenKeyTypes","finalEnv","finalVolumes","finalMounts","isBasic","envKeys","KubernetesApplicationEnvConfigMapPayload","KubernetesApplicationEnvSecretPayload","configMapKeyRef","secretKeyRef","volKeys","groupedVolKeys","volumeName","itemsMap","KubernetesApplicationVolumeEntryPayload","KubernetesApplicationVolumeMountPayload","KubernetesApplicationVolumeConfigMapPayload","KubernetesApplicationVolumeSecretPayload","svc","svcport","Ingresses","ingressMatched","Paths","Raw","kind","publishedPorts","generatePort","KubernetesApplicationPublishedPortFormValue","IngressRoute","IngressHost","IngressHosts","autoScaler","replicasCount","KubernetesApplicationAutoScalerFormValue","IsUsed","MinReplicas","MaxReplicas","TargetCPUUtilization","KubernetesApplicationPersistedFolderFormValue","volumeMount","KubernetesApplicationVolumePersistentPayload","AccessModes","podAffinity","placements","Placements","PlacementType","nodeAffinity","requiredDuringSchedulingIgnoredDuringExecution","KubernetesApplicationPlacementTypes","nodeSelectorTerms","matchExpressions","exp","placement","KubernetesApplicationPlacementFormValue","Label","preferredDuringSchedulingIgnoredDuringExecution","KubernetesPodNodeAffinityPayload","expressions","KubernetesNodeSelectorRequirementPayload","KubernetesNodeSelectorTermPayload","KubernetesPreferredSchedulingTermPayload","KubernetesPodAffinity","helmManagedApps","namespacedHelmReleases","instanceLabel","helmAppsList","helmInstance","helmApp","HelmApplication","appsNotReady","replaceAll","helmApplications","getHelmApplications","helmAppNames","hma","nonHelmApplications","KubernetesApplicationRollbackHelper","targetRevision","_getDeploymentPayload","_getDaemonSetPayload","_getStatefulSetPayload","deploymentApp","KubernetesSystem_DefaultDeploymentUniqueLabelKey","KubernetesSystem_AnnotationsToSkip","obj","owner","accesses","KubernetesPortainerConfigMapAccessKey","envFind","volumeFind","getUsingApplications","setConfigurationUsed","configurationsUsed","configMappedByName","configMappedByVolume","YAML","oldEntry","groupped","KubernetesDaemonSetHistoryHelper","ownerReferences","crList","sameLabelsCR","controlledCR","_isControlledBy","KubernetesDeploymentHistoryHelper","rsList","sameLabelsRS","controlledRS","rsListOriginal","revision","KubernetesSystem_RevisionAnnotation","filteredRS","KubernetesHistoryHelper","rawRevisions","currentRevision","revisionsList","_getDeploymentRevisions","_getDaemonSetRevisions","_getStatefulSetRevisions","appRS","appCR","KubernetesStatefulSetHistoryHelper","isSystem","KUBERNETES_DEFAULT_NAMESPACE","KUBERNETES_DEFAULT_SYSTEM_NAMESPACES","KubernetesPortainerResourceQuotaPrefix","decimals","base10","dm","pow","pod","parseCPU","KubernetesResourceReservation","mem","pools","resourceOverCommitEnabled","resourceOverCommitPercent","maxResources","trunc","megaBytesValue","reservedResources","Quota","KubernetesServiceHeadlessPrefix","rawApp","KubernetesStack","describe","stacksFromApplications","KubernetesStackHelper","expect","toHaveLength","matchingNames","uuidv4","KubernetesHorizontalPodAutoScalerConverter","KubernetesHorizontalPodAutoScaler","minReplicas","maxReplicas","targetCPUUtilizationPercentage","scaleTargetRef","TargetEntity","Kind","KubernetesHorizontalPodAutoScalerCreatePayload","oldScaler","newScaler","KubernetesHorizontalPodAutoScalerHelper","sList","getApplicationTypeString","_KubernetesHorizontalPodAutoScaler","_KubernetesHorizontalPodAutoScalerCreatePayload","getYaml","Accept","rawResponse","KubernetesHorizontalPodAutoScalerService","KubernetesHorizontalPodAutoScalers","getAsync","patchAsync","deleteAsync","KubernetesCommonParams","raw","horizontalPodAutoScaler","oldHorizontalPodAutoScaler","newHorizontalPodAutoScaler","KubernetesIngressClassAnnotation","KubernetesIngressClassRewriteTargetAnnotations","nginx","traefik","KubernetesIngressClassTypes","NGINX","TRAEFIK","paths","http","ingRule","KubernetesIngressRule","backend","KubernetesIngress","Annotations","IngressClassName","ingressClassName","isPublishingToIngress","OriginalIngresses","pathMatched","IngressClass","pairs","RewriteTarget","ics","ic","KubernetesResourcePoolIngressClassFormValue","WasSelected","hfv","KubernetesResourcePoolIngressClassHostFormValue","PreviousHost","rewriteKey","KubernetesResourcePoolIngressClassAnnotationFormValue","AdvancedConfig","KubernetesIngressCreatePayload","hostsWithRules","updatedHost","KubernetesIngressRuleCreatePayload","KubernetesIngressRulePathCreatePayload","keptHosts","hostsWithoutRules","emptyRules","oldData","newData","KubernetesIngressClass","KubernetesCommonMetadataPayload","pathType","KubernetesIngressService","KubernetesIngresses","getOne","getAll","oldIngress","newIngress","KubernetesMetricsService","KubernetesMetrics","capabilitiesAsync","getPodAsync","getNodeAsync","getPodsAsync","getNodesAsync","getNode","podName","getPod","getPods","podUrl","IsPublishingService","NONE","ENVIRONMENT","FILESYSTEM","_KubernetesApplicationConfigurationFormValueOverridenKey","_KubernetesApplicationConfigurationFormValue","_KubernetesApplicationEnvironmentVariableFormValue","IsSecret","_KubernetesApplicationPersistedFolderFormValue","UseNewVolume","_KubernetesApplicationAutoScalerFormValue","REPLICATED","GLOBAL","SHARED","ISOLATED","DEPLOYMENT","DAEMONSET","STATEFULSET","POD","HELM","CLUSTER_IP","NODE_PORT","LOAD_BALANCER","INGRESS","PREFERRED","MANDATORY","KubernetesApplicationQuotaDefaults","_KubernetesApplication","Revisions","CurrentRevision","_KubernetesApplicationPersistedFolder","_KubernetesApplicationConfigurationVolume","_KubernetesApplicationPort","KubernetesDeploymentTypes","GIT","CONTENT","APPLICATION_FORM","_KubernetesApplicationVolumeMount","_KubernetesApplicationVolumePersistentPayload","_KubernetesApplicationVolumeConfigMapPayload","_KubernetesApplicationVolumeSecretPayload","_KubernetesApplicationVolumeEntryPayload","_KubernetesApplicationEnvPayload","_KubernetesApplicationEnvConfigMapPayload","_KubernetesApplicationEnvSecretPayload","_KubernetesCommonMetadataPayload","KubernetesPortainerConfigMapNamespace","KubernetesPortainerConfigMapConfigName","_KubernetesConfigMap","_KubernetesConfigMapCreatePayload","_KubernetesConfigMapUpdatePayload","_KubernetesConfigurationFormValues","KubernetesConfigurationFormValues","_KubernetesConfigurationFormValuesEntry","_KubernetesConfiguration","CONFIGMAP","SECRET","_KubernetesDaemonSet","VoluemMounts","_KubernetesDaemonSetCreatePayload","updateStrategy","rollingUpdate","maxUnavailable","KubernetesDeployManifestTypes","KUBERNETES","COMPOSE","KubernetesDeployBuildMethods","WEB_EDITOR","CUSTOM_TEMPLATE","KubernetesDeployRequestMethods","REPOSITORY","STRING","RepositoryMechanismTypes","WEBHOOK","INTERVAL","_KubernetesDeployment","_KubernetesDeploymentCreatePayload","maxSurge","_KubernetesEvent","KubernetesSystem_RevisionHistoryAnnotation","KubernetesSystem_ChangeCauseAnnotation","KubernetesSystem_DesiredReplicasAnnotation","KubernetesSystem_MaxReplicasAnnotation","_KubernetesNamespaceCreatePayload","KubernetesNodesLimits","nodesLimits","MaxCPU","MaxMemory","convertCPU","calculateMaxCPUMemory","nodesLimitsArray","overflowForReplica","instances","overflowForGlobal","overflow","excludesPods","_KubernetesPortMappingPort","_KubernetesPortMapping","ingressClass","_KubernetesResourceReservation","KubernetesResourceTypes","NAMESPACE","RESOURCEQUOTA","PERSISTENT_VOLUME_CLAIM","SERVICE","HORIZONTAL_POD_AUTOSCALER","KubernetesResourceActions","CREATE","UPDATE","DELETE","_KubernetesApplicationSecret","_KubernetesSecretCreatePayload","_KubernetesSecretUpdatePayload","_KubernetesService","ClusterIP","_KubernetesIngressService","_KubernetesIngressServiceRoute","_KubernetesServicePort","_KubernetesServiceCreatePayload","_KubernetesStack","_KubernetesStatefulSet","_KubernetesStatefulSetCreatePayload","partition","_KubernetesStorageClassAccessPolicies","KubernetesStorageClassAccessPolicies","_KubernetesStorageClass","_KubernetesStorageClassCreatePayload","_KubernetesPersistentVolumeClaim","_KubernetesVolume","_KubernetesPersistentVolumClaimCreatePayload","accessModes","KubernetesNodeConverter","KubernetesNode","hostName","address","conditions","KubernetesNodeConditionTypes","READY","memoryPressure","MEMORY_PRESSURE","PIDPressure","PID_PRESSURE","diskPressure","DISK_PRESSURE","networkUnavailable","NETWORK_UNAVAILABLE","Conditions","MemoryPressure","DiskPressure","NetworkUnavailable","KubernetesNodeAvailabilities","unschedulable","KubernetesPortainerNodeDrainLabel","allocatable","nodeInfo","kubeletVersion","internalIP","Taints","taints","taint","KubernetesNodeTaint","Effect","KubernetesNodeDetails","apiToNode","architecture","operatingSystem","osImage","KubernetesNodeFormValues","KubernetesNodeTaintFormValues","KubernetesNodeLabelFormValues","filteredTaints","filteredLabels","KubernetesNodeCreatePayload","KubernetesNodeTaintPayload","oldNode","newNode","_KubernetesNodeFormValues","_KubernetesNodeTaintFormValues","IsChanged","_KubernetesNodeLabelFormValues","KubernetesNodeHelper","isSystemLabel","nodeSelectors","ns","_KubernetesNode","Api","_KubernetesNodeDetails","_KubernetesNodeTaint","ACTIVE","PAUSE","DRAIN","KubernetesNodeTaintEffects","NOSCHEDULE","PREFERNOSCHEDULE","NOEXECUTE","_KubernetesNodeCreatePayload","_KubernetesNodeTaintPayload","KubernetesNodeService","KubernetesNodes","errData","nodeFormValues","computeContainerStatus","statuses","waiting","running","KubernetesPodConverter","KubernetesPod","tolerations","containerStatuses","computeStatus","Restarts","startTime","KubernetesPodContainer","KubernetesPodContainerTypes","PodName","PodIP","podIP","ImagePullPolicy","imagePullPolicy","computeContainers","computeAffinity","NodeSelector","nodeSelector","Tolerations","KubernetesPodToleration","Operator","TolerationSeconds","tolerationSeconds","KubernetesPodEviction","oldPod","newPod","createPayloadFactory","IN","NOT_IN","EXISTS","DOES_NOT_EXIST","GREATER_THAN","LOWER_THAN","_KubernetesPod","_KubernetesPodToleration","_KubernetesPodContainer","_KubernetesPodEviction","INIT","APP","weight","KubernetesPodService","KubernetesPods","logsAsync","evictionAsync","podEvictionPayload","evict","eviction","kubernetesRegistryAccessView","KubernetesRegistryAccessController","selectedResourcePools","savedResourcePools","handleRemove","updateNamespaces","namespaces","removeNamespaces","nsToUpdate","KubernetesConfigFactory","environmentIDs","ids","KubernetesNodesLimitsFactory","KubernetesPortainerNamespacesFactory","toggleSystem","KubernetesApplicationService","KubernetesDeploymentService","KubernetesDaemonSetService","KubernetesStatefulSetService","KubernetesServiceService","KubernetesSecretService","KubernetesPersistentVolumeClaimService","KubernetesHistoryService","patchPartialAsync","rollbackAsync","_getApplicationApiService","apiService","_generateIngressPatchPromises","oldIngresses","newIngresses","newIng","oldIng","autoScalers","rootItem","converterFunc","boundService","boundServices","boundScaler","scaler","convertToApplication","servicesFound","deployments","daemonSets","statefulSets","deploymentApplications","daemonSetApplications","statefulSetApplications","boundPods","unboundPods","nakedPodsApplications","claimPromises","oldFormValues","newFormValues","oldApp","oldHeadlessService","oldServices","oldClaims","newApp","newHeadlessService","newServices","newClaims","oldApiService","newApiService","newClaim","oldClaim","deleteAll","oldServiceMatched","deleteSingle","newKind","newAutoScaler","oldKind","oldAutoScaler","oldAppPayload","newAppPayload","oldValues","newValues","partial","KubernetesConfigMapService","KubernetesConfigMaps","getAccess","createAccess","rawPromise","yamlPromise","KubernetesConfigurationService","KubernetesConfigurationConverter","configMaps","secretsConfigurations","configMapsConfigurations","KubernetesSecretConverter","KubernetesControllerRevisionService","KubernetesControllerRevisions","KubernetesDaemonSets","KubernetesDeployments","KubernetesEventService","KubernetesEvents","KubernetesEventConverter","KubernetesHealth","pingAsync","KubernetesReplicaSetService","KubernetesConfigService","KubernetesConfig","prefix","publicSettings","KubeconfigExpiry","KubernetesNamespaces","promises","$allSettled","hasK8sAccessSystemNamespaces","visibleNamespaces","fulfilled","KubernetesNodesLimitsService","KubernetesPersistentVolumeClaims","KubernetesReplicaSets","KubernetesResourceQuotaService","KubernetesPortainerNamespaces","KubernetesResourcePoolConverter","ingressPromises","registriesPromises","oldRegistries","newRegistries","ing","del","createPromises","delPromises","patchPromises","old","keptRegistries","removedRegistries","newRegistriesPromises","removedRegistriesPromises","namespaceName","quotaAttempt","KubernetesResourceQuotas","KubernetesSecrets","KubernetesServices","deleteSingleAsync","deleteAllAsync","formValuesServices","KubernetesStackService","KubernetesStatefulSets","headlessServiceName","oldStatefulSet","newStatefulSet","KubernetesStorageService","KubernetesStorage","KubernetesVolumeService","KubernetesVolumeConverter","pvcs","storeNamespaces","KubernetesApplicationsController","getApplications","getApplicationsAsync","removeStacksAction","removeStacksActionAsync","selectTab","storeActiveTab","configuredApplications","getActiveTab","currentName","$current","endpointType","KubernetesApplicationConsoleController","availableCommands","applicationName","KubernetesCreateApplicationController","ApplicationDeploymentTypes","ApplicationDataAccessPolicies","ApplicationPublishingTypes","ApplicationPlacementTypes","ApplicationTypes","ApplicationConfigurationFormValueOverridenKeyTypes","ServiceTypes","appType","updateWebEditorInProgress","useLoadBalancer","quotasComputed","allRestricted","availabilities","quotaExceeded","sliders","namespaceLimits","maxLoadBalancers","maxLoadBalancersQuota","resourcePoolHasQuota","availableSizeUnits","alreadyExists","environmentVariables","configurationPaths","existingVolumes","nodePorts","ingressRoutes","loadBalancerPorts","exceeded","persistedFoldersUseExistingVolumes","editChanges","updateApplicationAsync","deployApplicationAsync","onServicePublishChange","stackFileContent","updateKubeStack","imageValidityIsValid","onChangeName","existingApplication","unselectAutoScaler","addConfiguration","removeConfiguration","onChangeConfigurationPath","overrideConfiguration","resetConfiguration","clearConfigurations","uniqOverridenKeysPath","duplicatePaths","overridenKey","keyIndex","findPath","restoreEnvironmentVariable","removeEnvironmentVariable","envVar","onChangeEnvironmentName","addPersistedFolder","newPf","allQuotasExhaustedAndVolumesAvailable","resetDeploymentType","restorePersistedFolder","validatePersistedFolders","resetPersistedFolders","allQuotasExhaustedAndNoVolumesAvailable","removePersistedFolder","useNewVolume","useExistingVolume","onChangePersistedFolderPath","onChangeVolumeRequestedSize","onChangeExistingVolumeSelection","pfs","storagePfs","newPfs","requestedSize","sum","addPlacement","onChangePlacement","restorePlacement","removePlacement","onChangePlacementLabelValidate","onChangePlacementLabel","resetPublishedPorts","restorePublishedPort","onChangePublishedPorts","removePublishedPort","onChangePortMappingContainerPort","onChangePortMappingNodePort","onChangePortMappingIngressRoute","onChangePortMappingLoadBalancer","onChangePortProtocol","onChangePortMappingIngress","ingressHostnames","newRoutes","toDelRoutes","allRoutes","newPorts","storageClassAvailable","hasMultipleStorageClassesAvailable","showDataAccessPolicySection","supportGlobalDeployment","hasFolders","hasRWOOnly","isIsolated","isEditAndStatefulSet","supportScalableReplicaDeployment","getNonScalableStorage","storageOptions","enforceReplicaCountMinimum","resourceQuotaCapacityExceeded","nodeLimitsOverflow","effectiveInstances","nodeNumber","resourceReservationsOverflow","maxCpu","autoScalerOverflow","publishViaLoadBalancerEnabled","publishViaIngressEnabled","isEditAndNoChangesMade","changes","savedFormValues","change","isAddPersistentFolderButtonShowed","isNewVolumeButtonDisabled","isEditAndExistingPersistedFolder","isExistingVolumeButtonDisabled","hasAvailableVolumes","allQuotasExhausted","total","availableSize","isEditAndNotNewPublishedPort","hasNoPublishedPorts","isEditAndNotNewPlacement","isNewAndNotFirst","showPlacementPolicySection","isNonScalable","scalable","global","replica","replicated","isMaxLoadBalancerOverflow","isDeployUpdateButtonDisabled","inProgress","invalid","hasNoChanges","nonScalable","isPublishingWithoutPorts","noResourcePool","maxLoadBalancersOverflow","disableLoadBalancerEdit","isPublishingTypeEditDisabled","isEditLBWithPorts","isProtocolOptionDisabled","updateSliders","minCpu","minMemory","updateNamespaceLimits","refreshStacks","refreshConfigurations","refreshApplications","appsUsingLoadBalancers","appsUsingLoadBalancersLength","refreshVolumes","filteredVolumes","isUnused","isRWX","refreshStorageAvailabilities","available","restricted","refreshIngresses","refreshNamespaceData","resetFormValues","onResourcePoolSelectionChange","deployApplication","getApplication","UseLoadBalancer","UseServerMetrics","toUpperCase","getStackFile","parseImageConfiguration","KubernetesApplicationController","getApplicationAsync","getEvents","getEventsAsync","updateApplicationKindText","redeployApplicationAsync","rollbackApplicationAsync","copyLoadBalancerIP","copyApplicationName","hasPersistedFolders","hasVolumeConfiguration","hasEventWarnings","eventWarningCount","isStack","rollbackApplication","redeployApplication","updateApplication","eventsLoading","KubernetesEventHelper","dataLoading","allContainers","expandedNote","SelectedRevision","useIngress","AcceptsApplication","UnmetTaints","matchKeyMatchValueMatchEffect","matchKeyAnyValueMatchEffect","matchKeyMatchValueAnyEffect","matchKeyAnyValueAnyEffect","anyKeyAnyValueAnyEffect","computeTolerations","UnmatchedNodeSelectorLabels","unmatchedTerms","unmatchedExpressions","exists","isIn","UnmatchedNodeAffinities","computeAffinities","computePlacements","placementWarning","getEndpointID","DisplayedPanel","canAccessNode","canShowConsole","KubernetesApplicationIngressController","hasIngress","applicationIngress","KubernetesHelmApplicationController","releases","app_version","getHelmApplication","KubernetesApplicationLogsController","getApplicationLogsAsync","updateAutoRefresh","applicationLogs","KubernetesApplicationStatsController","CPUUsage","getStats","transition","timestamp","nodeCPU","getMetrics","podRaw","KubernetesClusterController","getEndpointsAsync","hasResourceUsageAccess","systemEndpoints","ep","kubernetesEndpoint","ips","CPULimit","applicationsLoading","nodeNames","resourceReservation","getResourceUsage","clusterResourceUsage","reduce","u","resourceUsage","KubernetesNodeController","updateNodeAsync","drainNodeAsync","getNodeUsageAsync","onChangeTaintKey","duplicateTaintKeys","hasDuplicateTaintKeys","onChangeTaint","addTaint","removeTaint","restoreTaint","computeTaintsWarning","onChangeLabelKey","duplicateLabelKeys","hasDuplicateLabelKeys","onChangeLabel","restoreLabel","computeLabelsWarning","computeCordonWarning","computeDrainWarning","drainNode","isNoChangesMade","isDrainError","isDrainOperation","isContainPortainer","taintsWarning","labelsWarning","cordonWarning","drainWarning","getNodeUsage","availableEffects","KubernetesNodeStatsController","KubernetesConfigurationsController","getConfigurations","getConfigurationsAsync","refreshCallbackAsync","configurationsLoading","KubernetesCreateConfigurationController","createConfigurationAsync","filteredConfigurations","alreadyExist","uniqueCheck","isDataValid","createConfiguration","KubernetesConfigurationController","getConfigurationAsync","updateConfiguration","updateConfigurationAsync","copyConfigurationValue","plural","configurationLoading","reason","oldDataYaml","getConfiguration","tagUsedDataKeys","configName","usedDataKeys","KubernetesConfigureController","IngressClassTypes","configureAsync","limitedFeatureAutoWindow","onChangeEnableResourceOverCommit","hasValidStorageConfiguration","valid","addIngressClass","onChangeIngressClass","restoreIngressClass","removeIngressClass","ingressClasses","onChangeIngressClassName","hasTraefikIngress","EnableResourceOverCommit","ResourceOverCommitPercentage","assignFormValuesToEndpoint","transformFormValues","ingressesToDel","oldEndpointID","allResourcePools","respons","enableMetricsServer","metrics","userClick","pending","isServerRunning","removeIngressesAcrossNamespaces","storagePromises","oldStorageClasses","modifiedEndpoint","setEndpoints","configure","restrictDefaultToggledOn","displayConfigureClassPanel","enableAutoUpdateTimeWindow","availableAccessModes","access","KubernetesDashboardController","KubernetesDeployController","DeployMethod","deployOptions","DeployType","BuildMethod","tabLogsDisabled","AdditionalFiles","RepositoryAutomaticUpdates","RepositoryAutomaticUpdatesForce","RepositoryMechanism","RepositoryFetchInterval","RepositoryWebhookURL","returnStackWebhookUrl","ManifestDeployTypes","BuildMethods","onChangeTemplateId","deployAsync","getNamespacesAsync","onChangeDeployType","buildMethod","buildLabel","formatLabel","isEndpointAdmin","repositoryAutomaticUpdates","repositoryMechanism","automaticUpdatesLabel","disableDeploy","isGitFormInvalid","isWebEditorInvalid","EditorContent","isURLFormInvalid","ManifestURL","isNamespaceInvalid","displayErrorLog","errorLog","stripAnsi","composeFormat","deployNamespace","ComposeFormat","ManifestFile","AutoUpdate","ForceUpdate","Interval","kubernetesDeploy","deploy","getNamespaces","KubernetesResourcePoolAccessController","AccessService","authorizeAccessAsync","unauthorizeAccessAsync","unauthorizeAccess","initAccessConfigMap","multiselectOutput","endpointAccesses","KubernetesConfigMapHelper","authorizedUsersAndTeams","accessConfigMap","poolAccesses","availableUsersAndTeams","RoleTypes","newAccesses","usersToAdd","teamsToAdd","updatePoolAccess","authorizeAccess","usersToRemove","teamsToRemove","storageClassSwitch","StorageClassSwitchController","KubernetesCreateResourcePoolController","LBQuotaFeatureId","onToggleStorageQuota","onToggleLoadBalancerQuota","sClass","onChangeIngressHostname","ingressHosts","hosts","hostnames","hostnamesWithoutRemoved","allHosts","allIngresses","formDuplicates","count","hostFV","hostIdx","addHostname","removeHostname","addAnnotation","removeAnnotation","isCreateButtonDisabled","isQuotaValid","isAlreadyExist","hasPrefixKube","checkDefaults","createResourcePool","getIngresses","getRegistries","canUseIngress","resourceOverCommitPercentage","sliderMaxResources","KubernetesResourcePoolController","ResourceQuotaDefaults","StorageQuotaFeatureId","updateResourcePoolAsync","onToggleLoadBalancersQuota","otherIngresses","hostsWithoutRemoved","duplicatedHostnames","Duplicate","restoreHostname","isUpdateButtonDisabled","loadBalancersUsed","hasResourceQuotaBeenReduced","updateResourcePool","ingressesToDelete","registriesToDelete","WasChecked","warnings","messages","displayedMessage","markUnmarkAsSystem","confirmMarkUnmarkAsSystem","loadBalancersUsage","ingressesLoading","hasWriteAuthorization","canEdit","selectedRegistries","computeStorageQuotaUsage","Usage","namespaceResourceUsage","isDefaultNamespace","isEditable","vol","KubernetesResourcePoolsController","getResourcePoolsAsync","colors","KubernetesStackLogsController","generateLogsPromise","generateAppPromise","getStackLogsAsync","Pod","Logs","Application","filteredApplications","logsPromises","Color","Line","AppName","stackLogs","dataLogs","resourceSummary","oldAppResourceType","getApplicationResourceType","createdApplicationResourceSummary","getCreatedApplicationResources","headlessServiceUpdateResourceSummary","getServiceUpdateResourceSummary","claimSummaries","serviceUpdateResourceSummary","updateSummary","getIngressUpdateSummary","hpaUpdateSummary","getUpdatedApplicationResources","persistentVolumeClaimResources","appResourceType","summary","serviceUpdate","emptyService","serviceCreate","serviceDelete","findCreateResources","newResources","oldResources","findDeleteResources","findUpdateResources","newResource","oldResource","patches","isEqual","doGetResourcesSummary","actionFilter","getResourcesSummary","newNamespace","oldNamespace","KubernetesSummaryController","toggleSummary","generateResourceSummaryList","getArticle","resourceAction","article","expandedTemplate","storeKubernetesSummaryToggle","getConfigurationResources","getNamespaceResources","getApplicationResources","toggleValue","getKubernetesSummaryToggle","KubernetesVolumeController","getVolume","getVolumeAsync","updateVolumeAsync","onChangeSize","volumeSize","volumeSizeUnit","oldVolumeSize","hasQuota","sizeIsValid","redeploy","oldVolume","updateVolume","storageRequest","sameStorageVolumes","quotaLimitSize","increaseSize","volumeSharedAccessPolicy","volumeSharedAccessPolicyTooltip","policy","KubernetesVolumesController","getVolumesAsync","tempStorages","computeSize","buildStorages","activatedStoragesClasses","createElement","getElementsByTagName","src","parentNode","insertBefore","BASENAME","attrs","limitedFeatureDir","limitedFeatureAttrs","attr","apiServicesModule","UserService","enlargeImage","imageUrl","imageSanitized","onEscape","CreateTeamFormAngular","leaders","of","licenseManagementModule","settingsModule","userActivityModule","featureFlagModule","teamsModule","servicesModule","root","authManager","loggedIn","checkAuthOnRefresh","isTransitionRequiresAuthentication","initAuthentication","account","authentication","internalAuthentication","logout","endpointKubernetesConfiguration","endpointCreation","edgeDeviceCreation","isEdgeDevice","deviceImport","endpointAccess","endpointKVM","groupCreation","groupAccess","home","initAdmin","initEndpoint","settingsAuthentication","UNAUTHENTICATED_ROUTES","nextTransition","nextTransitionName","administratorExists","licenseCheckAsync","HeaderContentController","showWarning","isUpdateEnabled","showRoles","inheritFrom","Inherited","changeOrderBy","orderField","entryClick","emptyDatasetMessage","TeamService","availableTeams","availableUsers","ADMINISTRATORS","AuthorizedTeams","retrieveOwnershipDetails","setOwnership","setAuthorizedUsersAndTeams","AuthorizedUsers","resourceId","disableOwnershipChange","ResourceControlHelper","RCTS","RCTI","displayAccessControlPanel","canEditOwnership","editOwnership","AccessControlPanelData","hasRC","inheritedVolume","inheritedContainer","inheritedFromStack","hasSpecialDisable","confirmUpdateOwnership","Ownership_Users","Ownership_Teams","applyResourceControlChange","retrieveUserPermissionsOnResource","isPartOfRestrictedUsers","isLeaderOfAnyRestrictedTeams","canChangeOwnershipToTeam","porAccessManagement","porAccessManagementUsersSelector","accessControlledEntity","entityType","PorAccessManagementController","entity","oldUserAccessPolicies","oldTeamAccessPolicies","updatedUserAccesses","updatedTeamAccesses","accessPolicies","generateAccessPolicies","userAccessPolicies","teamAccessPolicies","selectedRoleId","selectedRole","selectedUserAccesses","selectedTeamAccesses","selectedAccesses","isRoleLimitedToBE","roleLabel","AssociatedEndpointsSelectorController","hasBackendPagination","onAssociate","onDissociate","AssoicatedEndpointsSelectorController","associated","getAssociatedEndpoints","getAssociatedEndpointsAsync","loadData","getPaginationData","setTableData","noEndpoints","tableType","element","spinning","identifier","yml","CodeMirrorService","editor","editorElement","applyCodeMirrorOnElement","CopyButtonController","isFading","copyValueText","$attrs","ngModel","$validators","invalidCron","modelValue","parseCronExpression","CustomTemplateCommonFieldsController","platformTypes","templateTypes","showPlatformField","showTypeField","nameRegex","CustomTemplateSelectorController","handleChangeTemplate","stackType","customTemplateSelector","newTemplatePath","typeLabel","onSelectClick","showSwarmStacks","onDeleteClick","createPath","editPath","AccessTokensDatatableController","DatatableColumnsVisibilityController","isOpen","DatatableFilterController","onChangeItem","isChecked","datatableFilter","displayTextFilter","resetSelectionState","setDataTableOrder","selectItem","originalEvent","shiftKey","firstClickedItem","firstItemIndex","lastItemIndex","itemsInRange","isBetween","onSelectionChanged","showTextFilter","getPaginationLimit","$onInitGeneric","datatableTitlebar","datatableSearchbar","datatableSortIcon","datatablePagination","onChangeLimit","enableNoLimit","onChangePage","canBrowse","RegistriesDatatableController","enableGoToLink","goToRegistry","redirectToManageAccess","datatableSortIconController","isCurrentSortOrder","selectedSortKey","createEnabled","showActiveStacks","showUnactiveStacks","External","Orphaned","OrphanedRunning","allOrphanedStacks","onFilterChange","onSettingsAllOrphanedStacksChange","hasAccessToOrphanedStack","stringsDatatable","columnHeader","onRemove","UsersDatatableController","authenticationMethod","applyEvent","cancelEvent","hideEvent","DateRangePickerApi","startDate","endDate","maxDate","minDate","build","setMinDate","datePicker","updateView","updateCalendars","isBefore","setMaxDate","isAfter","clearInput","setStartDate","setEndDate","isSingle","singleDatePicker","onApply","ngRequired","dateRangePickerId","onCancel","clearOnCancel","onHide","destroy","off","AVAILABLE_OPTIONS","dateRangePicker","dateRangePickerOptions","compile","baseOptions","locale","inputElement","isDataFound","dpApi","currentApi","currentApiElement","destroyListener","tempOptions","daterangepicker","$watchGroup","EndpointItemController","editEndpoint","stopPropagation","onEdit","joinTags","tagNames","PortainerEndpointTagHelper","isEdgeEndpoint","calcIsCheckInValid","checkInInterval","EdgeCheckinInterval","endpointInitTime","isCheckInValid","isKubernetesMode","totalFilteredEndpoints","filteredEndpoints","pollingTimeout","paginationChangedAction","keywords","statusString","lowerCaseKeyword","tagId","frontEndpointFilter","clearPollTimeout","$onDestory","getCurrentPage","pageChangeHandler","showKubeconfigButton","showKubeconfigModal","selectedEnvironmentIDs","downloadKubeconfigFile","dashboardAction","snapshotAction","showSnapshotAction","editAction","sortGroups","groupEndpoints","availableGroups","TLS","TLSConfig","CACert","TLSCACert","cert","TLSCert","TLSKey","TLSMode","EndpointSecurityFormData","EnvironmentVariablesPanelController","editorText","switchEnvMode","handleSimpleChange","convertToArrayOfStrings","parseDotEnvFile","onChangeValue","hasValue","removeValue","formName","environmentVariablesSimpleModeItem","EnvironmentVariablesSimpleModeController","onChangeVariable","addFromFile","getTextFromFile","readAsText","onSwitchModeClick","explanation","dom","condition","$eval","focusDelay","focusIf","fileUploadForm","webEditorForm","WebEditorFormController","onChangePath","gitFormAdditionalFileItem","GitFormAutoUpdateFieldsetController","gitFormAdditionalFilesPanel","GitFormComposeAuthFieldsetController","authValues","onChangeAuth","onChangeUsername","onChangePassword","gitFormAuthFieldset","showAuthExplanation","onChangeAutoUpdate","onChangeAutoUpdateForce","onChangeMechanism","onChangeInterval","onChangeForcePullImage","limitedFeaturePullImage","gitFormAutoUpdateFieldset","gitFormComposePathField","deployMethod","gitFormInfoPanel","configFilePath","additionalFiles","gitFormRefField","gitFormUrlField","GitFormController","onChangeURL","onChangeRefName","onChangeComposePath","gitForm","additionalFile","autoUpdate","GroupFormController","availableEndpoints","availableTags","associatedEndpoints","onCreateTag","getPaginatedEndpointsByGroup","allowCreateTag","addEndpoint","reloadTablesContent","removeEndpoint","endpointsByGroup","KubernetesAppGitFormController","saveGitSettingsInProgress","redeployInProgress","showConfig","RefName","onChangeRef","updateKubeGit","isSubmitButtonDisabled","GitConfig","ReferenceName","kubernetesAppGitForm","KubernetesRedeployAppGitFormController","hasUnsavedChanges","toJson","kubernetesRedeployAppGitForm","disableSelection","RegistryEnabled","retrieveRegistries","createRegistries","projects","resetDefaults","createTemplate","unselectTemplate","advanced","stackRedeployGitForm","StackRedeployGitFormController","FormHelper","PullImage","ForcePullImage","ShowForcePullImage","onChangeEnvVar","automaticUpdates","autoSyncLabel","isSwarmStack","that","updateGit","removeInvalidEnvVars","updateGitStackSettings","isAutoUpdateChanged","wasEnabled","onPageChanged","paginationState","onPaginationLimitChanged","tagIdsToTagNames","groupIdToGroupName","showTags","showGroups","cyValue","Code","CopyButton","fadeDelay","displayText","setIsFading","fadeoutTime","writeText","inputEl","body","appendChild","select","execCommand","removeChild","CreateAccessTokenAngular","onError","useTranslation","setDescription","errorText","setErrorText","setIsLoading","accessToken","setAccessToken","rawAPIKey","generateAccessToken","Trans","i18nKey","lngs","en","nativeName","de","he","ReactExampleAngular","lng","lngConfig","fontWeight","headerModule","boxSelectorModule","widgetModule","sidebarModule","dateRangePickerModule","gitFormModule","porAccessManagementModule","formComponentsModule","showRefreshButton","snapshotTime","triggerSnapshot","dismissAction","invalidIntervalFormat","minimumInterval","motd","which","onEnterKey","goTo","products","registryDetails","useAsterisk","sidebarMenu","sidebarMenuItem","sidebarSection","pathParams","iconClass","childrenPaths","currentState","SidebarMenuController","forceOpen","isOpenByPathState","onClickArrow","step","precision","SliderController","buildOptions","translate","sliderId","showSelectionBar","enforceStep","isFormValidForMigration","duplicationInProgress","migrationInProgress","isFormValidForDuplication","yamlError","duplicateStack","onDuplicate","migrateStack","onMigrate","isMigrationButtonDisabled","currentEndpointId","isEndpointSelected","statusIndicator","onCreate","allowCreate","TagSelectorController","selectedTags","noResult","selectTag","$item","filterTags","searchValue","filteredTags","exactTag","generateSelectedTags","tagsValue","TemplateListController","TemplateService","showContainerTemplates","filterByTemplateType","Categories","filterByCategory","duplicateTemplate","duplicateTemplateAsync","templateFile","stackfile","ThemeSettingsController","ThemeManager","setTheme","updateUserTheme","userTheme","themeInProgress","theme","autoTheme","initTheme","defaultTheme","availableThemes","UserTheme","TimeWindowDisplayController","utcToTime","utcTime","tz","timezone","endTime","startHour","startMin","endHour","endMin","startTimeUser","endTimeUser","setHours","setMinutes","customToTimeObject","timeWindow","startTimeObject","endTimeObject","startTimeUtc","endTimeUtc","loadUserTime","currentUserTimezone","dst","isDST","TimeWindowController","timeToUtc","startTimeSet","endTimeSet","end","timeZoneSelected","loadUtcTime","utcStartTime","utcEndTime","loadTimeWindow","setStartTime","setEndTime","timeWindowUpdate","getTime","timeError","defaultTimeWindow","toggleChangeWindow","initTime","countries","zones","country","zone","timeZones","hstep","mstep","ismeridian","timeSet","timezones","truncateLeftRight","left","right","stripProtocol","filesize","isoDate","getPairKey","pair","separator","getPairValue","arrayToStr","labelsToStr","endpointTypeName","endpointTypeIcon","endpointStatusBadge","findAssociatedGroup","KEY_REGEX","VALUE_REGEX","KEY_VALUE_REGEX","NEWLINES_REGEX","parseArrayOfStrings","variableString","parsedKeyValArr","envvar","GenericHelper","child","findDeepAll","getAttribute","RCViewModelToOwnershipParameters","ResourceControlOwnershipParameters","UserId","TeamId","RCFormDataToOwnershipParameters","RCPanelDataToOwnershipParameters","userIds","teamIds","retrieveAuthorizedUsers","retrieveAuthorizedTeams","userMemberships","isTeamLeader","membership","getExternalStacksFromLabel","ExternalStackViewModel","getExternalStacksFromContainers","getExternalStacksFromServices","validateYAML","containerNames","yamlObject","duplicateContainers","portConfiguration","exposedPorts","labelsArray","templateEnvironment","interactiveFlag","consoleConfiguration","generatedVolumesPile","param","keyValStr","pathname","displayPort","canBeOffline","setOfflineMode","AddLicenseViewController","keyValidations","onSubmitSuccess","addLicenseView","licensesForm","licenseFormItem","keyValidation","LicenseItemController","isInvalid","licenseInput","LicensesFormController","formError","addLicense","onLicenseChange","submit","$valid","licensesViewModule","addLicenseViewModule","licenseNodePanel","LicenseNodePanelController","StatusService","numberOfNodesExceeded","nodesCount","licenseInfo","licensesDatatable","licensesView","LicenseInfoController","productEdition","overUsage","usedNodes","copyLicenseKey","LicensesViewController","licenseKey","validLicensesToRemove","license","revoked","showExpiresAt","Override","PortainerEndpointInitFormValues","ConnectionType","PortainerEndpointConnectionTypes","TLSSkipVerify","TLSSKipClientVerify","AzureApplicationId","AzureTenantId","AzureAuthenticationKey","PortainerEndpointInitFormValueEndpointSection","Classes","PortainerEndpointInitFormValueEndpointSections","DockerEnvironment","AgentOnDockerEnvironment","AzureEnvironment","EdgeAgentOnDockerEnvironment","KubernetesLocalEnvironment","AgentOnKubernetesEnvironment","EdgeAgentOnKubernetesEnvironment","PortainerEndpointCreationTypes","LocalDockerEnvironment","AgentEnvironment","EdgeAgentEnvironment","LocalKubernetesEnvironment","DOCKER_LOCAL","KUBERNETES_LOCAL","REMOTE","AZURE","AGENT","EDGE","RegistryGitlabProject","project","PathWithNamespace","path_with_namespace","container_registry_enabled","EndpointGroupDefaultModel","EndpointGroupModel","EndpointGroupCreateRequest","AssociatedEndpoints","EndpointGroupUpdateRequest","MotdViewModel","Hash","Style","ContentLayout","RegistryViewModel","BaseURL","Password","Ecr","RegistryManagementConfigurationDefaultModel","TLSCACertFile","TLSCertFile","TLSKeyFile","Region","RegistryCreateFormValues","RegistryCreateRequest","ProjectId","InstanceURL","useOrganisation","organisationName","RegistryRepositoryViewModel","TagsCount","RegistryRepositoryGitlabViewModel","ANONYMOUS","QUAY","CUSTOM","GITLAB","PROGET","DOCKERHUB","ECR","ResourceControlCreatePayload","AdministratorsOnly","Users","Teams","SubResourceIDs","ResourceControlTypeString","CONFIG","CONTAINER","NETWORK","STACK","VOLUME","CONTAINER_GROUP","ResourceControlTypeInt","ResourceControlUpdatePayload","SettingsViewModel","LogoURL","BlackListedLabels","AuthenticationMethod","LDAPSettings","OAuthSettings","OAuthSettingsViewModel","SnapshotInterval","TemplatesURL","EdgeAgentCheckinInterval","FeatureFlagSettings","UserSessionTimeout","EnableTelemetry","HelmRepositoryURL","EnforceEdgeID","PublicSettingsViewModel","OAuthLoginURI","OAuthHideInternalAuth","OAuthLogoutURI","LDAPSettingsViewModel","ReaderDN","SearchSettings","GroupSearchSettings","AdminGroupSearchSettings","AutoCreateUsers","LDAPSearchSettings","BaseDN","UsernameAttribute","LDAPGroupSearchSettings","GroupBaseDN","GroupAttribute","GroupFilter","ClientID","ClientSecret","AccessTokenURI","AuthorizationURI","ResourceURI","RedirectURI","UserIdentifier","Scopes","OAuthAutoCreateUsers","OAuthAutoMapTeamMemberships","TeamMemberships","DefaultTeamID","SSO","HideInternalAuth","LogoutURI","StackViewModel","SwarmId","IsComposeFormat","UpdateDate","UpdatedBy","Regular","FromAppTemplate","creationDate","OrphanedStackViewModel","StatusViewModel","Snapshot","InstanceID","StatusVersionViewModel","UpdateAvailable","LatestVersion","TagViewModel","TeamViewModel","TeamMembershipModel","UserID","TeamID","TemplateViewModel","setTemplatesV2","AdministratorOnly","note","logo","privileged","Interactive","restart_policy","default","preset","allowedValue","templateEnv","templateVolumes","portAndProtocol","hostAndContainerPort","templatePorts","UserViewModel","PortainerAuthorizations","RoleName","UserTokenModel","dateCreated","lastUsed","WebhookViewModel","EndpointID","WebhookType","OAuthProviderSelectorController","onSaveSettings","saveButtonState","MS_TENANT_ID_PLACEHOLDER","OAuthSettingsController","limitedFeatureClass","microsoftTenantID","onSelectProvider","onMicrosoftTenantIDChange","useDefaultProviderConfiguration","updateSSO","addTeamMembershipMapping","removeTeamMembership","addAdminClaimRegex","removeAdminClaimRegex","onChangeHideInternalAuth","onToggleAutoTeamMembership","tenantID","providerId","authUrl","accessTokenUrl","resourceUrl","logoutUrl","userIdentifier","scopes","OAuthClaimMappings","ClaimValRegex","Team","AdminGroupClaimsRegexList","isOAuthTeamMembershipFormValid","OAuthClaimName","m","isOAuthAdminMappingFormValid","AdminAutoPopulate","getProviderByUrl","microsoft","google","github","custom","providerAuthURL","API_ENDPOINT_OAUTH","validate","accessViewerDatatable","AccessViewerController","TeamMembershipService","onUserSelect","userRoles","selectedUser","teamMemberships","getRoleFromUserEndpointPolicy","getRoleFromUserEndpointGroupPolicy","getRoleFromTeamEndpointPolicies","getRoleFromTeamEndpointGroupPolicies","findLowestRole","policies","policyRoles","accessPolicy","AccessViewerPolicyModel","groupUserAccessPolicies","memberships","groupTeamAccessPolicies","accessViewer","rolesDatatable","RolesDatatableController","isDefaultItem","linkAsync","tagName","disableAuthorization","excludeAuthorization","rolesView","RolesFactory","EndpointName","RolePriority","Priority","TeamName","AccessLocation","RoleViewModel","ENDPOINT_ADMIN","HELPDESK","STANDARD","READ_ONLY","OPERATOR","API_ENDPOINT_ROLES","Roles","RolesController","paginationAction","newValue","namesA","namesB","areDifferent","retagAction","advancedFeaturesAvailable","ImageDigest","ImageId","manifests","rawHistory","v1Compatibility","imageDigest","RepositoryTagViewModel","registryRepositoryTags","RegistryImageDetailsViewModel","docker_version","author","container_config","RegistryImageLayerViewModel","ManifestV2","History","RepositoryShortTag","manifest","RepositoryAddTagPayload","Manifest","linkGetResponse","pingWithForceNew","stripTrailingSlashes","dataType","getV2","resultText","getResponseHeader","Sha256","sha256","gitlabResponseGetLink","next","kv","genericAsyncGenerator","findBestStep","batch","RegistryV2Service","RegistryGitlabService","RegistryEcrService","forceNewConfig","repositories","getRepositoriesDetails","getTagsDetails","addTag","retagWithProgress","modifiedTags","modifiedDigests","impactedTags","shortTagsWithProgress","tagsList","deleteTagsWithProgress","deleteManifest","deleteRepository","batchDeleteTags","RegistryCatalog","RegistryTags","RegistryManifestsJquery","RegistryV2Helper","_getCatalogPage","_getCatalog","_getTagsPage","previousTags","tagDetails","manifestsToTag","_addTagFromGenerator","_addTagsWithProgress","progression","partialResult","_deleteManifestsWithProgress","_shortTagFromGenerator","repositoryName","newTags","tagFromTable","NewName","ConfigureRegistryController","RegistryServiceSelector","testInProgress","validConfiguration","testConfiguration","testConfigurationAsync","configureRegistry","RegistryRepositoriesController","displayInvalidConfigurationMessage","paginationActionAsync","RegistryRepositoryController","$uibModal","toSeconds","toPercent","progress","openModal","backdrop","keyboard","updateRetrievalClock","tagsRetrieval","elapsedTime","createRetrieveAsyncGenerator","asyncGenerator","retrieveTagsAsync","clock","short","addTagAsync","SelectedImage","loadRepositoryDetails","updateRetagClock","tagsRetag","retagActionAsync","modal","Modified","progressLabel","totalOps","createRetagAsyncGenerator","updateDeleteClock","tagsDelete","removeTagsAsync","removeEcrTagsAsync","deletedTagNames","deletedShortTags","tagsToKeep","createDeleteAsyncGenerator","removeRepositoryAsync","digests","auto","startStopRetrieval","return","computeImages","removeTags","removeRepository","RegistryRepositoryTagController","imagelayercommandFilter","$onInitAsync","Sort","Reverse","layer","login","headersGetter","getS3Settings","subResource","saveS3Settings","exportS3Backup","restoreS3Backup","getBackupStatus","CustomTemplatesFactory","EcrFactory","hasBody","getEndpointsTotalCount","deassociate","snapshots","snapshot","dockerhubLimits","rpn","checkLDAPConnectivity","SSLFactory","StackFactory","associate","swarmId","orphanedRunning","external","migrate","subaction","queryMemberships","updatePassword","updateTheme","checkAdminUser","initAdminUser","createAccessToken","getAccessTokens","deleteAccessToken","entityId","rejected","accessesAsync","newUserPolicies","newTeamPolicies","_getRole","_mapAccessData","authorizedPolicies","inheritedPolicies","availableAccesses","authorizedAccesses","authorized","inherited","authorizedUserPolicies","authorizedTeamPolicies","inheritedUserPolicies","inheritedTeamPolicies","userAccesses","teamAccesses","userAccessData","teamAccessData","accessData","getAccesses","Backup","uploadBackup","CustomTemplateServiceFactory","$sanitize","CustomTemplates","html","createCustomTemplate","uploadTLSFilesForEndpoint","notify","groupID","endpointURL","createEndpoint","creationType","TLSSkipClientVerify","TLSCAFile","checkinInterval","createAzureEndpoint","UsersToAdd","TeamsToAdd","UsersToRemove","serviceID","EndpointGroups","Motd","credentials","deleteRegistry","updateRegistry","registryManagementConfigurationModel","createRegistry","createGitlabRegistries","regs","retrievePorRegistryModelFromRepositoryWithRegistries","getURL","match2","match3","match4","findBestMatchRegistry","lastIndex","rcID","rcType","resourceID","SubResourceIds","createResourceControl","userID","isAdministrator","Settings","SSLServiceFactory","SSL","httpEnabled","Stack","StackHelper","SwarmService","gitConfig","kubernetesDeployAsync","migrateSwarmStack","targetEndpointId","SwarmID","migrateComposeStack","compose","includeOrphanedStacks","composeStacks","IncludeOrphanedStacks","swarmStacks","s1","s2","externalSwarmStacks","externalComposeStacks","unionStacks","externalStacks","externalStack","includeExternalStacks","Prune","createComposeStackFromFileUpload","createComposeStack","createSwarmStackFromFileUpload","createSwarmStack","createComposeStackFromFileContent","createSwarmStackFromFileContent","createComposeStackFromGitRepository","ComposeFile","createSwarmStackFromGitRepository","Support","createTagAsync","createTag","deleteTag","teamId","leaderIds","teamMembershipQueries","createMembership","TemplateServiceFactory","Templates","TemplateHelper","registryURL","repositoryUrl","composeFilePathInRepository","containerConfiguration","getDefaultContainerConfiguration","EnvToStringArray","portArrayToPortConfiguration","getConsoleConfiguration","updateContainerConfigurationWithLabels","createContainerConfiguration","createVolumeBindings","includeAdministrators","filterNonAdministratorUsers","isAxiosError","createUser","deleteUser","updateUser","updateUserPassword","currentPassword","newPassword","NewPassword","userLeadingTeams","userTokens","tokenId","initAdministrator","Webhooks","webhookType","asyncFunc","def","wrapper","Auth","OAuth","jwtHelper","initAsync","logoutAsync","clearSessionStorage","clean","cleanAuthData","storeLoginStateUUID","OAuthLoginAsync","loginAsync","storeJWT","tokenPayload","decodeToken","endpointAuthorizations","portainerAuthorizations","retrievePermissions","OAuthLogin","isTokenExpired","defaultChartOptions","pos","tooltipCallback","scalesCallback","isStacked","animation","responsiveAnimationDuration","responsive","tooltips","intersect","callbacks","tooltipItem","datasetLabel","datasets","datasetIndex","yLabel","layout","padding","hover","animationDuration","scales","yAxes","stacked","ticks","beginAtZero","LimitChartItems","CHART_LIMIT","byteBasedTooltipLabel","byteBasedAxisLabel","percentageBasedAxisLabel","percentageBasedTooltipLabel","fill","borderColor","pointBackgroundColor","pointBorderColor","pointRadius","borderWidth","CreateChart","memoryValue","cacheValue","codeMirrorGenericOptions","lineNumbers","codeMirrorYAMLOptions","gutters","lint","extraKeys","Tab","spaces","getOption","replaceSelection","yamlLint","CodeMirror","setSize","DatatableServiceFactory","TEXT_FILTER_KEY_PREFIX","storeDataTableSettings","storeDataTableFilters","storeDataTableOrder","storeDataTableExpandedItems","storeColumnVisibilitySettings","setDataTableSelectedItems","storeDataTableSelectedItems","getDataTableSelectedItems","$uiRouterGlobals","endpointPublicURL","getEndpointPublicURL","getOfflineMode","OfflineMode","cleanEndpointData","getUrlEndpointID","storeEndpointID","publicURL","storeEndpointPublicURL","storeEndpoints","isOffline","storeOfflineMode","RetryCount","RetryInterval","stackName","EndpointCreationType","GroupID","CheckinInterval","IsEdgeDevice","AzureApplicationID","AzureTenantID","uploadLDAPTLSFiles","queue","uploadOwnershipVoucher","voucherFile","voucher","validator","localStorageService","uuid","getLoginStateUUID","storeEndpointState","getEndpointState","storeApplicationState","getApplicationState","storeUIState","getUIState","deleteJWT","storePaginationLimit","storeDataTableTextFilters","storeJobImage","getJobImage","storeToolbarToggle","getToolbarToggle","storeLogoutReason","getLogoutReason","cleanLogoutReason","clearAll","NameValidatorFactory","validateEnvironmentName","environmentName","paginationLimit","storedLimit","RegistryEcrServiceFactory","_addTag","oldTagNames","newTagNames","toDelTags","_getProjectsPage","projectsAsync","_getRepositoriesPage","repositoriesAsync","projectId","ModalServiceFactory","registries2Options","StateManagerFactory","InfoHelper","manager","UI","dismissedInfoPanels","dismissedInfoHash","setVersionInfo","versionInfo","versionStatus","dismissImportantInformation","cleanEndpoint","updateLogo","logoURL","updateSnapshotInterval","interval","snapshotInterval","updateEnableEdgeComputeFeatures","enableEdgeComputeFeatures","updateEnableTelemetry","enableTelemetry","setOptOut","UIState","endpointState","appState","isAppStateValid","instanceId","Theme","Snaphosts","determineEndpointMode","endpointAPIVersion","newContentWrapperHeight","innerHeight","overflowY","wrapperCSS","documentElement","setAttribute","removeAttribute","systemTheme","matchMedia","authenticationMethodTypesMap","INTERNAL","LDAP","OAUTH","authenticationMethodTypesLabels","authenticationActivityTypesMap","AuthSuccess","AuthFailure","Logout","authenticationActivityTypesLabels","autoUserProvisionToggle","ldapModule","internalAuth","saveAuthSettingsButton","AdSettingsController","LDAPService","domainSuffix","limitedFeatureId","onTlscaCertChange","searchUsers","searchGroups","searchAdminGroups","parseDomainName","onAccountChange","domainName","parts","part","AdminGroups","selectedAdminGroups","adminGroups","tlscaCert","addLDAPUrl","URLs","removeLDAPUrl","isSaveSettingButtonDisabled","isLdapFormValid","adSettings","connectivityCheck","ldapConnectivityCheck","ldapGroupsDatatable","ldapSettings","ldapGroupSearch","ldapGroupSearchItem","ldapUserSearch","ldapUserSearchItem","ldapSettingsCustom","ldapSettingsDnBuilder","ldapSettingsGroupDnBuilder","ldapCustomGroupSearch","ldapSettingsOpenLdap","ldapSettingsSecurity","ldapSettingsTestLogin","ldapCustomUserSearch","ldapCustomAdminGroup","ldapUsersDatatable","defaultAdminGroupSearchFilter","onSearchClick","LdapCustomAdminGroupController","groupstest","enableAssignAdminGroup","onAddClick","LdapCustomGroupSearchController","showTable","LdapCustomUserSearchController","UserNameAttribute","baseFilter","LdapSettingsAdGroupSearchItemController","onChangeBaseDN","baseDN","addGroup","removeGroup","$index","onGroupsChange","groupsFilter","parseGroupFilter","groupFilter","LdapGroupSearchController","lastSetting","onSearchUsersClick","onSearchGroupsClick","onSearchAdminGroupsClick","saveButtonDisabled","LdapSettingsCustomController","suffix","LdapSettingsBaseDnBuilderController","onEntriesChange","moveUp","moveDown","dn","getOUValues","regex","ouValues","parseBaseDN","toIndex","LdapSettingsGroupDnBuilderController","groupName","onGroupNameChange","onGroupChange","groupNameEntry","parseEntries","$onChange","LdapSettingsOpenLDAPController","findDomainSuffix","parseDomainSuffix","serviceAccount","searchSettings","showBeIndicatorIfNeeded","TEST_STATUS","LOADING","SUCCESS","FAILURE","LdapSettingsTestLogin","testStatus","testLogin","buildLdapSettingsModel","AnonymousMode","ServerType","StartTLS","buildAdSettingsModel","buildOpenLDAPSettingsModel","SERVER_TYPES","OPEN_LDAP","AD","DEFAULT_GROUP_FILTER","LdapSettingsController","settingsDrafts","boxSelectorOptions","onChangeServerType","serverType","showUsernameFormat","LdapUserSearchItemController","onBaseDNChange","generateUserFilter","filteredGroups","parseFilter","members","member","LdapUserSearchController","check","cnName","sslCertificate","SslCertificateController","SSLService","originalValues","forceHTTPS","certFile","keyFile","reloadingPage","certFilePattern","keyFilePattern","onChangeForceHTTPS","isFormChanged","wasHTTPsChanged","certInfo","checkinIntervalOptions","SettingsEdgeComputeAngular","dirty","currentTarget","FDOProfilesDatatableActions","onDuplicateProfileClick","onDeleteProfileClick","newProfile","FDOProfilesDatatable","useFDOProfiles","FDOProfilesDatatableContainer","SettingsFDOAngular","initialFDOEnabled","setIsFDOEnabled","ownerURL","ownerUsername","ownerPassword","edgeComputeFeaturesEnabled","onChangedEnabled","SettingsOpenAMTAngular","setCertFile","readFileContent","fileReader","base64","readAsDataURL","mpsUser","mpsPassword","certFileContent","certFileName","certFilePassword","FileUpload","handleFileUpload","authenticationModule","generalModule","ActivityLogsDatatableController","changeSort","handleChangeLimit","onChangeSort","activityLogsDatatable","totalItems","onChangeContextFilter","onChangeKeyword","ActivityLogsViewController","UserActivityService","today","endOf","minValidDate","onChangeDate","loadLogs","saveLogsAsCSV","contextFilter","parseJSON","decorateLogs","activityLogsView","contextFilterLabels","typeFilterLabels","contextType","activityType","isAuthSuccess","isAuthFailure","authLogsDatatable","typeFilter","onChangeTypeFilter","AuthLogsViewController","filterState","saveAuthLogsAsCSV","authLogs","authLogsView","authLogsViewModule","activityLogsViewModule","UserActivity","authLogsAsCSV","logsAsCSV","contexts","before","after","sortDesc","confirmPassword","selectedTokens","CreateUserAccessTokenController","heading","AuthenticationController","URLHelper","showOAuthLogin","showStandardLogin","AuthenticationError","loginInProgress","OAuthProvider","checkForEndpointsAsync","checkForLicensesAsync","checkForLatestVersionAsync","postLoginSteps","oAuthLoginAsync","internalLoginAsync","authenticateUserAsync","manageOauthCodeReturn","authEnabledFlowAsync","generateOAuthLoginURI","determineOauthProvider","LoginURI","generateState","hasValidState","savedUUID","cleanParameters","authenticateUser","toggleStandardLogin","hideInternalAuth","getParameter","CreateCustomTemplateViewController","fromStack","templateNameRegex","createCustomTemplateAsync","createCustomTemplateFromGitRepository","CustomTemplatesViewController","DOCKER_STANDALONE","DOCKER_SWARM_MODE","showAdvancedOptions","isEditorVisible","deployable","getTemplatesAsync","removeTemplates","removeTemplatesAsync","createStackAsync","selectTemplateAsync","unselectTemplateAsync","getNetworksAsync","confirmDeleteAsync","createAction","isDeployable","templateType","EditCustomTemplateViewController","getTemplateAsync","submitActionAsync","onCreateTagAsync","vouchersUploading","vouchersUploaded","deviceIDs","DeviceName","DeviceProfile","VoucherFiles","PortainerURL","Suffix","onVoucherFilesChange","uploads","f","responses","createEndpointAndConfigureDevice","deviceID","createRemoteEndpoint","edgeID","edgeKey","EdgeKey","AddProfileController","createProfileAsync","EditProfileController","profileID","updateProfileAsync","EndpointRegistriesController","EndpointAccessController","updateAccessAsync","deploymentTab","availableEdgeAgentCheckinOptions","agentShortVersion","getAgentShortVersion","SecurityFormData","copyAgentCommand","setDefaultPortainerInstanceURL","baseHREF","resetEndpointURL","addDockerEndpoint","ConnectSocket","SocketPath","createLocalEndpoint","securityData","addKubernetesEndpoint","createLocalKubernetesEndpoint","addAgentEndpoint","platformLabel","addEdgeAgentEndpoint","addAzureEndpoint","EndpointController","DEPLOYMENT_TABS","PLATFORM_TYPES","clearAMTManagementInfo","versionValue","ManagementInfo","buildEnvironmentSubCommand","EnvVarSource","platformType","azureEndpoint","agentEndpoint","edgeEndpoint","allowSelfSignedCerts","showAMTInfo","dockerCommands","edgeId","isKubernetesDeploymentTabSelected","copyEdgeAgentDeploymentCommand","copyEdgeAgentKey","onToggleAllowSelfSignedCerts","onDeassociateEndpoint","deassociateEndpoint","AzureCredentials","ApplicationID","TenantID","AuthenticationKey","showSecurity","evt","edgeKeyDetails","keyInformation","decodedKey","instanceURL","tunnelServerAddr","decodeEdgeKey","disconnectedEdge","amtInfo","RawOutput","EndpointsController","numbers","EndpointKVMController","maximized","maximize","minimize","ider","kvm","sol","redirection","userConsent","mpsAuthorization","Server","mpsToken","KVMControlAngular","server","KVM","authToken","mouseDebounceTime","canvasHeight","canvasWidth","GroupsController","deleteGroup","MotdService","BackupService","connectingToEdgeEndpoint","homepageLoadTime","goToEdit","goToDashboard","snapshotEndpoints","edgeDeviceFilter","backupStatus","wait","seconds","restoreAndRefresh","restoreAsyncFn","backupInProgress","waitPortainerRestart","BackupFile","restoreFromS3","AccessKeyID","AccessKeyId","CronRule","SecretAccessKey","BucketName","Filename","RESTORE_FORM_TYPES","S3","FILE","ConfirmPassword","restoreFormType","showInitPassword","showRestorePortainer","togglePanel","createAdminUser","InitEndpointController","createLocalEndpointAsync","createLocalKubernetesEndpointAsync","createAgentEndpointAsync","endpointSections","isConnectButtonDisabled","createAgentEndpoint","skipEndpointCreation","routeName","InitLicenseViewController","InternalAuthenticationController","LogoutController","getWidth","innerWidth","toggleSidebar","CreateRegistryController","gitlab","originViewReference","originalEndpointId","retrieveGitlabRegistries","useDefaultQuayConfiguration","selectQuayRegistry","useDefaultGitlabConfiguration","selectGitlabRegistry","selectAzureRegistry","selectProGetRegistry","selectDockerHub","selectCustomRegistry","useDefaultEcrConfiguration","selectEcr","gitlabProjects","nonBrowsableTypes","regAttrMsg","registriesMsg","deleteSelectedRegistries","SettingsAuthenticationController","prepareLDAPSettings","tlscaFile","isADServer","ldap","uploadRequired","authMethod","availableUserSessionTimeoutOptions","authOptions","onChangeAuthMethod","authenticationMethodSelected","isOauthEnabled","LDAPConnectivityCheck","connectivityCheckInProgress","failedConnectivityCheck","successfulConnectivityCheck","saveSettings","isLDAPFormValid","isTLSMode","SettingsEdgeComputeController","onSubmitEdgeCompute","onSubmitOpenAMT","onSubmitFDO","getS3SettingsPayload","passwordProtectS3","passwordS3","scheduleAutomaticBackups","cronRule","accessKeyId","secretAccessKey","region","bucketName","s3BackupFeatureId","backupOptions","availableKubeconfigExpiryOptions","featureLimited","BACKUP_FORM_TYPES","customLogo","passwordProtect","backupFormType","onToggleAutoBackups","onBackupOptionsChange","removeFilteredContainerLabel","addFilteredContainerLabel","downloadBackup","saveApplicationSettings","saveS3BackupSettings","exportBackup","SidebarController","isClusterAdmin","uiVersion","isLeader","getAutoUpdatesProperty","uploadYamlValidationError","selectedTemplateId","editorYamlValidationError","addAdditionalFiles","removeAdditionalFiles","composeSyntaxMaxVersion","ComposeSyntaxMaxVersion","getContainerNames","stopStackAsync","startStackAsync","retrieveSwarmStackResources","stackFilter","assignSwarmStackResources","retrieveComposeStackResources","assignComposeStackResources","migrateRequest","removeStack","detachStackFromGit","associateStack","stopStack","startStack","regular","orphaned","loadExternalSwarmStack","loadExternalComposeStack","resourcesPromise","isSwarm","editorReadOnly","StacksController","deleteSelectedStacks","loadCreateEnabled","TagsController","checkNameValidity","removeUserFromArray","pagination_count_users","pagination_count_members","sortTypeUsers","sortReverseUsers","teamMembers","leaderCount","orderUsers","changePaginationCountUsers","sortTypeGroupMembers","sortReverseGroupMembers","orderGroupMembers","changePaginationCountGroupMembers","deleteTeam","promoteToLeader","updateMembership","MembershipId","TeamRole","demoteToMember","addAllUsers","addUser","removeAllUsers","deleteMembership","removeUser","assignUsersAndMembers","Leaders","team_name","addTeam","teamName","createTeam","deleteSelectedTeams","createStackFromTemplate","createComposeStackFromTemplate","templateConfiguration","createTemplateConfiguration","generatedVolumeCount","determineRequiredGeneratedVolumeCount","generatedVolumeIds","createXAutoGeneratedLocalVolumes","updateContainerConfigurationWithVolumes","createContainerFromTemplate","updatePasswordError","Administrator","oldUsername","isCurrentUser","isSubmitEnabled","isDeleteDisabled","userCreationError","validUsername","checkUsernameValidity","toLocaleLowerCase","deleteSelectedUsers","assignTeamLeaders","onUpdate","onAnalytics","WizardAciController","NameValidator","availableOptions","azureApplicationId","azureTenantId","azureAuthenticationKey","onChangeEndpointType","addAciEndpoint","clearForm","WizardDockerController","environmentUrl","dockerApiurl","socketPath","overrideSocket","skipCertification","tls","securityFormData","onToggleSkipCert","onToggleTls","copyLinuxCommand","linuxCommand","copyWinCommand","winCommand","copyLinuxSocket","linuxSocket","copyWinSocket","winSocket","connectEnvironment","overrideUrl","socketUrl","addDockerAgentEndpoint","addDockerApiEndpoint","addDockerLocalEndpoint","addRemoteEndpoint","tsl","tlsSkipVerify","tlsSkipClientVerify","tlsCaFile","tlsCertFile","tlsKeyFile","overrodeSocket","WizardKubernetesController","addKubernetesAgent","copyLoadBalancer","copyNodePort","endpointList","WizardEndpointsController","addAnalytics","updateEndpoints","startWizard","selections","maxStep","section","currentStep","stage","nextStep","analytics","aci","previousStep","counter","localEndpoint","dockerApi","dockerAgent","kubernetesAgent","aciApi","endpointSelect","dockerActive","kubernetesActive","aciActive","nameClass","selectOption","endpointSelections","endpointTitle","linkTitle","WizardViewController","manageLocalEndpoint","local","kubernetesError","createLocalDockerEndpoint","addedLocalEndpoint","setupTests","_module_exports"],"sourceRoot":""}