diff --git a/models/has_permission_request.go b/models/has_permission_request.go new file mode 100644 index 000000000..dab3706df --- /dev/null +++ b/models/has_permission_request.go @@ -0,0 +1,97 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// HasPermissionRequest has permission request +// +// swagger:model hasPermissionRequest +type HasPermissionRequest struct { + + // actions + Actions []*PolicyArgs `json:"actions"` +} + +// Validate validates this has permission request +func (m *HasPermissionRequest) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validateActions(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *HasPermissionRequest) validateActions(formats strfmt.Registry) error { + + if swag.IsZero(m.Actions) { // not required + return nil + } + + for i := 0; i < len(m.Actions); i++ { + if swag.IsZero(m.Actions[i]) { // not required + continue + } + + if m.Actions[i] != nil { + if err := m.Actions[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("actions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (m *HasPermissionRequest) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *HasPermissionRequest) UnmarshalBinary(b []byte) error { + var res HasPermissionRequest + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/models/has_permission_response.go b/models/has_permission_response.go new file mode 100644 index 000000000..cf72f70cb --- /dev/null +++ b/models/has_permission_response.go @@ -0,0 +1,97 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// HasPermissionResponse has permission response +// +// swagger:model hasPermissionResponse +type HasPermissionResponse struct { + + // permissions + Permissions []*PermissionAction `json:"permissions"` +} + +// Validate validates this has permission response +func (m *HasPermissionResponse) Validate(formats strfmt.Registry) error { + var res []error + + if err := m.validatePermissions(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (m *HasPermissionResponse) validatePermissions(formats strfmt.Registry) error { + + if swag.IsZero(m.Permissions) { // not required + return nil + } + + for i := 0; i < len(m.Permissions); i++ { + if swag.IsZero(m.Permissions[i]) { // not required + continue + } + + if m.Permissions[i] != nil { + if err := m.Permissions[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("permissions" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (m *HasPermissionResponse) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *HasPermissionResponse) UnmarshalBinary(b []byte) error { + var res HasPermissionResponse + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/models/permission_action.go b/models/permission_action.go new file mode 100644 index 000000000..d84563742 --- /dev/null +++ b/models/permission_action.go @@ -0,0 +1,63 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// PermissionAction permission action +// +// swagger:model permissionAction +type PermissionAction struct { + + // can + Can bool `json:"can,omitempty"` + + // id + ID string `json:"id,omitempty"` +} + +// Validate validates this permission action +func (m *PermissionAction) Validate(formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *PermissionAction) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *PermissionAction) UnmarshalBinary(b []byte) error { + var res PermissionAction + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/models/policy_args.go b/models/policy_args.go new file mode 100644 index 000000000..91d76b5c5 --- /dev/null +++ b/models/policy_args.go @@ -0,0 +1,66 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package models + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// PolicyArgs policy args +// +// swagger:model policyArgs +type PolicyArgs struct { + + // action + Action string `json:"action,omitempty"` + + // bucket name + BucketName string `json:"bucket_name,omitempty"` + + // id + ID string `json:"id,omitempty"` +} + +// Validate validates this policy args +func (m *PolicyArgs) Validate(formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (m *PolicyArgs) MarshalBinary() ([]byte, error) { + if m == nil { + return nil, nil + } + return swag.WriteJSON(m) +} + +// UnmarshalBinary interface implementation +func (m *PolicyArgs) UnmarshalBinary(b []byte) error { + var res PolicyArgs + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *m = res + return nil +} diff --git a/portal-ui/build/asset-manifest.json b/portal-ui/build/asset-manifest.json index 1d3f2adcc..219d1922e 100644 --- a/portal-ui/build/asset-manifest.json +++ b/portal-ui/build/asset-manifest.json @@ -1,8 +1,8 @@ { "files": { "main.css": "/static/css/main.a19f3d53.chunk.css", - "main.js": "/static/js/main.1ecd68ff.chunk.js", - "main.js.map": "/static/js/main.1ecd68ff.chunk.js.map", + "main.js": "/static/js/main.e71727db.chunk.js", + "main.js.map": "/static/js/main.e71727db.chunk.js.map", "runtime-main.js": "/static/js/runtime-main.f48e99e5.js", "runtime-main.js.map": "/static/js/runtime-main.f48e99e5.js.map", "static/css/2.76b14b73.chunk.css": "/static/css/2.76b14b73.chunk.css", @@ -20,6 +20,6 @@ "static/css/2.76b14b73.chunk.css", "static/js/2.41957633.chunk.js", "static/css/main.a19f3d53.chunk.css", - "static/js/main.1ecd68ff.chunk.js" + "static/js/main.e71727db.chunk.js" ] } \ No newline at end of file diff --git a/portal-ui/build/index.html b/portal-ui/build/index.html index 8f6bf4d88..6cca5fef4 100644 --- a/portal-ui/build/index.html +++ b/portal-ui/build/index.html @@ -1 +1 @@ -MinIO Console
\ No newline at end of file +MinIO Console
\ No newline at end of file diff --git a/portal-ui/build/static/js/main.1ecd68ff.chunk.js.map b/portal-ui/build/static/js/main.1ecd68ff.chunk.js.map deleted file mode 100644 index f0730db69..000000000 --- a/portal-ui/build/static/js/main.1ecd68ff.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["history.ts","types.ts","actions.ts","screens/LoginPage/types.ts","common/utils.ts","common/api/index.ts","screens/LoginPage/LoginPage.tsx","screens/Console/Common/FormComponents/common/styleLibrary.ts","common/Copyright.tsx","screens/NotFoundPage.tsx","icons/CopyIcon.tsx","icons/CreateIcon.tsx","icons/DeleteIcon.tsx","icons/DashboardIcon.tsx","icons/BucketsIcon.tsx","icons/UsersIcon.tsx","icons/ServiceAccountsIcon.tsx","icons/GroupsIcon.tsx","icons/IAMPoliciesIcon.tsx","icons/TraceIcon.tsx","icons/ConfigurationsListIcon.tsx","icons/ClustersIcon.tsx","icons/MirroringIcon.tsx","icons/WarpIcon.tsx","icons/WatchIcon.tsx","screens/Console/Buckets/actions.ts","screens/Console/Common/TableWrapper/TableActionIcons/common.ts","screens/Console/Common/TableWrapper/TableActionIcons/ViewIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/PencilIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/ShareIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DeleteIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DescriptionIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/CloudIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/ConsoleIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DownloadIcon.tsx","screens/Console/Common/TableWrapper/TableActionButton.tsx","icons/HelpIcon.tsx","screens/Console/Common/FormComponents/CheckboxWrapper/CheckboxWrapper.tsx","screens/Console/Common/TableWrapper/TableWrapper.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/SelectWrapper/SelectWrapper.tsx","screens/Console/Common/FormComponents/RadioGroupSelector/RadioGroupSelector.tsx","screens/Console/Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper.tsx","screens/Console/Buckets/ListBuckets/AddBucket.tsx","screens/Console/Buckets/ListBuckets/DeleteBucket.tsx","screens/Console/Common/PageHeader/PageHeader.tsx","screens/Console/Buckets/ListBuckets/ListBuckets.tsx","screens/Console/Buckets/ViewBucket/SetAccessPolicy.tsx","screens/Console/Buckets/ViewBucket/SetRetentionConfig.tsx","screens/Console/Buckets/ViewBucket/AddEvent.tsx","screens/Console/Buckets/ViewBucket/DeleteEvent.tsx","screens/Console/Buckets/ViewBucket/AddReplicationModal.tsx","screens/Console/Buckets/ViewBucket/EnableBucketEncryption.tsx","screens/Console/Buckets/ViewBucket/EnableVersioningModal.tsx","icons/UsageIcon.tsx","screens/Console/Buckets/ViewBucket/ViewBucket.tsx","screens/Console/Buckets/Buckets.tsx","screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Dashboard/Prometheus/types.ts","screens/Console/Policies/AddPolicy.tsx","screens/Console/Policies/DeletePolicy.tsx","screens/Console/Policies/Policies.tsx","screens/Console/Dashboard/Prometheus/utils.ts","screens/Console/Dashboard/Prometheus/Widgets/SingleValueWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/tooltips/LineChartTooltip.tsx","screens/Console/Dashboard/Prometheus/Widgets/LinearGraphWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/tooltips/BarChartTooltip.tsx","screens/Console/Dashboard/Prometheus/Widgets/BarChartWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/PieChartWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/SingleRepWidget.tsx","screens/Console/Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper.tsx","screens/Console/Dashboard/Prometheus/PrDashboard.tsx","icons/AllBucketsIcon.tsx","icons/EgressIcon.tsx","screens/Console/Dashboard/BasicDashboard/BasicDashboard.tsx","screens/Console/Dashboard/Dashboard.tsx","icons/minio_console_logo.svg","icons/minio_operator_logo.svg","screens/Console/Menu/utils.ts","icons/LicenseIcon.tsx","icons/LogoutIcon.tsx","icons/ConsoleIcon.tsx","icons/HealIcon.tsx","screens/Console/Menu/Menu.tsx","screens/Console/Account/AddServiceAccount.tsx","screens/Console/Account/DeleteServiceAccount.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx","utils/sortFunctions.ts","screens/Console/Account/ChangePasswordModal.tsx","screens/Console/Account/Account.tsx","screens/Console/Users/GroupsSelectors.tsx","screens/Console/Common/FormComponents/PredefinedList/PredefinedList.tsx","screens/Console/Users/AddUser.tsx","screens/Console/Users/DeleteUser.tsx","screens/Console/Users/AddToGroup.tsx","screens/Console/Policies/PolicySelectors.tsx","screens/Console/Policies/SetPolicy.tsx","screens/Console/Users/Users.tsx","screens/Console/Groups/UsersSelectors.tsx","screens/Console/Groups/AddGroup.tsx","screens/Console/Groups/DeleteGroup.tsx","screens/Console/Groups/Groups.tsx","screens/Console/Configurations/utils.ts","icons/AddIcon.tsx","screens/Console/Common/FormComponents/CSVMultiSelector/CSVMultiSelector.tsx","screens/Console/Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper.tsx","screens/Console/Configurations/ConfTargetGeneric.tsx","screens/Console/Configurations/CustomForms/EditConfiguration.tsx","screens/Console/Common/SlideOptions/SlideOptions.tsx","icons/BackSettingsIcon.tsx","screens/Console/Configurations/ConfigurationPanels/ConfigurationsList.tsx","screens/Console/Configurations/NotificationEndpoints/utils.ts","screens/Console/Configurations/CustomForms/ConfPostgres.tsx","screens/Console/Configurations/CustomForms/ConfMySql.tsx","screens/Console/Configurations/NotificationEndpoints/AddNotificationEndpoint.tsx","screens/Console/Configurations/NotificationEndpoints/NotificationTypeSelector.tsx","screens/Console/Configurations/NotificationEndpoints/ListNotificationEndpoints.tsx","screens/Console/Configurations/ConfigurationMain.tsx","screens/Console/Configurations/ConfigurationPanels/WebhookPanel.tsx","screens/Console/Tenants/ListTenants/DeleteTenant.tsx","screens/Console/Common/GenericWizard/WizardPage.tsx","screens/Console/Common/GenericWizard/GenericWizard.tsx","screens/Console/Tenants/TenantDetails/utils.ts","screens/Console/Tenants/types.ts","screens/Console/Tenants/actions.ts","utils/validationFunctions.ts","screens/Console/Tenants/utils.ts","screens/Console/Tenants/AddTenant/Steps/NameTenant.tsx","screens/Console/Tenants/ListTenants/utils.ts","screens/Console/Tenants/AddTenant/Steps/Configure.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider.tsx","screens/shared/ErrorBlock.tsx","screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Tenants/AddTenant/Steps/Security.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption.tsx","screens/Console/Tenants/AddTenant/Steps/TenantSize.tsx","screens/Console/Tenants/AddTenant/Steps/Preview.tsx","screens/Console/Tenants/AddTenant/AddTenant.tsx","screens/Console/Tenants/ListTenants/ListTenants.tsx","screens/Console/Tenants/TenantsMain.tsx","screens/Console/Tenants/TenantDetails/AddPoolModal.tsx","screens/Console/Tenants/TenantDetails/ReplicationSetup.tsx","screens/Console/Common/UsageBarWrapper/UsageBarWrapper.tsx","screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx","screens/Console/Tenants/TenantDetails/TenantDetails.tsx","screens/Console/ObjectBrowser/actions.ts","screens/Console/ObjectBrowser/BrowserBreadcrumbs.tsx","screens/Console/ObjectBrowser/BrowseBuckets.tsx","screens/Console/ObjectBrowser/ObjectBrowser.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/DeleteObject.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/CreateFolderModal.tsx","icons/UploadFile.tsx","screens/Console/Buckets/ListBuckets/Objects/utils.ts","screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx","screens/Console/Common/FormComponents/DateSelector/utils.ts","screens/Console/Common/FormComponents/DateSelector/DateSelector.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.tsx","icons/ShareIcon.tsx","icons/DownloadIcon.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/SetRetention.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/AddTagModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/DeleteTagModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/SetLegalHoldModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ObjectDetails.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectRouting.tsx","screens/Console/License/utils.ts","screens/Console/License/ActivationModal.tsx","screens/Console/License/License.tsx","screens/Console/Trace/actions.ts","utils/wsUtils.ts","screens/Console/Trace/Trace.tsx","screens/Console/Logs/actions.ts","screens/Console/Logs/ErrorLogs/ErrorLogs.tsx","screens/Console/Common/FormComponents/FilterInputWrapper/FilterInputWrapper.tsx","screens/Console/Logs/LogSearch/LogsSearchMain.tsx","screens/Console/Logs/LogsMain.tsx","screens/Console/Heal/Heal.tsx","screens/Console/Watch/actions.ts","screens/Console/Watch/Watch.tsx","screens/Console/HealthInfo/actions.ts","screens/Console/HealthInfo/types.ts","screens/Console/HealthInfo/HealthInfo.tsx","screens/Console/Console.tsx","screens/LoginPage/LoginCallback.tsx","screens/Console/actions.ts","ProtectedRoutes.tsx","Routes.tsx","reducer.ts","screens/Console/Trace/reducers.ts","screens/Console/Logs/reducers.ts","screens/Console/HealthInfo/reducers.ts","screens/Console/Watch/reducers.ts","screens/Console/reducer.ts","screens/Console/Buckets/reducers.ts","screens/Console/ObjectBrowser/reducers.ts","screens/Console/Tenants/reducer.ts","store.ts","serviceWorker.ts","theme/main.ts","index.tsx"],"names":["createBrowserHistory","USER_LOGGED","OPERATOR_MODE","MENU_OPEN","SERVER_NEEDS_RESTART","SERVER_IS_LOADING","SET_LOADING_PROGRESS","SET_SNACK_BAR_MESSAGE","SET_SERVER_DIAG_STAT","SET_ERROR_SNACK_MESSAGE","SET_SNACK_MODAL_MESSAGE","SET_MODAL_ERROR_MESSAGE","userLoggedIn","loggedIn","type","logged","setMenuOpen","open","serverNeedsRestart","needsRestart","loginStrategyType","setSnackBarMessage","message","setErrorSnackMessage","setModalSnackMessage","setModalErrorSnackMessage","minStReq","minMemReq","units","k8sUnits","k8sCalcUnits","niceBytes","x","showK8sUnits","l","n","parseInt","k8sUnitsN","toFixed","clearSession","name","storage","removeItem","document","cookie","timeFromDate","d","h","getHours","m","getMinutes","s","getSeconds","getMilliseconds","getBytes","value","unit","fromk8s","vl","parseFloat","unitsTake","powFactor","findIndex","element","factor","Math","pow","total","toString","calculateStorage","requestedBytes","forcedNodes","limitSize","drivesPerServer","intReqBytes","structureCalc","nodes","desiredCapacity","maxDiskSize","maxClusterSize","disksPerNode","isNaN","error","persistentVolumes","disks","volumePerDisk","persistentVolumeSize","numberPersistentVolumes","volumesPerServer","floor","min","max","ceil","pvSize","generatePoolName","pools","poolCounter","length","getTimeFromTimestamp","timestamp","fullDate","dateObject","Date","getFullYear","String","getMonth","padStart","getDay","nsToSeconds","nanoseconds","conversion","round","Number","EPSILON","textToRGBColor","text","hashColored","split","reduce","acc","currItem","charCodeAt","toUpperCase","api","method","url","data","request","send","then","res","body","catch","err","status","window","location","href","onError","errMessage","get","response","throwMessage","charAt","slice","Promise","reject","inputStyles","makeStyles","theme","createStyles","disabled","borderColor","borderBottomStyle","LoginField","props","classes","TextField","InputProps","connector","connect","state","withStyles","backgroundColor","paper","borderRadius","display","flexDirection","alignItems","width","height","margin","position","top","left","marginLeft","marginTop","avatar","spacing","palette","secondary","main","form","submit","boxShadow","padding","errorBlock","justifyContent","color","fontWeight","fontSize","boxSizing","mainContainer","theOcean","borderTopLeftRadius","borderBottomLeftRadius","background","oceanBg","backgroundImage","backgroundRepeat","backgroundPosition","theLogin","loadingLoginStrategy","textAlign","headerTitle","marginBottom","submitContainer","disclaimer","jwtInput","linearPredef","errorIconStyle","marginRight","useState","accessKey","setAccessKey","jwt","setJwt","secretKey","setSecretKey","setError","loginStrategy","unknown","redirect","setLoginStrategy","loginSending","setLoginSending","loginStrategyEndpoints","loginStrategyPayload","formSubmit","e","preventDefault","post","bodyResponse","localStorage","setItem","btoa","history","push","useEffect","invoke","loginDetails","loginComponent","Fragment","Typography","component","variant","className","noValidate","onSubmit","Grid","container","item","xs","fullWidth","id","onChange","target","label","autoComplete","Button","LinearProgress","replace","hostname","serviceAccount","required","CircularProgress","Paper","fieldBasic","inputLabel","overflow","fieldLabelError","paddingBottom","fieldContainer","maxWidth","tooltipContainer","modalBasic","formScrollable","maxHeight","overflowY","formSlider","clearButton","fontFamily","border","outline","cursor","floatingEnabled","right","zIndex","configureString","tooltipHelper","tooltip","checkBoxBasic","checkboxIcons","unCheckedIcon","checkedIcon","radioBasic","radioIcons","radioUnselectedIcon","radioSelectedIcon","actionsTray","alignSelf","whiteSpace","timeContainers","flexGrow","searchField","opacity","predefinedList","prefinedContainer","predefinedTitle","minHeight","innerContent","overflowX","scrollbarWidth","innerContentMultiline","objectBrowserCommon","obTitleSection","sectionTitle","lineHeight","breadcrumbs","textDecoration","selectorsCommon","multiSelectTable","settingsCommon","customTitle","borderBottom","settingsFormContainer","settingsButtonContainer","borderTop","settingsOptionsContainer","backButton","backContainer","logsCommon","logsSubContainer","widgetCommon","singleValueContainer","titleContainer","contentContainer","contentContainerWithLabel","legendBlock","bottom","flexWrap","singleLegendContainer","colorContainer","minWidth","legendLabel","textOverflow","tooltipCommon","customTooltip","labelContainer","labelColor","itemValue","valueContainer","timeStampTitle","snackBarCommon","snackBar","errorSnackBar","snackBarExternal","snackDiv","snackBarModal","wizardCommon","multiContainer","sizeFactorContainer","headerElement","paddingTop","tableTitle","poolError","paddingLeft","h3Section","descriptionText","Copyright","align","Link","useStyles","common","white","NotFound","Container","CssBaseline","Box","mt","CopyIcon","SvgIcon","xmlns","viewBox","data-name","CreateIcon","transform","fill","DeleteIcon","DashboardIcon","BucketsIcon","UsersIcon","cx","cy","rx","ry","ServiceAccountsIcon","GroupsIcon","r","TraceIcon","ConfigurationsListIcon","ClustersIcon","y","MirroringIcon","WarpIcon","WatchIcon","ADD_BUCKET_OPEN","ADD_BUCKET_NAME","ADD_BUCKET_VERSIONED","ADD_BUCKET_LOCKING","ADD_BUCKET_QUOTA","ADD_BUCKET_QUOTA_TYPE","ADD_BUCKET_QUOTA_SIZE","ADD_BUCKET_QUOTA_UNIT","ADD_BUCKET_RESET","ADD_BUCKET_RETENTION","ADD_BUCKET_RETENTION_MODE","ADD_BUCKET_RETENTION_UNIT","ADD_BUCKET_RETENTION_VALIDITY","unSelected","selected","ViewIcon","active","PencilIcon","ShareIcon","DescriptionIcon","CloudIcon","ConsoleIcon","defineIcon","onClick","valueToSend","idField","to","sendOnlyId","valueClick","buttonElement","IconButton","aria-label","size","stopPropagation","isString","HelpIcon","flexBasis","checked","Checkbox","inputProps","icon","InputLabel","htmlFor","Tooltip","title","placement","rowText","borderWidth","transitionDuration","paddingRight","generateColumnsMap","columns","containerWidth","actionsWidth","hasSelect","hasActions","selectedItems","columnsSelector","columnsShown","sortColumn","sortDirection","commonRestWidth","colsItems","filter","column","includes","elementKey","initialValue","currValue","el","calculateColumnRest","map","index","disableSort","enableSort","dataKey","headerClassName","headerTextAlign","headerRenderer","contentTextAlign","cellRenderer","rowData","isSelected","itemElement","renderConst","renderFullObject","renderElement","renderFunction","subRenderFunction","defaultSortDirection","dialogContainer","noBackground","defaultPaperHeight","allTableSettings","minTableHeader","rowUnselected","rowSelected","paginatorContainer","checkBoxHeader","actionsContainer","paginatorComponent","checkBoxRow","loadingBox","overlayColumnSelection","popoverContainer","popoverContent","shownColumnsLabel","userSelect","fontStyle","textTransform","itemActions","onSelect","records","isLoading","loadingMessage","entityName","radioSelection","customEmptyMessage","customPaperHeight","textSelectable","onColumnChange","infiniteScrollConfig","sortConfig","autoScrollToBottom","columnSelectorOpen","setColumnSelectorOpen","React","anchorEl","setAnchorEl","findView","find","openColumnsSelector","event","currentTarget","closeColumnSelector","style","aria-describedby","Popover","anchorOrigin","vertical","horizontal","transformOrigin","onClose","columnsSelection","isRowLoaded","loadMoreRows","loadMoreRecords","rowCount","recordsCount","onRowsRendered","registerChild","optionsWidth","totalOptions","sizeOptions","calculateOptionsSize","hasOptions","ref","disableHeader","headerHeight","noRowsRenderer","overscanRowCount","rowHeight","rowGetter","onRowClick","rowItem","clickAction","rowClassName","sort","triggerSort","undefined","sortBy","currentSort","currentDirection","scrollToIndex","actions","action","vlSend","hideButtonFunction","showLoaderFunction","elementActions","baseCloseLine","content","borderLeft","modalSnackMessage","system","modalSnackBar","closeContainer","closeButton","modalCloseIcon","closeIcon","titleClass","modalContent","customDialogSize","modalOpen","children","wideLimit","openSnackbar","setOpenSnackbar","customSize","Dialog","aria-labelledby","Snackbar","ContentProps","autoHideDuration","disableRipple","DialogTitle","DialogContent","root","input","InputField","textBoxContainer","textBoxWithIcon","errorState","overlayAction","multiline","placeholder","overlayIcon","errorInField","helperText","inputRebase","disableFocusRipple","disableTouchRipple","SelectStyled","InputBase","options","FormControl","Select","option","MenuItem","radioStyles","RadioButton","Radio","radioBoxContainer","optionLabel","checkedOption","selectorOptions","currentSelection","disableOptions","displayInColumn","RadioGroup","row","selectorOption","FormControlLabel","control","clsx","StyledSwitch","switchBase","track","thumb","Switch","seeMore","addSideBar","tableToolbar","wrapCell","wordWrap","noFound","tableContainer","stickyHeader","actionsTitle","tableBlock","filterField","divContainer","wrapperContainer","indicatorLabel","switchContainer","fieldDescription","switchOnly","description","indicatorLabels","containerClass","switchComponent","addBucketModalOpen","buckets","bucketName","addBucketName","versioningEnabled","addBucketVersioningEnabled","lockingEnabled","addBucketLockingEnabled","quotaEnabled","addBucketQuotaEnabled","quotaType","addBucketQuotaType","quotaSize","addBucketQuotaSize","quotaUnit","addBucketQuotaUnit","retentionEnabled","addBucketRetentionEnabled","retentionMode","addBucketRetentionMode","retentionUnit","addBucketRetentionUnit","retentionValidity","addBucketRetentionValidity","addBucketVersioned","versioned","enableObjectLocking","locking","addBucketQuota","quota","addBucketRetention","retention","mode","validity","setModalError","buttonContainer","quotaSizeContainer","closeModalAndRefresh","addLoading","setAddLoading","sendEnabled","setSendEnabled","lockingFieldDisabled","setLockingFieldDisabled","useDebounce","resetForm","valid","trim","versioning","amount","enabled","quota_type","addRecord","valueAsNumber","mapDispatchToProps","closeDeleteModalAndRefresh","deleteOpen","selectedBucket","deleteLoading","setDeleteLoading","DialogContentText","DialogActions","autoFocus","headerContainer","labelStyle","addBucketOpen","addBucketReset","setRecords","loading","setLoading","setDeleteOpen","setSelectedBucket","filterBuckets","setFilterBuckets","tableActions","bucket","filteredRecords","b","indexOf","refresh","val","disableUnderline","startAdornment","InputAdornment","startIcon","date","actualPolicy","accessPolicy","setAccessPolicy","access","setRetentionMode","setRetentionUnit","setRetentionValidity","setValid","prefix","setPrefix","suffix","setSuffix","arn","setArn","selectedEvents","setSelectedEvents","arnList","setArnList","fetchArnList","useCallback","arns","handleClick","selectedIndex","newSelected","concat","arnValues","arnConstant","configuration","events","ignoreExisting","Table","TableHead","TableRow","TableCell","TableBody","bucketEvent","removeRecord","targetURL","setTargetURL","targetBucket","setTargetBucket","region","setRegion","remoteBucketInfo","sourceBucket","remoteBucket","itemRemote","remoteARN","replicationInfo","destination_bucket","kmsKeyID","setKmsKeyID","encryptionType","setEncryptionType","encType","closeVersioningModalAndRefresh","versioningCurrentState","versioningLoading","setVersioningLoading","UsageIcon","y1","x2","y2","gradientUnits","offset","stopColor","stroke","strokeMiterlimit","strokeWidth","TabPanel","other","role","hidden","a11yProps","noRecords","gridWrapper","gridContainer","gridTemplateColumns","gridGap","masterActions","paperContainer","capitalizeFirst","doubleElement","encCheckbox","tabPan","fixedHeight","elementTitle","consumptionValue","match","info","setInfo","replicationRules","setReplicationRules","loadingBucket","setLoadingBucket","loadingEvents","setLoadingEvents","loadingVersioning","setLoadingVersioning","loadingObjectLocking","setLoadingLocking","loadingReplication","setLoadingReplication","loadingSize","setLoadingSize","loadingEncryption","setLoadingEncryption","accessPolicyScreenOpen","setAccessPolicyScreenOpen","curTab","setCurTab","addScreenOpen","setAddScreenOpen","enableEncryptionScreenOpen","setEnableEncryptionScreenOpen","selectedEvent","setSelectedEvent","bucketSize","setBucketSize","openSetReplication","setOpenSetReplication","isVersioned","setIsVersioned","hasObjectLocking","setHasObjectLocking","encryptionEnabled","setEncryptionEnabled","retentionConfigOpen","setRetentionConfigOpen","enableVersioningOpen","setEnableVersioningOpen","params","is_versioned","object_locking_enabled","rules","bucketInfo","algorithm","console","loadAllBucketData","setOpenReplicationOpen","evnt","direction","toLowerCase","propertiesIcon","handleEncryptionCheckbox","Tabs","newValue","indicatorColor","textColor","Tab","join","sidebarOpen","withRouter","path","ViewBucket","ListBuckets","NotFoundPage","require","widgetType","onBeforeChange","readOnly","lineNumbers","jsonPolicyEditor","policyEdit","policyName","setPolicyName","policyDefinition","setPolicyDefinition","JSON","stringify","parse","policy","validSave","editor","selectedPolicy","setSelectedPolicy","filterPolicies","setFilterPolicies","setPolicyEdit","fetchRecords","policies","pa","pb","elementItem","dLocalStorageV","defaultWidgetsLayout","w","minW","i","moved","static","colorsMain","panelsConfiguration","singleValue","layoutIdentifier","labelDisplayFunction","secondsValue","seconds","days","hours","minutes","years","months","diffDays","weeks","dataOuter","widgetConfiguration","outerChart","colorList","innerRadius","outerRadius","startAngle","endAngle","innerChart","pieChart","innerLabel","keyLabel","lineColor","fillColor","linearGraph","yAxisFormatter","xAxisFormatter","customStructure","originTag","displayTag","barChart","singleRep","disableYAxis","calculateMainValue","elements","metricCalc","sumValues","accumulator","sortResult","value1","value2","getWidgetsWithValue","payload","panelItem","payloadData","panelT","typeOfPayload","valueDisplay","chartSeries","valuesArray","values","totalValues","elementValue","metricKeyItem","Object","keys","metric","metricName","targets","series","plotValues","forEach","targetMaster","results","legendFormat","itemVals","labelName","metrics","keysToReplace","expToReplace","RegExp","matchItem","nwMatchItem","constructLabelNames","keyName","valInfo","itemIndex","itemToPush","seriesWithColors","series1","series2","serialC","sortedVals","chartBars","sortFunction","structureItem","metricTake","lastValue","a","valuesForBackground","eachVal","saveDashboardDistribution","linearConfiguration","pl","containerElements","chartCont","legendChart","flex","hideYAxis","panelWidth","intervalCount","ResponsiveContainer","AreaChart","CartesianGrid","strokeDasharray","strokeOpacity","XAxis","tickFormatter","interval","tick","tickCount","YAxis","domain","dataMax","hide","section","Area","fillOpacity","wrapperStyle","barChartConfiguration","CustomizedAxisTick","textAnchor","dy","BarChart","layout","barCategoryGap","tickLine","axisLine","bar","Bar","pieChartConfiguration","dataInner","middleLabel","innerColors","outerColors","PieChart","Pie","entry","Cell","dominantBaseline","dateSelectorOverride","parentDateOverride","utils","MomentUtils","DateTimePicker","ampm","format","displayErrorMessage","widgetsContainer","timeStart","setTimeStart","timeEnd","setTimeEnd","panelInformation","setPanelInformation","dashboardDistr","storedConfiguration","getItem","parsedConfig","atob","getDashboardDistribution","panels","singlePanelWidth","xSpacing","componentToUse","fetchUsage","stepCalc","periods","unix","widgets","widgetsWithValue","hpanel","totalWidth","cols","containerPadding","onLayoutChange","AllBucketsIcon","EgressIcon","notationContainer","dashboardBG","backgroundSize","dashboardContainer","smallUnit","usage","fixedHeightPaper","prettyNumber","niceBytesUsage","prettyUsage","objects","basicResult","setBasicResult","menuGroups","group","collapsible","LicenseIcon","LogoutIcon","HealIcon","operatorMode","logo","menuList","extraMargin","groupTitle","subTitleMenu","selectorArrow","borderStyle","selectorArrowOpen","pages","menuItem","menuStateBuilder","menuOpen","menuItems","NavLink","IAMPoliciesIcon","allowedPages","result","hasOwnProperty","allowedItems","forceDisplay","src","operator_logo","alt","List","groupMember","filterByGroup","ListItem","menuClicked","newMenu","setMenuCollapse","Collapse","in","timeout","unmountOnExit","page","button","ListItemIcon","ListItemText","primary","Divider","deleteSession","log","infoDetails","addSending","setAddSending","addServiceAccount","wrapText","selectedServiceAccount","warningBlock","newServiceAccount","closeModal","entity","consoleCreds","consoleExtras","access_key","secret_key","filename","createElement","setAttribute","encodeURIComponent","appendChild","click","removeChild","download","usersSort","policySort","stringSort","currentPassword","setCurrentPassword","newPassword","setNewPassword","reNewPassword","setReNewPassword","current_secret_key","new_secret_key","changePassword","imageIcon","iconRoot","setFilter","setSelectedServiceAccount","showNewCredentials","setShowNewCredentials","setNewServiceAccount","changePasswordModalOpen","setChangePasswordModalOpen","serviceAccounts","nsa","closeAddModalAndRefresh","ChangePasswordModal","selectedGroups","setSelectedGroups","fetchGroups","groups","selGroups","targetD","multiLine","strongText","selectedUser","setEnabled","currentGroups","setCurrentGroups","getUserInformation","memberOf","checkedUsers","saving","isSaving","accepted","setAccepted","users","fetchPolicies","selectedGroup","setActualPolicy","groupPolicy","userPolicy","userName","entityType","setSelectedUser","addGroupOpen","setAddGroupOpen","setCheckedUsers","policyOpen","setPolicyOpen","selectionElement","topValue","close","unCheckAll","closeAddGroupBulk","selectedUsers","setSelectedUsers","editMode","fetchUsers","selUsers","groupName","setGroupName","groupEnabled","setGroupEnabled","loadingGroup","isLoadingGroup","validGroup","setValidGroup","members","isDeleting","closeNoAction","setGroupOpen","setSelectedGroup","resGroups","notifyPostgres","notifyMysql","notifyKafka","notifyAmqp","notifyMqtt","notifyRedis","notifyNats","notifyElasticsearch","notifyWebhooks","notifyNsq","configurationElements","configuration_id","configuration_label","fieldsConfigurations","cache","compression","withBorder","etcd","identity_openid","identity_ldap","logger_webhook","audit_webhook","commonFields","notificationEndpointsFields","removeEmptyFields","formFields","field","AddIcon","inputWithBorder","commonPlaceholder","currentElements","setCurrentElements","bottomList","createRef","elementsSplit","refScroll","current","scrollIntoView","firstUpdate","useRef","useLayoutEffect","debouncedOnChange","onChangeElement","persist","updatedElement","debounce","elementsString","inputs","elementsUp","cpList","addEmptyLine","cssOutlinedInput","rootContainer","InputLabelProps","shrink","notchedOutline","valueDef","key","defaults","defValue","storedConfig","fields","defaultVals","valueHolder","setValueHolder","fieldsElements","defValList","stateInsert","setValueElement","valuesDup","fieldDefinition","logoButton","selectedConfiguration","valuesObj","setValueObj","setSaving","loadingConfig","setLoadingConfig","configValues","setConfigValues","configId","keyVals","key_values","onValueChange","masterContainer","sliderContainer","slide","float","slideOptions","currentSlide","currentSliderPosition","containerSize","block","BackSettingsIcon","strokeLinecap","initialConfiguration","iconText","customConfigurationPage","setSelectedConfiguration","currentConfiguration","setCurrentConfiguration","servicesList","actionTrigger","targetTitle","useConnectionString","setUseConnectionString","connectionString","setConnectionString","host","setHostname","dbName","setDbName","port","setPort","user","setUser","password","setPassword","sslMode","setSslMode","table","setTable","setFormat","queueDir","setQueueDir","queueLimit","setQueueLimit","comment","setComment","configToString","strValue","cs","kv","valueIndexes","n1","n2","kvFields","Map","Array","j","substr","set","parseConnectionString","useDsnString","setUseDsnString","dsnString","setDsnString","configToDsnString","regex","exec","lastIndex","parseDsnString","lambdaFormIndicator","service","saveAndRefresh","valuesArr","setValueArr","srvComponent","targetElement","nonLogos","elService","withLogos","lambdaNotif","iconContainer","nonIconContainer","pickTitle","centerElements","setService","lambdaContainer","setIsLoading","currentPanel","setCurrentPanel","resNotEndList","notification_endpoints","service_name","account_id","backClick","red","serviceName","headerLabel","selectedTab","setSelectedTab","_","logger","modalTitle","apiURL","audit","addWebhookOpen","setAddWebhookOpen","panelToDisplay","panelData","toLocaleLowerCase","selectedTenant","retypeTenant","setRetypeTenant","namespace","wizardStepContainer","wizardComponent","buttonsContainer","pageChange","componentRender","buttons","btn","toPage","buttonAction","wizardMain","wizFromContainer","wizardSteps","borderRight","listStyle","buttonList","paddedContentGrid","stepsLabel","currentStep","setCurrentStep","toElement","lastPage","nextPage","prevPage","pg","sm","md","lg","xl","step","getHardcodedAffinity","tenantName","poolName","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","labelSelector","matchExpressions","operator","topologyKey","ADD_TENANT_SET_CURRENT_PAGE","ADD_TENANT_SET_ADVANCED_MODE","ADD_TENANT_UPDATE_FIELD","ADD_TENANT_SET_PAGE_VALID","ADD_TENANT_RESET_FORM","ADD_TENANT_SET_STORAGE_CLASSES_LIST","ADD_TENANT_ADD_MINIO_KEYPAIR","ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR","ADD_TENANT_DELETE_MINIO_KEYPAIR","ADD_TENANT_ADD_CA_KEYPAIR","ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR","ADD_TENANT_DELETE_CA_KEYPAIR","ADD_TENANT_ADD_CONSOLE_CERT","ADD_TENANT_ENCRYPTION_SERVER_CERT","ADD_TENANT_ENCRYPTION_CLIENT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CA","ADD_TENANT_ENCRYPTION_GEMALTO_CA","updateAddField","pageName","fieldName","isPageValid","addConsoleCertificate","fileName","commonFormValidation","fieldsValidate","returnErrors","fieldKey","customValidation","customValidationMessage","pattern","customPatternMessage","rgx","clearValidationError","validationErrors","newValidationElement","advancedMode","tenants","createTenant","advancedModeOn","nameTenant","selectedStorageClass","storageClasses","setAdvancedMode","setStorageClassesList","setLimitSize","setValidationErrors","updateField","getNamespaceInformation","resourceQuotas","quotas","returnQuotas","rsQuota","stCName","hard","used","getLimitSizes","newStorage","storageClass","debounceNamespace","useMemo","cancel","commonValidation","isValid","frmValidationCleanup","customImage","configure","imageName","consoleImage","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","exposeMinIO","exposeConsole","customAccountValidation","commonVal","cleanValidation","idpSelection","identityProvider","openIDURL","openIDClientID","openIDSecretID","ADURL","ADSkipTLS","ADServerInsecure","ADUserNameFilter","ADGroupBaseDN","ADGroupSearchFilter","ADNameAttribute","customIDPValidation","gutterBottom","errorMessage","withBreak","errorText","valueString","fileReselect","fieldBottom","fileInputField","accept","showFileSelector","setShowSelector","evt","callback","file","files","reader","FileReader","readAsDataURL","onload","fileBase64","fileArray","fileProcess","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","caCertificates","consoleCertificate","addFileToCaCertificates","deleteCaCertificate","addCaCertificate","addKeyPair","addFileToKeyPair","deleteKeyPair","keyPair","encodedValue","cert","enableEncryption","encryption","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","enableCustomCertsForKES","serverCertificate","clientCertificate","vaultCertificate","vaultCA","gemaltoCA","addFileServerCert","addFileClientCert","addFileVaultCert","addFileVaultCa","addFileGemaltoCa","encryptionAvailable","encoded_key","encoded_cert","encryptionValidation","volumeSize","tenantSize","sizeFactor","memoryNode","ecParity","ecParityChoices","cleanECChoices","maxAllocableMemo","memorySize","distribution","ecParityCalc","usableInformation","storageFactors","erasureCode","validateMemorySize","memSize","maxMemSize","clusterSizeFactor","memoSize","capacitySize","maxMemorySize","requestedSizeBytes","memReqSize","limit","capSize","memLimitSize","setMemoryResource","ecCodeValidated","parityValidValues","totalDisks","totalNodes","defaultEC","erasureCodeSet","maxEC","rawCapacity","totalStorage","erasureStripeSet","currentParity","parityNumber","storageFactor","maxCapacity","maxTolerations","maxFailureTolerations","fourVar","erasureCodeCalc","validateClusterSize","getECValue","maxMemory","max_memory","getMaxAllocableMemory","distrCalculate","capacityToUse","calculateDistribution","ecList","ecListTransform","parsedSize","scope","validPages","closeAndRefresh","createdAccount","setCreatedAccount","hardCodedAffinity","dataSend","enable_tls","enable_console","enable_prometheus","image","console_image","expose_minio","expose_console","servers","volumes_per_server","volume_configuration","storage_class_name","resources","requests","memory","limits","affinity","erasureCodingParity","image_registry","registry","username","tenantCerts","consoleCerts","caCerts","ca_certificates","minio","crt","tls","insertEncrypt","gemaltoCAIntroduce","ca","gemalto","keysecure","endpoint","credentials","token","retry","aws","secretsmanager","kmskey","accesskey","secretkey","gcp","secretmanager","project_id","client_email","client_id","private_key_id","private_key","vaultKeyPair","vaultCAInsert","vaultTLS","vault","engine","approle","secret","ping","encryptionServerKeyPair","encryptionClientKeyPair","client","server","dataIDP","oidc","secret_id","active_directory","skip_tls_verification","server_insecure","username_format","user_search_filter","group_search_base_dn","group_search_filter","group_name_attribute","idp","newSrvAcc","cancelButton","advancedOnly","filteredWizardSteps","resetAddTenantForm","tenantsContainer","setSelectedTenant","filterTenants","setFilterTenants","tenant","resTenants","capacity","total_size","reloadData","bottomContainer","factorElements","sizeNumber","sizeDescription","onClosePoolAndReload","numberOfNodes","setNumberOfNodes","setVolumeSize","setVolumesPerSever","instanceCapacity","totalCapacity","storage_class","labels","setSourceBucket","clusterSelected","setClusterSelected","destinationBucket","setDestinationBucket","address","setAddress","setBucket","BorderLinearProgress","colorPrimary","allValue","currentUsage","centerItem","maxValue","porcentualValue","idTenant","isSending","setIsSending","minioImage","setMinioImage","setConsoleImage","setImageRegistry","imageRegistryEndpoint","setImageRegistryEndpoint","setImageRegistryUsername","setImageRegistryPassword","validMinioImage","setValidMinioImage","validConsoleImage","setValidConsoleImage","validateImage","fieldToCheck","test","containerHeader","infoGrid","updateButton","noUnderLine","poolLabel","licenseContainer","licenseInfo","licenseInfoTitle","licenseInfoValue","verifiedIcon","setCapacity","poolCount","setPoolCount","setPools","instances","setInstances","volumes","setVolumes","addPoolOpen","setAddPool","setAddBucketOpen","addReplicationOpen","setAddReplicationOpen","setTenant","loadingUsage","setLoadingUsage","usageError","setUsageError","setUsage","updateMinioVersion","setUpdateMinioVersion","setLicenseInfo","loadingLicenseInfo","setLoadingLicenseInfo","loadingActivateProduct","setLoadingActivateProduct","tenantNamespace","loadInfo","resPools","totalInstances","totalVolumes","poolNamedIndex","pool","cap","loadUsage","reload","endpoints","rel","subnet_license","organization","storage_capacity","expires_at","plan","email","licenseButton","activateProduct","OBJECT_BROWSER_ADD_ROUTE","OBJECT_BROWSER_RESET_ROUTES_LIST","OBJECT_BROWSER_REMOVE_ROUTE_LEVEL","OBJECT_BROWSER_SET_ALL_ROUTES","OBJECT_BROWSER_CREATE_FOLDER","OBJECT_BROWSER_SET_LAST_AS_FILE","OBJECT_BROWSER_DOWNLOAD_FILE_LOADER","OBJECT_BROWSER_DOWNLOADED_FILE","addRoute","route","routeType","removeRouteLevel","toRoute","setAllRoutes","currentRoute","fileIsBeingPrepared","fileDownloadStarted","objectBrowser","objectsList","listBreadcrumbs","objectItem","resetRoutesList","reset","usedSpaceCol","subTitleLabel","iconBucket","browsePaper","idElement","currentPath","newPath","globalClass","rowClass","watchList","inputField","lastElementWPadding","pathIn","selectedObject","recursive","endsWith","createFolder","newRoute","pathLabel","folderName","pathUrl","setPathUrl","folderTruncated","UploadFile","objectPath","versionID","callBack","includeVersionInCallback","anchor","xhr","XMLHttpRequest","allPathData","objectName","isNullOrUndefined","responseType","this","blob","Blob","blobUrl","URL","createObjectURL","revokeObjectURL","remove","commonIcon","defLoading","setLastAsFile","setLoadingProgress","progress","loadingProgress","routesList","downloadingFiles","fileNameText","iconFolder","iconFile","createFolderOpen","setCreateFolderOpen","setSelectedObject","filterObjects","setFilterObjects","setLoadingPromise","loadingStartTime","setLoadingStartTime","setLoadingMessage","delay","savedCallback","setInterval","clearInterval","useInterval","timeDelta","now","updateMessage","internalPaths","extraPath","currentTimestamp","p","folders","record","recordsInElement","verifyIfIsFile","removeDownloadAnimation","uploadObject","splitPaths","uploadUrl","areMultipleFiles","okMessage","withCredentials","upload","addEventListener","loaded","onerror","onloadend","formData","FormData","blobFile","append","idElementClean","pathInArray","object","version_id","Input","multiple","elementString","splitItem","last_modified","from","num","currentYear","numYear","DateSelector","forwardRef","addSwitch","onDateChange","useImperativeHandle","resetDate","dateEnabled","setDateEnabled","month","setMonth","day","setDay","year","setYear","valueSplit","currentDate","parsedMonth","parsedDay","monthForString","dayForString","parsedDate","toISOString","dateString","validDate","isDateDisabled","fieldContainerBorder","dateInput","displayEmpty","dayNumber","copyButtonContainer","dataObject","shareURL","setShareURL","isLoadingFile","setIsLoadingFile","selectedDate","setSelectedDate","dateValid","setDateValid","slDate","currDate","diffDate","getTime","dateContainer","newDate","DownloadIcon","objectInfo","statusEnabled","setStatusEnabled","setType","setDate","isDateValid","setIsDateValid","setIsSaving","alreadyConfigured","setAlreadyConfigured","retention_mode","retention_until_date","valueDate","getDate","dateElement","showSwitcher","versionId","expireDate","expires","addRetention","disableRetention","currentTags","onCloseAndUpdate","newKey","setNewKey","newLabel","setNewLabel","newTag","newTagList","tags","selectedTag","setDeleteSending","tagKey","tagLabel","cleanObject","actualInfo","legalHoldEnabled","setLegalHoldEnabled","emptyFile","is_latest","legal_hold_status","objectNameContainer","objectPathContainer","objectPathLink","propertiesContainer","propertiesItem","propertiesItemBold","propertiesValue","actionsIconContainer","actionsIcon","tagsContainer","tagText","tag","search","loadObjectData","setLoadObjectData","shareFileModalOpen","setShareFileModalOpen","retentionModalOpen","setRetentionModalOpen","tagModalOpen","setTagModalOpen","deleteTagModalOpen","setDeleteTagModalOpen","setSelectedTag","legalholdOpen","setLegalholdOpen","setActualInfo","versions","setVersions","filterVersion","setFilterVersion","pathInBucket","tagKeys","shareObject","downloadObject","includeVersion","version","updateInfo","redirectBack","reloadObjectData","Chip","deleteIcon","onDelete","deleteTag","clickable","currentItem","planDetails","price","capacityMin","capacityMax","planItems","community","communityDetail","standard","standardDetail","enterprise","enterpriseDetail","planButtons","text2","link","subnetLicenseKey","subnetLoginForm","licenseKeyField","pageTitle","buttonSignup","license","setLicense","subnetPassword","setSubnetPassword","subnetEmail","setSubnetEmail","rows","detailsContainer","detailsContainerBorder","detailsContainerBorderHighlighted","detailsTitle","activePlanHeader","planHeader","detailsPrice","detailsCapacityMax","detailsCapacityMin","itemContainer","itemContainerDetail","alignContent","itemFirst","itemHighlighted","checkIcon","buttonContainerBlank","buttonContainerHighlighted","openSourcePolicy","activateLink","clear","subnetRefreshLicenseLink","midWidth","smallWidth","licenseDescription","currentPlanBG","currentPlanButton","planItemsPadding","subnetSubTitle","fetchLicenseInfo","setCurrentPlanID","activateProductModal","setActivateProductModal","currentPlanID","loadingRefreshLicense","setLoadingRefreshLicense","details","currentPlan","TRACE_MESSAGE_RECEIVED","TRACE_RESET_MESSAGES","wsProtocol","protocol","messages","trace","traceMessageReceived","traceResetMessages","logList","sizeItem","timeItem","wsProt","c","W3CWebSocket","onopen","onmessage","ptime","moment","time","toDate","random","onclose","timeParse","fullElement","statusCode","statusMsg","LOG_MESSAGE_RECEIVED","LOG_RESET_MESSAGES","logs","logMessageReceived","logResetMessages","tab","logerror","logerror_tab","ansidefault","highlight","setHighlight","renderLog","logElement","logMessage","ConsoleMsg","highlightedLine","startsWith","errorElems","deploymentid","requestID","remotehost","userAgent","source","renderError","renderLines","buttonKit","toggleButton","inputBar","advancedLabel","advancedLabelContainer","getInformationContainer","orderButton","recordsLabel","blockCollapsed","filterOpen","endLineAction","filtersContainer","innerContainer","noticeLabel","tableFOpen","tableFClosed","setFilterOpen","apiName","setApiName","setUserAgent","setObject","setRequestID","responseStatus","setResponseStatus","sortOrder","setSortOrder","setColumnsShown","setNextPage","alreadyFetching","setAlreadyFetching","recordsResp","queryParams","fetchedResults","newResultSet","response_status_code","response_status","colName","newArray","sortData","newSortDirection","resolve","currentTab","setCurrentTab","showLogSearch","setShowLogSearch","graphContainer","scanInfo","scanData","inlineCheckboxes","start","setStart","setBucketName","bucketList","setBucketList","setRecursive","forceStart","setForceStart","forceStop","setForceStop","beforeHeal","afterHeal","objectsHealed","objectsScanned","healDuration","sizeScanned","hStatus","setHStatus","colorHealthArr","Green","Yellow","Red","Grey","cB","cA","entries","healthAfterCols","itemsScanned","healthBeforeCols","bytesScanned","datasets","bucketNames","legend","WATCH_MESSAGE_RECEIVED","WATCH_RESET_MESSAGES","watch","watchMessageReceived","watchResetMessages","searchPrefix","some","Time","HEALTH_INFO_MESSAGE_RECEIVED","HEALTH_INFO_RESET_MESSAGE","DiagStatError","DiagStatSuccess","DiagStatInProgress","healthInfo","serverDiagnosticStatus","healthInfoMessageReceived","healthInfoResetMessage","setServerDiagStat","gap","startDiagnostic","setStartDiagnostic","downloadDisabled","setDownloadDisabled","code","isServerLoading","serverIsLoading","session","snackBarMessage","toolbar","default","toolbarIcon","mixins","appBar","drawer","transition","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","enteringScreen","menuButton","menuButtonHidden","drawerPaper","drawerPaperClose","breakpoints","up","warningBar","heigh","widht","allowedRoutes","Dashboard","Buckets","ObjectBrowser","ObjectRouting","Watch","Users","Groups","Policies","Heal","Trace","LogsMain","HealthInfo","ConfigurationMain","Account","WebhookPanel","TenantsMain","TenantDetails","License","Drawer","exact","routerProps","LoginCallback","sessionId","SESSION_RESPONSE","consoleOperatorMode","saveSessionResponse","Component","sessionLoading","setSessionLoading","pathname","hot","Login","Console","initialState","initialRoute","globalReducer","combineReducers","newRouteList","indexOfTopPath","newRouteLevels","splitRoutes","routesArray","initRoute","newSetOfRoutes","newFoldersRoutes","lastRoute","splitElements","folderTrim","newItem","currentList","lastItem","newList","actualFiles","newState","has","originPageNameItems","joinValue","originValidPages","newSetOfPages","elm","changeCL","minioCerts","NCertList","minioCertsList","cleanMinioCertsList","CACerts","NACList","CACertsList","consoleCert","encServerCert","encClientCert","encVaultCert","encVaultCA","encGemaltoCA","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","Boolean","createMuiTheme","light","dark","contrastText","grey","100","200","300","400","500","600","700","800","900","typography","h1","h2","h3","h4","h5","h6","overrides","MuiButton","GlobalCss","ReactDOM","render","store","createStore","applyMiddleware","thunk","ThemeProvider","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.1ecd68ff.chunk.js","sourcesContent":["import { createBrowserHistory } from \"history\";\n\nexport default createBrowserHistory();\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nexport interface snackBarMessage {\n message: string;\n type: \"message\" | \"error\";\n}\n\nexport interface SystemState {\n loggedIn: boolean;\n operatorMode: boolean;\n sidebarOpen: boolean;\n session: string;\n userName: string;\n serverNeedsRestart: boolean;\n serverIsLoading: boolean;\n loadingProgress: number;\n snackBar: snackBarMessage;\n modalSnackBar: snackBarMessage;\n serverDiagnosticStatus: string;\n}\n\nexport const USER_LOGGED = \"USER_LOGGED\";\nexport const OPERATOR_MODE = \"OPERATOR_MODE\";\nexport const MENU_OPEN = \"MENU_OPEN\";\nexport const SERVER_NEEDS_RESTART = \"SERVER_NEEDS_RESTART\";\nexport const SERVER_IS_LOADING = \"SERVER_IS_LOADING\";\nexport const SET_LOADING_PROGRESS = \"SET_LOADING_PROGRESS\";\nexport const SET_SNACK_BAR_MESSAGE = \"SET_SNACK_BAR_MESSAGE\";\nexport const SET_SERVER_DIAG_STAT = \"SET_SERVER_DIAG_STAT\";\nexport const SET_ERROR_SNACK_MESSAGE = \"SET_ERROR_SNACK_MESSAGE\";\nexport const SET_SNACK_MODAL_MESSAGE = \"SET_SNACK_MODAL_MESSAGE\";\nexport const SET_MODAL_ERROR_MESSAGE = \"SET_MODAL_ERROR_MESSAGE\";\n\ninterface UserLoggedAction {\n type: typeof USER_LOGGED;\n logged: boolean;\n}\n\ninterface OperatorModeAction {\n type: typeof OPERATOR_MODE;\n operatorMode: boolean;\n}\n\ninterface SetMenuOpenAction {\n type: typeof MENU_OPEN;\n open: boolean;\n}\n\ninterface ServerNeedsRestartAction {\n type: typeof SERVER_NEEDS_RESTART;\n needsRestart: boolean;\n}\n\ninterface ServerIsLoading {\n type: typeof SERVER_IS_LOADING;\n isLoading: boolean;\n}\ninterface SetLoadingProgress {\n type: typeof SET_LOADING_PROGRESS;\n loadingProgress: number;\n}\n\ninterface SetServerDiagStat {\n type: typeof SET_SERVER_DIAG_STAT;\n serverDiagnosticStatus: string;\n}\n\ninterface SetSnackBarMessage {\n type: typeof SET_SNACK_BAR_MESSAGE;\n message: string;\n}\n\ninterface SetErrorSnackMessage {\n type: typeof SET_ERROR_SNACK_MESSAGE;\n message: string;\n}\n\ninterface SetModalSnackMessage {\n type: typeof SET_SNACK_MODAL_MESSAGE;\n message: string;\n}\n\ninterface SetModalErrorMessage {\n type: typeof SET_MODAL_ERROR_MESSAGE;\n message: string;\n}\n\nexport type SystemActionTypes =\n | UserLoggedAction\n | OperatorModeAction\n | SetMenuOpenAction\n | ServerNeedsRestartAction\n | ServerIsLoading\n | SetLoadingProgress\n | SetServerDiagStat\n | SetSnackBarMessage\n | SetErrorSnackMessage\n | SetModalSnackMessage\n | SetModalErrorMessage;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n MENU_OPEN,\n OPERATOR_MODE,\n SERVER_IS_LOADING,\n SERVER_NEEDS_RESTART,\n USER_LOGGED,\n SET_LOADING_PROGRESS,\n SET_SNACK_BAR_MESSAGE,\n SET_SERVER_DIAG_STAT,\n SET_ERROR_SNACK_MESSAGE,\n SET_SNACK_MODAL_MESSAGE,\n SET_MODAL_ERROR_MESSAGE,\n} from \"./types\";\n\nexport function userLoggedIn(loggedIn: boolean) {\n return {\n type: USER_LOGGED,\n logged: loggedIn,\n };\n}\n\nexport function consoleOperatorMode(operatorMode: boolean) {\n return {\n type: OPERATOR_MODE,\n operatorMode: operatorMode,\n };\n}\n\nexport function setMenuOpen(open: boolean) {\n return {\n type: MENU_OPEN,\n open: open,\n };\n}\n\nexport function serverNeedsRestart(needsRestart: boolean) {\n return {\n type: SERVER_NEEDS_RESTART,\n needsRestart: needsRestart,\n };\n}\n\nexport function serverIsLoading(isLoading: boolean) {\n return {\n type: SERVER_IS_LOADING,\n isLoading: isLoading,\n };\n}\n\nexport const setLoadingProgress = (progress: number) => {\n return {\n type: SET_LOADING_PROGRESS,\n loadingProgress: progress,\n };\n};\n\nexport const setServerDiagStat = (status: string) => {\n return {\n type: SET_SERVER_DIAG_STAT,\n serverDiagnosticStatus: status,\n };\n};\n\nexport const setSnackBarMessage = (message: string) => {\n return {\n type: SET_SNACK_BAR_MESSAGE,\n message,\n };\n};\n\nexport const setErrorSnackMessage = (message: string) => {\n return {\n type: SET_ERROR_SNACK_MESSAGE,\n message,\n };\n};\n\nexport const setModalSnackMessage = (message: string) => {\n return {\n type: SET_SNACK_MODAL_MESSAGE,\n message,\n };\n};\n\nexport const setModalErrorSnackMessage = (message: string) => {\n return {\n type: SET_MODAL_ERROR_MESSAGE,\n message,\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport interface ILoginDetails {\n loginStrategy: loginStrategyType;\n redirect: string;\n}\n\nexport enum loginStrategyType {\n unknown = \"unknown\",\n form = \"form\",\n redirect = \"redirect\",\n serviceAccount = \"service-account\",\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport storage from \"local-storage-fallback\";\nimport { ICapacity, IErasureCodeCalc, IStorageFactors } from \"./types\";\nimport { IPool } from \"../screens/Console/Tenants/ListTenants/types\";\n\nconst minStReq = 1073741824; // Minimal Space required for MinIO\nconst minMemReq = 2147483648; // Minimal Memory required for MinIO in bytes\n\nexport const units = [\n \"B\",\n \"KiB\",\n \"MiB\",\n \"GiB\",\n \"TiB\",\n \"PiB\",\n \"EiB\",\n \"ZiB\",\n \"YiB\",\n];\nexport const k8sUnits = [\"Ki\", \"Mi\", \"Gi\", \"Ti\", \"Pi\", \"Ei\"];\nexport const k8sCalcUnits = [\"B\", ...k8sUnits];\n\nexport const niceBytes = (x: string, showK8sUnits: boolean = false) => {\n let l = 0,\n n = parseInt(x, 10) || 0;\n\n while (n >= 1024 && ++l) {\n n = n / 1024;\n }\n //include a decimal point and a tenths-place digit if presenting\n //less than ten of KB or greater units\n const k8sUnitsN = [\"B\", ...k8sUnits];\n return (\n n.toFixed(n < 10 && l > 0 ? 1 : 0) +\n \" \" +\n (showK8sUnits ? k8sUnitsN[l] : units[l])\n );\n};\n\nexport const setCookie = (name: string, val: string) => {\n const date = new Date();\n const value = val;\n\n // Set it expire in 45 minutes\n date.setTime(date.getTime() + 45 * 60 * 1000);\n\n // Set it\n document.cookie =\n name + \"=\" + value + \"; expires=\" + date.toUTCString() + \"; path=/\";\n};\n\nexport const deleteCookie = (name: string) => {\n document.cookie = name + \"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n};\n\nexport const clearSession = () => {\n storage.removeItem(\"token\");\n deleteCookie(\"token\");\n};\n\n// timeFromDate gets time string from date input\nexport const timeFromDate = (d: Date) => {\n let h = d.getHours() < 10 ? `0${d.getHours()}` : `${d.getHours()}`;\n let m = d.getMinutes() < 10 ? `0${d.getMinutes()}` : `${d.getMinutes()}`;\n let s = d.getSeconds() < 10 ? `0${d.getSeconds()}` : `${d.getSeconds()}`;\n\n return `${h}:${m}:${s}:${d.getMilliseconds()}`;\n};\n\n// units to be used in a dropdown\nexport const factorForDropdown = () => {\n return units.map((unit) => {\n return { label: unit, value: unit };\n });\n};\n\n// units to be used in a dropdown\nexport const k8sfactorForDropdown = () => {\n return k8sUnits.map((unit) => {\n return { label: unit, value: unit };\n });\n};\n\n//getBytes, converts from a value and a unit from units array to bytes\nexport const getBytes = (\n value: string,\n unit: string,\n fromk8s: boolean = false\n) => {\n const vl: number = parseFloat(value);\n\n const unitsTake = fromk8s ? k8sCalcUnits : units;\n\n const powFactor = unitsTake.findIndex((element) => element === unit);\n\n if (powFactor === -1) {\n return \"0\";\n }\n const factor = Math.pow(1024, powFactor);\n const total = vl * factor;\n\n return total.toString(10);\n};\n\n//getTotalSize gets the total size of a value & unit\nexport const getTotalSize = (value: string, unit: string) => {\n const bytes = getBytes(value, unit, true).toString();\n return niceBytes(bytes);\n};\n\nexport const setMemoryResource = (\n memorySize: number,\n capacitySize: string,\n maxMemorySize: number\n) => {\n // value always comes as Gi\n const requestedSizeBytes = getBytes(memorySize.toString(10), \"Gi\", true);\n const memReqSize = parseInt(requestedSizeBytes, 10);\n if (maxMemorySize === 0) {\n return {\n error: \"There is no memory available for the selected number of nodes\",\n request: 0,\n limit: 0,\n };\n }\n\n if (maxMemorySize < minMemReq) {\n return {\n error: \"There are not enough memory resources available\",\n request: 0,\n limit: 0,\n };\n }\n\n if (memReqSize < minMemReq) {\n return {\n error: \"The requested memory size must be greater than 2Gi\",\n request: 0,\n limit: 0,\n };\n }\n if (memReqSize > maxMemorySize) {\n return {\n error:\n \"The requested memory is greater than the max available memory for the selected number of nodes\",\n request: 0,\n limit: 0,\n };\n }\n\n const capSize = parseInt(capacitySize, 10);\n let memLimitSize = memReqSize;\n // set memory limit based on the capacitySize\n // if capacity size is lower than 1TiB we use the limit equal to request\n if (capSize >= parseInt(getBytes(\"1\", \"Pi\", true), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"64\", \"Gi\", true), 10)\n );\n } else if (capSize >= parseInt(getBytes(\"100\", \"Ti\"), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"32\", \"Gi\", true), 10)\n );\n } else if (capSize >= parseInt(getBytes(\"10\", \"Ti\"), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"16\", \"Gi\", true), 10)\n );\n } else if (capSize >= parseInt(getBytes(\"1\", \"Ti\"), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"8\", \"Gi\", true), 10)\n );\n }\n\n return {\n error: \"\",\n request: memReqSize,\n limit: memLimitSize,\n };\n};\n\nexport const calculateDistribution = (\n capacityToUse: ICapacity,\n forcedNodes: number = 0,\n limitSize: number = 0,\n drivesPerServer: number = 0\n) => {\n let numberOfNodes = {};\n const requestedSizeBytes = getBytes(\n capacityToUse.value,\n capacityToUse.unit,\n true\n );\n\n if (parseInt(requestedSizeBytes, 10) < minStReq) {\n return {\n error: \"The pool size must be greater than 1Gi\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n pvSize: 0,\n };\n }\n\n if (forcedNodes < 4) {\n return {\n error: \"Number of nodes cannot be less than 4\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n pvSize: 0,\n };\n }\n\n if (drivesPerServer <= 0) {\n return {\n error: \"Number of drives must be at least 1\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n pvSize: 0,\n };\n }\n\n numberOfNodes = calculateStorage(\n requestedSizeBytes,\n forcedNodes,\n limitSize,\n drivesPerServer\n );\n\n return numberOfNodes;\n};\n\nconst calculateStorage = (\n requestedBytes: string,\n forcedNodes: number,\n limitSize: number,\n drivesPerServer: number\n) => {\n // Size validation\n const intReqBytes = parseInt(requestedBytes, 10);\n const maxDiskSize = minStReq * 256; // 256 GiB\n\n // We get the distribution\n return structureCalc(\n forcedNodes,\n intReqBytes,\n maxDiskSize,\n limitSize,\n drivesPerServer\n );\n};\n\nconst structureCalc = (\n nodes: number,\n desiredCapacity: number,\n maxDiskSize: number,\n maxClusterSize: number,\n disksPerNode: number = 0\n) => {\n if (\n isNaN(nodes) ||\n isNaN(desiredCapacity) ||\n isNaN(maxDiskSize) ||\n isNaN(maxClusterSize)\n ) {\n return {\n error: \"Some provided data is invalid, please try again.\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n }; // Invalid Data\n }\n\n let persistentVolumeSize = 0;\n let numberPersistentVolumes = 0;\n let volumesPerServer = 0;\n\n if (disksPerNode === 0) {\n persistentVolumeSize = Math.floor(\n Math.min(desiredCapacity / Math.max(4, nodes), maxDiskSize)\n ); // pVS = min((desiredCapacity / max(4 | nodes)) | maxDiskSize)\n\n numberPersistentVolumes = desiredCapacity / persistentVolumeSize; // nPV = dC / pVS\n volumesPerServer = numberPersistentVolumes / nodes; // vPS = nPV / n\n }\n\n if (disksPerNode) {\n volumesPerServer = disksPerNode;\n numberPersistentVolumes = volumesPerServer * nodes;\n persistentVolumeSize = Math.floor(\n desiredCapacity / numberPersistentVolumes\n );\n }\n\n // Volumes are not exact, we force the volumes number & minimize the volume size\n if (volumesPerServer % 1 > 0) {\n volumesPerServer = Math.ceil(volumesPerServer); // Increment of volumes per server\n numberPersistentVolumes = volumesPerServer * nodes; // nPV = vPS * n\n persistentVolumeSize = Math.floor(\n desiredCapacity / numberPersistentVolumes\n ); // pVS = dC / nPV\n\n const limitSize = persistentVolumeSize * volumesPerServer * nodes; // lS = pVS * vPS * n\n\n if (limitSize > maxClusterSize) {\n return {\n error: \"We were not able to allocate this server.\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n }; // Cannot allocate this server\n }\n }\n\n if (persistentVolumeSize < minStReq) {\n return {\n error:\n \"Disk Size with this combination would be less than 1Gi, please try another combination\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n }; // Cannot allocate this volume size\n }\n\n return {\n error: \"\",\n nodes,\n persistentVolumes: numberPersistentVolumes,\n disks: volumesPerServer,\n pvSize: persistentVolumeSize,\n };\n};\n\n// Erasure Code Parity Calc\nexport const erasureCodeCalc = (\n parityValidValues: string[],\n totalDisks: number,\n pvSize: number,\n totalNodes: number\n): IErasureCodeCalc => {\n // Parity Values is empty\n if (parityValidValues.length < 1) {\n return {\n error: 1,\n defaultEC: \"\",\n erasureCodeSet: 0,\n maxEC: \"\",\n rawCapacity: \"0\",\n storageFactors: [],\n };\n }\n\n const totalStorage = totalDisks * pvSize;\n const maxEC = parityValidValues[0];\n const maxParityNumber = parseInt(maxEC.split(\":\")[1], 10);\n\n const erasureStripeSet = maxParityNumber * 2; // ESS is calculated by multiplying maximum parity by two.\n\n const storageFactors: IStorageFactors[] = parityValidValues.map(\n (currentParity) => {\n const parityNumber = parseInt(currentParity.split(\":\")[1], 10);\n const storageFactor =\n erasureStripeSet / (erasureStripeSet - parityNumber);\n\n const maxCapacity = Math.floor(totalStorage / storageFactor);\n const maxTolerations =\n totalDisks - Math.floor(totalDisks / storageFactor);\n return {\n erasureCode: currentParity,\n storageFactor,\n maxCapacity: maxCapacity.toString(10),\n maxFailureTolerations: maxTolerations,\n };\n }\n );\n\n let defaultEC = maxEC;\n\n const fourVar = parityValidValues.find((element) => element === \"EC:4\");\n\n if (totalDisks >= 8 && totalNodes > 16 && fourVar) {\n defaultEC = \"EC:4\";\n }\n\n return {\n error: 0,\n storageFactors,\n maxEC,\n rawCapacity: totalStorage.toString(10),\n erasureCodeSet: erasureStripeSet,\n defaultEC,\n };\n};\n\n// Pool Name Generator\nexport const generatePoolName = (pools: IPool[]) => {\n const poolCounter = pools.length;\n\n return `pool-${poolCounter}`;\n};\n\n// seconds / minutes /hours / Days / Years calculator\nexport const niceDays = (secondsValue: string) => {\n let seconds = parseFloat(secondsValue);\n\n const days = Math.floor(seconds / (3600 * 24));\n\n seconds -= days * 3600 * 24;\n const hours = Math.floor(seconds / 3600);\n seconds -= hours * 3600;\n const minutes = Math.floor(seconds / 60);\n seconds -= minutes * 60;\n\n if (days > 365) {\n const years = days / 365;\n return `${years} year${Math.floor(years) === 1 ? \"\" : \"s\"}`;\n }\n\n if (days > 30) {\n const months = Math.floor(days / 30);\n const diffDays = days - months * 30;\n\n return `${months} month${Math.floor(months) === 1 ? \"\" : \"s\"} ${\n diffDays > 0 ? `${diffDays} day${diffDays > 1 ? \"s\" : \"\"}` : \"\"\n }`;\n }\n\n if (days >= 7 && days <= 30) {\n const weeks = Math.floor(days / 7);\n\n return `${Math.floor(weeks)} week${weeks === 1 ? \"\" : \"s\"}`;\n }\n\n if (days >= 1 && days <= 6) {\n return `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n\n return `${hours >= 1 ? `${hours} hour${hours > 1 ? \"s\" : \"\"}` : \"\"} ${\n minutes >= 1 && hours === 0\n ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"}`\n : \"\"\n } ${\n seconds >= 1 && minutes === 0 && hours === 0\n ? `${seconds} second${seconds > 1 ? \"s\" : \"\"}`\n : \"\"\n }`;\n};\n\nexport const getTimeFromTimestamp = (\n timestamp: string,\n fullDate: boolean = false\n) => {\n const dateObject = new Date(parseInt(timestamp) * 1000);\n\n if (fullDate) {\n return `${dateObject.getFullYear()}-${String(\n dateObject.getMonth() + 1\n ).padStart(2, \"0\")}-${String(dateObject.getDay()).padStart(\n 2,\n \"0\"\n )} ${dateObject.getHours()}:${String(dateObject.getMinutes()).padStart(\n 2,\n \"0\"\n )}:${String(dateObject.getSeconds()).padStart(2, \"0\")}`;\n }\n return `${dateObject.getHours()}:${String(dateObject.getMinutes()).padStart(\n 2,\n \"0\"\n )}`;\n};\n\nexport const calculateBytes = (\n x: string,\n showDecimals = false,\n roundFloor = true\n) => {\n const bytes = parseInt(x, 10);\n\n if (bytes === 0) {\n return { total: 0, unit: k8sCalcUnits[0] };\n }\n\n // Gi : GiB\n const k = 1024;\n\n // Get unit for measure\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n const fractionDigits = showDecimals ? 0 : 1;\n\n const bytesUnit = bytes / Math.pow(k, i);\n\n const roundedUnit = roundFloor ? Math.floor(bytesUnit) : bytesUnit;\n\n // Get Unit parsed\n const unitParsed = parseFloat(roundedUnit.toFixed(fractionDigits));\n const finalUnit = k8sCalcUnits[i];\n\n return { total: unitParsed, unit: finalUnit };\n};\n\nexport const nsToSeconds = (nanoseconds: number) => {\n const conversion = nanoseconds * 0.000000001;\n const round = Math.round((conversion + Number.EPSILON) * 10000) / 10000;\n\n return `${round} s`;\n};\n\nexport const textToRGBColor = (text: string) => {\n const splitText = text.split(\"\");\n\n const hashVl = splitText.reduce((acc, currItem) => {\n return acc + currItem.charCodeAt(0) + ((acc << 5) - acc);\n }, 0);\n\n const hashColored = ((hashVl * 100) & 0x00ffffff).toString(16).toUpperCase();\n\n return `#${hashColored.padStart(6, \"0\")}`;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport request from \"superagent\";\nimport get from \"lodash/get\";\nimport { clearSession } from \"../utils\";\n\nexport class API {\n invoke(method: string, url: string, data?: object) {\n return request(method, url)\n .send(data)\n .then((res) => res.body)\n .catch((err) => {\n // if we get unauthorized, kick out the user\n if (err.status === 401) {\n clearSession();\n // Refresh the whole page to ensure cache is clear\n // and we dont end on an infinite loop\n window.location.href = \"/login\";\n return;\n }\n return this.onError(err);\n });\n }\n\n onError(err: any) {\n if (err.status) {\n const errMessage = get(\n err.response,\n \"body.message\",\n err.status.toString()\n );\n\n const throwMessage =\n errMessage.charAt(0).toUpperCase() + errMessage.slice(1);\n\n return Promise.reject(throwMessage);\n } else {\n clearSession();\n window.location.href = \"/login\";\n }\n }\n}\n\nconst api = new API();\nexport default api;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport request from \"superagent\";\nimport { connect } from \"react-redux\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {\n CircularProgress,\n LinearProgress,\n Paper,\n TextFieldProps,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n makeStyles,\n Theme,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { SystemState } from \"../../types\";\nimport { userLoggedIn } from \"../../actions\";\nimport api from \"../../common/api\";\nimport { ILoginDetails, loginStrategyType } from \"./types\";\nimport history from \"../../history\";\nimport { OutlinedInputProps } from \"@material-ui/core/OutlinedInput\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n \"@global\": {\n body: {\n backgroundColor: \"#FAFAFA\",\n },\n },\n paper: {\n borderRadius: 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n width: 800,\n height: 424,\n margin: \"auto\",\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n marginLeft: -400,\n marginTop: -212,\n \"&.MuiPaper-root\": {\n borderRadius: 8,\n },\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n },\n submit: {\n margin: \"30px 0px 16px\",\n height: 40,\n boxShadow: \"none\",\n padding: \"16px 30px\",\n },\n errorBlock: {\n backgroundColor: \"#C72C48\",\n width: 800,\n height: 64,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n marginLeft: -400,\n marginTop: -290,\n color: \"#fff\",\n fontWeight: 700,\n fontSize: 14,\n borderRadius: 8,\n padding: 10,\n boxSizing: \"border-box\",\n },\n mainContainer: {\n position: \"relative\",\n height: 424,\n },\n theOcean: {\n borderTopLeftRadius: 8,\n borderBottomLeftRadius: 8,\n background:\n \"transparent linear-gradient(to bottom, #073052 0%,#05122b 100%); 0% 0% no-repeat padding-box;\",\n },\n oceanBg: {\n backgroundImage: \"url(/images/BG_Illustration.svg)\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"bottom left\",\n height: \"100%\",\n width: 324,\n },\n theLogin: {\n padding: \"40px 45px 20px 45px\",\n },\n loadingLoginStrategy: {\n textAlign: \"center\",\n },\n headerTitle: {\n marginBottom: 10,\n },\n submitContainer: {\n textAlign: \"right\",\n },\n disclaimer: {\n fontSize: 12,\n marginTop: 30,\n },\n jwtInput: {\n marginTop: 45,\n },\n linearPredef: {\n height: 10,\n },\n errorIconStyle: {\n marginRight: 3,\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n disabled: {\n \"&.MuiInput-underline::before\": {\n borderColor: \"#eaeaea\",\n borderBottomStyle: \"solid\",\n },\n },\n })\n);\n\nfunction LoginField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst mapState = (state: SystemState) => ({\n loggedIn: state.loggedIn,\n});\n\nconst connector = connect(mapState, { userLoggedIn });\n\n// The inferred type will look like:\n// {isOn: boolean, toggleOn: () => void}\n\ninterface ILoginProps {\n userLoggedIn: typeof userLoggedIn;\n classes: any;\n}\n\ninterface LoginStrategyRoutes {\n [key: string]: string;\n}\n\ninterface LoginStrategyPayload {\n [key: string]: any;\n}\n\nconst Login = ({ classes, userLoggedIn }: ILoginProps) => {\n const [accessKey, setAccessKey] = useState(\"\");\n const [jwt, setJwt] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [loginStrategy, setLoginStrategy] = useState({\n loginStrategy: loginStrategyType.unknown,\n redirect: \"\",\n });\n const [loginSending, setLoginSending] = useState(false);\n\n const loginStrategyEndpoints: LoginStrategyRoutes = {\n form: \"/api/v1/login\",\n \"service-account\": \"/api/v1/login/operator\",\n };\n const loginStrategyPayload: LoginStrategyPayload = {\n form: { accessKey, secretKey },\n \"service-account\": { jwt },\n };\n\n const fetchConfiguration = () => {\n api\n .invoke(\"GET\", \"/api/v1/login\")\n .then((loginDetails: ILoginDetails) => {\n setLoginStrategy(loginDetails);\n setError(\"\");\n if (\n loginDetails.loginStrategy === \"redirect\" &&\n loginDetails.redirect !== \"\"\n ) {\n //location.href = loginDetails.redirect;\n }\n })\n .catch((err: any) => {\n setError(err);\n });\n };\n\n const formSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setLoginSending(true);\n request\n .post(\n loginStrategyEndpoints[loginStrategy.loginStrategy] || \"/api/v1/login\"\n )\n .send(loginStrategyPayload[loginStrategy.loginStrategy])\n .then((res: any) => {\n const bodyResponse = res.body;\n if (bodyResponse.error) {\n setLoginSending(false);\n // throw will be moved to catch block once bad login returns 403\n throw bodyResponse.error;\n }\n })\n .then(() => {\n // We set the state in redux\n userLoggedIn(true);\n if (loginStrategy.loginStrategy === loginStrategyType.form) {\n localStorage.setItem(\"userLoggedIn\", btoa(accessKey));\n }\n\n history.push(\"/\");\n })\n .catch((err) => {\n setLoginSending(false);\n setError(err.message);\n });\n };\n\n useEffect(() => {\n fetchConfiguration();\n }, []);\n\n let loginComponent = null;\n\n switch (loginStrategy.loginStrategy) {\n case loginStrategyType.form: {\n loginComponent = (\n \n \n Console Login\n \n
\n \n \n ) =>\n setAccessKey(e.target.value)\n }\n label=\"Enter Access Key\"\n name=\"accessKey\"\n autoComplete=\"username\"\n disabled={loginSending}\n />\n \n \n ) =>\n setSecretKey(e.target.value)\n }\n name=\"secretKey\"\n label=\"Enter Secret Key\"\n type=\"password\"\n id=\"secretKey\"\n autoComplete=\"current-password\"\n disabled={loginSending}\n />\n \n \n \n \n Login\n \n \n \n {loginSending && }\n \n \n Don't have an access key?\n
\n
\n Contact your administrator to have one made\n
\n
\n
\n );\n break;\n }\n case loginStrategyType.redirect: {\n loginComponent = (\n \n \n Login\n \n \n Welcome\n \n \n );\n break;\n }\n case loginStrategyType.serviceAccount: {\n loginComponent = (\n \n \n Operator Login\n \n
\n \n \n ) =>\n setJwt(e.target.value)\n }\n label=\"JWT\"\n name=\"jwt\"\n autoComplete=\"off\"\n disabled={loginSending}\n />\n \n \n \n \n Login\n \n \n \n {loginSending && }\n \n \n Don't have an access key?\n
\n Contact your administrator to have one made\n
\n
\n
\n );\n break;\n }\n default:\n loginComponent = (\n \n );\n }\n\n return (\n \n {error !== \"\" && (\n
\n {\" \"}\n {error}\n
\n )}\n \n \n \n
\n \n \n {loginComponent}\n \n \n \n \n );\n};\n\nexport default connector(withStyles(styles)(Login));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const fieldBasic = {\n inputLabel: {\n fontWeight: 600,\n marginRight: 10,\n fontSize: 15,\n color: \"#000\",\n textAlign: \"left\" as const,\n overflow: \"hidden\",\n \"& span\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n display: \"flex\",\n },\n fieldLabelError: {\n paddingBottom: 22,\n },\n fieldContainer: {\n marginBottom: 20,\n position: \"relative\" as const,\n maxWidth: 840,\n margin: \"0px auto\",\n },\n tooltipContainer: {\n marginLeft: 5,\n display: \"flex\",\n alignItems: \"center\",\n },\n};\n\nexport const modalBasic = {\n formScrollable: {\n maxHeight: \"calc(100vh - 300px)\" as const,\n overflowY: \"auto\" as const,\n marginBottom: 25,\n },\n formSlider: {\n marginLeft: 0,\n },\n clearButton: {\n fontFamily: \"Lato, sans-serif\",\n border: \"0\",\n backgroundColor: \"transparent\",\n color: \"#393939\",\n fontWeight: 600,\n fontSize: 14,\n marginRight: 10,\n outline: \"0\",\n padding: \"16px 25px 16px 25px\",\n cursor: \"pointer\",\n },\n floatingEnabled: {\n position: \"absolute\" as const,\n right: 58,\n zIndex: 1000,\n marginTop: -38,\n },\n configureString: {\n border: \"#EAEAEA 1px solid\",\n borderRadius: 4,\n padding: \"24px 50px\",\n overflowY: \"auto\" as const,\n height: 170,\n maxWidth: 840,\n margin: \"0 auto\",\n },\n};\n\nexport const tooltipHelper = {\n tooltip: {\n fontSize: 16,\n },\n};\n\nconst checkBoxBasic = {\n width: 14,\n height: 14,\n borderRadius: 2,\n};\n\nexport const checkboxIcons = {\n unCheckedIcon: { ...checkBoxBasic, border: \"1px solid #c3c3c3\" },\n checkedIcon: {\n ...checkBoxBasic,\n border: \"1px solid #081C42\",\n backgroundColor: \"#081C42\",\n },\n};\n\nconst radioBasic = {\n width: 12,\n height: 12,\n borderRadius: \"100%\",\n \"input:disabled ~ &\": {\n border: \"1px solid #9C9C9C\",\n },\n};\n\nexport const radioIcons = {\n radioUnselectedIcon: { ...radioBasic, border: \"1px solid #000\" },\n radioSelectedIcon: {\n ...radioBasic,\n border: \"1px solid #000\",\n backgroundColor: \"#000\",\n },\n};\n\nexport const containerForHeader = (bottomSpacing: any) => ({\n container: {\n padding: \"110px 33px 0\",\n \"& h6\": {\n color: \"#777777\",\n fontSize: 14,\n },\n \"& p\": {\n \"& span:not(*[class*='smallUnit'])\": {\n fontSize: 16,\n },\n },\n },\n});\n\nexport const actionsTray = {\n label: {\n color: \"#393939\",\n fontWeight: 600,\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n timeContainers: {\n height: 40,\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n \"& button\": {\n flexGrow: 0,\n marginLeft: 15,\n },\n },\n};\n\nexport const searchField = {\n searchField: {\n flexGrow: 1,\n height: 40,\n background: \"#FFFFFF\",\n borderRadius: 5,\n border: \"#EAEDEE 1px solid\",\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"0 16px\",\n \"& input\": {\n fontSize: 12,\n fontWeight: 700,\n color: \"#000\",\n \"&::placeholder\": {\n color: \"#393939\",\n opacity: 1,\n },\n },\n \"&:hover\": {\n borderColor: \"#000\",\n },\n },\n};\n\nexport const predefinedList = {\n prefinedContainer: {\n maxWidth: 840,\n width: \"100%\",\n margin: \"0 auto\",\n },\n predefinedTitle: {\n fontSize: 16,\n fontWeight: 600,\n color: \"#000\",\n margin: \"10px 0\",\n },\n predefinedList: {\n backgroundColor: \"#eaeaea\",\n padding: \"12px 10px\",\n color: \"#393939\",\n fontSize: 12,\n fontWeight: 600,\n minHeight: 41,\n },\n innerContent: {\n width: \"100%\",\n overflowX: \"auto\" as const,\n whiteSpace: \"nowrap\" as const,\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n innerContentMultiline: {\n width: \"100%\",\n maxHeight: 100,\n overflowY: \"auto\" as const,\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n};\n\nexport const objectBrowserCommon = {\n obTitleSection: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n marginBottom: 20,\n },\n sectionTitle: {\n fontSize: 22,\n color: \"#000\",\n fontWeight: 600,\n height: 40,\n lineHeight: \"40px\",\n },\n breadcrumbs: {\n fontSize: 10,\n color: \"#000\",\n marginTop: 2,\n \"& a\": {\n textDecoration: \"none\",\n color: \"#000\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n },\n};\n\nexport const selectorsCommon = {\n multiSelectTable: {\n height: 200,\n },\n};\n\nexport const settingsCommon = {\n customTitle: {\n fontSize: 18,\n color: \"#000\",\n fontWeight: 600,\n padding: \"12px 0\",\n borderBottom: \"#eaedee 1px solid\",\n marginBottom: 10,\n margin: \"15px 38px 27px\",\n },\n settingsFormContainer: {\n height: \"calc(100vh - 421px)\",\n padding: \"15px 38px\",\n overflowY: \"auto\" as const,\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n settingsButtonContainer: {\n borderTop: \"1px solid #EAEAEA\",\n padding: \"15px 38px\",\n textAlign: \"right\" as const,\n },\n settingsOptionsContainer: {\n height: \"calc(100vh - 244px)\",\n backgroundColor: \"#fff\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n marginTop: 15,\n },\n backButton: {\n cursor: \"pointer\",\n fontSize: 10,\n fontWeight: 600,\n color: \"#000\",\n backgroundColor: \"transparent\",\n border: 0,\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n \"&:active, &:focus\": {\n outline: 0,\n },\n \"& svg\": {\n width: 10,\n marginRight: 4,\n },\n },\n backContainer: {\n margin: \"20px 38px 0\",\n },\n};\n\nexport const logsCommon = {\n logsSubContainer: {\n height: \"calc(100vh - 230px)\",\n padding: \"15px 0\",\n },\n};\n\nexport const widgetCommon = {\n singleValueContainer: {\n position: \"relative\" as const,\n flexGrow: 1,\n width: \"100%\",\n height: \"100%\",\n border: \"#EAEAEA 1px solid\",\n borderRadius: 5,\n backgroundColor: \"#fff\",\n },\n titleContainer: {\n color: \"#393939\",\n fontWeight: 600,\n height: 15,\n textAlign: \"center\" as const,\n fontSize: 10,\n },\n contentContainer: {\n flexGrow: 2,\n justifyContent: \"center\" as const,\n alignItems: \"center\" as const,\n display: \"flex\" as const,\n position: \"absolute\" as const,\n width: \"100%\",\n height: \"calc(100% - 15px)\",\n },\n contentContainerWithLabel: {\n height: \"calc(100% - 25px)\",\n },\n legendBlock: {\n position: \"absolute\" as const,\n bottom: 5,\n display: \"flex\" as const,\n width: \"100%\",\n height: 15,\n flexWrap: \"wrap\" as const,\n overflowY: \"auto\" as const,\n },\n singleLegendContainer: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0 10px\",\n maxWidth: \"100%\",\n },\n colorContainer: {\n width: 8,\n height: 8,\n minWidth: 8,\n borderRadius: \"100%\",\n marginRight: 5,\n },\n legendLabel: {\n fontSize: \"80%\",\n color: \"#393939\",\n whiteSpace: \"nowrap\" as const,\n overflow: \"hidden\" as const,\n textOverflow: \"ellipsis\" as const,\n },\n};\n\nexport const tooltipCommon = {\n customTooltip: {\n backgroundColor: \"rgba(255, 255, 255, 0.90)\",\n border: \"#eaeaea 1px solid\",\n borderRadius: 3,\n padding: \"5px 10px\",\n maxHeight: 300,\n overflowY: \"auto\" as const,\n },\n labelContainer: {\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n },\n labelColor: {\n width: 6,\n height: 6,\n display: \"block\" as const,\n borderRadius: \"100%\",\n marginRight: 5,\n },\n itemValue: {\n fontSize: \"75%\",\n color: \"#393939\",\n },\n valueContainer: {\n fontWeight: 600,\n },\n timeStampTitle: {\n fontSize: \"80%\",\n color: \"#9c9c9c\",\n textAlign: \"center\" as const,\n marginBottom: 6,\n },\n};\n\nexport const snackBarCommon = {\n snackBar: {\n backgroundColor: \"#081F44\",\n fontWeight: 400,\n fontFamily: \"Lato, sans-serif\",\n fontSize: 14,\n padding: \"0px 20px 0px 20px;\",\n boxShadow: \"none\" as const,\n \"&.MuiPaper-root.MuiSnackbarContent-root\": {\n borderRadius: \"0px 0px 5px 5px\",\n },\n \"& div\": {\n textAlign: \"center\" as const,\n padding: \"6px 30px\",\n width: \"100%\",\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n },\n errorSnackBar: {\n backgroundColor: \"#C72C48\",\n color: \"#fff\",\n },\n snackBarExternal: {\n top: \"-17px\",\n position: \"absolute\" as const,\n minWidth: \"348px\",\n whiteSpace: \"nowrap\" as const,\n height: \"33px\",\n },\n snackDiv: {\n top: \"17px\",\n left: \"50%\",\n position: \"absolute\" as const,\n },\n snackBarModal: {\n top: 0,\n position: \"absolute\" as const,\n minWidth: \"348px\",\n whiteSpace: \"nowrap\" as const,\n height: \"33px\",\n maxWidth: \"calc(100% - 140px)\",\n },\n};\n\nexport const wizardCommon = {\n multiContainer: {\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n alignSelf: \"flex-start\" as const,\n },\n headerElement: {\n position: \"sticky\" as const,\n top: 0,\n paddingTop: 5,\n marginBottom: 10,\n zIndex: 500,\n backgroundColor: \"#fff\",\n },\n tableTitle: {\n fontWeight: 700,\n width: \"30%\",\n },\n poolError: {\n color: \"#dc1f2e\",\n fontSize: \"0.75rem\",\n paddingLeft: 120,\n },\n error: {\n color: \"#dc1f2e\",\n fontSize: \"0.75rem\",\n },\n h3Section: {\n marginTop: 0,\n },\n descriptionText: {\n fontSize: 13,\n color: \"#777777\",\n },\n container: {\n padding: \"77px 0 0 0\",\n \"& h6\": {\n color: \"#777777\",\n fontSize: 14,\n },\n \"& p\": {\n \"& span:not(*[class*='smallUnit'])\": {\n fontSize: 16,\n },\n },\n },\n};\n","import React from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\n\nexport default function Copyright() {\n return (\n \n {\"Copyright © \"}\n \n MinIO\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n \n );\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Copyright from \"../common/Copyright\";\n\nconst useStyles = makeStyles((theme) => ({\n \"@global\": {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n}));\nconst NotFound: React.FC = () => {\n const classes = useStyles();\n return (\n \n \n
\n \n 404 Not Found\n \n
\n \n \n \n
\n );\n};\n\nexport default NotFound;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst CopyIcon = () => {\n return (\n \n \n ic_h_copy-new_sl\n \n \n \n \n \n \n \n );\n};\n\nexport default CopyIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst CreateIcon = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default CreateIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst DeleteIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default DeleteIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst DashboardIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default DashboardIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst BucketsIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default BucketsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst UsersIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default UsersIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst ServiceAccountsIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ServiceAccountsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst GroupsIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default GroupsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst BucketsIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default BucketsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst TraceIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TraceIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst ConfigurationsListIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ConfigurationsListIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst ClustersIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ClustersIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst MirroringIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default MirroringIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst WarpIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default WarpIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst WatchIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default WatchIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const ADD_BUCKET_OPEN = \"ADD_BUCKET_OPEN\";\nexport const ADD_BUCKET_NAME = \"ADD_BUCKET_NAME\";\nexport const ADD_BUCKET_VERSIONED = \"ADD_BUCKET_VERSIONED\";\nexport const ADD_BUCKET_LOCKING = \"ADD_BUCKET_LOCKING\";\nexport const ADD_BUCKET_QUOTA = \"ADD_BUCKET_QUOTA\";\nexport const ADD_BUCKET_QUOTA_TYPE = \"ADD_BUCKET_QUOTA_TYPE\";\nexport const ADD_BUCKET_QUOTA_SIZE = \"ADD_BUCKET_QUOTA_SIZE\";\nexport const ADD_BUCKET_QUOTA_UNIT = \"ADD_BUCKET_QUOTA_UNIT\";\nexport const ADD_BUCKET_RESET = \"ADD_BUCKET_RESET\";\nexport const ADD_BUCKET_RETENTION = \"ADD_BUCKET_RETENTION\";\nexport const ADD_BUCKET_RETENTION_MODE = \"ADD_BUCKET_RETENTION_MODE\";\nexport const ADD_BUCKET_RETENTION_UNIT = \"ADD_BUCKET_RETENTION_UNIT\";\nexport const ADD_BUCKET_RETENTION_VALIDITY = \"ADD_BUCKET_RETENTION_VALIDITY\";\n\ninterface AddBucketOpenAction {\n type: typeof ADD_BUCKET_OPEN;\n open: boolean;\n}\n\ninterface AddBucketNameAction {\n type: typeof ADD_BUCKET_NAME;\n name: string;\n}\n\ninterface AddBucketVersionedAction {\n type: typeof ADD_BUCKET_VERSIONED;\n versioned: boolean;\n}\n\ninterface AddBucketLockingAction {\n type: typeof ADD_BUCKET_LOCKING;\n locking: boolean;\n}\n\ninterface AddBucketQuotaAction {\n type: typeof ADD_BUCKET_QUOTA;\n quota: boolean;\n}\n\ninterface AddBucketQuotaTypeAction {\n type: typeof ADD_BUCKET_QUOTA_TYPE;\n quotaType: string;\n}\n\ninterface AddBucketQuotaSizeAction {\n type: typeof ADD_BUCKET_QUOTA_SIZE;\n quotaSize: string;\n}\n\ninterface AddBucketQuotaUnitAction {\n type: typeof ADD_BUCKET_QUOTA_UNIT;\n quotaUnit: string;\n}\ninterface AddBucketResetAction {\n type: typeof ADD_BUCKET_RESET;\n}\n\ninterface AddBucketRetentionAction {\n type: typeof ADD_BUCKET_RETENTION;\n retention: boolean;\n}\n\ninterface AddBucketRetentionModeAction {\n type: typeof ADD_BUCKET_RETENTION_MODE;\n retentionMode: string;\n}\n\ninterface AddBucketRetentionUnitAction {\n type: typeof ADD_BUCKET_RETENTION_UNIT;\n retentionUnit: string;\n}\ninterface AddBucketRetentionValidityAction {\n type: typeof ADD_BUCKET_RETENTION_VALIDITY;\n retentionValidity: number;\n}\n\nexport type BucketActionTypes =\n | AddBucketOpenAction\n | AddBucketNameAction\n | AddBucketVersionedAction\n | AddBucketLockingAction\n | AddBucketQuotaAction\n | AddBucketQuotaTypeAction\n | AddBucketQuotaSizeAction\n | AddBucketQuotaUnitAction\n | AddBucketResetAction\n | AddBucketRetentionAction\n | AddBucketRetentionModeAction\n | AddBucketRetentionUnitAction\n | AddBucketRetentionValidityAction;\n\nexport function addBucketOpen(open: boolean) {\n return {\n type: ADD_BUCKET_OPEN,\n open: open,\n };\n}\nexport function addBucketName(name: string) {\n return {\n type: ADD_BUCKET_NAME,\n name: name,\n };\n}\n\nexport function addBucketVersioning(versioned: boolean) {\n return {\n type: ADD_BUCKET_VERSIONED,\n versioned: versioned,\n };\n}\n\nexport function addBucketEnableObjectLocking(locking: boolean) {\n return {\n type: ADD_BUCKET_LOCKING,\n locking: locking,\n };\n}\n\nexport function addBucketQuota(quota: boolean) {\n return {\n type: ADD_BUCKET_QUOTA,\n quota: quota,\n };\n}\n\nexport function addBucketQuotaType(quotaType: string) {\n return {\n type: ADD_BUCKET_QUOTA_TYPE,\n quotaType: quotaType,\n };\n}\n\nexport function addBucketQuotaSize(quotaSize: string) {\n return {\n type: ADD_BUCKET_QUOTA_SIZE,\n quotaSize: quotaSize,\n };\n}\n\nexport function addBucketQuotaUnit(quotaUnit: string) {\n return {\n type: ADD_BUCKET_QUOTA_UNIT,\n quotaUnit: quotaUnit,\n };\n}\n\nexport function addBucketReset() {\n return {\n type: ADD_BUCKET_RESET,\n };\n}\n\nexport function addBucketRetention(retention: boolean) {\n return {\n type: ADD_BUCKET_RETENTION,\n retention: retention,\n };\n}\n\nexport function addBucketRetentionMode(mode: string) {\n return {\n type: ADD_BUCKET_RETENTION_MODE,\n retentionMode: mode,\n };\n}\n\nexport function addBucketRetentionUnit(unit: string) {\n return {\n type: ADD_BUCKET_RETENTION_UNIT,\n retentionUnit: unit,\n };\n}\n\nexport function addBucketRetentionValidity(validity: number) {\n return {\n type: ADD_BUCKET_RETENTION_VALIDITY,\n retentionValidity: validity,\n };\n}\n","export interface IIcon {\n active: boolean;\n}\n\nexport const unSelected = \"#081C42\";\nexport const selected = \"#081C42\";\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ViewIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default ViewIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst PencilIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default PencilIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ShareIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n \n );\n};\n\nexport default ShareIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DeleteIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default DeleteIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DescriptionIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default DescriptionIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst CloudIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default CloudIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ConsoleIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default ConsoleIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DeleteIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n \n );\n};\n\nexport default DeleteIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport isString from \"lodash/isString\";\nimport { IconButton } from \"@material-ui/core\";\nimport ViewIcon from \"./TableActionIcons/ViewIcon\";\nimport PencilIcon from \"./TableActionIcons/PencilIcon\";\nimport ShareIcon from \"./TableActionIcons/ShareIcon\";\nimport DeleteIcon from \"./TableActionIcons/DeleteIcon\";\nimport DescriptionIcon from \"./TableActionIcons/DescriptionIcon\";\nimport CloudIcon from \"./TableActionIcons/CloudIcon\";\nimport ConsoleIcon from \"./TableActionIcons/ConsoleIcon\";\nimport DownloadIcon from \"./TableActionIcons/DownloadIcon\";\nimport { Link } from \"react-router-dom\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\n\nconst styles = () =>\n createStyles({\n spacing: {\n margin: \"0 8px\",\n },\n });\n\ninterface IActionButton {\n type: string;\n onClick?: (id: string) => any;\n to?: string;\n valueToSend: any;\n selected: boolean;\n sendOnlyId?: boolean;\n idField: string;\n classes: any;\n}\n\nconst defineIcon = (type: string, selected: boolean) => {\n switch (type) {\n case \"view\":\n return ;\n case \"edit\":\n return ;\n case \"delete\":\n return ;\n case \"description\":\n return ;\n case \"share\":\n return ;\n case \"cloud\":\n return ;\n case \"console\":\n return ;\n case \"download\":\n return ;\n }\n\n return null;\n};\n\nconst TableActionButton = ({\n type,\n onClick,\n valueToSend,\n idField,\n selected,\n to,\n sendOnlyId = false,\n classes,\n}: IActionButton) => {\n const valueClick = sendOnlyId ? valueToSend[idField] : valueToSend;\n\n const buttonElement = (\n {\n e.stopPropagation();\n onClick(valueClick);\n }\n : () => null\n }\n className={classes.spacing}\n >\n {defineIcon(type, selected)}\n \n );\n\n if (onClick) {\n return buttonElement;\n }\n\n if (isString(to)) {\n return (\n {\n e.stopPropagation();\n }}\n >\n {buttonElement}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(TableActionButton);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst HelpIcon = (props: any) => {\n return (\n \n \n \n \n );\n};\n\nexport default HelpIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { Checkbox, Grid, InputLabel, Tooltip } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n checkboxIcons,\n fieldBasic,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface CheckBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n index?: number;\n checked: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n ...checkboxIcons,\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n margin: \"15px 0\",\n marginBottom: 0,\n flexBasis: \"initial\",\n },\n });\n\nconst CheckboxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n tooltip = \"\",\n classes,\n}: CheckBoxProps) => {\n return (\n \n \n
\n }\n icon={}\n disabled={disabled}\n />\n
\n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n
\n
\n );\n};\n\nexport default withStyles(styles)(CheckboxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { Fragment, useState } from \"react\";\nimport get from \"lodash/get\";\nimport isString from \"lodash/isString\";\nimport {\n Checkbox,\n Grid,\n IconButton,\n LinearProgress,\n Paper,\n Popover,\n Typography,\n} from \"@material-ui/core\";\nimport { AutoSizer, Column, InfiniteLoader, Table } from \"react-virtualized\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport ViewColumnIcon from \"@material-ui/icons/ViewColumn\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport ArrowDropUpIcon from \"@material-ui/icons/ArrowDropUp\";\nimport TableActionButton from \"./TableActionButton\";\nimport history from \"../../../../history\";\nimport {\n checkboxIcons,\n radioIcons,\n} from \"../FormComponents/common/styleLibrary\";\nimport CheckboxWrapper from \"../FormComponents/CheckboxWrapper/CheckboxWrapper\";\n\n//Interfaces for table Items\n\ninterface ItemActions {\n type: string;\n to?: string;\n sendOnlyId?: boolean;\n hideButtonFunction?: (itemValue: any) => boolean;\n showLoaderFunction?: (itemValue: any) => boolean;\n\n onClick?(valueToSend: any): any;\n}\n\ninterface IColumns {\n label: string;\n elementKey: string;\n renderFunction?: (input: any) => any;\n renderFullObject?: boolean;\n globalClass?: any;\n rowClass?: any;\n width?: number;\n headerTextAlign?: string;\n contentTextAlign?: string;\n enableSort?: boolean;\n}\n\ninterface IInfiniteScrollConfig {\n loadMoreRecords: (indexElements: {\n startIndex: number;\n stopIndex: number;\n }) => Promise;\n recordsCount: number;\n}\n\ninterface ISortConfig {\n triggerSort: (val: any) => any;\n currentSort: string;\n currentDirection: \"ASC\" | \"DESC\" | undefined;\n}\n\ninterface TableWrapperProps {\n itemActions?: ItemActions[] | null;\n columns: IColumns[];\n onSelect?: (e: React.ChangeEvent) => any;\n idField: string;\n isLoading: boolean;\n loadingMessage?: React.ReactNode;\n records: any[];\n classes: any;\n entityName: string;\n selectedItems?: string[];\n radioSelection?: boolean;\n customEmptyMessage?: string;\n customPaperHeight?: string;\n noBackground?: boolean;\n columnsSelector?: boolean;\n textSelectable?: boolean;\n columnsShown?: string[];\n onColumnChange?: (column: string, state: boolean) => any;\n autoScrollToBottom?: boolean;\n infiniteScrollConfig?: IInfiniteScrollConfig;\n sortConfig?: ISortConfig;\n}\n\nconst borderColor = \"#9c9c9c80\";\n\nconst rowText = {\n fontWeight: 400,\n fontSize: 14,\n borderColor: borderColor,\n borderWidth: \"0.5px\",\n height: 40,\n transitionDuration: \"0.3s\",\n padding: \"initial\",\n paddingRight: 6,\n paddingLeft: 6,\n};\n\nconst styles = () =>\n createStyles({\n dialogContainer: {\n padding: \"12px 26px 22px\",\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n padding: \"19px 38px\",\n boxShadow: \"none\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n minHeight: 200,\n overflowY: \"scroll\",\n position: \"relative\",\n \"&::-webkit-scrollbar\": {\n width: 3,\n height: 3,\n },\n },\n noBackground: {\n backgroundColor: \"transparent\",\n border: 0,\n },\n defaultPaperHeight: {\n height: \"calc(100vh - 205px)\",\n },\n allTableSettings: {\n \"& .MuiTableCell-sizeSmall:last-child\": {\n paddingRight: \"initial\",\n },\n \"& .MuiTableCell-body.MuiTableCell-sizeSmall:last-child\": {\n paddingRight: 6,\n },\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: 700,\n fontSize: 14,\n borderColor: \"#39393980\",\n borderWidth: \"0.5px\",\n padding: \"6px 0 10px\",\n },\n },\n },\n rowUnselected: {\n ...rowText,\n color: \"#393939\",\n },\n rowSelected: {\n ...rowText,\n color: \"#081C42\",\n fontWeight: 600,\n },\n paginatorContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n padding: \"5px 38px\",\n },\n checkBoxHeader: {\n width: 50,\n textAlign: \"left\",\n paddingRight: 10,\n \"&.MuiTableCell-paddingCheckbox\": {\n paddingBottom: 4,\n paddingLeft: 0,\n },\n },\n actionsContainer: {\n width: 150,\n borderColor: borderColor,\n },\n paginatorComponent: {\n borderBottom: 0,\n },\n checkBoxRow: {\n borderColor: borderColor,\n padding: \"0 10px 0 0\",\n },\n loadingBox: {\n paddingTop: \"100px\",\n paddingBottom: \"100px\",\n },\n overlayColumnSelection: {\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n popoverContainer: {\n position: \"relative\",\n },\n popoverContent: {\n maxHeight: 250,\n overflowY: \"auto\",\n padding: \"0 10px 10px\",\n },\n shownColumnsLabel: {\n color: \"#9c9c9c\",\n fontSize: 12,\n padding: 10,\n borderBottom: \"#eaeaea 1px solid\",\n width: \"100%\",\n },\n \"@global\": {\n \".rowLine\": {\n borderBottom: `1px solid ${borderColor}`,\n height: 40,\n color: \"#393939\",\n fontSize: 14,\n transitionDuration: 0.3,\n \"&:focus\": {\n outline: \"initial\",\n },\n \"&:hover:not(.ReactVirtualized__Table__headerRow)\": {\n userSelect: \"none\",\n backgroundColor: \"#ececec\",\n fontWeight: 600,\n \"&.canClick\": {\n cursor: \"pointer\",\n },\n \"&.canSelectText\": {\n userSelect: \"text\",\n },\n },\n \"& .selected\": {\n color: \"#081C42\",\n fontWeight: 600,\n },\n },\n \".headerItem\": {\n userSelect: \"none\",\n fontWeight: 700,\n fontSize: 14,\n fontStyle: \"initial\",\n display: \"flex\",\n alignItems: \"center\",\n outline: \"none\",\n },\n \".ReactVirtualized__Table__headerRow\": {\n fontWeight: 700,\n fontSize: 14,\n borderColor: \"#39393980\",\n textTransform: \"initial\",\n },\n \".optionsAlignment\": {\n textAlign: \"center\",\n },\n \".text-center\": {\n textAlign: \"center\",\n },\n \".text-right\": {\n textAlign: \"right\",\n },\n \".progress-enabled\": {\n paddingTop: 3,\n display: \"inline-block\",\n margin: \"0 10px\",\n position: \"relative\",\n width: 18,\n height: 18,\n },\n \".progress-enabled > .MuiCircularProgress-root\": {\n position: \"absolute\",\n left: 0,\n top: 3,\n },\n },\n ...checkboxIcons,\n ...radioIcons,\n });\n\nconst selectWidth = 45;\n\n// Function to render elements in table\nconst subRenderFunction = (\n rowData: any,\n column: IColumns,\n isSelected: boolean\n) => {\n const itemElement = isString(rowData)\n ? rowData\n : get(rowData, column.elementKey, null); // If the element is just a string, we render it as it is\n const renderConst = column.renderFullObject ? rowData : itemElement;\n\n const renderElement = column.renderFunction\n ? column.renderFunction(renderConst)\n : renderConst; // If render function is set, we send the value to the function.\n\n return (\n \n {renderElement}\n \n );\n};\n\n// Function to calculate common column width for elements with no with size\nconst calculateColumnRest = (\n columns: IColumns[],\n containerWidth: number,\n actionsWidth: number,\n hasSelect: boolean,\n hasActions: boolean,\n columnsSelector: boolean,\n columnsShown: string[]\n) => {\n let colsItems = [...columns];\n\n if (columnsSelector) {\n colsItems = columns.filter((column) =>\n columnsShown.includes(column.elementKey)\n );\n }\n\n let initialValue = containerWidth;\n\n if (hasSelect) {\n initialValue -= selectWidth;\n }\n\n if (hasActions) {\n initialValue -= actionsWidth;\n }\n\n let freeSpacing = colsItems.reduce((total, currValue) => {\n return currValue.width ? total - currValue.width : total;\n }, initialValue);\n\n return freeSpacing / colsItems.filter((el) => !el.width).length;\n};\n\n// Function that renders Columns in table\nconst generateColumnsMap = (\n columns: IColumns[],\n containerWidth: number,\n actionsWidth: number,\n hasSelect: boolean,\n hasActions: boolean,\n selectedItems: string[],\n idField: string,\n columnsSelector: boolean,\n columnsShown: string[],\n sortColumn: string,\n sortDirection: \"ASC\" | \"DESC\" | undefined\n) => {\n const commonRestWidth = calculateColumnRest(\n columns,\n containerWidth,\n actionsWidth,\n hasSelect,\n hasActions,\n columnsSelector,\n columnsShown\n );\n return columns.map((column: IColumns, index: number) => {\n if (columnsSelector && !columnsShown.includes(column.elementKey)) {\n return null;\n }\n\n const disableSort = column.enableSort ? !column.enableSort : true;\n\n return (\n (\n \n {sortColumn === column.elementKey && (\n \n {sortDirection === \"ASC\" ? (\n \n ) : (\n \n )}\n \n )}\n {column.label}\n \n )}\n className={\n column.contentTextAlign ? `text-${column.contentTextAlign}` : \"\"\n }\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField]\n )\n : false;\n return subRenderFunction(rowData, column, isSelected);\n }}\n width={column.width || commonRestWidth}\n disableSort={disableSort}\n defaultSortDirection={\"ASC\"}\n />\n );\n });\n};\n\n// Function to render the action buttons\nconst elementActions = (\n actions: ItemActions[],\n valueToSend: any,\n selected: boolean,\n idField: string\n) => {\n return actions.map((action: ItemActions, index: number) => {\n if (action.type === \"view\") {\n return null;\n }\n\n const vlSend =\n typeof valueToSend === \"string\" ? valueToSend : valueToSend[idField];\n\n if (action.hideButtonFunction) {\n if (action.hideButtonFunction(vlSend)) {\n return null;\n }\n }\n\n if (action.showLoaderFunction) {\n if (action.showLoaderFunction(vlSend)) {\n return (\n
\n \n
\n );\n }\n }\n\n return (\n \n );\n });\n};\n\n// Function to calculate the options column width according elements inside\nconst calculateOptionsSize = (containerWidth: number, totalOptions: number) => {\n const minContainerSize = 80;\n const sizeOptions = totalOptions * 45;\n\n if (sizeOptions < minContainerSize) {\n return minContainerSize;\n }\n\n if (sizeOptions > containerWidth) {\n return containerWidth;\n }\n\n return sizeOptions;\n};\n\n// Main function to render the Table Wrapper\nconst TableWrapper = ({\n itemActions,\n columns,\n onSelect,\n records,\n isLoading,\n loadingMessage = Loading...,\n entityName,\n selectedItems,\n idField,\n classes,\n radioSelection = false,\n customEmptyMessage = \"\",\n customPaperHeight = \"\",\n noBackground = false,\n columnsSelector = false,\n textSelectable = false,\n columnsShown = [],\n onColumnChange = (column: string, state: boolean) => {},\n infiniteScrollConfig,\n sortConfig,\n autoScrollToBottom = false,\n}: TableWrapperProps) => {\n const [columnSelectorOpen, setColumnSelectorOpen] = useState(false);\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const findView = itemActions\n ? itemActions.find((el) => el.type === \"view\")\n : null;\n\n const clickAction = (rowItem: any) => {\n if (findView) {\n const valueClick = findView.sendOnlyId ? rowItem[idField] : rowItem;\n if (findView.to) {\n history.push(`${findView.to}/${valueClick}`);\n return;\n }\n\n if (findView.onClick) {\n findView.onClick(valueClick);\n }\n }\n };\n\n const openColumnsSelector = (event: { currentTarget: any }) => {\n setColumnSelectorOpen(!columnSelectorOpen);\n setAnchorEl(event.currentTarget);\n };\n\n const closeColumnSelector = () => {\n setColumnSelectorOpen(false);\n setAnchorEl(null);\n };\n\n const columnsSelection = (columns: IColumns[]) => {\n return (\n \n \n \n \n \n
Shown Columns
\n
\n {columns.map((column: IColumns) => {\n return (\n {\n onColumnChange(column.elementKey, e.target.checked);\n }}\n id={`chbox-${column.label}`}\n name={`chbox-${column.label}`}\n value={column.label}\n />\n );\n })}\n
\n \n
\n );\n };\n\n return (\n \n \n {isLoading && (\n \n \n {loadingMessage}\n \n \n \n \n \n )}\n {columnsSelector && !isLoading && records.length > 0 && (\n
\n {columnsSelection(columns)}\n
\n )}\n {records && !isLoading && records.length > 0 ? (\n !!records[index]}\n loadMoreRows={\n infiniteScrollConfig\n ? infiniteScrollConfig.loadMoreRecords\n : () => new Promise(() => true)\n }\n rowCount={\n infiniteScrollConfig\n ? infiniteScrollConfig.recordsCount\n : records.length\n }\n >\n {({ onRowsRendered, registerChild }) => (\n \n {({ width, height }: any) => {\n const optionsWidth = calculateOptionsSize(\n width,\n itemActions\n ? itemActions.filter((el) => el.type !== \"view\").length\n : 0\n );\n const hasSelect: boolean = !!(onSelect && selectedItems);\n const hasOptions: boolean = !!(\n (itemActions && itemActions.length > 1) ||\n (itemActions &&\n itemActions.length === 1 &&\n itemActions[0].type !== \"view\")\n );\n return (\n (\n \n {customEmptyMessage !== \"\"\n ? customEmptyMessage\n : `There are no ${entityName} yet.`}\n \n )}\n overscanRowCount={10}\n rowHeight={40}\n width={width}\n rowCount={records.length}\n rowGetter={({ index }) => records[index]}\n onRowClick={({ rowData }) => {\n clickAction(rowData);\n }}\n rowClassName={`rowLine ${findView ? \"canClick\" : \"\"} ${\n !findView && textSelectable ? \"canSelectText\" : \"\"\n }`}\n onRowsRendered={onRowsRendered}\n sort={sortConfig ? sortConfig.triggerSort : undefined}\n sortBy={sortConfig ? sortConfig.currentSort : undefined}\n sortDirection={\n sortConfig ? sortConfig.currentDirection : undefined\n }\n scrollToIndex={\n autoScrollToBottom ? records.length - 1 : -1\n }\n >\n {hasSelect && (\n Select}\n dataKey={idField}\n width={selectWidth}\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField]\n )\n : false;\n\n return (\n {\n e.stopPropagation();\n }}\n checkedIcon={\n \n }\n icon={\n \n }\n />\n );\n }}\n />\n )}\n {generateColumnsMap(\n columns,\n width,\n optionsWidth,\n hasSelect,\n hasOptions,\n selectedItems || [],\n idField,\n columnsSelector,\n columnsShown,\n sortConfig ? sortConfig.currentSort : \"\",\n sortConfig ? sortConfig.currentDirection : undefined\n )}\n {hasOptions && (\n Options}\n dataKey={idField}\n width={optionsWidth}\n headerClassName=\"optionsAlignment\"\n className=\"optionsAlignment\"\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField]\n )\n : false;\n return elementActions(\n itemActions || [],\n rowData,\n isSelected,\n idField\n );\n }}\n />\n )}\n \n );\n }}\n \n )}\n \n ) : (\n \n {!isLoading && (\n
\n {customEmptyMessage !== \"\"\n ? customEmptyMessage\n : `There are no ${entityName} yet.`}\n
\n )}\n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(TableWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { snackBarCommon } from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n setModalSnackMessage: typeof setModalSnackMessage;\n}\n\nconst baseCloseLine = {\n content: '\" \"',\n borderLeft: \"2px solid #9C9C9C\",\n height: 33,\n width: 1,\n position: \"absolute\",\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n dialogContainer: {\n padding: \"8px 15px 22px\",\n },\n closeContainer: {\n textAlign: \"right\",\n },\n closeButton: {\n width: 45,\n height: 45,\n padding: 0,\n backgroundColor: \"initial\",\n \"&:hover\": {\n backgroundColor: \"initial\",\n },\n \"&:active\": {\n backgroundColor: \"initial\",\n },\n },\n modalCloseIcon: {\n fontSize: 35,\n color: \"#9C9C9C\",\n fontWeight: 300,\n \"&:hover\": {\n color: \"#9C9C9C\",\n },\n },\n closeIcon: {\n \"&::before\": {\n ...baseCloseLine,\n transform: \"rotate(45deg)\",\n },\n \"&::after\": {\n ...baseCloseLine,\n transform: \"rotate(-45deg)\",\n },\n \"&:hover::before, &:hover::after\": {\n borderColor: \"#9C9C9C\",\n },\n width: 24,\n height: 24,\n display: \"block\",\n position: \"relative\",\n },\n titleClass: {\n padding: \"0px 50px 12px\",\n \"& h2\": {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 22,\n },\n },\n modalContent: {\n padding: \"0 50px\",\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n setModalSnackMessage,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n setOpenSnackbar(true);\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"md\" as const, fullWidth: true };\n\n return (\n \n
\n {\n closeSnackBar();\n }}\n message={modalSnackMessage ? modalSnackMessage.message : \"\"}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? 10000\n : 5000\n }\n />\n
\n \n \n \n
\n \n {title}\n \n \n {children}\n \n
\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@material-ui/core\";\nimport { OutlinedInputProps } from \"@material-ui/core/OutlinedInput\";\nimport {\n createStyles,\n makeStyles,\n Theme,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n },\n textBoxWithIcon: {\n position: \"relative\",\n paddingRight: 25,\n },\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n position: \"absolute\",\n top: 7,\n right: 7,\n },\n overlayAction: {\n position: \"absolute\",\n right: 0,\n top: 15,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n borderRadius: 0,\n \"&::before\": {\n borderColor: \"#9c9c9c\",\n },\n },\n disabled: {\n \"&.MuiInput-underline::before\": {\n borderColor: \"#eaeaea\",\n borderBottomStyle: \"solid\",\n },\n },\n input: {\n padding: \"15px 30px 10px 5px\",\n color: \"#393939\",\n fontSize: 13,\n fontWeight: 600,\n \"&:placeholder\": {\n color: \"#393939\",\n opacity: 1,\n },\n },\n error: {\n color: \"#b53b4b\",\n },\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayAction,\n classes,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n\n
\n \n
\n {overlayIcon && (\n
\n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n InputBase,\n Tooltip,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface selectorTypes {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n options: selectorTypes[];\n value: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n onChange: (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => void;\n disabled?: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n lineHeight: 1,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n },\n input: {\n position: \"relative\",\n color: \"#393939\",\n fontSize: 13,\n fontWeight: 600,\n padding: \"15px 20px 10px 10px\",\n borderBottom: \"1px solid #9c9c9c\",\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover\": {\n borderColor: \"#393939\",\n },\n \"&:focus\": {\n backgroundColor: \"#fff\",\n },\n },\n })\n)(InputBase);\n\nconst SelectWrapper = ({\n classes,\n id,\n name,\n onChange,\n options,\n label,\n tooltip = \"\",\n value,\n disabled = false,\n}: SelectProps) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n \n }\n disabled={disabled}\n >\n {options.map((option) => (\n \n {option.label}\n \n ))}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(SelectWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Radio, { RadioProps } from \"@material-ui/core/Radio\";\nimport { InputLabel, Tooltip } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n makeStyles,\n} from \"@material-ui/core/styles\";\nimport { fieldBasic, radioIcons, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\nexport interface SelectorTypes {\n label: string;\n value: string;\n}\n\ninterface RadioGroupProps {\n selectorOptions: SelectorTypes[];\n currentSelection: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n disableOptions?: boolean;\n onChange: (e: React.ChangeEvent) => void;\n classes: any;\n displayInColumn?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n radioBoxContainer: {},\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n justifyContent: \"space-between\",\n borderBottom: \"#9c9c9c 1px solid\",\n paddingBottom: 10,\n marginTop: 11,\n },\n optionLabel: {\n \"&.Mui-disabled\": {\n \"& .MuiFormControlLabel-label\": {\n color: \"#9c9c9c\",\n },\n },\n \"&:last-child\": {\n marginRight: 0,\n },\n \"& .MuiFormControlLabel-label\": {\n fontSize: 12,\n color: \"#000\",\n },\n },\n checkedOption: {\n \"& .MuiFormControlLabel-label\": {\n fontSize: 12,\n color: \"#000\",\n fontWeight: 700,\n },\n },\n });\n\nconst radioStyles = makeStyles({\n root: {\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n },\n ...radioIcons,\n});\n\nconst RadioButton = (props: RadioProps) => {\n const classes = radioStyles();\n\n return (\n }\n icon={}\n {...props}\n />\n );\n};\n\nexport const RadioGroupSelector = ({\n selectorOptions = [],\n currentSelection,\n label,\n id,\n name,\n onChange,\n tooltip = \"\",\n disableOptions = false,\n classes,\n displayInColumn = false,\n}: RadioGroupProps) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n\n
\n \n {selectorOptions.map((selectorOption) => {\n return (\n }\n label={selectorOption.label}\n disabled={disableOptions}\n className={clsx(classes.optionLabel, {\n [classes.checkedOption]:\n selectorOption.value === currentSelection,\n })}\n />\n );\n })}\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(RadioGroupSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { InputLabel, Switch, Tooltip, Typography } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { actionsTray, fieldBasic } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface IFormSwitch {\n label?: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n description?: string;\n index?: number;\n indicatorLabels?: string[];\n checked: boolean;\n switchOnly?: boolean;\n containerClass?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#081C42\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#081C42\",\n },\n },\n },\n divContainer: {\n borderBottom: \"#9c9c9c 1px solid\",\n paddingBottom: 14,\n marginBottom: 20,\n },\n wrapperContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n maxWidth: 840,\n margin: \"0px auto\",\n },\n indicatorLabel: {\n fontSize: 12,\n fontWeight: 600,\n color: \"#081C42\",\n margin: \"0 8px 0 10px\",\n },\n switchContainer: {\n display: \"flex\",\n },\n fieldDescription: {\n marginTop: 4,\n color: \"#999999\",\n },\n ...actionsTray,\n ...fieldBasic,\n });\n\nconst StyledSwitch = withStyles({\n root: {\n alignItems: \"flex-start\",\n height: 18,\n padding: \"0 12px\",\n display: \"flex\",\n position: \"relative\",\n },\n switchBase: {\n color: \"#fff\",\n padding: 0,\n top: \"initial\",\n \"&$checked\": {\n color: \"#fff\",\n },\n \"&$checked + $track\": {\n backgroundColor: \"#081C42\",\n opacity: 1,\n height: 15,\n },\n \"&:hover\": {\n backgroundColor: \"#fff\",\n },\n },\n checked: {},\n track: {\n height: 15,\n backgroundColor: \"#9C9C9C\",\n border: \"#081C42 1px solid\",\n opacity: 1,\n padding: 0,\n marginTop: 1.5,\n \"&$checked\": {\n backgroundColor: \"#081C42\",\n },\n },\n thumb: {\n backgroundColor: \"#fff\",\n border: \"#081C42 1px solid\",\n boxShadow: \"none\",\n width: 18,\n height: 18,\n padding: 0,\n marginLeft: 10,\n },\n})(Switch);\n\nconst FormSwitchWrapper = ({\n label = \"\",\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n switchOnly = false,\n tooltip = \"\",\n description = \"\",\n indicatorLabels = [],\n containerClass = \"\",\n classes,\n}: IFormSwitch) => {\n const switchComponent = (\n \n
\n \n {indicatorLabels.length === 2 && (\n \n {checked ? indicatorLabels[0] : indicatorLabels[1]}\n \n )}\n
\n
\n );\n\n if (switchOnly) {\n return switchComponent;\n }\n\n return (\n
\n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n {switchComponent}\n
\n {description !== \"\" && (\n \n \n {description}\n \n \n )}\n
\n );\n};\n\nexport default withStyles(styles)(FormSwitchWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress, Typography } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { factorForDropdown, getBytes } from \"../../../../common/utils\";\nimport { AppState } from \"../../../../store\";\nimport { connect } from \"react-redux\";\nimport {\n addBucketEnableObjectLocking,\n addBucketName,\n addBucketQuota,\n addBucketQuotaSize,\n addBucketQuotaType,\n addBucketQuotaUnit,\n addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n addBucketVersioning,\n} from \"../actions\";\nimport { useDebounce } from \"use-debounce\";\nimport { MakeBucketRequest } from \"../types\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n quotaSizeContainer: {\n flexGrow: 1,\n },\n sizeFactorContainer: {\n flexGrow: 0,\n maxWidth: 80,\n marginLeft: 8,\n alignSelf: \"flex-start\" as const,\n },\n ...modalBasic,\n });\n\ninterface IAddBucketProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => void;\n addBucketName: typeof addBucketName;\n addBucketVersioned: typeof addBucketVersioning;\n enableObjectLocking: typeof addBucketEnableObjectLocking;\n addBucketQuota: typeof addBucketQuota;\n addBucketQuotaType: typeof addBucketQuotaType;\n addBucketQuotaSize: typeof addBucketQuotaSize;\n addBucketQuotaUnit: typeof addBucketQuotaUnit;\n addBucketRetention: typeof addBucketRetention;\n addBucketRetentionMode: typeof addBucketRetentionMode;\n addBucketRetentionUnit: typeof addBucketRetentionUnit;\n addBucketRetentionValidity: typeof addBucketRetentionValidity;\n setModalError: typeof setModalErrorSnackMessage;\n bucketName: string;\n versioningEnabled: boolean;\n lockingEnabled: boolean;\n quotaEnabled: boolean;\n quotaType: string;\n quotaSize: string;\n quotaUnit: string;\n retentionEnabled: boolean;\n retentionMode: string;\n retentionUnit: string;\n retentionValidity: number;\n}\n\nconst AddBucket = ({\n classes,\n open,\n closeModalAndRefresh,\n addBucketName,\n addBucketVersioned,\n enableObjectLocking,\n addBucketQuota,\n addBucketQuotaType,\n addBucketQuotaSize,\n addBucketQuotaUnit,\n addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n setModalError,\n bucketName,\n versioningEnabled,\n lockingEnabled,\n quotaEnabled,\n quotaType,\n quotaSize,\n quotaUnit,\n retentionEnabled,\n retentionMode,\n retentionUnit,\n retentionValidity,\n}: IAddBucketProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [sendEnabled, setSendEnabled] = useState(false);\n const [lockingFieldDisabled, setLockingFieldDisabled] = useState(\n false\n );\n\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n\n let request: MakeBucketRequest = {\n name: bucketName,\n versioning: versioningEnabled,\n locking: lockingEnabled,\n };\n\n if (quotaEnabled) {\n const amount = getBytes(quotaSize, quotaUnit, false);\n request.quota = {\n enabled: true,\n quota_type: quotaType,\n amount: parseInt(amount),\n };\n }\n\n if (retentionEnabled) {\n request.retention = {\n mode: retentionMode,\n unit: retentionUnit,\n validity: retentionValidity,\n };\n }\n\n api\n .invoke(\"POST\", \"/api/v1/buckets\", request)\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh(true);\n })\n .catch((err) => {\n setAddLoading(false);\n setModalError(err);\n });\n\n resetForm();\n };\n\n const [value] = useDebounce(bucketName, 1000);\n\n useEffect(() => {\n addBucketName(value);\n }, [value, addBucketName]);\n\n const resetForm = () => {\n addBucketName(\"\");\n addBucketVersioned(false);\n enableObjectLocking(false);\n addBucketQuota(false);\n addBucketQuotaType(\"hard\");\n addBucketQuotaSize(\"1\");\n addBucketQuotaUnit(\"TiB\");\n addBucketRetention(false);\n addBucketRetentionMode(\"compliance\");\n addBucketRetentionUnit(\"days\");\n addBucketRetentionValidity(1);\n };\n\n useEffect(() => {\n let valid = false;\n\n if (bucketName.trim() !== \"\") {\n valid = true;\n }\n\n if (quotaEnabled && valid) {\n if (quotaSize.trim() === \"\" || parseInt(quotaSize) === 0) {\n valid = false;\n }\n }\n\n if (!versioningEnabled || !retentionEnabled) {\n addBucketRetention(false);\n addBucketRetentionMode(\"compliance\");\n addBucketRetentionUnit(\"days\");\n addBucketRetentionValidity(1);\n }\n\n if (retentionEnabled) {\n // if retention is enabled, then objec locking should be enabled as well\n enableObjectLocking(true);\n setLockingFieldDisabled(true);\n } else {\n setLockingFieldDisabled(false);\n }\n\n if (\n retentionEnabled &&\n (Number.isNaN(retentionValidity) || retentionValidity < 1)\n ) {\n valid = false;\n }\n\n setSendEnabled(valid);\n }, [\n bucketName,\n retentionEnabled,\n lockingEnabled,\n quotaType,\n quotaSize,\n quotaUnit,\n quotaEnabled,\n retentionEnabled,\n addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n retentionValidity,\n ]);\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n addBucketName(event.target.value);\n }}\n label=\"Bucket Name\"\n value={bucketName}\n />\n \n \n \n Features\n \n
\n
\n \n ) => {\n addBucketVersioned(event.target.checked);\n }}\n description={\n \"Allows to keep multiple versions of the same object under the same key.\"\n }\n label={\"Versioning\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n \n ) => {\n enableObjectLocking(event.target.checked);\n }}\n label={\"Object Locking\"}\n description={\n \"Required to support retention and legal hold. Can only be enabled at bucket creation.\"\n }\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n \n ) => {\n addBucketQuota(event.target.checked);\n }}\n label={\"Quota\"}\n description={\"Limit the amount of data in the bucket.\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n {quotaEnabled && (\n \n \n ) => {\n addBucketQuotaType(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"hard\", label: \"Hard\" },\n { value: \"fifo\", label: \"FIFO\" },\n ]}\n />\n \n \n
\n
\n ) => {\n addBucketQuotaSize(e.target.value);\n }}\n label=\"Quota\"\n value={quotaSize}\n required\n min=\"1\"\n />\n
\n
\n \n ) => {\n addBucketQuotaUnit(e.target.value as string);\n }}\n options={factorForDropdown()}\n />\n
\n
\n
\n
\n )}\n {versioningEnabled && (\n \n ) => {\n addBucketRetention(event.target.checked);\n }}\n label={\"Retention\"}\n description={\n \"Impose rules to prevent object deletion for a period of time.\"\n }\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n )}\n {retentionEnabled && (\n \n \n ) => {\n addBucketRetentionMode(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"compliance\", label: \"Compliance\" },\n { value: \"governance\", label: \"Governance\" },\n ]}\n />\n \n \n ) => {\n addBucketRetentionUnit(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"days\", label: \"Days\" },\n { value: \"years\", label: \"Years\" },\n ]}\n />\n \n \n ) => {\n addBucketRetentionValidity(e.target.valueAsNumber);\n }}\n label=\"Retention Validity\"\n value={String(retentionValidity)}\n required\n min=\"1\"\n />\n \n \n )}\n
\n \n \n Clear\n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n addBucketModalOpen: state.buckets.open,\n bucketName: state.buckets.addBucketName,\n versioningEnabled: state.buckets.addBucketVersioningEnabled,\n lockingEnabled: state.buckets.addBucketLockingEnabled,\n quotaEnabled: state.buckets.addBucketQuotaEnabled,\n quotaType: state.buckets.addBucketQuotaType,\n quotaSize: state.buckets.addBucketQuotaSize,\n quotaUnit: state.buckets.addBucketQuotaUnit,\n retentionEnabled: state.buckets.addBucketRetentionEnabled,\n retentionMode: state.buckets.addBucketRetentionMode,\n retentionUnit: state.buckets.addBucketRetentionUnit,\n retentionValidity: state.buckets.addBucketRetentionValidity,\n});\n\nconst connector = connect(mapState, {\n addBucketName: addBucketName,\n addBucketVersioned: addBucketVersioning,\n enableObjectLocking: addBucketEnableObjectLocking,\n addBucketQuota: addBucketQuota,\n addBucketQuotaType: addBucketQuotaType,\n addBucketQuotaSize: addBucketQuotaSize,\n addBucketQuotaUnit: addBucketQuotaUnit,\n addBucketRetention: addBucketRetention,\n addBucketRetentionMode: addBucketRetentionMode,\n addBucketRetentionUnit: addBucketRetentionUnit,\n addBucketRetentionValidity: addBucketRetentionValidity,\n setModalError: setModalErrorSnackMessage,\n});\n\nexport default connector(withStyles(styles)(AddBucket));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { BucketList } from \"../types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\n\ninterface IDeleteBucketProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedBucket: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteBucket = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n setErrorSnackMessage,\n}: IDeleteBucketProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (!deleteLoading) {\n setDeleteLoading(true);\n\n api\n .invoke(\"DELETE\", `/api/v1/buckets/${selectedBucket}`, {\n name: selectedBucket,\n })\n .then((res: BucketList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n }\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Bucket\n \n {deleteLoading && }\n \n Are you sure you want to delete bucket {selectedBucket}?
\n A bucket can only be deleted if it's empty.\n
\n
\n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteBucket);\n","import React from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\n\ninterface IPageHeader {\n classes: any;\n label: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerContainer: {\n position: \"absolute\",\n width: \"100%\",\n height: 77,\n display: \"flex\",\n backgroundColor: \"#fff\",\n borderBottom: \"#E3E3E3 1px solid\",\n left: 0,\n },\n label: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n },\n labelStyle: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 700,\n marginLeft: 55,\n marginTop: 8,\n },\n });\n\nconst PageHeader = ({ classes, label }: IPageHeader) => {\n return (\n \n \n \n {label}\n \n \n \n );\n};\n\nexport default withStyles(styles)(PageHeader);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport Moment from \"react-moment\";\nimport { Bucket, BucketList } from \"../types\";\nimport { CreateIcon } from \"../../../../icons\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { AppState } from \"../../../../store\";\nimport { addBucketOpen, addBucketReset } from \"../actions\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddBucket from \"./AddBucket\";\nimport DeleteBucket from \"./DeleteBucket\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IListBucketsProps {\n classes: any;\n addBucketOpen: typeof addBucketOpen;\n addBucketModalOpen: boolean;\n addBucketReset: typeof addBucketReset;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst ListBuckets = ({\n classes,\n addBucketOpen,\n addBucketModalOpen,\n addBucketReset,\n setErrorSnackMessage,\n}: IListBucketsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedBucket, setSelectedBucket] = useState(\"\");\n const [filterBuckets, setFilterBuckets] = useState(\"\");\n\n useEffect(() => {\n if (loading) {\n const fetchRecords = () => {\n setLoading(true);\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n setLoading(false);\n setRecords(res.buckets || []);\n })\n .catch((err: any) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n };\n fetchRecords();\n }\n }, [loading, setErrorSnackMessage]);\n\n const closeAddModalAndRefresh = (refresh: boolean) => {\n addBucketOpen(false);\n addBucketReset();\n\n if (refresh) {\n setLoading(true);\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n setLoading(true);\n }\n };\n\n const confirmDeleteBucket = (bucket: string) => {\n setDeleteOpen(true);\n setSelectedBucket(bucket);\n };\n\n const tableActions = [\n { type: \"view\", to: `/buckets`, sendOnlyId: true },\n { type: \"delete\", onClick: confirmDeleteBucket, sendOnlyId: true },\n ];\n\n const displayParsedDate = (date: string) => {\n return {date};\n };\n\n const filteredRecords = records.filter((b: Bucket) => {\n if (filterBuckets === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterBuckets) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n return (\n \n {addBucketModalOpen && (\n \n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n \n \n \n \n {\n setFilterBuckets(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={() => {\n addBucketOpen(true);\n }}\n >\n Create Bucket\n \n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n addBucketModalOpen: state.buckets.open,\n});\n\nconst connector = connect(mapState, {\n addBucketOpen,\n addBucketReset,\n setErrorSnackMessage,\n});\n\nexport default connector(withStyles(styles)(ListBuckets));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\ninterface ISetAccessPolicyProps {\n classes: any;\n open: boolean;\n bucketName: string;\n actualPolicy: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst SetAccessPolicy = ({\n classes,\n open,\n bucketName,\n actualPolicy,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: ISetAccessPolicyProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [accessPolicy, setAccessPolicy] = useState(\"\");\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"PUT\", `/api/v1/buckets/${bucketName}/set-policy`, {\n access: accessPolicy,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n setAccessPolicy(actualPolicy);\n }, [setAccessPolicy, actualPolicy]);\n\n return (\n {\n closeModalAndRefresh();\n }}\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n setAccessPolicy(e.target.value as string);\n }}\n options={[\n { value: \"PRIVATE\", label: \"Private\" },\n { value: \"PUBLIC\", label: \"Public\" },\n ]}\n />\n \n \n \n \n Set\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SetAccessPolicy));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\ninterface ISetRetentionConfigProps {\n classes: any;\n open: boolean;\n bucketName: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst SetRetentionConfig = ({\n classes,\n open,\n bucketName,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: ISetRetentionConfigProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [retentionMode, setRetentionMode] = useState(\"compliance\");\n const [retentionUnit, setRetentionUnit] = useState(\"days\");\n const [retentionValidity, setRetentionValidity] = useState(1);\n const [valid, setValid] = useState(false);\n\n const setRetention = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"PUT\", `/api/v1/buckets/${bucketName}/retention`, {\n mode: retentionMode,\n unit: retentionUnit,\n validity: retentionValidity,\n })\n .then(() => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n if (Number.isNaN(retentionValidity) || retentionValidity < 1) {\n setValid(false);\n return;\n }\n setValid(true);\n }, [retentionValidity]);\n\n return (\n {\n closeModalAndRefresh();\n }}\n >\n ) => {\n setRetention(e);\n }}\n >\n \n \n \n ) => {\n setRetentionMode(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"compliance\", label: \"Compliance\" },\n { value: \"governance\", label: \"Governance\" },\n ]}\n />\n \n \n ) => {\n setRetentionUnit(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"days\", label: \"Days\" },\n { value: \"years\", label: \"Years\" },\n ]}\n />\n \n \n ) => {\n setRetentionValidity(e.target.valueAsNumber);\n }}\n label=\"Retention Validity\"\n value={String(retentionValidity)}\n required\n min=\"1\"\n />\n \n \n \n \n Set\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SetRetentionConfig));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ChangeEvent, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport api from \"../../../../common/api\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Table from \"@material-ui/core/Table\";\nimport { ArnList } from \"../types\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface IAddEventProps {\n classes: any;\n open: boolean;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddEvent = ({\n classes,\n open,\n selectedBucket,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IAddEventProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [prefix, setPrefix] = useState(\"\");\n const [suffix, setSuffix] = useState(\"\");\n const [arn, setArn] = useState(\"\");\n const [selectedEvents, setSelectedEvents] = useState([]);\n const [arnList, setArnList] = useState([]);\n\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"POST\", `/api/v1/buckets/${selectedBucket}/events`, {\n configuration: {\n arn: arn,\n events: selectedEvents,\n prefix: prefix,\n suffix: suffix,\n },\n ignoreExisting: true,\n })\n .then(() => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const fetchArnList = useCallback(() => {\n setAddLoading(true);\n api\n .invoke(\"GET\", `/api/v1/admin/arns`)\n .then((res: ArnList) => {\n let arns: string[] = [];\n if (res.arns !== null) {\n arns = res.arns;\n }\n setAddLoading(false);\n setArnList(arns);\n })\n .catch((err: any) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [setModalErrorSnackMessage]);\n\n useEffect(() => {\n fetchArnList();\n }, [fetchArnList]);\n\n const events = [\n { label: \"PUT - Object Uploaded\", value: \"put\" },\n { label: \"GET - Object accessed\", value: \"get\" },\n { label: \"DELETE - Object Deleted\", value: \"delete\" },\n ];\n\n const handleClick = (\n event: React.MouseEvent | ChangeEvent,\n name: string\n ) => {\n const selectedIndex = selectedEvents.indexOf(name);\n let newSelected: string[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selectedEvents, name);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selectedEvents.slice(1));\n } else if (selectedIndex === selectedEvents.length - 1) {\n newSelected = newSelected.concat(selectedEvents.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n selectedEvents.slice(0, selectedIndex),\n selectedEvents.slice(selectedIndex + 1)\n );\n }\n setSelectedEvents(newSelected);\n };\n\n const arnValues = arnList.map((arnConstant) => ({\n label: arnConstant,\n value: arnConstant,\n }));\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Subscribe To Event\"\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n setArn(e.target.value as string);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"ARN\"}\n value={arn}\n options={arnValues}\n />\n \n \n \n \n \n Select\n Event\n \n \n \n {events.map((row) => (\n handleClick(event, row.value)}\n >\n \n handleClick(event, row.value)}\n checked={selectedEvents.includes(row.value)}\n />\n \n \n {row.label}\n \n \n ))}\n \n
\n
\n \n
\n
\n \n ) => {\n setPrefix(e.target.value);\n }}\n />\n \n \n ) => {\n setSuffix(e.target.value);\n }}\n />\n \n \n
\n
\n
\n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(AddEvent));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { BucketEvent, BucketList } from \"../types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\n\ninterface IDeleteEventProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedBucket: string;\n bucketEvent: BucketEvent | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteEvent = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n bucketEvent,\n setErrorSnackMessage,\n}: IDeleteEventProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n if (bucketEvent == null) {\n return;\n }\n\n setDeleteLoading(true);\n\n const events = get(bucketEvent, \"events\", []);\n const prefix = get(bucketEvent, \"prefix\", \"\");\n const suffix = get(bucketEvent, \"suffix\", \"\");\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${selectedBucket}/events/${bucketEvent.arn}`,\n {\n events,\n prefix,\n suffix,\n }\n )\n .then((res: BucketList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Event\n \n {deleteLoading && }\n \n Are you sure you want to delete the this event?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(DeleteEvent);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { IRemoteBucket } from \"../types\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IReplicationModal {\n open: boolean;\n closeModalAndRefresh: () => any;\n classes: any;\n bucketName: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst AddReplicationModal = ({\n open,\n closeModalAndRefresh,\n classes,\n bucketName,\n setModalErrorSnackMessage,\n}: IReplicationModal) => {\n const [addLoading, setAddLoading] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [targetURL, setTargetURL] = useState(\"\");\n const [targetBucket, setTargetBucket] = useState(\"\");\n const [region, setRegion] = useState(\"\");\n\n const addRecord = () => {\n const remoteBucketInfo = {\n accessKey: accessKey,\n secretKey: secretKey,\n sourceBucket: bucketName,\n targetURL: targetURL,\n targetBucket: targetBucket,\n region: region,\n };\n\n api\n .invoke(\"POST\", \"/api/v1/remote-buckets\", remoteBucketInfo)\n .then(() => {\n api\n .invoke(\"GET\", \"/api/v1/remote-buckets\")\n .then((res: any) => {\n const remoteBuckets = get(res, \"buckets\", []);\n const remoteBucket = remoteBuckets.find(\n (itemRemote: IRemoteBucket) => {\n return itemRemote.sourceBucket === bucketName;\n }\n );\n if (remoteBucket && remoteBucket.remoteARN) {\n const remoteARN = remoteBucket.remoteARN;\n const replicationInfo = {\n destination_bucket: targetBucket,\n arn: remoteARN,\n };\n api\n .invoke(\n \"POST\",\n `/api/v1/buckets/${bucketName}/replication`,\n replicationInfo\n )\n .then(() => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n });\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Set Bucket Replication\"\n >\n ) => {\n e.preventDefault();\n setAddLoading(true);\n addRecord();\n }}\n >\n \n \n \n ) => {\n setAccessKey(e.target.value);\n }}\n label=\"Access Key\"\n value={accessKey}\n />\n \n \n ) => {\n setSecretKey(e.target.value);\n }}\n label=\"Secret Key\"\n value={secretKey}\n />\n \n \n ) => {\n setTargetURL(e.target.value);\n }}\n placeholder=\"https://play.min.io:9000\"\n label=\"Target URL\"\n value={targetURL}\n />\n \n \n ) => {\n setTargetBucket(e.target.value);\n }}\n label=\"Target Bucket\"\n value={targetBucket}\n />\n \n \n ) => {\n setRegion(e.target.value);\n }}\n label=\"Region\"\n value={region}\n />\n \n \n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(AddReplicationModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface IEnableBucketEncryptionProps {\n classes: any;\n open: boolean;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst EnableBucketEncryption = ({\n classes,\n open,\n selectedBucket,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IEnableBucketEncryptionProps) => {\n const [loading, setLoading] = useState(false);\n const [kmsKeyID, setKmsKeyID] = useState(\"\");\n const [encryptionType, setEncryptionType] = useState(\"sse-s3\");\n\n const enableBucketEncryption = (event: React.FormEvent) => {\n event.preventDefault();\n if (loading) {\n return;\n }\n api\n .invoke(\"POST\", `/api/v1/buckets/${selectedBucket}/encryption/enable`, {\n encType: encryptionType,\n kmsKeyID: kmsKeyID,\n })\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: any) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Enable Bucket Encryption\"\n >\n ) => {\n enableBucketEncryption(e);\n }}\n >\n \n \n \n ) => {\n setEncryptionType(e.target.value as string);\n }}\n id=\"select-encryption-type\"\n name=\"select-encryption-type\"\n label={\"Encryption Type\"}\n value={encryptionType}\n options={[\n {\n label: \"SSE-S3\",\n value: \"sse-s3\",\n },\n {\n label: \"SSE-KMS\",\n value: \"sse-kms\",\n },\n ]}\n />\n \n \n
\n
\n {encryptionType === \"sse-kms\" && (\n \n ) => {\n setKmsKeyID(e.target.value);\n }}\n />\n \n )}\n \n
\n
\n
\n \n \n Save\n \n \n {loading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(EnableBucketEncryption));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\n\ninterface IVersioningEventProps {\n closeVersioningModalAndRefresh: (refresh: boolean) => void;\n modalOpen: boolean;\n selectedBucket: string;\n versioningCurrentState: boolean;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst EnableVersioningModal = ({\n closeVersioningModalAndRefresh,\n modalOpen,\n selectedBucket,\n versioningCurrentState,\n setErrorSnackMessage,\n}: IVersioningEventProps) => {\n const [versioningLoading, setVersioningLoading] = useState(false);\n\n const enableVersioning = () => {\n if (versioningLoading) {\n return;\n }\n setVersioningLoading(true);\n\n api\n .invoke(\"PUT\", `/api/v1/buckets/${selectedBucket}/versioning`, {\n versioning: !versioningCurrentState,\n })\n .then(() => {\n setVersioningLoading(false);\n closeVersioningModalAndRefresh(true);\n })\n .catch((err) => {\n setVersioningLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeVersioningModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Edit Versioning\n \n {versioningLoading && }\n \n Are you sure you want to{\" \"}\n {versioningCurrentState ? \"disable\" : \"enable\"}{\" \"}\n versioning for this bucket?\n {versioningCurrentState && (\n \n
\n
\n File versions won't be automatically deleted\n
\n )}\n
\n
\n \n {\n closeVersioningModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={versioningLoading}\n >\n Cancel\n \n {\n enableVersioning();\n }}\n color=\"secondary\"\n autoFocus\n >\n {versioningCurrentState ? \"Disable\" : \"Enable\"}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(EnableVersioningModal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst UsageIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default UsageIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, IconButton } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport api from \"../../../../common/api\";\nimport {\n BucketEncryptionInfo,\n BucketEvent,\n BucketEventList,\n BucketInfo,\n BucketList,\n BucketObjectLocking,\n BucketReplication,\n BucketReplicationDestination,\n BucketReplicationRule,\n BucketReplicationRuleDeleteMarker,\n BucketVersioning,\n} from \"../types\";\nimport { CreateIcon } from \"../../../../icons\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { containerForHeader } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport SetAccessPolicy from \"./SetAccessPolicy\";\nimport SetRetentionConfig from \"./SetRetentionConfig\";\nimport AddEvent from \"./AddEvent\";\nimport DeleteEvent from \"./DeleteEvent\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddReplicationModal from \"./AddReplicationModal\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport EnableBucketEncryption from \"./EnableBucketEncryption\";\nimport PencilIcon from \"../../Common/TableWrapper/TableActionIcons/PencilIcon\";\nimport EnableVersioningModal from \"./EnableVersioningModal\";\nimport Typography from \"@material-ui/core/Typography\";\nimport UsageIcon from \"../../../../icons/UsageIcon\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n actionsTray: {\n textAlign: \"right\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n searchField: {\n background: \"#FFFFFF\",\n padding: 12,\n borderRadius: 5,\n boxShadow: \"0px 3px 6px #00000012\",\n },\n noRecords: {\n lineHeight: \"24px\",\n textAlign: \"center\",\n padding: \"20px\",\n },\n gridWrapper: {\n width: 320,\n },\n gridContainer: {\n display: \"grid\",\n gridTemplateColumns: \"auto auto\",\n gridGap: 8,\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n \"& div:not(.MuiCircularProgress-root)\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& div:nth-child(odd)\": {\n justifyContent: \"flex-end\",\n fontWeight: 700,\n },\n \"& div:nth-child(2n)\": {\n minWidth: 150,\n },\n },\n masterActions: {\n width: \"25%\",\n minWidth: \"120px\",\n \"& div\": {\n margin: \"5px 0px\",\n },\n },\n paperContainer: {\n padding: 15,\n paddingLeft: 23,\n },\n headerContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n capitalizeFirst: {\n textTransform: \"capitalize\",\n },\n doubleElement: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n encCheckbox: {\n margin: 0,\n padding: 0,\n },\n tabPan: {\n marginTop: \"5px\",\n },\n fixedHeight: {\n height: 165,\n minWidth: 247,\n padding: \"25px 28px\",\n \"& svg\": {\n maxHeight: 18,\n },\n },\n elementTitle: {\n fontWeight: 500,\n color: \"#777777\",\n fontSize: 14,\n marginTop: -9,\n },\n consumptionValue: {\n color: \"#000000\",\n fontSize: \"60px\",\n fontWeight: \"bold\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IViewBucketProps {\n classes: any;\n match: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n index: any;\n value: any;\n}\n\nfunction TabPanel(props: TabPanelProps) {\n const { children, value, index, ...other } = props;\n\n return (\n
\n );\n}\n\nfunction a11yProps(index: any) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n}\n\nconst ViewBucket = ({\n classes,\n match,\n setErrorSnackMessage,\n}: IViewBucketProps) => {\n const [info, setInfo] = useState(null);\n const [records, setRecords] = useState([]);\n const [replicationRules, setReplicationRules] = useState<\n BucketReplicationRule[]\n >([]);\n const [loadingBucket, setLoadingBucket] = useState(true);\n const [loadingEvents, setLoadingEvents] = useState(true);\n const [loadingVersioning, setLoadingVersioning] = useState(true);\n const [loadingObjectLocking, setLoadingLocking] = useState(true);\n const [loadingReplication, setLoadingReplication] = useState(true);\n const [loadingSize, setLoadingSize] = useState(true);\n const [loadingEncryption, setLoadingEncryption] = useState(true);\n const [accessPolicyScreenOpen, setAccessPolicyScreenOpen] = useState(\n false\n );\n const [curTab, setCurTab] = useState(0);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [\n enableEncryptionScreenOpen,\n setEnableEncryptionScreenOpen,\n ] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedEvent, setSelectedEvent] = useState(null);\n const [bucketSize, setBucketSize] = useState(\"0\");\n const [openSetReplication, setOpenSetReplication] = useState(false);\n const [isVersioned, setIsVersioned] = useState(false);\n const [hasObjectLocking, setHasObjectLocking] = useState(false);\n const [encryptionEnabled, setEncryptionEnabled] = useState(false);\n const [retentionConfigOpen, setRetentionConfigOpen] = useState(\n false\n );\n const [enableVersioningOpen, setEnableVersioningOpen] = useState(\n false\n );\n\n const bucketName = match.params[\"bucketName\"];\n\n useEffect(() => {\n if (loadingEvents) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/events`)\n .then((res: BucketEventList) => {\n const events = get(res, \"events\", []);\n setLoadingEvents(false);\n setRecords(events || []);\n })\n .catch((err: any) => {\n setLoadingEvents(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingEvents, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingVersioning) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/versioning`)\n .then((res: BucketVersioning) => {\n setIsVersioned(res.is_versioned);\n setLoadingVersioning(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n setLoadingVersioning(false);\n });\n }\n }, [loadingVersioning, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingVersioning) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/object-locking`)\n .then((res: BucketObjectLocking) => {\n setHasObjectLocking(res.object_locking_enabled);\n setLoadingLocking(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n setLoadingLocking(false);\n });\n }\n }, [loadingObjectLocking, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingReplication) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/replication`)\n .then((res: BucketReplication) => {\n const r = res.rules ? res.rules : [];\n setReplicationRules(r);\n setLoadingReplication(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n setLoadingReplication(false);\n });\n }\n }, [loadingReplication, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingSize) {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n const resBuckets = get(res, \"buckets\", []);\n\n const bucketInfo = resBuckets.find(\n (bucket) => bucket.name === bucketName\n );\n const size = get(bucketInfo, \"size\", \"0\");\n\n setLoadingSize(false);\n setBucketSize(size);\n })\n .catch((err: any) => {\n setLoadingSize(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingSize, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingBucket) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}`)\n .then((res: BucketInfo) => {\n setLoadingBucket(false);\n setInfo(res);\n })\n .catch((err) => {\n setLoadingBucket(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingBucket, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingEncryption) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/encryption/info`)\n .then((res: BucketEncryptionInfo) => {\n if (res.algorithm) {\n setEncryptionEnabled(true);\n }\n setLoadingEncryption(false);\n })\n .catch((err) => {\n console.error(err);\n setLoadingEncryption(false);\n });\n }\n }, [loadingEncryption, bucketName]);\n\n const setBucketVersioning = () => {\n setEnableVersioningOpen(true);\n };\n\n const loadAllBucketData = () => {\n setLoadingBucket(true);\n setLoadingSize(true);\n setLoadingReplication(true);\n setLoadingVersioning(true);\n setLoadingEvents(true);\n setLoadingEncryption(true);\n };\n\n const closeAddEventAndRefresh = () => {\n setAddScreenOpen(false);\n loadAllBucketData();\n };\n\n const closeEnableBucketEncryption = () => {\n setEnableEncryptionScreenOpen(false);\n loadAllBucketData();\n };\n\n const closeSetAccessPolicy = () => {\n setAccessPolicyScreenOpen(false);\n loadAllBucketData();\n };\n\n const closeRetentionConfig = () => {\n setRetentionConfigOpen(false);\n loadAllBucketData();\n };\n\n const closeAddReplication = () => {\n setOpenReplicationOpen(false);\n loadAllBucketData();\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n loadAllBucketData();\n }\n };\n\n const confirmDeleteEvent = (evnt: BucketEvent) => {\n setDeleteOpen(true);\n setSelectedEvent(evnt);\n };\n\n const closeEnableVersioning = (refresh: boolean) => {\n setEnableVersioningOpen(false);\n if (refresh) {\n loadAllBucketData();\n }\n };\n\n let accessPolicy = \"n/a\";\n\n if (info !== null) {\n accessPolicy = info.access;\n }\n\n const eventsDisplay = (events: string[]) => {\n return {events.join(\", \")};\n };\n\n const ruleDestDisplay = (events: BucketReplicationDestination) => {\n return (\n \n {events.bucket.replace(\"arn:aws:s3:::\", \"\")}\n \n );\n };\n\n const ruleDelDisplay = (events: BucketReplicationRuleDeleteMarker) => {\n return {events.status};\n };\n\n const setOpenReplicationOpen = (open = false) => {\n setOpenSetReplication(open);\n };\n\n const handleEncryptionCheckbox = (\n event: React.ChangeEvent\n ) => {\n if (event.target.checked) {\n setEnableEncryptionScreenOpen(true);\n } else {\n api\n .invoke(\"POST\", `/api/v1/buckets/${bucketName}/encryption/disable`)\n .then(() => {\n setEncryptionEnabled(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n });\n }\n };\n\n const tableActions = [{ type: \"delete\", onClick: confirmDeleteEvent }];\n\n return (\n \n {addScreenOpen && (\n \n )}\n {enableEncryptionScreenOpen && (\n \n )}\n {accessPolicyScreenOpen && (\n \n )}\n {retentionConfigOpen && (\n \n )}\n {openSetReplication && (\n \n )}\n {deleteOpen && (\n \n )}\n {enableVersioningOpen && (\n \n )}\n ${match.params[\"bucketName\"]}`} />\n \n \n \n \n \n \n \n \n \n \n \n \n Reported Usage\n \n \n \n \n {niceBytes(bucketSize)}\n \n \n \n \n \n
\n
Access Policy:
\n
\n {loadingBucket ? (\n \n ) : (\n accessPolicy.toLowerCase()\n )}\n \n \n \n
\n
Replication:
\n
\n {replicationRules.length ? \"Yes\" : \"No\"}\n
\n {!hasObjectLocking && (\n \n
Object Locking:
\n
No
\n
\n )}\n
Encryption:
\n
\n handleEncryptionCheckbox(event)}\n checked={encryptionEnabled}\n />\n
\n
\n
\n
\n {hasObjectLocking && (\n \n \n
\n
Object Locking
\n
\n
Versioning:
\n
\n {loadingVersioning ? (\n \n ) : (\n \n {isVersioned && !loadingVersioning ? \"Yes\" : \"No\"}\n  \n {\n setAccessPolicyScreenOpen(true);\n }}\n >\n \n \n \n )}\n
\n
Retention:
\n
\n {loadingVersioning ? (\n \n ) : (\n \n  \n {\n setRetentionConfigOpen(true);\n }}\n >\n \n \n \n )}\n
\n
\n
\n
\n )}\n
\n
\n \n
\n
\n \n \n , newValue: number) => {\n setCurTab(newValue);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n >\n \n \n \n \n \n {curTab === 0 && (\n }\n size=\"medium\"\n onClick={() => {\n setAddScreenOpen(true);\n }}\n >\n Subscribe to Event\n \n )}\n {curTab === 1 && (\n }\n size=\"medium\"\n onClick={() => {\n setOpenReplicationOpen(true);\n }}\n >\n Add Replication Rule\n \n )}\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ViewBucket));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport history from \"../../../history\";\nimport { Route, Router, Switch, withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../../store\";\nimport { setMenuOpen } from \"../../../actions\";\nimport NotFoundPage from \"../../NotFoundPage\";\nimport ListBuckets from \"./ListBuckets/ListBuckets\";\nimport ViewBucket from \"./ViewBucket/ViewBucket\";\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n});\n\nconst connector = connect(mapState, { setMenuOpen });\n\nconst Buckets = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default withRouter(connector(Buckets));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Controlled as CodeMirror } from \"react-codemirror2\";\nimport { InputLabel, Tooltip } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport \"./ConsoleCodeMirror.css\";\n\nrequire(\"codemirror/mode/javascript/javascript\");\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n classes,\n onChange = () => {},\n onBeforeChange,\n readOnly = false,\n}: ICodeWrapper) => {\n return (\n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n \n
\n
\n \n \n \n
\n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n IBarChartConfiguration,\n IBarChartRelation,\n IDataSRep,\n ILinearGraphConfiguration,\n IPieChartConfiguration,\n} from \"./Widgets/types\";\n\nexport enum widgetType {\n singleValue = \"singleValue\",\n linearGraph = \"linearGraph\",\n barChart = \"barChart\",\n pieChart = \"pieChart\",\n singleRep = \"singleRep\",\n}\n\nexport interface IDashboardPanel {\n title: string;\n data: string | object[] | IDataSRep[];\n dataOuter?: string | object[];\n type: widgetType;\n layoutIdentifier: string;\n widgetConfiguration?:\n | ILinearGraphConfiguration[]\n | IBarChartConfiguration[]\n | IPieChartConfiguration;\n color?: string;\n fillColor?: string;\n innerLabel?: string;\n labelDisplayFunction?: (value: string) => any;\n disableYAxis?: boolean;\n xAxisFormatter?: (item: string) => string;\n yAxisFormatter?: (item: string) => string;\n customStructure?: IBarChartRelation[];\n}\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport api from \"../../../common/api\";\nimport { Policy } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport {\n fieldBasic,\n modalBasic,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n jsonPolicyEditor: {\n minHeight: 400,\n width: \"100%\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...fieldBasic,\n });\n\ninterface IAddPolicyProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => void;\n policyEdit: Policy;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddPolicy = ({\n classes,\n open,\n closeModalAndRefresh,\n policyEdit,\n setModalErrorSnackMessage,\n}: IAddPolicyProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [policyName, setPolicyName] = useState(\"\");\n const [policyDefinition, setPolicyDefinition] = useState(\"\");\n\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"POST\", \"/api/v1/policies\", {\n name: policyName,\n policy: policyDefinition,\n })\n .then((res) => {\n setAddLoading(false);\n\n closeModalAndRefresh(true);\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n if (policyEdit) {\n setPolicyName(policyEdit.name);\n setPolicyDefinition(\n policyEdit ? JSON.stringify(JSON.parse(policyEdit.policy), null, 4) : \"\"\n );\n }\n }, [policyEdit]);\n\n const resetForm = () => {\n setPolicyName(\"\");\n setPolicyDefinition(\"\");\n };\n\n const validSave = policyName.trim() !== \"\";\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n title={`${policyEdit ? \"Info\" : \"Create\"} Policy`}\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n setPolicyName(e.target.value);\n }}\n value={policyName}\n disabled={!!policyEdit}\n />\n \n \n
\n
\n {\n setPolicyDefinition(value);\n }}\n />\n
\n \n {!policyEdit && (\n {\n resetForm();\n }}\n >\n Clear\n \n )}\n\n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddPolicy));\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { PolicyList } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDeletePolicyProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedPolicy: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeletePolicy = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedPolicy,\n setErrorSnackMessage,\n}: IDeletePolicyProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n setDeleteLoading(true);\n api\n .invoke(\"DELETE\", `/api/v1/policy?name=${selectedPolicy}`)\n .then((res: PolicyList) => {\n setDeleteLoading(false);\n\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Policy\n \n {deleteLoading && }\n \n Are you sure you want to delete policy {selectedPolicy}?.\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeletePolicy);\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Policy, PolicyList } from \"./types\";\nimport { CreateIcon } from \"../../../icons\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport AddPolicy from \"./AddPolicy\";\nimport DeletePolicy from \"./DeletePolicy\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport api from \"../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IPoliciesProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst Policies = ({ classes, setErrorSnackMessage }: IPoliciesProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(false);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPolicy, setSelectedPolicy] = useState(\"\");\n const [filterPolicies, setFilterPolicies] = useState(\"\");\n const [policyEdit, setPolicyEdit] = useState(null);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/policies`)\n .then((res: PolicyList) => {\n const policies = get(res, \"policies\", []);\n\n policies.sort((pa, pb) => {\n if (pa.name > pb.name) {\n return 1;\n }\n\n if (pa.name < pb.name) {\n return -1;\n }\n\n return 0;\n });\n\n setLoading(false);\n setRecords(policies);\n })\n .catch((err) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loading, setLoading, setRecords, setErrorSnackMessage]);\n\n const fetchRecords = () => {\n setLoading(true);\n };\n\n const closeAddModalAndRefresh = (refresh: boolean) => {\n setAddScreenOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const confirmDeletePolicy = (policy: string) => {\n setDeleteOpen(true);\n setSelectedPolicy(policy);\n };\n\n const viewAction = (row: any) => {\n setAddScreenOpen(true);\n setPolicyEdit(row);\n };\n\n const tableActions = [\n { type: \"view\", onClick: viewAction },\n { type: \"delete\", onClick: confirmDeletePolicy, sendOnlyId: true },\n ];\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.name.includes(filterPolicies)\n );\n\n return (\n \n {addScreenOpen && (\n \n )}\n {deleteOpen && (\n \n )}\n \n \n \n \n {\n setFilterPolicies(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={() => {\n setAddScreenOpen(true);\n setPolicyEdit(null);\n }}\n >\n Create Policy\n \n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(Policies));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport get from \"lodash/get\";\nimport { Layout } from \"react-grid-layout\";\nimport { IDashboardPanel, widgetType } from \"./types\";\nimport {\n getTimeFromTimestamp,\n niceBytes,\n niceDays,\n textToRGBColor,\n} from \"../../../../common/utils\";\n\nconst dLocalStorageV = \"dashboardConfig\";\n\nexport const defaultWidgetsLayout: Layout[] = [\n {\n w: 1,\n h: 2,\n x: 0,\n y: 0,\n minW: 1,\n i: \"panel-0\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 0,\n minW: 1,\n i: \"panel-1\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 1,\n minW: 1,\n i: \"panel-2\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 2,\n x: 2,\n y: 0,\n minW: 1,\n i: \"panel-3\",\n moved: false,\n static: false,\n },\n {\n w: 2,\n h: 2,\n x: 3,\n y: 0,\n minW: 2,\n i: \"panel-4\",\n moved: false,\n static: false,\n },\n {\n w: 3,\n h: 2,\n x: 5,\n y: 0,\n minW: 2,\n i: \"panel-5\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 0,\n y: 2,\n minW: 1,\n i: \"panel-6\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 0,\n y: 3,\n minW: 1,\n i: \"panel-7\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 2,\n minW: 1,\n i: \"panel-8\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 3,\n minW: 1,\n i: \"panel-9\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 2,\n y: 2,\n minW: 1,\n i: \"panel-10\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 2,\n y: 3,\n minW: 1,\n i: \"panel-11\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 3,\n y: 2,\n minW: 2,\n i: \"panel-12\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 7,\n y: 2,\n minW: 1,\n i: \"panel-13\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 7,\n y: 3,\n minW: 1,\n i: \"panel-14\",\n moved: false,\n static: false,\n },\n {\n w: 8,\n h: 2,\n x: 0,\n y: 4,\n minW: 2,\n i: \"panel-15\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 0,\n y: 5,\n minW: 2,\n i: \"panel-16\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 5,\n y: 5,\n minW: 2,\n i: \"panel-17\",\n moved: false,\n static: false,\n },\n {\n w: 8,\n h: 2,\n x: 0,\n y: 7,\n minW: 2,\n i: \"panel-18\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 0,\n y: 9,\n minW: 2,\n i: \"panel-19\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 5,\n y: 9,\n minW: 2,\n i: \"panel-20\",\n moved: false,\n static: false,\n },\n];\n\nconst colorsMain = [\n \"#6992B7\",\n \"#E2AD17\",\n \"#22B573\",\n \"#F7655E\",\n \"#0071BC\",\n \"#F9E6C5\",\n \"#A6E8C4\",\n \"#F4CECE\",\n \"#ADD5E0\",\n];\n\nexport const panelsConfiguration: IDashboardPanel[] = [\n {\n title: \"Uptime\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-0\",\n labelDisplayFunction: niceDays,\n },\n {\n title: \"Total Online disks\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-1\",\n },\n {\n title: \"Total Offline disks\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-2\",\n },\n {\n title: \"Total Data\",\n data: [],\n dataOuter: [{ name: \"outer\", value: 100 }],\n widgetConfiguration: {\n outerChart: {\n colorList: [\"#9c9c9c\"],\n innerRadius: 51,\n outerRadius: 54,\n startAngle: -15,\n endAngle: 195,\n },\n innerChart: {\n colorList: colorsMain,\n innerRadius: 35,\n outerRadius: 50,\n startAngle: -15,\n endAngle: 195,\n },\n },\n type: widgetType.pieChart,\n layoutIdentifier: \"panel-3\",\n innerLabel: \"N/A\",\n labelDisplayFunction: niceBytes,\n },\n {\n title: \"Data Growth\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-4\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Object size distribution\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"a\",\n color: colorsMain[0],\n background: {\n fill: \"rgba(0,0,0,0.1)\",\n },\n },\n ],\n customStructure: [\n { originTag: \"LESS_THAN_1024_B\", displayTag: \"Less than 1024B\" },\n {\n originTag: \"BETWEEN_1024_B_AND_1_MB\",\n displayTag: \"Between 1024B and 1MB\",\n },\n {\n originTag: \"BETWEEN_1_MB_AND_10_MB\",\n displayTag: \"Between 1MB and 10MB\",\n },\n {\n originTag: \"BETWEEN_10_MB_AND_64_MB\",\n displayTag: \"Between 10MB and 64MB\",\n },\n {\n originTag: \"BETWEEN_64_MB_AND_128_MB\",\n displayTag: \"Between 64MB and 128MB\",\n },\n {\n originTag: \"BETWEEN_128_MB_AND_512_MB\",\n displayTag: \"Between 128MB and 512MB\",\n },\n {\n originTag: \"GREATER_THAN_512_MB\",\n displayTag: \"Greater than 512MB\",\n },\n ],\n type: widgetType.barChart,\n layoutIdentifier: \"panel-5\",\n },\n {\n title: \"Total Online Servers\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-6\",\n },\n {\n title: \"Total Offline Servers\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-7\",\n },\n {\n title: \"Total S3 Traffic Inbound\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-8\",\n color: \"#22B573\",\n fillColor: \"#A6E8C4\",\n labelDisplayFunction: niceBytes,\n },\n {\n title: \"Total S3 Traffic Outbound\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-9\",\n color: \"#22B573\",\n fillColor: \"#A6E8C4\",\n labelDisplayFunction: niceBytes,\n },\n {\n title: \"Number of Buckets\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#0071BC\",\n fillColor: \"#ADD5E0\",\n layoutIdentifier: \"panel-10\",\n },\n {\n title: \"Number of Objects\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#0071BC\",\n fillColor: \"#ADD5E0\",\n layoutIdentifier: \"panel-11\",\n },\n {\n title: \"S3 API Request & Error Rate\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-12\",\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Total Open FDs\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-13\",\n color: \"#F7655E\",\n fillColor: \"#F4CECE\",\n },\n {\n title: \"Total Goroutines\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-14\",\n color: \"#F7655E\",\n fillColor: \"#F4CECE\",\n },\n {\n title: \"S3 API Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-15\",\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Total S3 API Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-16\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Active S3 Requests\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-17\",\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Internode Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-18\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Online Disks\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-19\",\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Disk Usage\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-20\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n];\n\nconst calculateMainValue = (elements: any[], metricCalc: string) => {\n if (elements.length === 0) {\n return [\"\", \"0\"];\n }\n\n switch (metricCalc) {\n case \"mean\":\n const sumValues = elements.reduce((accumulator, currValue) => {\n return accumulator + parseFloat(currValue[1]);\n }, 0);\n\n const mean = Math.floor(sumValues / elements.length);\n\n return [\"\", mean.toString()];\n default:\n const sortResult = elements.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n return sortResult[sortResult.length - 1];\n }\n};\n\nconst constructLabelNames = (metrics: any, legendFormat: string) => {\n const keysToReplace = Object.keys(metrics);\n const expToReplace = new RegExp(`{{(${keysToReplace.join(\"|\")})}}`, \"g\");\n\n const replacedLegend = legendFormat.replace(expToReplace, (matchItem) => {\n const nwMatchItem = matchItem.replace(/({{|}})/g, \"\");\n return metrics[nwMatchItem];\n });\n\n // In case not all the legends were replaced, we remove the placeholders.\n return replacedLegend.replace(/{{(.*?)}}/g, \"\");\n};\n\nexport const getWidgetsWithValue = (payload: any[]) => {\n return panelsConfiguration.map((panelItem) => {\n const payloadData = payload.find(\n (panelT) => panelT.title === panelItem.title\n );\n\n if (!payloadData) {\n return panelItem;\n }\n\n const typeOfPayload = payloadData.type;\n\n switch (panelItem.type) {\n case widgetType.singleValue:\n if (typeOfPayload === \"stat\" || typeOfPayload === \"singlestat\") {\n // We sort values & get the last value\n let elements = get(payloadData, \"targets[0].result[0].values\", []);\n\n if (elements === null) {\n elements = [];\n }\n\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valueDisplay = calculateMainValue(elements, metricCalc);\n\n const data = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(valueDisplay[1])\n : valueDisplay[1];\n\n return {\n ...panelItem,\n data,\n };\n }\n break;\n case widgetType.pieChart:\n if (typeOfPayload === \"gauge\") {\n let chartSeries = get(payloadData, \"targets[0].result\", []);\n\n if (chartSeries === null) {\n chartSeries = [];\n }\n\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valuesArray =\n chartSeries.length > 0 ? chartSeries[0].values : [];\n\n const totalValues = calculateMainValue(valuesArray, metricCalc);\n\n const values = chartSeries.map((elementValue: any) => {\n const values = get(elementValue, \"values\", []);\n const metricKeyItem = Object.keys(elementValue.metric);\n\n const sortResult = values.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n const metricName = elementValue.metric[metricKeyItem[0]];\n const value = sortResult[sortResult.length - 1];\n return { name: metricName, value: parseInt(value) };\n });\n\n const innerLabel = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(totalValues[1])\n : totalValues[1];\n\n return {\n ...panelItem,\n data: values,\n innerLabel,\n };\n }\n break;\n case widgetType.linearGraph:\n if (typeOfPayload === \"graph\") {\n let targets = get(payloadData, \"targets\", []);\n if (targets === null) {\n targets = [];\n }\n\n const series: any[] = [];\n const plotValues: any[] = [];\n\n targets.forEach(\n (\n targetMaster: { legendFormat: string; result: any[] },\n index: number\n ) => {\n // Add a new serie to plot variables in case it is not from multiple values\n let results = get(targetMaster, \"result\", []);\n const legendFormat = targetMaster.legendFormat;\n if (results === null) {\n results = [];\n }\n\n results.forEach((itemVals: { metric: object; values: any[] }) => {\n // Label Creation\n const labelName = constructLabelNames(\n itemVals.metric,\n legendFormat\n );\n const keyName = `key_${index}${labelName}`;\n\n // series creation with recently created label\n series.push({\n dataKey: keyName,\n keyLabel: labelName,\n lineColor: \"\",\n fillColor: \"\",\n });\n\n // we iterate over values and create elements\n let values = get(itemVals, \"values\", []);\n if (values === null) {\n values = [];\n }\n\n values.forEach((valInfo: any[]) => {\n const itemIndex = plotValues.findIndex(\n (element) => element.name === valInfo[0]\n );\n\n // Element not exists yet\n if (itemIndex === -1) {\n let itemToPush: any = { name: valInfo[0] };\n itemToPush[keyName] = valInfo[1];\n\n plotValues.push(itemToPush);\n } else {\n plotValues[itemIndex][keyName] = valInfo[1];\n }\n });\n });\n }\n );\n\n const sortedSeries = series.sort((series1: any, series2: any) => {\n if (series1.keyLabel < series2.keyLabel) {\n return -1;\n }\n if (series1.keyLabel > series2.keyLabel) {\n return 1;\n }\n return 0;\n });\n\n const seriesWithColors = sortedSeries.map(\n (serialC: any, index: number) => {\n return {\n ...serialC,\n lineColor:\n colorsMain[index] || textToRGBColor(serialC.keyLabel),\n fillColor:\n colorsMain[index] || textToRGBColor(serialC.keyLabel),\n };\n }\n );\n\n const sortedVals = plotValues.sort(\n (value1: any, value2: any) => value1.name - value2.name\n );\n\n return {\n ...panelItem,\n widgetConfiguration: seriesWithColors,\n data: sortedVals,\n };\n }\n break;\n case widgetType.barChart:\n if (typeOfPayload === \"bargauge\") {\n let chartBars = get(payloadData, \"targets[0].result\", []);\n\n if (chartBars === null) {\n chartBars = [];\n }\n\n const sortFunction = (value1: any[], value2: any[]) =>\n value1[0] - value2[0];\n\n let values = [];\n if (panelItem.customStructure) {\n values = panelItem.customStructure.map((structureItem) => {\n const metricTake = chartBars.find((element: any) => {\n const metricKeyItem = Object.keys(element.metric);\n\n const metricName = element.metric[metricKeyItem[0]];\n\n return metricName === structureItem.originTag;\n });\n\n const elements = get(metricTake, \"values\", []);\n\n const sortResult = elements.sort(sortFunction);\n const lastValue = sortResult[sortResult.length - 1] || [\"\", \"0\"];\n\n return {\n name: structureItem.displayTag,\n a: parseInt(lastValue[1]),\n };\n });\n } else {\n // If no configuration is set, we construct the series for bar chart and return the element\n values = chartBars.map((elementValue: any) => {\n const metricKeyItem = Object.keys(elementValue.metric);\n\n const metricName = elementValue.metric[metricKeyItem[0]];\n\n const elements = get(elementValue, \"values\", []);\n\n const sortResult = elements.sort(sortFunction);\n const lastValue = sortResult[sortResult.length - 1] || [\"\", \"0\"];\n return { name: metricName, a: parseInt(lastValue[1]) };\n });\n }\n\n return {\n ...panelItem,\n data: values,\n };\n }\n break;\n case widgetType.singleRep:\n if (typeOfPayload === \"stat\") {\n // We sort values & get the last value\n let elements = get(payloadData, \"targets[0].result[0].values\", []);\n if (elements === null) {\n elements = [];\n }\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valueDisplay = calculateMainValue(elements, metricCalc);\n\n const sortResult = elements.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n let valuesForBackground = [];\n\n if (sortResult.length === 1) {\n valuesForBackground.push({ value: 0 });\n }\n\n sortResult.forEach((eachVal: any) => {\n valuesForBackground.push({ value: parseInt(eachVal[1]) });\n });\n\n const innerLabel = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(valueDisplay[1])\n : valueDisplay[1];\n\n return {\n ...panelItem,\n data: valuesForBackground,\n innerLabel,\n };\n }\n break;\n }\n\n return panelItem;\n });\n};\n\nexport const saveDashboardDistribution = (configuration: Layout[]) => {\n localStorage.setItem(dLocalStorageV, btoa(JSON.stringify(configuration)));\n};\n\nexport const getDashboardDistribution = () => {\n const storedConfiguration = localStorage.getItem(dLocalStorageV);\n\n if (!storedConfiguration) {\n return defaultWidgetsLayout;\n }\n\n const parsedConfig = JSON.parse(atob(storedConfiguration));\n\n if (\n parsedConfig.length === 0 ||\n (parsedConfig.length > 0 && !parsedConfig[0].minW)\n ) {\n return defaultWidgetsLayout;\n }\n\n return parsedConfig;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\n\ninterface ISingleValueWidget {\n title: string;\n data: string;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n contentContainer: {\n ...widgetCommon.contentContainer,\n fontWeight: 700,\n color: \"#072045\",\n fontSize: 18,\n textAlign: \"center\" as const,\n },\n });\n\nconst SingleValueWidget = ({ title, data, classes }: ISingleValueWidget) => {\n return (\n
\n
{title}
\n
{data}
\n
\n );\n};\n\nexport default withStyles(styles)(SingleValueWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { getTimeFromTimestamp } from \"../../../../../../common/utils\";\nimport { tooltipCommon } from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tooltipCommon,\n });\n\nconst LineChartTooltip = ({\n active,\n payload,\n label,\n linearConfiguration,\n yAxisFormatter,\n classes,\n}: any) => {\n if (active) {\n return (\n
\n
\n {getTimeFromTimestamp(label, true)}\n
\n {payload &&\n payload.map((pl: any, index: number) => {\n return (\n \n \n
\n \n {linearConfiguration[index].keyLabel}:{\" \"}\n {yAxisFormatter(pl.value)}\n \n
\n
\n );\n })}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(LineChartTooltip);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Area,\n AreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { ILinearGraphConfiguration } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport LineChartTooltip from \"./tooltips/LineChartTooltip\";\n\ninterface ILinearGraphWidget {\n classes: any;\n title: string;\n linearConfiguration: ILinearGraphConfiguration[];\n data: object[];\n hideYAxis?: boolean;\n yAxisFormatter?: (item: string) => string;\n xAxisFormatter?: (item: string) => string;\n panelWidth?: number;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n containerElements: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100% - 18px)\",\n },\n chartCont: {\n position: \"relative\",\n flexGrow: 1,\n minHeight: \"65%\",\n height: 1,\n },\n legendChart: {\n display: \"flex\",\n flexWrap: \"wrap\",\n flex: \"0 1 auto\",\n maxHeight: \"35%\",\n margin: 0,\n overflowY: \"auto\",\n position: \"relative\",\n textAlign: \"center\",\n },\n });\n\nconst LinearGraphWidget = ({\n classes,\n title,\n linearConfiguration,\n data,\n hideYAxis = false,\n yAxisFormatter = (item: string) => item,\n xAxisFormatter = (item: string) => item,\n panelWidth = 0,\n}: ILinearGraphWidget) => {\n let intervalCount = 5;\n\n if (panelWidth !== 0) {\n if (panelWidth > 400) {\n intervalCount = 5;\n } else if (panelWidth > 350) {\n intervalCount = 10;\n } else if (panelWidth > 300) {\n intervalCount = 15;\n } else if (panelWidth > 250) {\n intervalCount = 20;\n } else {\n intervalCount = 30;\n }\n }\n return (\n
\n
{title}
\n
\n
\n \n \n \n xAxisFormatter(value)}\n interval={intervalCount}\n tick={{ fontSize: \"70%\" }}\n tickCount={10}\n />\n dataMax * 4]}\n hide={hideYAxis}\n tickFormatter={(value: any) => yAxisFormatter(value)}\n tick={{ fontSize: \"70%\" }}\n />\n {linearConfiguration.map((section, index) => {\n return (\n \n );\n })}\n \n }\n wrapperStyle={{\n zIndex: 5000,\n }}\n />\n \n \n
\n
\n {linearConfiguration.map((section, index) => {\n return (\n \n \n
{section.keyLabel}
\n
\n );\n })}\n
\n
\n \n );\n};\n\nexport default withStyles(styles)(LinearGraphWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { tooltipCommon } from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tooltipCommon,\n });\n\nconst BarChartTooltip = ({\n active,\n payload,\n label,\n barChartConfiguration,\n classes,\n}: any) => {\n if (active) {\n return (\n
\n
{label}
\n {payload &&\n payload.map((pl: any, index: number) => {\n return (\n \n \n
\n {pl.value}\n
\n
\n );\n })}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(BarChartTooltip);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Bar,\n BarChart,\n ResponsiveContainer,\n XAxis,\n YAxis,\n Tooltip,\n} from \"recharts\";\nimport { IBarChartConfiguration } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport BarChartTooltip from \"./tooltips/BarChartTooltip\";\n\ninterface IBarChartWidget {\n classes: any;\n title: string;\n barChartConfiguration: IBarChartConfiguration[];\n data: object[];\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n });\n\nconst CustomizedAxisTick = ({ x, y, payload }: any) => {\n return (\n \n {payload.value}\n \n );\n};\n\nconst BarChartWidget = ({\n classes,\n title,\n barChartConfiguration,\n data,\n}: IBarChartWidget) => {\n return (\n
\n
{title}
\n
\n \n \n \n }\n tickLine={false}\n axisLine={false}\n width={150}\n />\n {barChartConfiguration.map((bar) => (\n \n ))}\n \n }\n />\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(BarChartWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Cell, Pie, PieChart, ResponsiveContainer } from \"recharts\";\nimport { IPieChartConfiguration } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\n\ninterface IPieChartWidget {\n classes: any;\n title: string;\n pieChartConfiguration: IPieChartConfiguration;\n dataInner: object[];\n dataOuter?: object[];\n middleLabel?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n });\n\nconst PieChartWidget = ({\n classes,\n title,\n pieChartConfiguration,\n dataInner,\n dataOuter,\n middleLabel = \"\",\n}: IPieChartWidget) => {\n const innerColors = get(pieChartConfiguration, \"innerChart.colorList\", []);\n const outerColors = get(pieChartConfiguration, \"outerChart.colorList\", []);\n\n return (\n
\n
{title}
\n
\n \n \n {dataOuter && (\n \n {dataOuter.map((entry, index) => (\n \n ))}\n \n )}\n {dataInner && (\n \n {dataInner.map((entry, index) => {\n return (\n \n );\n })}\n \n )}\n {middleLabel && (\n \n {middleLabel}\n \n )}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(PieChartWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Area, AreaChart, ResponsiveContainer, YAxis } from \"recharts\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { IDataSRep } from \"./types\";\n\ninterface ISingleRepWidget {\n classes: any;\n title: string;\n data: IDataSRep[];\n color: string;\n fillColor: string;\n label: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n });\n\nconst SingleRepWidget = ({\n classes,\n title,\n data,\n color,\n fillColor,\n label,\n}: ISingleRepWidget) => {\n return (\n
\n
{title}
\n
\n \n \n dataMax * 2]} hide={true} />\n \n \n {label}\n \n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(SingleRepWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport MomentUtils from \"@date-io/moment\";\nimport { DateTimePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport ScheduleIcon from \"@material-ui/icons/Schedule\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\n\ninterface IDateTimePicker {\n value: any;\n onChange: (value: any) => any;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n dateSelectorOverride: {\n height: 40,\n border: \"#EAEDEE 1px solid\",\n marginLeft: 15,\n backgroundColor: \"#fff\",\n padding: \"0 16px\",\n borderRadius: 5,\n \"&.MuiInput-underline:hover:not(.Mui-disabled):before\": {\n borderBottom: 0,\n },\n \"&:hover\": {\n borderColor: \"#000\",\n \"&:before, &:after\": {\n borderColor: \"transparent\",\n borderBottom: 0,\n },\n },\n \"&:before, &:after\": {\n borderColor: \"transparent\",\n borderBottom: 0,\n },\n \"& input\": {\n fontSize: 12,\n fontWeight: 600,\n color: \"#393939\",\n },\n },\n parentDateOverride: {\n flexGrow: 1,\n },\n });\n\nconst DateTimePickerWrapper = ({\n value,\n onChange,\n classes,\n}: IDateTimePicker) => {\n return (\n \n \n \n \n ),\n className: classes.dateSelectorOverride,\n }}\n label=\"\"\n ampm={false}\n variant={\"inline\"}\n className={classes.parentDateOverride}\n format=\"MMMM Do YYYY, h:mm a\"\n />\n \n );\n};\n\nexport default withStyles(styles)(DateTimePickerWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport ReactGridLayout from \"react-grid-layout\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n} from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport { AutoSizer } from \"react-virtualized\";\nimport {\n IBarChartConfiguration,\n IDataSRep,\n ILinearGraphConfiguration,\n IPieChartConfiguration,\n} from \"./Widgets/types\";\nimport { IDashboardPanel, widgetType } from \"./types\";\nimport {\n getDashboardDistribution,\n getWidgetsWithValue,\n panelsConfiguration,\n saveDashboardDistribution,\n} from \"./utils\";\n\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport SingleValueWidget from \"./Widgets/SingleValueWidget\";\nimport LinearGraphWidget from \"./Widgets/LinearGraphWidget\";\nimport BarChartWidget from \"./Widgets/BarChartWidget\";\nimport PieChartWidget from \"./Widgets/PieChartWidget\";\nimport SingleRepWidget from \"./Widgets/SingleRepWidget\";\nimport DateTimePickerWrapper from \"../../Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IPrDashboard {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n widgetsContainer: {\n height: \"calc(100vh - 250px)\",\n paddingBottom: 235,\n },\n ...actionsTray,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PrDashboard = ({ classes, displayErrorMessage }: IPrDashboard) => {\n const [timeStart, setTimeStart] = useState(null);\n const [timeEnd, setTimeEnd] = useState(null);\n const [loading, setLoading] = useState(true);\n const [panelInformation, setPanelInformation] = useState(\n panelsConfiguration\n );\n\n const minHeight = 600;\n const colsInGrid = 8;\n const xSpacing = 10;\n const ySpacing = 10;\n\n const dashboardDistr = getDashboardDistribution();\n\n const autoSizerStyleProp = {\n width: \"100%\",\n height: \"auto\",\n paddingBottom: 45,\n };\n\n const panels = useCallback(\n (width: number) => {\n const singlePanelWidth = width / colsInGrid + xSpacing / 2;\n\n const componentToUse = (value: IDashboardPanel, index: number) => {\n switch (value.type) {\n case widgetType.singleValue:\n return (\n \n );\n case widgetType.pieChart:\n return (\n \n );\n case widgetType.linearGraph:\n return (\n \n );\n case widgetType.barChart:\n return (\n \n );\n case widgetType.singleRep:\n const fillColor = value.fillColor ? value.fillColor : value.color;\n return (\n \n );\n default:\n return null;\n }\n };\n\n return panelInformation.map((val, index) => {\n return (\n
{componentToUse(val, index)}
\n );\n });\n },\n [panelInformation, dashboardDistr]\n );\n\n const fetchUsage = useCallback(() => {\n let stepCalc = 15;\n\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = secondsInPeriod / 60;\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/admin/info?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n if (res.widgets) {\n const widgetsWithValue = getWidgetsWithValue(res.widgets);\n setPanelInformation(widgetsWithValue);\n } else {\n displayErrorMessage(\n \"Widget information could not be retrieved at this time. Please try again\"\n );\n }\n\n setLoading(false);\n })\n .catch((err) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }, [timeStart, timeEnd, displayErrorMessage]);\n\n const triggerLoad = () => {\n setLoading(true);\n };\n\n useEffect(() => {\n if (loading) {\n fetchUsage();\n }\n }, [loading, fetchUsage]);\n\n return (\n \n \n Start Time\n \n End Time\n \n \n Get Information\n \n \n \n \n {({ width, height }: any) => {\n let hpanel = height < minHeight ? minHeight : height;\n if (hpanel > 380) {\n hpanel = 480;\n }\n const totalWidth = width > 1920 ? 1920 : width;\n return (\n \n {panels(width)}\n \n );\n }}\n \n \n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PrDashboard));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst AllBucketsIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default AllBucketsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst EgressIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default EgressIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Usage } from \"../types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { containerForHeader } from \"../../Common/FormComponents/common/styleLibrary\";\nimport AllBucketsIcon from \"../../../../icons/AllBucketsIcon\";\nimport UsageIcon from \"../../../../icons/UsageIcon\";\nimport EgressIcon from \"../../../../icons/EgressIcon\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...containerForHeader(theme.spacing(4)),\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n border: \"#eaedee 1px solid\",\n borderRadius: 5,\n boxShadow: \"none\",\n },\n fixedHeight: {\n height: 165,\n minWidth: 247,\n marginRight: 20,\n padding: \"25px 28px\",\n \"& svg\": {\n maxHeight: 18,\n },\n },\n consumptionValue: {\n color: \"#000000\",\n fontSize: \"60px\",\n fontWeight: \"bold\",\n },\n icon: {\n marginRight: 10,\n color: \"#777777\",\n },\n notationContainer: {\n display: \"flex\",\n },\n dashboardBG: {\n width: 390,\n height: 255,\n zIndex: 500,\n position: \"absolute\",\n backgroundSize: \"fill\",\n backgroundImage: \"url(/images/BG_IllustrationDarker.svg)\",\n backgroundPosition: \"right bottom\",\n right: 0,\n bottom: 0,\n backgroundRepeat: \"no-repeat\",\n },\n dashboardContainer: {\n zIndex: 600,\n position: \"absolute\",\n },\n elementTitle: {\n fontWeight: 500,\n color: \"#777777\",\n fontSize: 14,\n marginTop: -9,\n },\n smallUnit: {\n fontSize: 20,\n },\n });\n\ninterface IDashboardProps {\n classes: any;\n usage: Usage | null;\n}\n\nconst BasicDashboard = ({ classes, usage }: IDashboardProps) => {\n const fixedHeightPaper = clsx(classes.paper, classes.fixedHeight);\n\n const prettyUsage = (usage: string | undefined) => {\n if (usage === undefined) {\n return \"0\";\n }\n\n const niceBytesUsage = niceBytes(usage).split(\" \");\n\n if (niceBytesUsage.length !== 2) {\n return niceBytesUsage.join(\" \");\n }\n\n return (\n \n {niceBytesUsage[0]}\n {niceBytesUsage[1]}\n \n );\n };\n\n const prettyNumber = (usage: number | undefined) => {\n if (usage === undefined) {\n return 0;\n }\n\n return usage.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n };\n\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n All buckets\n \n \n \n \n {usage ? prettyNumber(usage.buckets) : 0}\n \n \n \n \n \n \n \n \n \n Usage\n \n \n \n \n {usage ? prettyUsage(usage.usage + \"\") : 0}\n \n \n \n \n \n \n \n \n \n {\" \"}\n Total Objects\n \n \n \n \n {usage ? prettyNumber(usage.objects) : 0}\n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(BasicDashboard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport PrDashboard from \"./Prometheus/PrDashboard\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport BasicDashboard from \"./BasicDashboard/BasicDashboard\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { Usage } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDashboardSimple {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst Dashboard = ({ classes, displayErrorMessage }: IDashboardSimple) => {\n const [loading, setLoading] = useState(true);\n const [basicResult, setBasicResult] = useState(null);\n\n const fetchUsage = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/admin/info`)\n .then((res: Usage) => {\n setBasicResult(res);\n setLoading(false);\n })\n .catch((err) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }, [setBasicResult, setLoading, displayErrorMessage]);\n\n useEffect(() => {\n if (loading) {\n fetchUsage();\n }\n }, [loading, fetchUsage]);\n\n const widgets = get(basicResult, \"widgets\", null);\n\n return (\n \n \n \n {loading ? (\n \n \n \n ) : (\n \n {widgets !== null ? (\n \n ) : (\n \n )}\n \n )}\n \n \n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(Dashboard));\n","export default __webpack_public_path__ + \"static/media/minio_console_logo.0837460e.svg\";","export default __webpack_public_path__ + \"static/media/minio_operator_logo.1312b7c9.svg\";","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const menuGroups = [\n { label: \"\", group: \"common\", collapsible: false },\n { label: \"User\", group: \"User\", collapsible: true },\n { label: \"Admin\", group: \"Admin\", collapsible: true },\n { label: \"Tools\", group: \"Tools\", collapsible: true },\n { label: \"Operator\", group: \"Operator\", collapsible: false },\n { label: \"\", group: \"License\", collapsible: false },\n];\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst LicenseIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LicenseIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst LogoutIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LogoutIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst ConsoleIcon = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default ConsoleIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst HealIcon = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default HealIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { NavLink } from \"react-router-dom\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport DescriptionIcon from \"@material-ui/icons/Description\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport { Divider, withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme } from \"@material-ui/core/styles\";\nimport history from \"../../../history\";\nimport logo from \"../../../icons/minio_console_logo.svg\";\nimport operator_logo from \"../../../icons/minio_operator_logo.svg\";\nimport { AppState } from \"../../../store\";\nimport { userLoggedIn } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport { menuGroups } from \"./utils\";\nimport { IMenuProps } from \"./types\";\nimport {\n BucketsIcon,\n ClustersIcon,\n ConfigurationsListIcon,\n DashboardIcon,\n GroupsIcon,\n IAMPoliciesIcon,\n MirroringIcon,\n ServiceAccountsIcon,\n TraceIcon,\n UsersIcon,\n WarpIcon,\n} from \"../../../icons\";\nimport { clearSession } from \"../../../common/utils\";\nimport LicenseIcon from \"../../../icons/LicenseIcon\";\nimport LogoutIcon from \"../../../icons/LogoutIcon\";\nimport ConsoleIcon from \"../../../icons/ConsoleIcon\";\nimport HealIcon from \"../../../icons/HealIcon\";\nimport WatchIcon from \"../../../icons/WatchIcon\";\nimport TrackChangesSharpIcon from \"@material-ui/icons/TrackChangesSharp\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logo: {\n paddingTop: 25,\n marginBottom: 30,\n paddingLeft: 45,\n \"& img\": {\n width: 120,\n },\n },\n menuList: {\n \"& .active\": {\n borderTopLeftRadius: 2,\n borderBottomLeftRadius: 2,\n color: \"#fff\",\n backgroundColor: \"rgba(255, 255, 255, .18)\",\n \"& .MuiSvgIcon-root\": {\n color: \"white\",\n },\n \"& .MuiTypography-root\": {\n color: \"#fff\",\n fontWeight: 700,\n },\n },\n \"& .MuiSvgIcon-root\": {\n fontSize: 16,\n color: \"rgba(255, 255, 255, 0.8)\",\n maxWidth: 14,\n },\n \"& .MuiListItemIcon-root\": {\n minWidth: 25,\n },\n \"& .MuiTypography-root\": {\n fontSize: 12,\n color: \"rgba(255, 255, 255, 0.8)\",\n },\n \"& .MuiListItem-gutters\": {\n paddingRight: 0,\n fontWeight: 300,\n },\n \"& .MuiListItem-root\": {\n padding: \"2px 0 2px 16px\",\n marginBottom: 8,\n marginLeft: 30,\n width: \"calc(100% - 30px)\",\n },\n \"& .MuiCollapse-container .MuiCollapse-wrapper .MuiCollapse-wrapperInner .MuiDivider-root\": {\n backgroundColor: \"rgba(112,112,112,0.5)\",\n marginBottom: 12,\n height: 1,\n },\n },\n extraMargin: {\n \"&.MuiListItem-gutters\": {\n marginLeft: 5,\n },\n },\n groupTitle: {\n color: \"#fff\",\n fontSize: 10,\n textTransform: \"uppercase\",\n fontWeight: 700,\n marginBottom: 3,\n cursor: \"pointer\",\n userSelect: \"none\",\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n subTitleMenu: {\n fontWeight: 700,\n marginLeft: 10,\n \"&.MuiTypography-root\": {\n fontSize: 13,\n color: \"#fff\",\n },\n },\n selectorArrow: {\n marginRight: 20,\n marginTop: 1,\n display: \"inline-block\",\n width: 0,\n height: 0,\n borderStyle: \"solid\",\n borderWidth: \"4px 4px 0 4px\",\n borderColor:\n \"rgba(255, 255, 255, .29) transparent transparent transparent\",\n transform: \"rotateZ(0deg)\",\n transitionDuration: \"0.2s\",\n },\n selectorArrowOpen: {\n transform: \"rotateZ(180deg)\",\n },\n });\n\nconst mapState = (state: AppState) => ({\n open: state.system.loggedIn,\n operatorMode: state.system.operatorMode,\n});\n\nconst connector = connect(mapState, { userLoggedIn });\n\n// Menu State builder for groups\nconst menuStateBuilder = () => {\n let elements: any = [];\n menuGroups.forEach((menuItem) => {\n if (menuItem.collapsible) {\n elements[menuItem.group] = true;\n }\n });\n\n return elements;\n};\n\nconst Menu = ({ userLoggedIn, classes, pages, operatorMode }: IMenuProps) => {\n const [menuOpen, setMenuOpen] = useState(menuStateBuilder());\n\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n userLoggedIn(false);\n localStorage.setItem(\"userLoggedIn\", \"\");\n\n history.push(\"/login\");\n };\n api\n .invoke(\"POST\", `/api/v1/logout`)\n .then(() => {\n deleteSession();\n })\n .catch((err: any) => {\n console.log(err);\n deleteSession();\n });\n };\n\n let menuItems = [\n {\n group: \"common\",\n type: \"item\",\n component: NavLink,\n to: \"/dashboard\",\n name: \"Dashboard\",\n icon: ,\n },\n {\n group: \"User\",\n type: \"item\",\n component: NavLink,\n to: \"/object-browser\",\n name: \"Object Browser\",\n icon: ,\n },\n {\n group: \"User\",\n type: \"item\",\n component: NavLink,\n to: \"/account\",\n name: \"Account\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/buckets\",\n name: \"Buckets\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/users\",\n name: \"Users\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/groups\",\n name: \"Groups\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/policies\",\n name: \"IAM Policies\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/logs\",\n name: \"Logs\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/watch\",\n name: \"Watch\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/trace\",\n name: \"Trace\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/heal\",\n name: \"Heal\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/health-info\",\n name: \"Diagnostic\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/settings\",\n name: \"Settings\",\n icon: ,\n },\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/tenants\",\n name: \"Tenants\",\n icon: ,\n },\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/mirroring\",\n name: \"Mirroring\",\n icon: ,\n },\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/warp\",\n name: \"Warp\",\n icon: ,\n },\n ];\n\n const allowedPages = pages.reduce((result: any, item: any, index: any) => {\n result[item] = true;\n return result;\n }, {});\n\n // Append the license page according to the allowedPages\n if (allowedPages.hasOwnProperty(\"/tenants\")) {\n menuItems.push({\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/license\",\n name: \"License\",\n icon: ,\n });\n } else {\n menuItems.push({\n group: \"License\",\n type: \"item\",\n component: NavLink,\n to: \"/license\",\n name: \"License\",\n icon: ,\n });\n }\n\n const allowedItems = menuItems.filter(\n (item: any) =>\n allowedPages[item.to] || item.forceDisplay || item.type !== \"item\"\n );\n\n const setMenuCollapse = (menuClicked: string) => {\n let newMenu: any = { ...menuOpen };\n\n newMenu[menuClicked] = !newMenu[menuClicked];\n\n setMenuOpen(newMenu);\n };\n\n return (\n \n
\n \"logo\"\n
\n \n {menuGroups.map((groupMember, index) => {\n const filterByGroup = (allowedItems || []).filter(\n (item: any) => item.group === groupMember.group\n );\n\n const countableElements = filterByGroup.filter(\n (menuItem: any) => menuItem.type !== \"title\"\n );\n\n if (countableElements.length === 0) {\n return null;\n }\n\n return (\n \n {groupMember.label !== \"\" && (\n {\n if (groupMember.collapsible) {\n setMenuCollapse(groupMember.group);\n }\n }}\n >\n {groupMember.label}\n {groupMember.collapsible && (\n \n )}\n \n )}\n \n {filterByGroup.map((page: any) => {\n switch (page.type) {\n case \"item\": {\n return (\n \n {page.icon && (\n {page.icon}\n )}\n {page.name && }\n \n );\n }\n case \"title\": {\n return (\n \n {page.name}\n \n );\n }\n default:\n return null;\n }\n })}\n \n \n \n );\n })}\n\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default connector(withStyles(styles)(Menu));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { connect } from \"react-redux\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n jsonPolicyEditor: {\n minHeight: 400,\n width: \"100%\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n infoDetails: {\n color: \"#393939\",\n fontSize: 12,\n fontStyle: \"italic\",\n },\n ...modalBasic,\n });\n\ninterface IAddServiceAccountProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (res: NewServiceAccount | null) => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddServiceAccount = ({\n classes,\n open,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IAddServiceAccountProps) => {\n const [addSending, setAddSending] = useState(false);\n const [policyDefinition, setPolicyDefinition] = useState(\"\");\n\n useEffect(() => {\n if (addSending) {\n api\n .invoke(\"POST\", \"/api/v1/service-accounts\", {\n policy: policyDefinition,\n })\n .then((res) => {\n setAddSending(false);\n closeModalAndRefresh(res);\n })\n .catch((err) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n }\n }, [\n addSending,\n setAddSending,\n setModalErrorSnackMessage,\n policyDefinition,\n closeModalAndRefresh,\n ]);\n\n const addServiceAccount = (e: React.FormEvent) => {\n e.preventDefault();\n setAddSending(true);\n };\n\n const resetForm = () => {\n setPolicyDefinition(\"\");\n };\n\n return (\n {\n closeModalAndRefresh(null);\n }}\n title={`Create Service Account`}\n >\n ) => {\n addServiceAccount(e);\n }}\n >\n \n \n
\n Service Accounts inherit the policy explicitly attached to the\n parent user and the policy attached to each group in which the\n parent user has membership. You can specify an optional\n JSON-formatted policy below to restrict the Service Account access\n to a subset of actions and resources explicitly allowed for the\n parent user. You cannot modify the Service Account optional policy\n after saving.\n
\n {\n setPolicyDefinition(value);\n }}\n />\n
\n \n \n Clear\n \n \n Create\n \n \n {addSending && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddServiceAccount));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n });\n\ninterface IDeleteServiceAccountProps {\n classes: any;\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedServiceAccount: string | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteServiceAccount = ({\n classes,\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedServiceAccount,\n setErrorSnackMessage,\n}: IDeleteServiceAccountProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n useEffect(() => {\n if (deleteLoading) {\n api\n .invoke(\"DELETE\", `/api/v1/service-accounts/${selectedServiceAccount}`)\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n deleteLoading,\n closeDeleteModalAndRefresh,\n selectedServiceAccount,\n setErrorSnackMessage,\n ]);\n\n const removeRecord = () => {\n if (selectedServiceAccount == null) {\n return;\n }\n\n setDeleteLoading(true);\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete ServiceAccount\n \n {deleteLoading && }\n \n Are you sure you want to delete service account{\" \"}\n {selectedServiceAccount}?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(DeleteServiceAccount));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { NewServiceAccount } from \"./types\";\nimport { Button } from \"@material-ui/core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n\n const consoleCreds = get(newServiceAccount, \"console\", null);\n\n return (\n {\n closeModal();\n }}\n title={`New ${entity} Created`}\n >\n \n \n \n A new {entity} has been created with the following details:\n {consoleCreds && (\n \n \n Console Credentials\n
    \n
  • \n Access Key: {consoleCreds.accessKey}\n
  • \n
  • \n Secret Key: {consoleCreds.secretKey}\n
  • \n
\n
\n
\n )}\n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n \n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n consoleExtras = {\n console: {\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n },\n };\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n }}\n color=\"primary\"\n >\n Download\n \n {\n closeModal();\n }}\n color=\"secondary\"\n autoFocus\n >\n Done\n \n \n
\n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\ninterface userInterface {\n accessKey: string;\n}\n\ninterface policyInterface {\n name: string;\n}\n\nexport const usersSort = (a: userInterface, b: userInterface) => {\n if (a.accessKey > b.accessKey) {\n return 1;\n }\n if (a.accessKey < b.accessKey) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n\nexport const policySort = (a: policyInterface, b: policyInterface) => {\n if (a.name > b.name) {\n return 1;\n }\n if (a.name < b.name) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n\nexport const stringSort = (a: string, b: string) => {\n if (a > b) {\n return 1;\n }\n if (a < b) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n modalBasic,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { ChangePasswordRequest } from \"../Buckets/types\";\nimport api from \"../../../common/api\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...actionsTray,\n ...modalBasic,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IChangePasswordProps {\n classes: any;\n open: boolean;\n closeModal: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ChangePassword = ({\n classes,\n open,\n closeModal,\n setModalErrorSnackMessage,\n}: IChangePasswordProps) => {\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [newPassword, setNewPassword] = useState(\"\");\n const [reNewPassword, setReNewPassword] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const changePassword = (event: React.FormEvent) => {\n event.preventDefault();\n\n if (newPassword !== reNewPassword) {\n setModalErrorSnackMessage(\"New passwords don't match\");\n return;\n }\n\n if (loading) {\n return;\n }\n setLoading(true);\n\n let request: ChangePasswordRequest = {\n current_secret_key: currentPassword,\n new_secret_key: newPassword,\n };\n\n api\n .invoke(\"POST\", \"/api/v1/account/change-password\", request)\n .then((res) => {\n setLoading(false);\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setCurrentPassword(\"\");\n closeModal();\n })\n .catch((err) => {\n setLoading(false);\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setCurrentPassword(\"\");\n setModalErrorSnackMessage(err);\n });\n };\n\n return open ? (\n {\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setCurrentPassword(\"\");\n closeModal();\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n ) => {\n changePassword(e);\n }}\n >\n \n \n \n ) => {\n setCurrentPassword(event.target.value);\n }}\n label=\"Current Password\"\n type=\"password\"\n value={currentPassword}\n />\n \n \n ) => {\n setNewPassword(event.target.value);\n }}\n label=\"New Password\"\n type=\"password\"\n value={newPassword}\n />\n \n \n ) => {\n setReNewPassword(event.target.value);\n }}\n label=\"Type New Password Again\"\n type=\"password\"\n value={reNewPassword}\n />\n \n \n \n 0 &&\n newPassword.length > 0 &&\n reNewPassword.length > 0\n )\n }\n >\n Save\n \n \n {loading && (\n \n \n \n )}\n \n \n \n ) : null;\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ChangePassword));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport api from \"../../../common/api\";\nimport { Button } from \"@material-ui/core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport AddServiceAccount from \"./AddServiceAccount\";\nimport DeleteServiceAccount from \"./DeleteServiceAccount\";\nimport CredentialsPrompt from \"../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { CreateIcon } from \"../../../icons\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport Divider from \"@material-ui/core/Divider\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport ChangePasswordModal from \"./ChangePasswordModal\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n addSideBar: {\n width: \"480px\",\n minWidth: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n imageIcon: {\n height: \"100%\",\n },\n iconRoot: {\n textAlign: \"center\",\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IServiceAccountsProps {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n changePassword: boolean;\n}\n\nconst Account = ({\n classes,\n displayErrorMessage,\n changePassword,\n}: IServiceAccountsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedServiceAccount, setSelectedServiceAccount] = useState<\n string | null\n >(null);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [\n newServiceAccount,\n setNewServiceAccount,\n ] = useState(null);\n const [\n changePasswordModalOpen,\n setChangePasswordModalOpen,\n ] = useState(false);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/service-accounts`)\n .then((res: string[]) => {\n const serviceAccounts = res.sort(stringSort);\n\n setLoading(false);\n setRecords(serviceAccounts);\n })\n .catch((err) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, setLoading, setRecords, displayErrorMessage]);\n\n const fetchRecords = () => {\n setLoading(true);\n };\n\n const closeAddModalAndRefresh = (res: NewServiceAccount | null) => {\n setAddScreenOpen(false);\n fetchRecords();\n\n if (res !== null) {\n const nsa: NewServiceAccount = {\n console: {\n accessKey: `${res.accessKey}`,\n secretKey: `${res.secretKey}`,\n },\n };\n setNewServiceAccount(nsa);\n setShowNewCredentials(true);\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const closeCredentialsModal = () => {\n setShowNewCredentials(false);\n setNewServiceAccount(null);\n };\n\n const confirmDeleteServiceAccount = (selectedServiceAccount: string) => {\n setSelectedServiceAccount(selectedServiceAccount);\n setDeleteOpen(true);\n };\n\n const tableActions = [\n { type: \"delete\", onClick: confirmDeleteServiceAccount },\n ];\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.toLowerCase().includes(filter.toLowerCase())\n );\n\n return (\n \n {addScreenOpen && (\n {\n closeAddModalAndRefresh(res);\n }}\n />\n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Service Account\"\n />\n )}\n \n \n \n {changePassword && (\n \n \n \n Settings\n \n \n \n
\n
\n \n setChangePasswordModalOpen(false)}\n />\n }\n onClick={() => setChangePasswordModalOpen(true)}\n >\n Change Password\n \n \n \n
\n \n
\n
\n
\n )}\n \n \n Service Accounts\n \n \n \n
\n
\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n }\n onClick={() => {\n setAddScreenOpen(true);\n setSelectedServiceAccount(null);\n }}\n >\n Create service account\n \n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(Account));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TextField from \"@material-ui/core/TextField\";\n\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport { GroupsList } from \"../Groups/types\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\n\ninterface IGroupsProps {\n classes: any;\n selectedGroups: string[];\n setSelectedGroups: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#000\",\n },\n },\n },\n ...actionsTray,\n ...selectorsCommon,\n });\n\nconst GroupsSelectors = ({\n classes,\n selectedGroups,\n setSelectedGroups,\n setModalErrorSnackMessage,\n}: IGroupsProps) => {\n // Local State\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const fetchGroups = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/groups`)\n .then((res: GroupsList) => {\n let groups = get(res, \"groups\", []);\n\n if (!groups) {\n groups = [];\n }\n setRecords(groups.sort(stringSort));\n isLoading(false);\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n isLoading(false);\n });\n }, [setModalErrorSnackMessage]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchGroups();\n }\n }, [loading, fetchGroups]);\n\n const selGroups = !selectedGroups ? [] : selectedGroups;\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selGroups]; // We clone the selectedGroups array\n\n if (checked) {\n // If the user has checked this field we need to push this to selectedGroupsList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n setSelectedGroups(elements);\n\n return elements;\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.includes(filter)\n );\n\n return (\n \n \n \n {loading && }\n {records != null && records.length > 0 ? (\n \n \n Assign Groups\n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n \n \n \n ) : (\n
No Groups Available
\n )}\n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(GroupsSelectors));\n","import React, { Fragment } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { predefinedList } from \"../common/styleLibrary\";\n\ninterface IPredefinedList {\n classes: any;\n label?: string;\n content: any;\n multiLine?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...predefinedList,\n });\n\nconst PredefinedList = ({\n classes,\n label = \"\",\n content,\n multiLine = false,\n}: IPredefinedList) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n \n )}\n \n \n {content}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(PredefinedList);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { User } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport GroupsSelectors from \"./GroupsSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface IAddUserContentProps {\n classes: any;\n closeModalAndRefresh: () => void;\n selectedUser: User | null;\n open: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddUser = ({\n classes,\n closeModalAndRefresh,\n selectedUser,\n open,\n setModalErrorSnackMessage,\n}: IAddUserContentProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [enabled, setEnabled] = useState(false);\n const [selectedGroups, setSelectedGroups] = useState([]);\n const [currentGroups, setCurrentGroups] = useState([]);\n\n const getUserInformation = useCallback(() => {\n if (!selectedUser) {\n return null;\n }\n\n api\n .invoke(\"GET\", `/api/v1/users/${selectedUser.accessKey}`)\n .then((res) => {\n setAddLoading(false);\n setAccessKey(res.accessKey);\n setSelectedGroups(res.memberOf || []);\n setCurrentGroups(res.memberOf || []);\n setEnabled(res.status === \"enabled\");\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [selectedUser, setModalErrorSnackMessage]);\n\n useEffect(() => {\n if (selectedUser == null) {\n setAccessKey(\"\");\n setSecretKey(\"\");\n setSelectedGroups([]);\n } else {\n getUserInformation();\n }\n }, [selectedUser, getUserInformation]);\n\n const saveRecord = (event: React.FormEvent) => {\n event.preventDefault();\n\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n if (selectedUser !== null) {\n api\n .invoke(\"PUT\", `/api/v1/users/${selectedUser.accessKey}`, {\n status: enabled ? \"enabled\" : \"disabled\",\n groups: selectedGroups,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n api\n .invoke(\"POST\", \"/api/v1/users\", {\n accessKey,\n secretKey,\n groups: selectedGroups,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }\n };\n\n const resetForm = () => {\n if (selectedUser !== null) {\n setSelectedGroups([]);\n return;\n }\n setAccessKey(\"\");\n setSecretKey(\"\");\n setSelectedGroups([]);\n };\n\n const sendEnabled =\n accessKey.trim() !== \"\" &&\n ((secretKey.trim() !== \"\" && selectedUser === null) ||\n selectedUser !== null);\n return (\n {\n closeModalAndRefresh();\n }}\n modalOpen={open}\n title={selectedUser !== null ? \"Edit User\" : \"Create User\"}\n >\n {selectedUser !== null && (\n
\n {\n setEnabled(e.target.checked);\n }}\n switchOnly\n />\n
\n )}\n\n \n ) => {\n saveRecord(e);\n }}\n >\n \n \n ) => {\n setAccessKey(e.target.value);\n }}\n disabled={selectedUser !== null}\n />\n\n {selectedUser !== null ? (\n \n ) : (\n ) => {\n setSecretKey(e.target.value);\n }}\n autoComplete=\"current-password\"\n />\n )}\n \n {\n setSelectedGroups(elements);\n }}\n />\n \n \n \n {\n resetForm();\n }}\n >\n Clear\n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddUser));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { User, UsersList } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDeleteUserProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedUser: User | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteUser = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedUser,\n setErrorSnackMessage,\n}: IDeleteUserProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n if (selectedUser == null) {\n return;\n }\n setDeleteLoading(true);\n api\n .invoke(\"DELETE\", `/api/v1/users/${selectedUser.accessKey}`, {\n id: selectedUser.id,\n })\n .then((res: UsersList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n if (selectedUser === null) {\n return
;\n }\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete User\n \n {deleteLoading && }\n \n Are you sure you want to delete user {selectedUser.accessKey}?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteUser);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport GroupsSelectors from \"./GroupsSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IAddToGroup {\n open: boolean;\n checkedUsers: any;\n closeModalAndRefresh: any;\n classes: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst AddToGroup = ({\n open,\n checkedUsers,\n closeModalAndRefresh,\n classes,\n setModalErrorSnackMessage,\n}: IAddToGroup) => {\n //Local States\n const [saving, isSaving] = useState(false);\n const [accepted, setAccepted] = useState(false);\n const [selectedGroups, setSelectedGroups] = useState([]);\n\n //Effects\n useEffect(() => {\n if (saving) {\n if (selectedGroups.length > 0) {\n api\n .invoke(\"PUT\", \"/api/v1/users-groups-bulk\", {\n groups: selectedGroups,\n users: checkedUsers,\n })\n .then(() => {\n isSaving(false);\n setAccepted(true);\n })\n .catch((err) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n isSaving(false);\n setModalErrorSnackMessage(\n \"You need to select at least one group to assign\"\n );\n }\n }\n }, [\n saving,\n isSaving,\n closeModalAndRefresh,\n selectedGroups,\n checkedUsers,\n setModalErrorSnackMessage,\n ]);\n\n //Fetch Actions\n const setSaving = (event: React.FormEvent) => {\n event.preventDefault();\n\n isSaving(true);\n };\n\n const resetForm = () => {\n setSelectedGroups([]);\n };\n\n return (\n {\n closeModalAndRefresh(accepted);\n }}\n title={\n accepted\n ? \"The selected users were added to the following groups.\"\n : \"Add Users to Group\"\n }\n >\n {accepted ? (\n \n \n \n \n \n
\n
\n
\n
\n ) : (\n
\n \n \n \n \n
\n
\n \n \n \n
\n \n \n Clear\n \n \n Save\n \n \n {saving && (\n \n \n \n )}\n
\n
\n )}\n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddToGroup));\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { policySort } from \"../../../utils/sortFunctions\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { PolicyList } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\n\ninterface ISelectPolicyProps {\n classes: any;\n selectedPolicy?: string[];\n setSelectedPolicy: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#000\",\n },\n },\n },\n ...actionsTray,\n ...selectorsCommon,\n });\n\nconst PolicySelectors = ({\n classes,\n selectedPolicy = [],\n setSelectedPolicy,\n setModalErrorSnackMessage,\n}: ISelectPolicyProps) => {\n // Local State\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const fetchPolicies = useCallback(() => {\n isLoading(true);\n\n api\n .invoke(\"GET\", `/api/v1/policies?limit=1000`)\n .then((res: PolicyList) => {\n const policies = res.policies === null ? [] : res.policies;\n isLoading(false);\n setRecords(policies.sort(policySort));\n })\n .catch((err) => {\n isLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [setModalErrorSnackMessage]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchPolicies();\n }\n }, [loading, fetchPolicies]);\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selectedPolicy]; // We clone the checkedUsers array\n\n if (checked) {\n // If the user has checked this field we need to push this to checkedUsersList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n // remove empty values\n elements = elements.filter((element) => element !== \"\");\n\n setSelectedPolicy(elements);\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.name.includes(filter)\n );\n\n return (\n \n \n \n {loading && }\n {records.length > 0 ? (\n \n \n Assign Policies\n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n \n \n \n ) : (\n
No Policies Available
\n )}\n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PolicySelectors));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { User } from \"../Users/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport PolicySelectors from \"./PolicySelectors\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface ISetPolicyProps {\n classes: any;\n closeModalAndRefresh: () => void;\n selectedUser: User | null;\n selectedGroup: string | null;\n open: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n buttonContainer: {\n textAlign: \"right\",\n },\n });\n\nconst SetPolicy = ({\n classes,\n closeModalAndRefresh,\n selectedUser,\n selectedGroup,\n setModalErrorSnackMessage,\n open,\n}: ISetPolicyProps) => {\n //Local States\n const [loading, setLoading] = useState(false);\n const [actualPolicy, setActualPolicy] = useState([]);\n const [selectedPolicy, setSelectedPolicy] = useState([]);\n\n const setPolicyAction = () => {\n let entity = \"user\";\n let value = null;\n if (selectedGroup !== null) {\n entity = \"group\";\n value = selectedGroup;\n } else {\n if (selectedUser !== null) {\n value = selectedUser.accessKey;\n }\n }\n\n setLoading(true);\n\n api\n .invoke(\"PUT\", `/api/v1/set-policy/${selectedPolicy}`, {\n entityName: value,\n entityType: entity,\n })\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const fetchGroupInformation = () => {\n if (selectedGroup) {\n api\n .invoke(\"GET\", `/api/v1/groups/${selectedGroup}`)\n .then((res: any) => {\n const groupPolicy: String = get(res, \"policy\", \"\");\n setActualPolicy(groupPolicy.split(\",\"));\n setSelectedPolicy(groupPolicy.split(\",\"));\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n setLoading(false);\n });\n }\n };\n\n const resetSelection = () => {\n setSelectedPolicy(actualPolicy);\n };\n\n useEffect(() => {\n if (open) {\n if (selectedGroup !== null) {\n fetchGroupInformation();\n return;\n }\n\n const userPolicy: String = get(selectedUser, \"policy\", \"\");\n setActualPolicy(userPolicy.split(\",\"));\n setSelectedPolicy(userPolicy.split(\",\"));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, selectedGroup, selectedUser]);\n\n const userName = get(selectedUser, \"accessKey\", \"\");\n\n return (\n {\n closeModalAndRefresh();\n }}\n modalOpen={open}\n title=\"Set Policies\"\n >\n \n \n \n \n \n \n \n \n
\n
\n \n \n Clear\n \n \n Save\n \n \n {loading && (\n \n \n \n )}\n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(SetPolicy));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport api from \"../../../common/api\";\nimport { Button, Grid, InputAdornment, TextField } from \"@material-ui/core\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport GroupIcon from \"@material-ui/icons/Group\";\nimport { User, UsersList } from \"./types\";\nimport { usersSort } from \"../../../utils/sortFunctions\";\nimport { CreateIcon } from \"../../../icons\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport AddUser from \"./AddUser\";\nimport DeleteUser from \"./DeleteUser\";\nimport AddToGroup from \"./AddToGroup\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SetPolicy from \"../Policies/SetPolicy\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n // padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IUsersProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst Users = ({ classes, setErrorSnackMessage }: IUsersProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(false);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedUser, setSelectedUser] = useState(null);\n const [addGroupOpen, setAddGroupOpen] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const [checkedUsers, setCheckedUsers] = useState([]);\n const [policyOpen, setPolicyOpen] = useState(false);\n\n const fetchRecords = useCallback(() => {\n setLoading(true);\n api\n .invoke(\"GET\", `/api/v1/users`)\n .then((res: UsersList) => {\n const users = res.users === null ? [] : res.users;\n\n setLoading(false);\n setRecords(users.sort(usersSort));\n })\n .catch((err) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n }, [setLoading, setRecords, setErrorSnackMessage]);\n\n const closeAddModalAndRefresh = () => {\n setAddScreenOpen(false);\n fetchRecords();\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n fetchRecords();\n }\n };\n\n const closeAddGroupBulk = (unCheckAll: boolean = false) => {\n setAddGroupOpen(false);\n if (unCheckAll) {\n setCheckedUsers([]);\n }\n };\n\n useEffect(() => {\n fetchRecords();\n }, [fetchRecords]);\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.accessKey.includes(filter)\n );\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...checkedUsers]; // We clone the checkedUsers array\n\n if (checked) {\n // If the user has checked this field we need to push this to checkedUsersList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n\n setCheckedUsers(elements);\n\n return elements;\n };\n\n const viewAction = (selectionElement: any): void => {\n setAddScreenOpen(true);\n setSelectedUser(selectionElement);\n };\n\n const setPolicyAction = (selectionElement: any): void => {\n setPolicyOpen(true);\n setSelectedUser(selectionElement);\n };\n\n const deleteAction = (selectionElement: any): void => {\n setDeleteOpen(true);\n setSelectedUser(selectionElement);\n };\n\n const userLoggedIn = atob(localStorage.getItem(\"userLoggedIn\") || \"\");\n\n const tableActions = [\n { type: \"view\", onClick: viewAction },\n { type: \"description\", onClick: setPolicyAction },\n {\n type: \"delete\",\n onClick: deleteAction,\n hideButtonFunction: (topValue: any) => topValue === userLoggedIn,\n },\n ];\n\n return (\n \n {addScreenOpen && (\n {\n closeAddModalAndRefresh();\n }}\n />\n )}\n {policyOpen && (\n {\n setPolicyOpen(false);\n fetchRecords();\n }}\n />\n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n {addGroupOpen && (\n {\n closeAddGroupBulk(close);\n }}\n />\n )}\n \n \n \n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n }\n disabled={checkedUsers.length <= 0}\n onClick={() => {\n if (checkedUsers.length > 0) {\n setAddGroupOpen(true);\n }\n }}\n >\n Add to Group\n \n }\n onClick={() => {\n setAddScreenOpen(true);\n setSelectedUser(null);\n }}\n >\n Create User\n \n \n\n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(Users));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { UsersList } from \"../Users/types\";\nimport { usersSort } from \"../../../utils/sortFunctions\";\nimport api from \"../../../common/api\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { connect } from \"react-redux\";\n\ninterface IGroupsProps {\n classes: any;\n selectedUsers: string[];\n setSelectedUsers: any;\n editMode?: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#000\",\n },\n },\n },\n ...actionsTray,\n ...selectorsCommon,\n });\n\nconst UsersSelectors = ({\n classes,\n selectedUsers,\n setSelectedUsers,\n editMode = false,\n setModalErrorSnackMessage,\n}: IGroupsProps) => {\n //Local States\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const fetchUsers = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/users`)\n .then((res: UsersList) => {\n let users = get(res, \"users\", []);\n\n if (!users) {\n users = [];\n }\n\n setRecords(users.sort(usersSort));\n isLoading(false);\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n isLoading(false);\n });\n }, [setModalErrorSnackMessage]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchUsers();\n }\n }, [loading, fetchUsers]);\n\n const selUsers = !selectedUsers ? [] : selectedUsers;\n\n //Fetch Actions\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selUsers]; // We clone the selectedGroups array\n\n if (checked) {\n // If the user has checked this field we need to push this to selectedGroupsList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n setSelectedUsers(elements);\n\n return elements;\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.accessKey.includes(filter)\n );\n\n return (\n \n \n \n {loading && }\n {records != null && records.length > 0 ? (\n \n \n \n {editMode ? \"Edit Members\" : \"Assign Users\"}\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n \n \n \n ) : (\n
No Users Available
\n )}\n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(UsersSelectors));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport UsersSelectors from \"./UsersSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IGroupProps {\n open: boolean;\n selectedGroup: any;\n closeModalAndRefresh: any;\n classes: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\ninterface MainGroupProps {\n members: string[];\n name: string;\n status: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst AddGroup = ({\n open,\n selectedGroup,\n closeModalAndRefresh,\n classes,\n setModalErrorSnackMessage,\n}: IGroupProps) => {\n //Local States\n const [groupName, setGroupName] = useState(\"\");\n const [groupEnabled, setGroupEnabled] = useState(false);\n const [saving, isSaving] = useState(false);\n const [selectedUsers, setSelectedUsers] = useState([]);\n const [loadingGroup, isLoadingGroup] = useState(false);\n const [validGroup, setValidGroup] = useState(false);\n\n //Effects\n useEffect(() => {\n if (selectedGroup !== null) {\n isLoadingGroup(true);\n } else {\n setGroupName(\"\");\n setSelectedUsers([]);\n }\n }, [selectedGroup]);\n\n useEffect(() => {\n setValidGroup(groupName.trim() !== \"\");\n }, [groupName, selectedUsers]);\n\n useEffect(() => {\n if (saving) {\n const saveRecord = () => {\n if (selectedGroup !== null) {\n api\n .invoke(\"PUT\", `/api/v1/groups/${groupName}`, {\n group: groupName,\n members: selectedUsers,\n status: groupEnabled ? \"enabled\" : \"disabled\",\n })\n .then((res) => {\n isSaving(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n api\n .invoke(\"POST\", \"/api/v1/groups\", {\n group: groupName,\n members: selectedUsers,\n })\n .then((res) => {\n isSaving(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n }\n };\n saveRecord();\n }\n }, [\n saving,\n groupName,\n selectedUsers,\n groupEnabled,\n selectedGroup,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n ]);\n\n useEffect(() => {\n if (selectedGroup && loadingGroup) {\n const fetchGroupInfo = () => {\n api\n .invoke(\"GET\", `/api/v1/groups/${selectedGroup}`)\n .then((res: MainGroupProps) => {\n setGroupEnabled(res.status === \"enabled\");\n setGroupName(res.name);\n setSelectedUsers(res.members);\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n isLoadingGroup(false);\n });\n };\n fetchGroupInfo();\n }\n }, [loadingGroup, selectedGroup, setModalErrorSnackMessage]);\n\n //Fetch Actions\n const setSaving = (event: React.FormEvent) => {\n event.preventDefault();\n\n isSaving(true);\n };\n\n const resetForm = () => {\n if (selectedGroup === null) {\n setGroupName(\"\");\n }\n\n setSelectedUsers([]);\n };\n\n return (\n \n {selectedGroup !== null && (\n
\n {\n setGroupEnabled(e.target.checked);\n }}\n switchOnly\n />\n
\n )}\n
\n \n \n {selectedGroup === null ? (\n \n \n ) => {\n setGroupName(e.target.value);\n }}\n />\n \n \n ) : (\n \n \n \n )}\n \n \n \n \n \n \n Clear\n \n \n Save\n \n \n {saving && (\n \n \n \n )}\n \n
\n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddGroup));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDeleteGroup {\n selectedGroup: string;\n deleteOpen: boolean;\n closeDeleteModalAndRefresh: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteGroup = ({\n selectedGroup,\n deleteOpen,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeleteGroup) => {\n const [isDeleting, setDeleteLoading] = useState(false);\n\n useEffect(() => {\n if (isDeleting) {\n const removeRecord = () => {\n if (!selectedGroup) {\n return;\n }\n\n api\n .invoke(\"DELETE\", `/api/v1/groups/${selectedGroup}`)\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n removeRecord();\n }\n }, [\n isDeleting,\n selectedGroup,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n ]);\n\n const closeNoAction = () => {\n closeDeleteModalAndRefresh(false);\n };\n\n return (\n \n \n Delete User\n \n {isDeleting && }\n \n Are you sure you want to delete group {selectedGroup}?\n \n \n \n \n {\n setDeleteLoading(true);\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteGroup);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Button } from \"@material-ui/core\";\nimport { CreateIcon } from \"../../../icons\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { GroupsList } from \"./types\";\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../common/api\";\nimport AddGroup from \"../Groups/AddGroup\";\nimport DeleteGroup from \"./DeleteGroup\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SetPolicy from \"../Policies/SetPolicy\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\ninterface IGroupsProps {\n classes: any;\n openGroupModal: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n // padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst Groups = ({ classes, setErrorSnackMessage }: IGroupsProps) => {\n const [addGroupOpen, setGroupOpen] = useState(false);\n const [selectedGroup, setSelectedGroup] = useState(null);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [loading, isLoading] = useState(false);\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [policyOpen, setPolicyOpen] = useState(false);\n\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/groups`)\n .then((res: GroupsList) => {\n let resGroups: string[] = [];\n if (res.groups !== null) {\n resGroups = res.groups.sort(stringSort);\n }\n setRecords(resGroups);\n isLoading(false);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n isLoading(false);\n });\n };\n fetchRecords();\n }\n }, [loading, setErrorSnackMessage]);\n\n const closeAddModalAndRefresh = () => {\n setGroupOpen(false);\n isLoading(true);\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n isLoading(true);\n }\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.includes(filter)\n );\n\n const viewAction = (group: any) => {\n setGroupOpen(true);\n setSelectedGroup(group);\n };\n\n const deleteAction = (group: any) => {\n setDeleteOpen(true);\n setSelectedGroup(group);\n };\n\n const setPolicyAction = (selectionElement: any): void => {\n setPolicyOpen(true);\n setSelectedGroup(selectionElement);\n };\n\n const tableActions = [\n { type: \"view\", onClick: viewAction },\n { type: \"description\", onClick: setPolicyAction },\n { type: \"delete\", onClick: deleteAction },\n ];\n\n return (\n \n {addGroupOpen && (\n \n )}\n {deleteOpen && (\n \n )}\n {setPolicyOpen && (\n {\n setPolicyOpen(false);\n }}\n />\n )}\n \n \n \n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n }\n onClick={() => {\n setSelectedGroup(null);\n setGroupOpen(true);\n }}\n >\n Create Group\n \n \n\n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(Groups));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport { IConfigurationElement, IElementValue } from \"./types\";\n\nexport const notifyPostgres = \"notify_postgres\";\nexport const notifyMysql = \"notify_mysql\";\nexport const notifyKafka = \"notify_kafka\";\nexport const notifyAmqp = \"notify_amqp\";\nexport const notifyMqtt = \"notify_mqtt\";\nexport const notifyRedis = \"notify_redis\";\nexport const notifyNats = \"notify_nats\";\nexport const notifyElasticsearch = \"notify_elasticsearch\";\nexport const notifyWebhooks = \"notify_webhooks\";\nexport const notifyNsq = \"notify_nsq\";\n\nexport const configurationElements: IConfigurationElement[] = [\n {\n configuration_id: \"region\",\n configuration_label: \"Edit Region Configuration\",\n },\n {\n configuration_id: \"cache\",\n configuration_label: \"Edit Cache Configuration\",\n },\n {\n configuration_id: \"compression\",\n configuration_label: \"Edit Compression Configuration\",\n },\n { configuration_id: \"etcd\", configuration_label: \"Edit Etcd Configuration\" },\n {\n configuration_id: \"identity_openid\",\n configuration_label: \"Edit Identity Openid Configuration\",\n },\n {\n configuration_id: \"identity_ldap\",\n configuration_label: \"Edit Identity LDAP Configuration\",\n },\n {\n configuration_id: \"logger_webhook\",\n configuration_label: \"Edit Logger Webhook Configuration\",\n },\n {\n configuration_id: \"audit_webhook\",\n configuration_label: \"Edit Audit Webhook Configuration\",\n },\n];\n\nexport const fieldsConfigurations: any = {\n region: [\n {\n name: \"name\",\n required: true,\n label: \"Server Location\",\n tooltip: 'Name of the location of the server e.g. \"us-west-rack2\"',\n type: \"string\",\n placeholder: \"e.g. us-west-rack-2\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n placeholder: \"Enter Comment\",\n },\n ],\n cache: [\n {\n name: \"drives\",\n required: true,\n label: \"Drives\",\n tooltip:\n 'Mountpoints e.g. \"/optane1\" or \"/optane2\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Mount Point\",\n },\n {\n name: \"expiry\",\n required: false,\n label: \"Expiry\",\n tooltip: 'Cache expiry duration in days e.g. \"90\"',\n type: \"number\",\n placeholder: \"Enter Number of Days\",\n },\n {\n name: \"quota\",\n required: false,\n label: \"Quota\",\n tooltip: 'Limit cache drive usage in percentage e.g. \"90\"',\n type: \"number\",\n placeholder: \"Enter in %\",\n },\n {\n name: \"exclude\",\n required: false,\n label: \"Exclude\",\n tooltip:\n 'Wildcard exclusion patterns e.g. \"bucket/*.tmp\" or \"*.exe\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Wildcard Exclusion Patterns\",\n },\n {\n name: \"after\",\n required: false,\n label: \"After\",\n tooltip: \"Minimum number of access before caching an object\",\n type: \"number\",\n placeholder: \"Enter Number of Attempts\",\n },\n {\n name: \"watermark_low\",\n required: false,\n label: \"Watermark Low\",\n tooltip: \"Watermark Low\",\n type: \"number\",\n placeholder: \"Enter Watermark Low\",\n },\n {\n name: \"watermark_high\",\n required: false,\n label: \"Watermark High\",\n tooltip: \"Watermark High\",\n type: \"number\",\n placeholder: \"Enter Watermark High\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n multiline: true,\n placeholder: \"Enter Comment\",\n },\n ],\n compression: [\n {\n name: \"extensions\",\n required: false,\n label: \"Extensions\",\n tooltip:\n 'Extensions to compress e.g. \".txt\",\".log\" or \".csv\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter an Extension\",\n withBorder: true,\n },\n {\n name: \"mime_types\",\n required: false,\n label: \"Mime Types\",\n tooltip:\n 'Mime types e.g. \"text/*\",\"application/json\" or \"application/xml\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter a Mime Type\",\n withBorder: true,\n },\n ],\n etcd: [\n {\n name: \"endpoints\",\n required: true,\n label: \"Endpoints\",\n tooltip:\n 'List of etcd endpoints e.g. \"http://localhost:2379\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"path_prefix\",\n required: false,\n label: \"Path Prefix\",\n tooltip: 'namespace prefix to isolate tenants e.g. \"customer1/\"',\n type: \"string\",\n placeholder: \"Enter Path Prefix\",\n },\n {\n name: \"coredns_path\",\n required: false,\n label: \"Coredns Path\",\n tooltip: 'Shared bucket DNS records, default is \"/skydns\"',\n type: \"string\",\n placeholder: \"Enter Coredns Path\",\n },\n {\n name: \"client_cert\",\n required: false,\n label: \"Client Cert\",\n tooltip: \"Client cert for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert\",\n },\n {\n name: \"client_cert_key\",\n required: false,\n label: \"Client Cert Key\",\n tooltip: \"Client cert key for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert Key\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n multiline: true,\n placeholder: \"Enter Comment\",\n },\n ],\n identity_openid: [\n {\n name: \"config_url\",\n required: false,\n label: \"Config URL\",\n tooltip: \"Config URL for Client ID configuration\",\n type: \"string\",\n placeholder: \"Enter Config URL\",\n },\n {\n name: \"client_id\",\n required: false,\n label: \"Client ID\",\n type: \"string\",\n placeholder: \"Enter Client ID\",\n },\n {\n name: \"claim_name\",\n required: false,\n label: \"Claim Name\",\n tooltip: \"Claim Name\",\n type: \"string\",\n placeholder: \"Enter Claim Name\",\n },\n {\n name: \"claim_prefix\",\n required: false,\n label: \"Claim Prefix\",\n tooltip: \"Claim Prefix\",\n type: \"string\",\n placeholder: \"Enter Claim Prefix\",\n },\n ],\n identity_ldap: [\n {\n name: \"server_addr\",\n required: true,\n label: \"Server Addr\",\n tooltip: 'AD/LDAP server address e.g. \"myldapserver.com:636\"',\n type: \"string\",\n placeholder: \"Enter Server Address\",\n },\n {\n name: \"username_format\",\n required: true,\n label: \"Username Format\",\n tooltip:\n 'List of username bind DNs e.g. \"uid=%s\",\"cn=accounts\",\"dc=myldapserver\" or \"dc=com\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Username Format\",\n },\n {\n name: \"username_search_filter\",\n required: true,\n label: \"Username Search Filter\",\n tooltip:\n 'User search filter, for example \"(cn=%s)\" or \"(sAMAccountName=%s)\" or \"(uid=%s)\"',\n type: \"string\",\n placeholder: \"Enter Username Search Filter\",\n },\n {\n name: \"group_search_filter\",\n required: true,\n label: \"Group Search Filter\",\n tooltip:\n 'Search filter for groups e.g. \"(&(objectclass=groupOfNames)(memberUid=%s))\"',\n type: \"string\",\n placeholder: \"Enter Group Search Filter\",\n },\n {\n name: \"username_search_base_dn\",\n required: false,\n label: \"Username Search Base DN\",\n tooltip: \"List of username search DNs, you can write one per field\",\n type: \"csv\",\n placeholder: \"Enter Username Search Base DN\",\n },\n {\n name: \"group_name_attribute\",\n required: false,\n label: \"Group Name Attribute\",\n tooltip: 'Search attribute for group name e.g. \"cn\"',\n type: \"string\",\n placeholder: \"Enter Group Name Attribute\",\n },\n {\n name: \"sts_expiry\",\n required: false,\n label: \"STS Expiry\",\n tooltip:\n 'temporary credentials validity duration in s,m,h,d. Default is \"1h\"',\n type: \"string\",\n placeholder: \"Enter STS Expiry\",\n },\n {\n name: \"tls_skip_verify\",\n required: false,\n label: \"TLS Skip Verify\",\n tooltip:\n 'Trust server TLS without verification, defaults to \"off\" (verify)',\n type: \"on|off\",\n },\n {\n name: \"server_insecure\",\n required: false,\n label: \"Server Insecure\",\n tooltip:\n 'Allow plain text connection to AD/LDAP server, defaults to \"off\"',\n type: \"on|off\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"Optionally add a comment to this setting\",\n type: \"comment\",\n placeholder: \"Enter Comment\",\n },\n ],\n logger_webhook: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n type: \"string\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n required: true,\n label: \"Auth Token\",\n type: \"string\",\n placeholder: \"Enter Auth Token\",\n },\n ],\n audit_webhook: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n type: \"string\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n required: true,\n label: \"Auth Token\",\n type: \"string\",\n placeholder: \"Enter Auth Token\",\n },\n ],\n};\n\nconst commonFields = [\n {\n name: \"queue-dir\",\n label: \"Queue Directory\",\n required: true,\n\n tooltip: \"staging dir for undelivered messages e.g. '/home/events'\",\n type: \"string\",\n placeholder: \"Enter Queue Directory\",\n },\n {\n name: \"queue-limit\",\n label: \"Queue Limit\",\n required: false,\n\n tooltip: \"maximum limit for undelivered messages, defaults to '10000'\",\n type: \"number\",\n placeholder: \"Enter Queue Limit\",\n },\n {\n name: \"comment\",\n label: \"Comment\",\n required: false,\n type: \"comment\",\n placeholder: \"Enter Comment\",\n },\n];\n\nexport const notificationEndpointsFields: any = {\n [notifyKafka]: [\n {\n name: \"brokers\",\n label: \"Brokers\",\n required: true,\n\n tooltip: \"Comma separated list of Kafka broker addresses\",\n type: \"string\",\n placeholder: \"Enter Brokers\",\n },\n {\n name: \"topic\",\n label: \"Topic\",\n tooltip: \"Kafka topic used for bucket notifications\",\n type: \"string\",\n placeholder: \"Enter Topic\",\n },\n {\n name: \"sasl_username\",\n label: \"SASL Username\",\n tooltip: \"Username for SASL/PLAIN or SASL/SCRAM authentication\",\n type: \"string\",\n placeholder: \"Enter SASL Username\",\n },\n {\n name: \"sasl_password\",\n label: \"SASL Password\",\n tooltip: \"Password for SASL/PLAIN or SASL/SCRAM authentication\",\n type: \"string\",\n placeholder: \"Enter SASL Password\",\n },\n {\n name: \"sasl_mechanism\",\n label: \"SASL Mechanism\",\n tooltip: \"SASL authentication mechanism, default 'PLAIN'\",\n type: \"string\",\n },\n {\n name: \"tls_client_auth\",\n label: \"TLS Client Auth\",\n tooltip:\n \"Client Auth determines the Kafka server's policy for TLS client auth\",\n type: \"string\",\n placeholder: \"Enter TLS Client Auth\",\n },\n {\n name: \"sasl\",\n label: \"SASL\",\n tooltip: \"Set to 'on' to enable SASL authentication\",\n type: \"on|off\",\n },\n {\n name: \"tls\",\n label: \"TLS\",\n tooltip: \"Set to 'on' to enable TLS\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n label: \"TLS skip verify\",\n tooltip:\n 'Trust server TLS without verification, defaults to \"on\" (verify)',\n type: \"on|off\",\n },\n {\n name: \"client_tls_cert\",\n label: \"client TLS cert\",\n tooltip: \"Path to client certificate for mTLS auth\",\n type: \"path\",\n placeholder: \"Enter TLS Client Cert\",\n },\n {\n name: \"client_tls_key\",\n label: \"client TLS key\",\n tooltip: \"Path to client key for mTLS auth\",\n type: \"path\",\n placeholder: \"Enter TLS Client Key\",\n },\n {\n name: \"version\",\n label: \"Version\",\n tooltip: \"Specify the version of the Kafka cluster e.g '2.2.0'\",\n type: \"string\",\n placeholder: \"Enter Kafka Version\",\n },\n ...commonFields,\n ],\n [notifyAmqp]: [\n {\n name: \"url\",\n required: true,\n label: \"URL\",\n tooltip:\n \"AMQP server endpoint e.g. `amqp://myuser:mypassword@localhost:5672`\",\n type: \"url\",\n },\n {\n name: \"exchange\",\n label: \"Exchange\",\n tooltip: \"Name of the AMQP exchange\",\n type: \"string\",\n placeholder: \"Enter Exchange\",\n },\n {\n name: \"exchange_type\",\n label: \"Exchange Type\",\n tooltip: \"AMQP exchange type\",\n type: \"string\",\n placeholder: \"Enter Exchange Type\",\n },\n {\n name: \"routing_key\",\n label: \"Routing Key\",\n tooltip: \"Routing key for publishing\",\n type: \"string\",\n placeholder: \"Enter Routing Key\",\n },\n {\n name: \"mandatory\",\n label: \"Mandatory\",\n tooltip:\n \"Quietly ignore undelivered messages when set to 'off', default is 'on'\",\n type: \"on|off\",\n },\n {\n name: \"durable\",\n label: \"Durable\",\n tooltip:\n \"Persist queue across broker restarts when set to 'on', default is 'off'\",\n type: \"on|off\",\n },\n {\n name: \"no_wait\",\n label: \"No Wait\",\n tooltip:\n \"Non-blocking message delivery when set to 'on', default is 'off'\",\n type: \"on|off\",\n },\n {\n name: \"internal\",\n label: \"Internal\",\n tooltip:\n \"Set to 'on' for exchange to be not used directly by publishers, but only when bound to other exchanges\",\n type: \"on|off\",\n },\n {\n name: \"auto_deleted\",\n label: \"Auto Deleted\",\n tooltip:\n \"Auto delete queue when set to 'on', when there are no consumers\",\n type: \"on|off\",\n },\n {\n name: \"delivery_mode\",\n label: \"Delivery Mode\",\n tooltip: \"Set to '1' for non-persistent or '2' for persistent queue\",\n type: \"number\",\n placeholder: \"Enter Delivery Mode\",\n },\n ...commonFields,\n ],\n [notifyRedis]: [\n {\n name: \"address\",\n required: true,\n label: \"Address\",\n tooltip: \"Redis server's address. For example: `localhost:6379`\",\n type: \"address\",\n placeholder: \"Enter Address\",\n },\n {\n name: \"key\",\n required: true,\n label: \"Key\",\n tooltip: \"Redis key to store/update events, key is auto-created\",\n type: \"string\",\n placeholder: \"Enter Key\",\n },\n {\n name: \"password\",\n label: \"Password\",\n tooltip: \"Redis server password\",\n type: \"string\",\n placeholder: \"Enter Password\",\n },\n ...commonFields,\n ],\n [notifyMqtt]: [\n {\n name: \"broker\",\n required: true,\n label: \"Broker\",\n tooltip: \"MQTT server endpoint e.g. `tcp://localhost:1883`\",\n type: \"uri\",\n placeholder: \"Enter Brokers\",\n },\n {\n name: \"topic\",\n required: true,\n label: \"Topic\",\n tooltip: \"name of the MQTT topic to publish\",\n type: \"string\",\n placeholder: \"Enter Topic\",\n },\n {\n name: \"username\",\n label: \"Username\",\n tooltip: \"MQTT username\",\n type: \"string\",\n placeholder: \"Enter Username\",\n },\n {\n name: \"password\",\n label: \"Password\",\n tooltip: \"MQTT password\",\n type: \"string\",\n placeholder: \"Enter Password\",\n },\n {\n name: \"qos\",\n label: \"QOS\",\n tooltip: \"Set the quality of service priority, defaults to '0'\",\n type: \"number\",\n placeholder: \"Enter QOS\",\n },\n {\n name: \"keep_alive_interval\",\n label: \"Keep Alive Interval\",\n tooltip: \"Keep-alive interval for MQTT connections in s,m,h,d\",\n type: \"duration\",\n placeholder: \"Enter Keep Alive Internal\",\n },\n {\n name: \"reconnect_interval\",\n label: \"Reconnect Interval\",\n tooltip: \"Reconnect interval for MQTT connections in s,m,h,d\",\n type: \"duration\",\n placeholder: \"Enter Reconnect Interval\",\n },\n ...commonFields,\n ],\n [notifyNats]: [\n {\n name: \"address\",\n required: true,\n label: \"Address\",\n tooltip: \"NATS server address e.g. '0.0.0.0:4222'\",\n type: \"address\",\n placeholder: \"Enter Address\",\n },\n {\n name: \"subject\",\n required: true,\n label: \"Subject\",\n tooltip: \"NATS subscription subject\",\n type: \"string\",\n placeholder: \"Enter NATS Subject\",\n },\n {\n name: \"username\",\n label: \"Username\",\n tooltip: \"NATS username\",\n type: \"string\",\n placeholder: \"Enter NATS Username\",\n },\n {\n name: \"password\",\n label: \"Password\",\n tooltip: \"NATS password\",\n type: \"string\",\n placeholder: \"Enter NATS password\",\n },\n {\n name: \"token\",\n label: \"Token\",\n tooltip: \"NATS token\",\n type: \"string\",\n placeholder: \"Enter NATS token\",\n },\n {\n name: \"tls\",\n label: \"TLS\",\n tooltip: \"Set to 'on' to enable TLS\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n label: \"TLS Skip Verify\",\n tooltip:\n 'Trust server TLS without verification, defaults to \"on\" (verify)',\n type: \"on|off\",\n },\n {\n name: \"ping_interval\",\n label: \"Ping Interval\",\n tooltip: \"Client ping commands interval in s,m,h,d. Disabled by default\",\n type: \"duration\",\n placeholder: \"Enter Ping Interval\",\n },\n {\n name: \"streaming\",\n label: \"Streaming\",\n tooltip: \"Set to 'on', to use streaming NATS server\",\n type: \"on|off\",\n },\n {\n name: \"streaming_async\",\n label: \"Streaming async\",\n tooltip: \"Set to 'on', to enable asynchronous publish\",\n type: \"on|off\",\n },\n {\n name: \"streaming_max_pub_acks_in_flight\",\n label: \"Streaming max publish ACKS in flight\",\n tooltip: \"Number of messages to publish without waiting for ACKs\",\n type: \"number\",\n placeholder: \"Enter Streaming in flight value\",\n },\n {\n name: \"streaming_cluster_id\",\n label: \"Streaming Cluster ID\",\n tooltip: \"Unique ID for NATS streaming cluster\",\n type: \"string\",\n placeholder: \"Enter Streaming Cluster ID\",\n },\n {\n name: \"cert_authority\",\n label: \"Cert Authority\",\n tooltip: \"Path to certificate chain of the target NATS server\",\n type: \"string\",\n placeholder: \"Enter Cert Authority\",\n },\n {\n name: \"client_cert\",\n label: \"Client Cert\",\n tooltip: \"Client cert for NATS mTLS auth\",\n type: \"string\",\n placeholder: \"Enter Client Cert\",\n },\n {\n name: \"client_key\",\n label: \"Client Key\",\n tooltip: \"Client cert key for NATS mTLS auth\",\n type: \"string\",\n placeholder: \"Enter Client Key\",\n },\n ...commonFields,\n ],\n [notifyElasticsearch]: [\n {\n name: \"url\",\n required: true,\n label: \"URL\",\n tooltip:\n \"Elasticsearch server's address, with optional authentication info\",\n type: \"url\",\n placeholder: \"Enter URL\",\n },\n {\n name: \"index\",\n required: true,\n label: \"Index\",\n tooltip:\n \"Elasticsearch index to store/update events, index is auto-created\",\n type: \"string\",\n placeholder: \"Enter Index\",\n },\n {\n name: \"format\",\n required: true,\n label: \"Format\",\n tooltip:\n \"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\",\n type: \"enum\",\n placeholder: \"Enter Format\",\n },\n ...commonFields,\n ],\n [notifyWebhooks]: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n tooltip:\n \"webhook server endpoint e.g. http://localhost:8080/minio/events\",\n type: \"url\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n label: \"Auth Token\",\n tooltip: \"opaque string or JWT authorization token\",\n type: \"string\",\n placeholder: \"Enter auth_token\",\n },\n ...commonFields,\n ],\n [notifyNsq]: [\n {\n name: \"nsqd_address\",\n required: true,\n label: \"NSQD Address\",\n tooltip: \"NSQ server address e.g. '127.0.0.1:4150'\",\n type: \"address\",\n placeholder: \"Enter nsqd_address\",\n },\n {\n name: \"topic\",\n required: true,\n label: \"Topic\",\n tooltip: \"NSQ topic\",\n type: \"string\",\n placeholder: \"Enter Topic\",\n },\n {\n name: \"tls\",\n label: \"TLS\",\n tooltip: \"set to 'on' to enable TLS\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n label: \"TLS Skip Verify\",\n tooltip:\n 'trust server TLS without verification, defaults to \"on\" (verify)',\n type: \"on|off\",\n },\n ...commonFields,\n ],\n};\n\nexport const removeEmptyFields = (formFields: IElementValue[]) => {\n const nonEmptyFields = formFields.filter((field) => field.value !== \"\");\n\n return nonEmptyFields;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst AddIcon = () => {\n return (\n \n \n \n );\n};\n\nexport default AddIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, {\n useState,\n useEffect,\n createRef,\n useLayoutEffect,\n ChangeEvent,\n useRef,\n} from \"react\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { InputLabel, Tooltip } from \"@material-ui/core\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport InputBoxWrapper from \"../InputBoxWrapper/InputBoxWrapper\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\n\ninterface ICSVMultiSelector {\n elements: string;\n name: string;\n label: string;\n tooltip?: string;\n commonPlaceholder?: string;\n classes: any;\n withBorder?: boolean;\n onChange: (elements: string) => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n inputWithBorder: {\n border: \"1px solid #EAEAEA\",\n padding: 15,\n height: 150,\n overflowY: \"auto\",\n position: \"relative\",\n marginTop: 15,\n },\n labelContainer: {\n display: \"flex\",\n },\n });\n\nconst CSVMultiSelector = ({\n elements,\n name,\n label,\n tooltip = \"\",\n commonPlaceholder = \"\",\n onChange,\n withBorder = false,\n classes,\n}: ICSVMultiSelector) => {\n const [currentElements, setCurrentElements] = useState([\"\"]);\n const bottomList = createRef();\n\n // Use effect to get the initial values from props\n useEffect(() => {\n if (\n currentElements.length === 1 &&\n currentElements[0] === \"\" &&\n elements &&\n elements !== \"\"\n ) {\n const elementsSplit = elements.split(\",\");\n elementsSplit.push(\"\");\n\n setCurrentElements(elementsSplit);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [elements, currentElements]);\n\n // Use effect to send new values to onChange\n useEffect(() => {\n if (currentElements.length > 1) {\n const refScroll = bottomList.current;\n if (refScroll) {\n refScroll.scrollIntoView(false);\n }\n }\n }, [currentElements, bottomList]);\n\n // We avoid multiple re-renders / hang issue typing too fast\n const firstUpdate = useRef(true);\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n debouncedOnChange();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentElements]);\n\n // If the last input is not empty, we add a new one\n const addEmptyLine = (elementsUp: string[]) => {\n if (elementsUp[elementsUp.length - 1].trim() !== \"\") {\n const cpList = [...elementsUp];\n cpList.push(\"\");\n setCurrentElements(cpList);\n }\n };\n\n // Onchange function for input box, we get the dataset-index & only update that value in the array\n const onChangeElement = (e: ChangeEvent) => {\n e.persist();\n\n let updatedElement = [...currentElements];\n const index = get(e.target, \"dataset.index\", 0);\n updatedElement[index] = e.target.value;\n\n setCurrentElements(updatedElement);\n };\n\n // Debounce for On Change\n const debouncedOnChange = debounce(() => {\n const elementsString = currentElements\n .filter((element) => element.trim() !== \"\")\n .join(\",\");\n\n onChange(elementsString);\n }, 500);\n\n const inputs = currentElements.map((element, index) => {\n return (\n : null}\n overlayAction={() => {\n addEmptyLine(currentElements);\n }}\n />\n );\n });\n\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n \n {inputs}\n
\n \n \n \n );\n};\nexport default withStyles(styles)(CSVMultiSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { Grid, InputLabel, TextField, Tooltip } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface CommentBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n inputLabel: {\n ...fieldBasic.inputLabel,\n marginBottom: 16,\n fontSize: 14,\n },\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n position: \"absolute\",\n top: 7,\n right: 7,\n },\n cssOutlinedInput: {\n borderColor: \"#9C9C9C\",\n padding: 16,\n },\n rootContainer: {\n \"& .MuiOutlinedInput-inputMultiline\": {\n ...fieldBasic.inputLabel,\n fontSize: 13,\n minHeight: 150,\n },\n },\n });\n\nconst CommentBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n classes,\n}: CommentBoxProps) => {\n let inputProps: any = { \"data-index\": index };\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n\n
\n \n
\n \n
\n );\n};\n\nexport default withStyles(styles)(CommentBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { IElementValue, KVField } from \"./types\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport CSVMultiSelector from \"../Common/FormComponents/CSVMultiSelector/CSVMultiSelector\";\nimport CommentBoxWrapper from \"../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IConfGenericProps {\n onChange: (newValue: IElementValue[]) => void;\n fields: KVField[];\n defaultVals?: IElementValue[];\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\n// Function to get defined values,\n//we make this because the backed sometimes don't return all the keys when there is an initial configuration\nexport const valueDef = (\n key: string,\n type: string,\n defaults: IElementValue[]\n) => {\n let defValue = type === \"on|off\" ? \"false\" : \"\";\n\n if (defaults.length > 0) {\n const storedConfig = defaults.find((element) => element.key === key);\n\n if (storedConfig) {\n defValue = storedConfig.value;\n }\n }\n\n return defValue;\n};\n\nconst ConfTargetGeneric = ({\n onChange,\n fields,\n defaultVals,\n classes,\n}: IConfGenericProps) => {\n const [valueHolder, setValueHolder] = useState([]);\n const fieldsElements = !fields ? [] : fields;\n const defValList = !defaultVals ? [] : defaultVals;\n\n // Effect to create all the values to hold\n useEffect(() => {\n const values: IElementValue[] = [];\n fields.forEach((field) => {\n const stateInsert: IElementValue = {\n key: field.name,\n value: valueDef(field.name, field.type, defValList),\n };\n values.push(stateInsert);\n });\n\n setValueHolder(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fields, defaultVals]);\n\n useEffect(() => {\n onChange(valueHolder);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueHolder]);\n\n const setValueElement = (key: string, value: string, index: number) => {\n const valuesDup = [...valueHolder];\n valuesDup[index] = { key, value };\n\n setValueHolder(valuesDup);\n };\n\n const fieldDefinition = (field: KVField, item: number) => {\n switch (field.type) {\n case \"on|off\":\n const value = valueHolder[item] ? valueHolder[item].value : \"false\";\n\n return (\n ) => {\n const value = e.target.checked ? \"true\" : \"false\";\n setValueElement(field.name, value, item);\n }}\n id={field.name}\n name={field.name}\n label={field.label}\n value={\"switch_on\"}\n tooltip={field.tooltip}\n checked={value === \"true\"}\n />\n );\n case \"csv\":\n return (\n \n setValueElement(field.name, value, item)\n }\n tooltip={field.tooltip}\n commonPlaceholder={field.placeholder}\n withBorder={!!field.withBorder}\n />\n );\n case \"comment\":\n return (\n ) =>\n setValueElement(field.name, e.target.value, item)\n }\n placeholder={field.placeholder}\n />\n );\n default:\n return (\n ) =>\n setValueElement(field.name, e.target.value, item)\n }\n multiline={!!field.multiline}\n placeholder={field.placeholder}\n />\n );\n }\n };\n\n return (\n \n \n {fieldsElements.map((field, item) => (\n \n \n {fieldDefinition(field, item)}\n \n \n ))}\n \n \n );\n};\n\nexport default withStyles(styles)(ConfTargetGeneric);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport api from \"../../../../common/api\";\nimport ConfTargetGeneric from \"../ConfTargetGeneric\";\nimport { serverNeedsRestart, setErrorSnackMessage } from \"../../../../actions\";\nimport {\n fieldBasic,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { fieldsConfigurations, removeEmptyFields } from \"../utils\";\nimport { IConfigurationElement, IElementValue } from \"../types\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...settingsCommon,\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n logoButton: {\n height: \"80px\",\n },\n\n customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n });\n\ninterface IAddNotificationEndpointProps {\n closeModalAndRefresh: any;\n serverNeedsRestart: typeof serverNeedsRestart;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n selectedConfiguration: IConfigurationElement;\n classes: any;\n}\n\nconst EditConfiguration = ({\n closeModalAndRefresh,\n serverNeedsRestart,\n selectedConfiguration,\n setErrorSnackMessage,\n classes,\n}: IAddNotificationEndpointProps) => {\n //Local States\n const [valuesObj, setValueObj] = useState([]);\n const [saving, setSaving] = useState(false);\n const [loadingConfig, setLoadingConfig] = useState(true);\n const [configValues, setConfigValues] = useState([]);\n //Effects\n useEffect(() => {\n const configId = get(selectedConfiguration, \"configuration_id\", false);\n\n if (configId) {\n api\n .invoke(\"GET\", `/api/v1/configs/${configId}`)\n .then((res) => {\n const keyVals = get(res, \"key_values\", []);\n setConfigValues(keyVals);\n })\n .catch((err) => {\n setLoadingConfig(false);\n setErrorSnackMessage(err);\n });\n }\n setLoadingConfig(false);\n }, [selectedConfiguration, setErrorSnackMessage]);\n\n useEffect(() => {\n if (saving) {\n const payload = {\n key_values: removeEmptyFields(valuesObj),\n };\n api\n .invoke(\n \"PUT\",\n `/api/v1/configs/${selectedConfiguration.configuration_id}`,\n payload\n )\n .then(() => {\n setSaving(false);\n serverNeedsRestart(true);\n\n closeModalAndRefresh();\n })\n .catch((err) => {\n setSaving(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n saving,\n serverNeedsRestart,\n selectedConfiguration,\n valuesObj,\n closeModalAndRefresh,\n setErrorSnackMessage,\n ]);\n\n //Fetch Actions\n const submitForm = (event: React.FormEvent) => {\n event.preventDefault();\n setSaving(true);\n };\n\n const onValueChange = useCallback(\n (newValue) => {\n setValueObj(newValue);\n },\n [setValueObj]\n );\n\n return (\n \n \n {selectedConfiguration.configuration_label}\n \n \n
\n \n {loadingConfig && (\n \n \n \n )}\n \n \n \n \n Save\n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n serverNeedsRestart,\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(EditConfiguration));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { AutoSizer } from \"react-virtualized\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\n\ninterface ISlideOptions {\n classes: any;\n slideOptions: any;\n currentSlide: number;\n}\n\nconst styles = () =>\n createStyles({\n masterContainer: {\n overflowX: \"hidden\",\n overflowY: \"auto\",\n },\n sliderContainer: {\n width: \"auto\",\n transitionDuration: \"0.3s\",\n position: \"relative\",\n },\n slide: {\n float: \"left\",\n },\n });\n\nconst SlideOptions = ({\n classes,\n slideOptions,\n currentSlide,\n}: ISlideOptions) => {\n return (\n \n {({ width, height }: any) => {\n const currentSliderPosition = currentSlide * width;\n const containerSize = width * slideOptions.length;\n return (\n \n
\n \n {slideOptions.map((block: any, index: number) => {\n return (\n \n {block}\n
\n );\n })}\n
\n
\n \n );\n }}\n \n );\n};\n\nexport default withStyles(styles)(SlideOptions);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst BackSettingsIcon = () => (\n \n \n \n \n \n \n \n);\n\nexport default BackSettingsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport history from \"../../../../history\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport { configurationElements } from \"../utils\";\nimport { IConfigurationElement } from \"../types\";\nimport EditConfiguration from \"../CustomForms/EditConfiguration\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\n\ninterface IListConfiguration {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n iconText: {\n lineHeight: \"24px\",\n },\n customConfigurationPage: {\n height: \"calc(100vh - 324px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n ...searchField,\n ...actionsTray,\n ...settingsCommon,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst initialConfiguration = {\n configuration_id: \"\",\n configuration_label: \"\",\n};\n\nconst ConfigurationsList = ({ classes }: IListConfiguration) => {\n const [selectedConfiguration, setSelectedConfiguration] = useState(\n initialConfiguration\n );\n const [currentConfiguration, setCurrentConfiguration] = useState(0);\n\n const tableActions = [\n {\n type: \"edit\",\n onClick: (element: IConfigurationElement) => {\n const url = get(element, \"url\", \"\");\n if (url !== \"\") {\n // We redirect Browser\n history.push(url);\n } else {\n setCurrentConfiguration(1);\n setSelectedConfiguration(element);\n }\n },\n },\n ];\n\n const backToInitialConfig = () => {\n setCurrentConfiguration(0);\n setSelectedConfiguration(initialConfiguration);\n };\n\n return (\n \n \n \n \n
\n \n \n Configuration Types\n \n \n ,\n \n \n \n \n Back To Configurations\n \n \n \n {currentConfiguration === 1 ? (\n {\n setCurrentConfiguration(0);\n }}\n selectedConfiguration={selectedConfiguration}\n />\n ) : null}\n \n ,\n ]}\n currentSlide={currentConfiguration}\n />\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(ConfigurationsList);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { NotificationEndpointItem } from \"./types\";\nimport {\n notifyAmqp,\n notifyElasticsearch,\n notifyKafka,\n notifyMqtt,\n notifyMysql,\n notifyNats,\n notifyNsq,\n notifyPostgres,\n notifyRedis,\n notifyWebhooks,\n} from \"../utils\";\n\nexport const notificationTransform = (\n notificationElements: NotificationEndpointItem[]\n) => {\n return notificationElements.map((element) => {\n return {\n service_name: `${element.service}:${element.account_id}`,\n status: element.status,\n };\n });\n};\n\nexport const servicesList = [\n {\n actionTrigger: notifyPostgres,\n targetTitle: \"Postgres SQL\",\n logo: \"/postgres.png\",\n },\n {\n actionTrigger: notifyKafka,\n targetTitle: \"Kafka\",\n logo: \"/kafka.png\",\n },\n {\n actionTrigger: notifyAmqp,\n targetTitle: \"AMQP\",\n logo: \"/amqp.png\",\n },\n {\n actionTrigger: notifyMqtt,\n targetTitle: \"MQTT\",\n logo: \"/mqtt.png\",\n },\n {\n actionTrigger: notifyRedis,\n targetTitle: \"Redis\",\n logo: \"/redis.png\",\n },\n {\n actionTrigger: notifyNats,\n targetTitle: \"NATS\",\n logo: \"/nats.png\",\n },\n {\n actionTrigger: notifyMysql,\n targetTitle: \"Mysql\",\n logo: \"/mysql.png\",\n },\n {\n actionTrigger: notifyElasticsearch,\n targetTitle: \"Elastic Search\",\n logo: \"/elasticsearch.png\",\n },\n {\n actionTrigger: notifyWebhooks,\n targetTitle: \"Webhook\",\n logo: \"\",\n },\n {\n actionTrigger: notifyNsq,\n targetTitle: \"NSQ\",\n logo: \"\",\n },\n];\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { IElementValue } from \"../types\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport CommentBoxWrapper from \"../../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IConfPostgresProps {\n onChange: (newValue: IElementValue[]) => void;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\nconst ConfPostgres = ({ onChange, classes }: IConfPostgresProps) => {\n //Local States\n const [useConnectionString, setUseConnectionString] = useState(\n false\n );\n const [connectionString, setConnectionString] = useState(\"\");\n const [host, setHostname] = useState(\"\");\n const [dbName, setDbName] = useState(\"\");\n const [port, setPort] = useState(\"\");\n const [user, setUser] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [sslMode, setSslMode] = useState(\" \");\n\n const [table, setTable] = useState(\"\");\n const [format, setFormat] = useState(\"namespace\");\n const [queueDir, setQueueDir] = useState(\"\");\n const [queueLimit, setQueueLimit] = useState(\"\");\n const [comment, setComment] = useState(\"\");\n\n // connection_string* (string) Postgres server connection-string e.g. \"host=localhost port=5432 dbname=minio_events user=postgres password=password sslmode=disable\"\n\n // \"host=localhost\n // port=5432\n //dbname=minio_events\n //user=postgres\n //password=password\n //sslmode=disable\"\n\n // table* (string) DB table name to store/update events, table is auto-created\n // format* (namespace*|access) 'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\n // queue_dir (path) staging dir for undelivered messages e.g. '/home/events'\n // queue_limit (number) maximum limit for undelivered messages, defaults to '10000'\n // comment (sentence) optionally add a comment to this setting\n\n const KvSeparator = \"=\";\n const parseConnectionString = (\n input: string,\n keys: string[]\n ): Map => {\n let valueIndexes: number[] = [];\n\n for (const key of keys) {\n const i = input.indexOf(key + KvSeparator);\n if (i === -1) {\n continue;\n }\n valueIndexes.push(i);\n }\n valueIndexes.sort((n1, n2) => n1 - n2);\n\n let kvFields = new Map();\n let fields: string[] = new Array(valueIndexes.length);\n for (let i = 0; i < valueIndexes.length; i++) {\n const j = i + 1;\n if (j < valueIndexes.length) {\n fields[i] = input.substr(\n valueIndexes[i],\n valueIndexes[j] - valueIndexes[i]\n );\n } else {\n fields[i] = input.substr(valueIndexes[i]);\n }\n }\n\n for (let field of fields) {\n if (field === undefined) {\n continue;\n }\n const key = field.substr(0, field.indexOf(\"=\"));\n const value = field.substr(field.indexOf(\"=\") + 1).trim();\n kvFields.set(key, value);\n }\n return kvFields;\n };\n\n const configToString = useCallback((): string => {\n let strValue = \"\";\n if (host !== \"\") {\n strValue = `${strValue} host=${host}`;\n }\n if (dbName !== \"\") {\n strValue = `${strValue} dbname=${dbName}`;\n }\n if (user !== \"\") {\n strValue = `${strValue} user=${user}`;\n }\n if (password !== \"\") {\n strValue = `${strValue} password=${password}`;\n }\n if (port !== \"\") {\n strValue = `${strValue} port=${port}`;\n }\n if (sslMode !== \" \") {\n strValue = `${strValue} sslmode=${sslMode}`;\n }\n\n strValue = `${strValue} `;\n\n return strValue.trim();\n }, [host, dbName, user, password, port, sslMode]);\n\n useEffect(() => {\n if (connectionString !== \"\") {\n const formValues = [\n { key: \"connection_string\", value: connectionString },\n { key: \"table\", value: table },\n { key: \"format\", value: format },\n { key: \"queue_dir\", value: queueDir },\n { key: \"queue_limit\", value: queueLimit },\n { key: \"comment\", value: comment },\n ];\n\n onChange(formValues);\n }\n }, [\n connectionString,\n table,\n format,\n queueDir,\n queueLimit,\n comment,\n onChange,\n ]);\n\n useEffect(() => {\n const cs = configToString();\n setConnectionString(cs);\n }, [\n user,\n dbName,\n password,\n port,\n sslMode,\n host,\n setConnectionString,\n configToString,\n ]);\n\n useEffect(() => {\n if (useConnectionString) {\n // build connection_string\n const cs = configToString();\n setConnectionString(cs);\n\n return;\n }\n // parse connection_string\n const kv = parseConnectionString(connectionString, [\n \"host\",\n \"port\",\n \"dbname\",\n \"user\",\n \"password\",\n \"sslmode\",\n ]);\n setHostname(kv.get(\"host\") ? kv.get(\"host\") + \"\" : \"\");\n setPort(kv.get(\"port\") ? kv.get(\"port\") + \"\" : \"\");\n setDbName(kv.get(\"dbname\") ? kv.get(\"dbname\") + \"\" : \"\");\n setUser(kv.get(\"user\") ? kv.get(\"user\") + \"\" : \"\");\n setPassword(kv.get(\"password\") ? kv.get(\"password\") + \"\" : \"\");\n setSslMode(kv.get(\"sslmode\") ? kv.get(\"sslmode\") + \"\" : \" \");\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [useConnectionString]);\n\n return (\n \n \n {\n setUseConnectionString(e.target.checked);\n }}\n value={\"manualString\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n {useConnectionString ? (\n \n \n ) => {\n setConnectionString(e.target.value);\n }}\n />\n \n \n ) : (\n \n \n \n \n ) => {\n setHostname(e.target.value);\n }}\n />\n \n \n ) => {\n setDbName(e.target.value);\n }}\n />\n \n \n ) => {\n setPort(e.target.value);\n }}\n />\n \n \n {\n if (e.target.value !== undefined) {\n setSslMode(e.target.value + \"\");\n }\n }}\n options={[\n { label: \"Enter SSL Mode\", value: \" \" },\n { label: \"Require\", value: \"require\" },\n { label: \"Disable\", value: \"disable\" },\n { label: \"Verify CA\", value: \"verify-ca\" },\n { label: \"Verify Full\", value: \"verify-full\" },\n ]}\n />\n \n \n ) => {\n setUser(e.target.value);\n }}\n />\n \n \n ) => {\n setPassword(e.target.value);\n }}\n />\n \n \n \n \n \n
\n
\n
\n )}\n \n ) => {\n setTable(e.target.value);\n }}\n />\n \n \n {\n setFormat(e.target.value);\n }}\n tooltip=\"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\"\n selectorOptions={[\n { label: \"Namespace\", value: \"namespace\" },\n { label: \"Access\", value: \"access\" },\n ]}\n />\n \n \n ) => {\n setQueueDir(e.target.value);\n }}\n />\n \n \n ) => {\n setQueueLimit(e.target.value);\n }}\n />\n \n \n ) => {\n setComment(e.target.value);\n }}\n />\n \n
\n );\n};\n\nexport default withStyles(styles)(ConfPostgres);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { IElementValue } from \"../types\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport CommentBoxWrapper from \"../../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IConfMySqlProps {\n onChange: (newValue: IElementValue[]) => void;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\nconst ConfMySql = ({ onChange, classes }: IConfMySqlProps) => {\n //Local States\n const [useDsnString, setUseDsnString] = useState(false);\n const [dsnString, setDsnString] = useState(\"\");\n const [host, setHostname] = useState(\"\");\n const [dbName, setDbName] = useState(\"\");\n const [port, setPort] = useState(\"\");\n const [user, setUser] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const [table, setTable] = useState(\"\");\n const [format, setFormat] = useState(\"namespace\");\n const [queueDir, setQueueDir] = useState(\"\");\n const [queueLimit, setQueueLimit] = useState(\"\");\n const [comment, setComment] = useState(\"\");\n\n // dsn_string* (string) MySQL data-source-name connection string e.g. \":@tcp(:)/\"\n // table* (string) DB table name to store/update events, table is auto-created\n // format* (namespace*|access) 'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\n // queue_dir (path) staging dir for undelivered messages e.g. '/home/events'\n // queue_limit (number) maximum limit for undelivered messages, defaults to '100000'\n // comment (sentence) optionally add a comment to this setting\n\n const parseDsnString = (\n input: string,\n keys: string[]\n ): Map => {\n let kvFields: Map = new Map();\n const regex = /(.*?):(.*?)@tcp\\((.*?):(.*?)\\)\\/(.*?)$/gm;\n let m;\n\n while ((m = regex.exec(input)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n\n kvFields.set(\"user\", m[1]);\n kvFields.set(\"password\", m[2]);\n kvFields.set(\"host\", m[3]);\n kvFields.set(\"port\", m[4]);\n kvFields.set(\"dbname\", m[5]);\n }\n\n return kvFields;\n };\n\n const configToDsnString = useCallback((): string => {\n return `${user}:${password}@tcp(${host}:${port})/${dbName}`;\n }, [user, password, host, port, dbName]);\n\n useEffect(() => {\n if (dsnString !== \"\") {\n const formValues = [\n { key: \"dsn_string\", value: dsnString },\n { key: \"table\", value: table },\n { key: \"format\", value: format },\n { key: \"queue_dir\", value: queueDir },\n { key: \"queue_limit\", value: queueLimit },\n { key: \"comment\", value: comment },\n ];\n\n onChange(formValues);\n }\n }, [dsnString, table, format, queueDir, queueLimit, comment, onChange]);\n\n useEffect(() => {\n const cs = configToDsnString();\n setDsnString(cs);\n }, [user, dbName, password, port, host, setDsnString, configToDsnString]);\n\n const switcherChangeEvt = (event: React.ChangeEvent) => {\n if (event.target.checked) {\n // build dsn_string\n const cs = configToDsnString();\n setDsnString(cs);\n } else {\n // parse dsn_string\n const kv = parseDsnString(dsnString, [\n \"host\",\n \"port\",\n \"dbname\",\n \"user\",\n \"password\",\n ]);\n setHostname(kv.get(\"host\") ? kv.get(\"host\") + \"\" : \"\");\n setPort(kv.get(\"port\") ? kv.get(\"port\") + \"\" : \"\");\n setDbName(kv.get(\"dbname\") ? kv.get(\"dbname\") + \"\" : \"\");\n setUser(kv.get(\"user\") ? kv.get(\"user\") + \"\" : \"\");\n setPassword(kv.get(\"password\") ? kv.get(\"password\") + \"\" : \"\");\n }\n\n setUseDsnString(event.target.checked);\n };\n\n return (\n \n \n \n \n {useDsnString ? (\n \n \n ) => {\n setDsnString(e.target.value);\n }}\n />\n \n \n ) : (\n \n \n \n \n ) => {\n setHostname(e.target.value);\n }}\n />\n \n \n ) => {\n setDbName(e.target.value);\n }}\n />\n \n \n ) => {\n setPort(e.target.value);\n }}\n />\n \n\n \n ) => {\n setUser(e.target.value);\n }}\n />\n \n \n ) => {\n setPassword(e.target.value);\n }}\n />\n \n \n \n \n \n
\n
\n
\n )}\n \n ) => {\n setTable(e.target.value);\n }}\n />\n \n \n {\n setFormat(e.target.value);\n }}\n tooltip=\"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\"\n selectorOptions={[\n { label: \"Namespace\", value: \"namespace\" },\n { label: \"Access\", value: \"access\" },\n ]}\n />\n \n \n ) => {\n setQueueDir(e.target.value);\n }}\n />\n \n \n ) => {\n setQueueLimit(e.target.value);\n }}\n />\n \n \n ) => {\n setComment(e.target.value);\n }}\n />\n \n
\n );\n};\n\nexport default withStyles(styles)(ConfMySql);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport ConfPostgres from \"../CustomForms/ConfPostgres\";\nimport api from \"../../../../common/api\";\nimport { serverNeedsRestart, setErrorSnackMessage } from \"../../../../actions\";\nimport {\n notificationEndpointsFields,\n notifyMysql,\n notifyPostgres,\n removeEmptyFields,\n} from \"../utils\";\nimport { IElementValue } from \"../types\";\nimport {\n modalBasic,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { servicesList } from \"./utils\";\nimport ConfMySql from \"../CustomForms/ConfMySql\";\nimport ConfTargetGeneric from \"../ConfTargetGeneric\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n ...settingsCommon,\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n lambdaFormIndicator: {\n display: \"flex\",\n marginBottom: 40,\n },\n customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n settingsFormContainer: {\n ...settingsCommon.settingsFormContainer,\n height: \"calc(100vh - 422px)\",\n },\n });\n\ninterface IAddNotificationEndpointProps {\n service: string;\n saveAndRefresh: any;\n serverNeedsRestart: typeof serverNeedsRestart;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n classes: any;\n}\n\nconst AddNotificationEndpoint = ({\n service,\n saveAndRefresh,\n serverNeedsRestart,\n classes,\n setErrorSnackMessage,\n}: IAddNotificationEndpointProps) => {\n //Local States\n const [valuesArr, setValueArr] = useState([]);\n const [saving, setSaving] = useState(false);\n\n //Effects\n\n useEffect(() => {\n if (saving) {\n const payload = {\n key_values: removeEmptyFields(valuesArr),\n };\n api\n .invoke(\"PUT\", `/api/v1/configs/${service}`, payload)\n .then(() => {\n setSaving(false);\n serverNeedsRestart(true);\n saveAndRefresh();\n })\n .catch((err) => {\n setSaving(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n saving,\n serverNeedsRestart,\n service,\n valuesArr,\n saveAndRefresh,\n setErrorSnackMessage,\n ]);\n\n //Fetch Actions\n const submitForm = (event: React.FormEvent) => {\n event.preventDefault();\n setSaving(true);\n };\n\n const onValueChange = useCallback(\n (newValue) => {\n setValueArr(newValue);\n },\n [setValueArr]\n );\n\n let srvComponent;\n switch (service) {\n case notifyPostgres: {\n srvComponent = ;\n break;\n }\n case notifyMysql: {\n srvComponent = ;\n break;\n }\n default: {\n const fields = get(notificationEndpointsFields, service, []);\n\n srvComponent = (\n \n );\n }\n }\n\n const targetElement = servicesList.find(\n (element) => element.actionTrigger === service\n );\n\n return (\n \n {service !== \"\" && (\n \n
\n \n {targetElement ? targetElement.targetTitle : \"\"} - Add Lambda\n Notification Target\n \n \n {srvComponent}\n \n \n \n Save\n \n \n \n \n
\n )}\n
\n );\n};\n\nconst mapDispatchToProps = {\n serverNeedsRestart,\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(AddNotificationEndpoint));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { servicesList } from \"./utils\";\nimport { settingsCommon } from \"../../Common/FormComponents/common/styleLibrary\";\n\ninterface INotificationTypeSelector {\n classes: any;\n setService: (trigger: string) => any;\n}\n\nconst nonLogos = servicesList.filter((elService) => elService.logo === \"\");\nconst withLogos = servicesList.filter((elService) => elService.logo !== \"\");\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...settingsCommon,\n logoButton: {\n height: \"80px\",\n },\n lambdaNotif: {\n backgroundColor: \"#fff\",\n border: \"#393939 1px solid\",\n borderRadius: 5,\n width: 101,\n height: 91,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: 16,\n cursor: \"pointer\",\n \"& img\": {\n maxWidth: 71,\n maxHeight: 71,\n },\n },\n iconContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n maxWidth: 455,\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n },\n nonIconContainer: {\n marginBottom: 16,\n width: 455,\n marginTop: 15,\n \"& button\": {\n marginRight: 16,\n },\n },\n pickTitle: {\n fontWeight: 600,\n color: \"#393939\",\n fontSize: 14,\n marginBottom: 16,\n },\n centerElements: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n });\n\nconst NotificationTypeSelector = ({\n classes,\n setService,\n}: INotificationTypeSelector) => {\n return (\n \n \n \n \n Pick a supported service\n \n \n
\n {nonLogos.map((item) => {\n return (\n {\n setService(item.actionTrigger);\n }}\n >\n {item.targetTitle.toUpperCase()}\n \n );\n })}\n
\n
\n {withLogos.map((item) => {\n return (\n {\n setService(item.actionTrigger);\n }}\n >\n \n \n );\n })}\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(NotificationTypeSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { TextField } from \"@material-ui/core\";\nimport { red } from \"@material-ui/core/colors\";\nimport Grid from \"@material-ui/core/Grid\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport Button from \"@material-ui/core/Button\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport {\n NotificationEndpointItem,\n NotificationEndpointsList,\n TransformedEndpointItem,\n} from \"./types\";\nimport { notificationTransform } from \"./utils\";\nimport { CreateIcon } from \"../../../../icons\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddNotificationEndpoint from \"./AddNotificationEndpoint\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport NotificationTypeSelector from \"./NotificationTypeSelector\";\n\ninterface IListNotificationEndpoints {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...settingsCommon,\n ...containerForHeader(theme.spacing(4)),\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n iconText: {\n lineHeight: \"24px\",\n },\n customConfigurationPage: {\n height: \"calc(100vh - 410px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n lambdaContainer: {\n padding: \"15px 0\",\n },\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"0 38px\",\n },\n });\n\nconst ListNotificationEndpoints = ({\n classes,\n setErrorSnackMessage,\n}: IListNotificationEndpoints) => {\n //Local States\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [currentPanel, setCurrentPanel] = useState(0);\n const [service, setService] = useState(\"\");\n\n //Effects\n // load records on mount\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/admin/notification_endpoints`)\n .then((res: NotificationEndpointsList) => {\n let resNotEndList: NotificationEndpointItem[] = [];\n if (res.notification_endpoints !== null) {\n resNotEndList = res.notification_endpoints;\n }\n setRecords(notificationTransform(resNotEndList));\n setIsLoading(false);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, setErrorSnackMessage]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const filteredRecords = records.filter((b: TransformedEndpointItem) => {\n if (filter === \"\") {\n return true;\n }\n return b.service_name.indexOf(filter) >= 0;\n });\n\n const statusDisplay = (status: string) => {\n return (\n \n \n {status}\n
\n );\n };\n\n const openNewLambdaSelector = () => {\n setCurrentPanel(1);\n };\n\n const backClick = () => {\n setService(\"\");\n setCurrentPanel(currentPanel - 1);\n };\n\n const saveAndRefresh = () => {\n setIsLoading(true);\n setCurrentPanel(0);\n setService(\"\");\n };\n\n return (\n \n \n \n \n
\n \n \n Lambda Notification Targets\n \n\n \n \n {\n setFilter(event.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={openNewLambdaSelector}\n >\n Add Notification Target\n \n \n \n
\n
\n \n \n \n
\n ,\n \n \n \n \n Back To Lambda Notifications\n \n \n \n {\n setService(serviceName);\n setCurrentPanel(2);\n }}\n />\n \n ,\n \n \n \n \n Back To Supported Services\n \n \n \n \n \n ,\n ]}\n currentSlide={currentPanel}\n />\n
\n
\n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(ListNotificationEndpoints));\n","import React, { Fragment, useState } from \"react\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport ConfigurationsList from \"./ConfigurationPanels/ConfigurationsList\";\nimport ListNotificationEndpoints from \"./NotificationEndpoints/ListNotificationEndpoints\";\n\ninterface IConfigurationMain {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst ConfigurationMain = ({ classes }: IConfigurationMain) => {\n const [selectedTab, setSelectedTab] = useState(0);\n return (\n \n \n \n \n \n All Settings\n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"tenant-tabs\"\n >\n \n \n \n \n {selectedTab === 0 && (\n \n \n \n )}\n {selectedTab === 1 && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ConfigurationMain);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Button, TextField } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport EditConfiguration from \"../CustomForms/EditConfiguration\";\n\ninterface IMatchParams {\n isExact: boolean;\n params: any;\n path: string;\n}\n\ninterface IWebhookPanel {\n match: IMatchParams;\n classes: any;\n}\n\ninterface IWebhook {\n name: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n actionsTray: {\n textAlign: \"right\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n searchField: {\n background: \"#FFFFFF\",\n padding: 12,\n borderRadius: 5,\n boxShadow: \"0px 3px 6px #00000012\",\n },\n iconText: {\n lineHeight: \"24px\",\n },\n });\n\nconst panels = {\n logger: {\n main: \"logger\",\n title: \"Logger Webhook Configuration\",\n modalTitle: \"Logger Webhook\",\n apiURL: \"\",\n configuration: {\n configuration_id: \"logger_webhook\",\n configuration_label: \"Logger Webhook\",\n },\n },\n audit: {\n main: \"audit\",\n title: \"Audit Webhook Configuration\",\n modalTitle: \"Audit Webhook\",\n apiURL: \"\",\n configuration: {\n configuration_id: \"audit_webhook\",\n configuration_label: \"Audit Webhook\",\n },\n },\n};\n\nconst WebhookPanel = ({ match, classes }: IWebhookPanel) => {\n const [addWebhookOpen, setAddWebhookOpen] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n // const [webhooks, setWebhooks] = useState([]);\n\n const pathIn = get(match, \"path\", \"\");\n const panelToDisplay = pathIn.split(\"/\");\n const panelData = get(panels, panelToDisplay[2], false);\n\n if (!panelData) {\n return null;\n }\n\n const webhooks: IWebhook[] = [];\n\n const filteredRecords: IWebhook[] = webhooks.filter((elementItem) =>\n elementItem.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase())\n );\n\n const tableActions = [\n {\n type: \"edit\",\n onClick: () => {},\n },\n ];\n\n return (\n \n {addWebhookOpen && (\n {\n setIsLoading(true);\n setAddWebhookOpen(false);\n }}\n selectedConfiguration={panelData.configuration}\n />\n )}\n \n \n {panelData.title}\n \n \n
\n
\n \n {\n setFilter(event.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={() => {\n setAddWebhookOpen(true);\n }}\n >\n Add Webhook Configuration\n \n \n \n
\n
\n \n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(WebhookPanel);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { ITenant } from \"./types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\n\ninterface IDeleteTenant {\n deleteOpen: boolean;\n selectedTenant: ITenant;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteTenant = ({\n deleteOpen,\n selectedTenant,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeleteTenant) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n const [retypeTenant, setRetypeTenant] = useState(\"\");\n\n useEffect(() => {\n if (deleteLoading) {\n api\n .invoke(\n \"DELETE\",\n `/api/v1/namespaces/${selectedTenant.namespace}/tenants/${selectedTenant.name}`\n )\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deleteLoading]);\n\n const removeRecord = () => {\n if (retypeTenant !== selectedTenant.name) {\n setErrorSnackMessage(\"Tenant name is not correct\");\n return;\n }\n setDeleteLoading(true);\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Tenant\n \n {deleteLoading && }\n \n To continue please type {selectedTenant.name} in the box.\n \n ) => {\n setRetypeTenant(event.target.value);\n }}\n label=\"\"\n value={retypeTenant}\n />\n \n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n Delete\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(DeleteTenant);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IWizardButton, IWizardPage } from \"./types\";\nimport { Button } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wizardStepContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n wizardComponent: {\n overflowY: \"auto\",\n marginBottom: 10,\n height: \"calc(100vh - 435px)\",\n },\n buttonsContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-end\" as const,\n padding: \"10px 0\",\n borderTop: \"#EAEAEA 1px solid\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n });\n\nconst WizardPage = ({ classes, page, pageChange }: IWizardPage) => {\n const buttonAction = (btn: IWizardButton) => {\n switch (btn.type) {\n case \"next\":\n pageChange(\"++\");\n break;\n case \"back\":\n pageChange(\"--\");\n break;\n case \"to\":\n pageChange(btn.toPage || 0);\n break;\n default:\n }\n\n if (btn.action) {\n btn.action();\n }\n };\n\n return (\n
\n
{page.componentRender}
\n
\n {page.buttons.map((btn) => {\n return (\n {\n buttonAction(btn);\n }}\n disabled={!btn.enabled}\n key={`button-${page.label}-${btn.label}`}\n >\n {btn.label}\n \n );\n })}\n
\n
\n );\n};\n\nexport default withStyles(styles)(WizardPage);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IWizardMain } from \"./types\";\nimport WizardPage from \"./WizardPage\";\nimport { Grid } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wizardMain: {\n display: \"flex\",\n width: \"100%\",\n height: \"100%\",\n flexGrow: 1,\n },\n wizFromContainer: {\n height: \"calc(100vh - 365px)\",\n minHeight: 450,\n padding: \"0 30px\",\n },\n wizardSteps: {\n minWidth: 180,\n marginRight: 10,\n borderRight: \"#eaeaea 1px solid\",\n display: \"flex\",\n flexGrow: 1,\n flexDirection: \"column\",\n height: \"100%\",\n \"& ul\": {\n padding: \"0 15px 0 40px\",\n marginTop: \"0px\",\n\n \"& li\": {\n listStyle: \"lower-roman\",\n marginBottom: 12,\n },\n },\n },\n buttonList: {\n backgroundColor: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n \"&:not(:disabled):hover\": {\n textDecoration: \"underline\",\n },\n \"&:selected, &:active, &:focus, &:focus:active\": {\n border: \"none\",\n outline: 0,\n boxShadow: \"none\",\n },\n },\n paddedContentGrid: {\n padding: \"0 10px\",\n },\n stepsLabel: {\n fontSize: 20,\n color: \"#393939\",\n fontWeight: 600,\n margin: \"15px 12px\",\n },\n });\n\nconst GenericWizard = ({ classes, wizardSteps }: IWizardMain) => {\n const [currentStep, setCurrentStep] = useState(0);\n\n const pageChange = (toElement: string | number) => {\n const lastPage = wizardSteps.length - 1;\n\n if (toElement === \"++\") {\n let nextPage = currentStep + 1;\n\n if (nextPage > lastPage) {\n nextPage = lastPage;\n }\n\n setCurrentStep(nextPage);\n }\n\n if (toElement === \"--\") {\n let prevPage = currentStep - 1;\n\n if (prevPage < 0) {\n prevPage = 0;\n }\n\n setCurrentStep(prevPage);\n }\n\n if (typeof toElement === \"number\") {\n let pg = toElement;\n if (toElement < 0) {\n pg = 0;\n }\n\n if (toElement > lastPage) {\n pg = lastPage;\n }\n\n setCurrentStep(pg);\n }\n };\n\n if (wizardSteps.length === 0) {\n return null;\n }\n\n return (\n \n \n
\n Steps\n
    \n {wizardSteps.map((step, index) => {\n return (\n
  • \n pageChange(index)}\n disabled={index > currentStep}\n className={classes.buttonList}\n >\n {step.label}\n \n
  • \n );\n })}\n
\n
\n
\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(GenericWizard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport { IAffinityModel } from \"../../../../common/types\";\n\nexport const getHardcodedAffinity = (tenantName: string, poolName: string) => {\n const hardCodedAffinity: IAffinityModel = {\n podAntiAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: [\n {\n labelSelector: {\n matchExpressions: [\n {\n key: \"v1.min.io/tenant\",\n operator: \"In\",\n values: [tenantName],\n },\n {\n key: \"v1.min.io/pool\",\n operator: \"In\",\n values: [poolName],\n },\n ],\n },\n topologyKey: \"kubernetes.io/hostname\",\n },\n ],\n },\n };\n return hardCodedAffinity;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { IErasureCodeCalc } from \"../../../common/types\";\nimport { IMemorySize } from \"./ListTenants/types\";\nimport { KeyPair, Opts } from \"./ListTenants/utils\";\n\nexport const ADD_TENANT_SET_CURRENT_PAGE = \"ADD_TENANT/SET_CURRENT_PAGE\";\nexport const ADD_TENANT_SET_ADVANCED_MODE = \"ADD_TENANT/SET_ADVANCED_MODE\";\nexport const ADD_TENANT_UPDATE_FIELD = \"ADD_TENANT/UPDATE_FIELD\";\nexport const ADD_TENANT_SET_PAGE_VALID = \"ADD_TENANT/SET_PAGE_VALID\";\nexport const ADD_TENANT_RESET_FORM = \"ADD_TENANT/RESET_FORM\";\n\n// Name Tenant\nexport const ADD_TENANT_SET_STORAGE_CLASSES_LIST =\n \"ADD_TENANT/SET_STORAGE_CLASSES_LIST\";\nexport const ADD_TENANT_SET_LIMIT_SIZE = \"ADD_TENANT/SET_LIMIT_SIZE\";\n\n// Security\nexport const ADD_TENANT_ADD_MINIO_KEYPAIR = \"ADD_TENANT/ADD_MINIO_KEYPAIR\";\nexport const ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR =\n \"ADD_TENANT/ADD_FILE_MINIO_KEYPAIR\";\nexport const ADD_TENANT_DELETE_MINIO_KEYPAIR =\n \"ADD_TENANT/DELETE_MINIO_KEYPAIR\";\nexport const ADD_TENANT_ADD_CA_KEYPAIR = \"ADD_TENANT/ADD_CA_KEYPAIR\";\nexport const ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR =\n \"ADD_TENANT/ADD_FILE_TO_CA_KEYPAIR\";\nexport const ADD_TENANT_DELETE_CA_KEYPAIR = \"ADD_TENANT/DELETE_CA_KEYPAIR\";\nexport const ADD_TENANT_ADD_CONSOLE_CERT = \"ADD_TENANT/ADD_CONSOLE_CERT\";\n\n// Encryption\nexport const ADD_TENANT_ENCRYPTION_SERVER_CERT =\n \"ADD_TENANT/ENCRYPTION_SERVER_CERT\";\nexport const ADD_TENANT_ENCRYPTION_CLIENT_CERT =\n \"ADD_TENANT/ENCRYPTION_CLIENT_CERT\";\nexport const ADD_TENANT_ENCRYPTION_VAULT_CERT =\n \"ADD_TENANT/ENCRYPTION_VAULT_CERT\";\nexport const ADD_TENANT_ENCRYPTION_VAULT_CA = \"ADD_TENANT/ENCRYPTION_VAULT_CA\";\nexport const ADD_TENANT_ENCRYPTION_GEMALTO_CA =\n \"ADD_TENANT/ENCRYPTION_GEMALTO_CA\";\n\nexport interface ICreateTenant {\n page: number;\n validPages: string[];\n advancedModeOn: boolean;\n storageClasses: Opts[];\n limitSize: any;\n fields: IFieldStore;\n certificates: ICertificatesItems;\n}\n\nexport interface ICertificatesItems {\n minioCertificates: KeyPair[];\n caCertificates: KeyPair[];\n consoleCertificate: KeyPair;\n serverCertificate: KeyPair;\n clientCertificate: KeyPair;\n vaultCertificate: KeyPair;\n vaultCA: KeyPair;\n gemaltoCA: KeyPair;\n}\n\nexport interface IFieldStore {\n nameTenant: INameTenantFields;\n configure: IConfigureFields;\n identityProvider: IIdentityProviderFields;\n security: ISecurityFields;\n encryption: IEncryptionFields;\n tenantSize: ITenantSizeFields;\n}\n\nexport interface INameTenantFields {\n tenantName: string;\n namespace: string;\n selectedStorageClass: string;\n}\n\nexport interface IConfigureFields {\n customImage: boolean;\n imageName: string;\n consoleImage: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n}\n\nexport interface IIdentityProviderFields {\n idpSelection: string;\n openIDURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameFilter: string;\n ADGroupBaseDN: string;\n ADGroupSearchFilter: string;\n ADNameAttribute: string;\n}\n\nexport interface ISecurityFields {\n enableTLS: boolean;\n enableAutoCert: boolean;\n enableCustomCerts: boolean;\n}\n\nexport interface IEncryptionFields {\n enableEncryption: boolean;\n encryptionType: string;\n gemaltoEndpoint: string;\n gemaltoToken: string;\n gemaltoDomain: string;\n gemaltoRetry: string;\n awsEndpoint: string;\n awsRegion: string;\n awsKMSKey: string;\n awsAccessKey: string;\n awsSecretKey: string;\n awsToken: string;\n vaultEndpoint: string;\n vaultEngine: string;\n vaultNamespace: string;\n vaultPrefix: string;\n vaultAppRoleEngine: string;\n vaultId: string;\n vaultSecret: string;\n vaultRetry: string;\n vaultPing: string;\n gcpProjectID: string;\n gcpEndpoint: string;\n gcpClientEmail: string;\n gcpClientID: string;\n gcpPrivateKeyID: string;\n gcpPrivateKey: string;\n enableCustomCertsForKES: boolean;\n}\n\nexport interface ITenantSizeFields {\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n maxAllocableMemo: number;\n memorySize: IMemorySize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n}\n\nexport interface ITenantState {\n createTenant: ICreateTenant;\n}\n\ninterface SetTenantWizardPage {\n type: typeof ADD_TENANT_SET_CURRENT_PAGE;\n page: number;\n}\n\ninterface SetAdvancedMode {\n type: typeof ADD_TENANT_SET_ADVANCED_MODE;\n state: boolean;\n}\n\ninterface UpdateATField {\n type: typeof ADD_TENANT_UPDATE_FIELD;\n pageName: keyof IFieldStore;\n field: keyof FieldsToHandle;\n value: any;\n}\n\ninterface SetPageValid {\n type: typeof ADD_TENANT_SET_PAGE_VALID;\n pageName: keyof IFieldStore;\n valid: boolean;\n}\n\ninterface SetStorageClassesList {\n type: typeof ADD_TENANT_SET_STORAGE_CLASSES_LIST;\n storageClasses: Opts[];\n}\n\ninterface SetLimitSize {\n type: typeof ADD_TENANT_SET_LIMIT_SIZE;\n limitSize: any;\n}\n\ninterface AddMinioKeyPair {\n type: typeof ADD_TENANT_ADD_MINIO_KEYPAIR;\n}\n\ninterface AddFileToMinioKeyPair {\n type: typeof ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR;\n id: string;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface DeleteMinioKeyPair {\n type: typeof ADD_TENANT_DELETE_MINIO_KEYPAIR;\n id: string;\n}\ninterface AddCAKeyPair {\n type: typeof ADD_TENANT_ADD_CA_KEYPAIR;\n}\n\ninterface AddFileToCAKeyPair {\n type: typeof ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR;\n id: string;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface DeleteCAKeyPair {\n type: typeof ADD_TENANT_DELETE_CA_KEYPAIR;\n id: string;\n}\n\ninterface AddFileConsoleCert {\n type: typeof ADD_TENANT_ADD_CONSOLE_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\n// Encryption Certs\ninterface AddFileServerCert {\n type: typeof ADD_TENANT_ENCRYPTION_SERVER_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface AddFileClientCert {\n type: typeof ADD_TENANT_ENCRYPTION_CLIENT_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface AddFileVaultCert {\n type: typeof ADD_TENANT_ENCRYPTION_VAULT_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface AddFileVaultCa {\n type: typeof ADD_TENANT_ENCRYPTION_VAULT_CA;\n fileName: string;\n value: string;\n}\n\ninterface AddFileGemaltoCa {\n type: typeof ADD_TENANT_ENCRYPTION_GEMALTO_CA;\n fileName: string;\n value: string;\n}\n\ninterface ResetForm {\n type: typeof ADD_TENANT_RESET_FORM;\n}\n\nexport type FieldsToHandle = INameTenantFields;\n\nexport type TenantsManagementTypes =\n | SetTenantWizardPage\n | SetAdvancedMode\n | UpdateATField\n | SetPageValid\n | SetStorageClassesList\n | SetLimitSize\n | AddMinioKeyPair\n | DeleteMinioKeyPair\n | AddCAKeyPair\n | DeleteCAKeyPair\n | AddFileConsoleCert\n | AddFileToMinioKeyPair\n | AddFileToCAKeyPair\n | AddFileServerCert\n | AddFileClientCert\n | AddFileVaultCert\n | AddFileVaultCa\n | AddFileGemaltoCa\n | ResetForm;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Opts } from \"./ListTenants/utils\";\nimport {\n ADD_TENANT_SET_ADVANCED_MODE,\n ADD_TENANT_SET_CURRENT_PAGE,\n ADD_TENANT_UPDATE_FIELD,\n ADD_TENANT_SET_PAGE_VALID,\n ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n ADD_TENANT_SET_LIMIT_SIZE,\n ADD_TENANT_ADD_CA_KEYPAIR,\n ADD_TENANT_DELETE_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n ADD_TENANT_ADD_MINIO_KEYPAIR,\n ADD_TENANT_DELETE_MINIO_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CERT,\n ADD_TENANT_ENCRYPTION_SERVER_CERT,\n ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CA,\n ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n ADD_TENANT_RESET_FORM,\n} from \"./types\";\n\n// Basic actions\nexport const setWizardPage = (page: number) => {\n return {\n type: ADD_TENANT_SET_CURRENT_PAGE,\n page,\n };\n};\n\nexport const setAdvancedMode = (state: boolean) => {\n return {\n type: ADD_TENANT_SET_ADVANCED_MODE,\n state,\n };\n};\n\nexport const updateAddField = (\n pageName: string,\n fieldName: string,\n value: any\n) => {\n return {\n type: ADD_TENANT_UPDATE_FIELD,\n pageName,\n field: fieldName,\n value,\n };\n};\n\nexport const isPageValid = (pageName: string, valid: boolean) => {\n return {\n type: ADD_TENANT_SET_PAGE_VALID,\n pageName,\n valid,\n };\n};\n\n// Name Tenant actions\n\nexport const setStorageClassesList = (storageClasses: Opts[]) => {\n return {\n type: ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n storageClasses,\n };\n};\n\nexport const setLimitSize = (limitSize: any) => {\n return {\n type: ADD_TENANT_SET_LIMIT_SIZE,\n limitSize,\n };\n};\n\n// Security actions\n\nexport const addCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CA_KEYPAIR,\n };\n};\n\nexport const deleteCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addKeyPair = () => {\n return {\n type: ADD_TENANT_ADD_MINIO_KEYPAIR,\n };\n};\n\nexport const deleteKeyPair = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_MINIO_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToKeyPair = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addConsoleCertificate = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileServerCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_SERVER_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileClientCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CA,\n fileName,\n value,\n };\n};\n\nexport const addFileGemaltoCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n fileName,\n value,\n };\n};\n\nexport const resetAddTenantForm = () => {\n return {\n type: ADD_TENANT_RESET_FORM,\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport interface IValidation {\n fieldKey: string;\n required: boolean;\n pattern?: RegExp;\n customPatternMessage?: string;\n customValidation?: boolean; // The validation to trigger the error\n customValidationMessage?: string;\n value: string;\n}\n\nexport const commonFormValidation = (fieldsValidate: IValidation[]) => {\n let returnErrors: any = {};\n\n fieldsValidate.forEach((field) => {\n if (field.required && field.value.trim() === \"\") {\n returnErrors[field.fieldKey] = \"Field cannot be empty\";\n return;\n }\n\n if (field.customValidation && field.customValidationMessage) {\n returnErrors[field.fieldKey] = field.customValidationMessage;\n return;\n }\n\n if (field.pattern && field.customPatternMessage) {\n const rgx = new RegExp(field.pattern, \"g\");\n\n if (!field.value.match(rgx)) {\n returnErrors[field.fieldKey] = field.customPatternMessage;\n }\n return;\n }\n });\n\n return returnErrors;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const clearValidationError = (\n validationErrors: any,\n fieldKey: string\n) => {\n const newValidationElement = { ...validationErrors };\n delete newValidationElement[fieldKey];\n\n return newValidationElement;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useMemo, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../actions\";\nimport {\n setAdvancedMode,\n updateAddField,\n isPageValid,\n setStorageClassesList,\n setLimitSize,\n} from \"../../actions\";\nimport {\n IQuotaElement,\n IQuotas,\n Opts,\n getLimitSizes,\n} from \"../../ListTenants/utils\";\nimport { AppState } from \"../../../../../store\";\nimport { commonFormValidation } from \"../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../utils\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface INameTenantScreen {\n classes: any;\n storageClasses: Opts[];\n setAdvancedMode: typeof setAdvancedMode;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n setStorageClassesList: typeof setStorageClassesList;\n setLimitSize: typeof setLimitSize;\n tenantName: string;\n namespace: string;\n selectedStorageClass: string;\n advancedMode: boolean;\n}\n\nconst NameTenant = ({\n classes,\n storageClasses,\n advancedMode,\n tenantName,\n namespace,\n selectedStorageClass,\n setAdvancedMode,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n}: INameTenantScreen) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n updateAddField(\"nameTenant\", field, value);\n },\n [updateAddField]\n );\n\n // Storage classes retrieval\n const getNamespaceInformation = useCallback(() => {\n updateField(\"selectedStorageClass\", \"\");\n\n setStorageClassesList([]);\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/resourcequotas/${namespace}-storagequota`\n )\n .then((res: IQuotas) => {\n const elements: IQuotaElement[] = get(res, \"elements\", []);\n setLimitSize(getLimitSizes(res));\n\n const newStorage = elements.map((storageClass: any) => {\n const name = get(storageClass, \"name\", \"\").split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n\n return { label: name, value: name };\n });\n\n setStorageClassesList(newStorage);\n if (newStorage.length > 0) {\n updateField(\"selectedStorageClass\", newStorage[0].value);\n }\n })\n .catch((err: any) => {\n console.error(err);\n });\n }, [namespace, setLimitSize, setStorageClassesList, updateField]);\n\n const debounceNamespace = useMemo(\n () => debounce(getNamespaceInformation, 500),\n [getNamespaceInformation]\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n // Validation\n useEffect(() => {\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"tenant-name\",\n required: true,\n pattern: /^[a-z0-9-]{3,63}$/,\n customPatternMessage:\n \"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3\",\n value: tenantName,\n },\n {\n fieldKey: \"namespace\",\n required: true,\n value: namespace,\n customValidation: storageClasses.length < 1,\n customValidationMessage: \"Please enter a valid namespace\",\n },\n ]);\n\n const isValid =\n !(\"tenant-name\" in commonValidation) &&\n !(\"namespace\" in commonValidation) &&\n storageClasses.length > 0;\n\n isPageValid(\"nameTenant\", isValid);\n\n setValidationErrors(commonValidation);\n }, [storageClasses, namespace, tenantName, isPageValid]);\n\n const frmValidationCleanup = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Name Tenant

\n \n How would you like to name this new tenant?\n \n
\n \n ) => {\n updateField(\"tenantName\", e.target.value);\n frmValidationCleanup(\"tenant-name\");\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={validationErrors[\"tenant-name\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"namespace\", e.target.value);\n frmValidationCleanup(\"namespace\");\n }}\n label=\"Namespace\"\n value={namespace}\n error={validationErrors[\"namespace\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"selectedStorageClass\", e.target.value as string);\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n \n
\n \n Check 'Advanced Mode' for additional configuration options, such as\n configuring an Identity Provider, Encryption at rest, and customized\n TLS/SSL Certificates.\n
\n Leave 'Advanced Mode' unchecked to use the secure default settings for\n the tenant.\n
\n
\n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n setAdvancedMode(checked);\n }}\n label={\"Advanced Mode\"}\n />\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n tenantName: state.tenants.createTenant.fields.nameTenant.tenantName,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n storageClasses: state.tenants.createTenant.storageClasses,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n setAdvancedMode,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(NameTenant));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport get from \"lodash/get\";\n\nexport interface Opts {\n label: string;\n value: string;\n}\n\nexport interface IQuotaElement {\n hard: number;\n name: string;\n}\n\nexport interface IQuotas {\n elements?: IQuotaElement[];\n name: string;\n}\n\nexport const minMemReq = 2147483648;\n\nexport interface KeyPair {\n id: string;\n encoded_cert: string;\n encoded_key: string;\n cert: string;\n key: string;\n}\n\nexport const ecListTransform = (ecList: string[]): Opts[] => {\n return ecList.map((value) => {\n return { label: value, value };\n });\n};\n\nexport const getLimitSizes = (resourceQuotas: IQuotas) => {\n const quotas: IQuotaElement[] = get(resourceQuotas, \"elements\", []);\n\n const returnQuotas: any = {};\n\n quotas.forEach((rsQuota) => {\n const stCName = rsQuota.name.split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n const hard = get(rsQuota, \"hard\", 0);\n const used = get(rsQuota, \"used\", 0);\n\n returnQuotas[stCName] = hard - used;\n });\n\n return returnQuotas;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useCallback, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid } from \"@material-ui/core\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { updateAddField, isPageValid } from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\ninterface IConfigureProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n classes: any;\n customImage: boolean;\n imageName: string;\n consoleImage: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Configure = ({\n classes,\n customImage,\n imageName,\n consoleImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n updateAddField,\n isPageValid,\n}: IConfigureProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"configure\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: true,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"consoleImage\",\n required: true,\n value: consoleImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/console:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"configure\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n consoleImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Configure

\n \n Basic configurations for tenant management\n \n
\n\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"customImage\", checked);\n }}\n label={\"Use custom image\"}\n />\n \n {customImage && (\n \n Please enter the MinIO image from dockerhub to use\n \n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO's Image\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"E.g. minio/minio:RELEASE.2020-05-08T02-40-49Z\"\n required\n />\n \n \n ) => {\n updateField(\"consoleImage\", e.target.value);\n cleanValidation(\"consoleImage\");\n }}\n label=\"Console's Image\"\n value={consoleImage}\n error={validationErrors[\"consoleImage\"] || \"\"}\n placeholder=\"E.g. minio/console:v0.3.13\"\n required\n />\n \n \n )}\n {customImage && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Set/Update Image Registry\"}\n />\n \n \n )}\n {customDockerhub && (\n \n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"E.g. https://index.docker.io/v1/\"\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n \n )}\n
\n

Expose Services

\n \n Whether the tenant's services should request an external IP.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MiniO Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n consoleImage: state.tenants.createTenant.fields.configure.consoleImage,\n customDockerhub: state.tenants.createTenant.fields.configure.customDockerhub,\n imageRegistry: state.tenants.createTenant.fields.configure.imageRegistry,\n imageRegistryUsername:\n state.tenants.createTenant.fields.configure.imageRegistryUsername,\n imageRegistryPassword:\n state.tenants.createTenant.fields.configure.imageRegistryPassword,\n exposeMinIO: state.tenants.createTenant.fields.configure.exposeMinIO,\n exposeConsole: state.tenants.createTenant.fields.configure.exposeConsole,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Configure));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useCallback, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, Typography } from \"@material-ui/core\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { updateAddField, isPageValid } from \"../../actions\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IIdentityProviderProps {\n classes: any;\n idpSelection: string;\n openIDURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameFilter: string;\n ADGroupBaseDN: string;\n ADGroupSearchFilter: string;\n ADNameAttribute: string;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst IdentityProvider = ({\n classes,\n idpSelection,\n openIDURL,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADSkipTLS,\n ADServerInsecure,\n ADUserNameFilter,\n ADGroupBaseDN,\n ADGroupSearchFilter,\n ADNameAttribute,\n updateAddField,\n isPageValid,\n}: IIdentityProviderProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"identityProvider\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n isPageValid(\"identityProvider\", true);\n setValidationErrors({});\n\n return;\n }\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_URL\",\n required: true,\n value: openIDURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n ];\n }\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_userNameFilter\",\n required: true,\n value: ADUserNameFilter,\n },\n {\n fieldKey: \"ad_groupBaseDN\",\n required: true,\n value: ADGroupBaseDN,\n },\n {\n fieldKey: \"ad_groupSearchFilter\",\n required: true,\n value: ADGroupSearchFilter,\n },\n {\n fieldKey: \"ad_nameAttribute\",\n required: true,\n value: ADNameAttribute,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n isPageValid(\"identityProvider\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDURL,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADUserNameFilter,\n ADGroupBaseDN,\n ADGroupSearchFilter,\n ADNameAttribute,\n isPageValid,\n ]);\n\n return (\n \n
\n

Identity Provider

\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n
\n \n {\n updateField(\"idpSelection\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\" },\n { label: \"OpenID\", value: \"OpenID\" },\n { label: \"Active Directory\", value: \"AD\" },\n ]}\n />\n MinIO supports both OpenID and Active Directory\n \n\n {idpSelection === \"OpenID\" && (\n \n \n ) => {\n updateField(\"openIDURL\", e.target.value);\n cleanValidation(\"openID_URL\");\n }}\n label=\"URL\"\n value={openIDURL}\n error={validationErrors[\"openID_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n \n \n )}\n {idpSelection === \"AD\" && (\n \n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"URL\"\n value={ADURL}\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n \n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n \n ) => {\n updateField(\"ADUserNameFilter\", e.target.value);\n cleanValidation(\"ad_userNameFilter\");\n }}\n label=\"User Search Filter\"\n value={ADUserNameFilter}\n error={validationErrors[\"ad_userNameFilter\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADGroupBaseDN\", e.target.value);\n cleanValidation(\"ad_groupBaseDN\");\n }}\n label=\"Group Search Base DN\"\n value={ADGroupBaseDN}\n error={validationErrors[\"ad_groupBaseDN\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n cleanValidation(\"ad_groupSearchFilter\");\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n error={validationErrors[\"ad_groupSearchFilter\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADNameAttribute\", e.target.value);\n cleanValidation(\"ad_nameAttribute\");\n }}\n label=\"Group Name Attribute\"\n value={ADNameAttribute}\n error={validationErrors[\"ad_nameAttribute\"] || \"\"}\n required\n />\n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n idpSelection: state.tenants.createTenant.fields.identityProvider.idpSelection,\n openIDURL: state.tenants.createTenant.fields.identityProvider.openIDURL,\n openIDClientID:\n state.tenants.createTenant.fields.identityProvider.openIDClientID,\n openIDSecretID:\n state.tenants.createTenant.fields.identityProvider.openIDSecretID,\n ADURL: state.tenants.createTenant.fields.identityProvider.ADURL,\n ADSkipTLS: state.tenants.createTenant.fields.identityProvider.ADSkipTLS,\n ADServerInsecure:\n state.tenants.createTenant.fields.identityProvider.ADServerInsecure,\n ADUserNameFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserNameFilter,\n ADGroupBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADGroupBaseDN,\n ADGroupSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,\n ADNameAttribute:\n state.tenants.createTenant.fields.identityProvider.ADNameAttribute,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(IdentityProvider));\n","import React from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette.error.main,\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@material-ui/core\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport AttachFileIcon from \"@material-ui/icons/AttachFile\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n flexDirection: \"column\",\n },\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n position: \"absolute\",\n top: 7,\n right: 7,\n },\n errorText: {\n margin: \"0\",\n fontSize: \"0.75rem\",\n marginTop: 3,\n textAlign: \"left\",\n fontFamily: \"Lato,sans-serif\",\n fontWeight: 400,\n lineHeight: \"1.66\",\n color: \"#dc1f2e\",\n },\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileReselect: {\n display: \"flex\",\n alignItems: \"center\",\n },\n fieldBottom: {\n borderBottom: \"#9c9c9c 1px solid\",\n },\n fileInputField: {\n margin: \"13px 0\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useCallback, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Divider, Grid, Typography } from \"@material-ui/core\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n addConsoleCertificate,\n} from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\n\ninterface ISecurityProps {\n classes: any;\n enableTLS: boolean;\n enableAutoCert: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n caCertificates: KeyPair[];\n consoleCertificate: KeyPair;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileToCaCertificates: typeof addFileToCaCertificates;\n deleteCaCertificate: typeof deleteCaCertificate;\n addCaCertificate: typeof addCaCertificate;\n addKeyPair: typeof addKeyPair;\n addFileToKeyPair: typeof addFileToKeyPair;\n deleteKeyPair: typeof deleteKeyPair;\n addConsoleCertificate: typeof addConsoleCertificate;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Security = ({\n classes,\n enableTLS,\n enableAutoCert,\n enableCustomCerts,\n minioCertificates,\n caCertificates,\n consoleCertificate,\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n}: ISecurityProps) => {\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"security\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableAutoCert) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableCustomCerts) {\n isPageValid(\"security\", true);\n return;\n }\n isPageValid(\"security\", false);\n }, [enableTLS, enableAutoCert, enableCustomCerts, isPageValid]);\n\n return (\n \n
\n

Security

\n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"Enable TLS\"}\n />\n Enable TLS for the tenant, this is required for Encryption Configuration\n {enableTLS && (\n \n
\n
\n \n AutoCert: MinIO Operator will generate all TLS certificates\n automatically\n \n \n Custom certificates: Allow user to provide your own certificates\n \n
\n
\n )}\n
\n {enableTLS && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"Enable AutoCert\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n />\n \n {enableCustomCerts && (\n \n \n \n \n MinIO Certificates\n \n \n {minioCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToKeyPair(\n keyPair.id,\n \"key\",\n fileName,\n encodedValue\n );\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n \n {\n addFileToKeyPair(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n {\n deleteKeyPair(keyPair.id);\n }}\n color=\"secondary\"\n >\n Remove\n \n \n \n ))}\n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n CA Certificates\n \n \n {caCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToCaCertificates(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n {\n deleteCaCertificate(keyPair.id);\n }}\n color=\"secondary\"\n >\n Remove\n \n \n \n ))}\n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n Console Certificates\n \n \n \n {\n addConsoleCertificate(\"key\", fileName, encodedValue);\n }}\n accept=\".key,.pem\"\n id=\"consoleKey\"\n name=\"consoleKey\"\n label=\"Key\"\n value={consoleCertificate.key}\n />\n \n \n {\n addConsoleCertificate(\"cert\", fileName, encodedValue);\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"consoleCert\"\n name=\"consoleCert\"\n label=\"Cert\"\n value={consoleCertificate.cert}\n />\n \n \n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n caCertificates: state.tenants.createTenant.certificates.caCertificates,\n consoleCertificate:\n state.tenants.createTenant.certificates.consoleCertificate,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n addConsoleCertificate,\n});\n\nexport default withStyles(styles)(connector(Security));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n} from \"../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { KeyPair } from \"../../ListTenants/utils\";\n\ninterface IEncryptionProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileServerCert: typeof addFileServerCert;\n addFileClientCert: typeof addFileClientCert;\n addFileVaultCert: typeof addFileVaultCert;\n addFileVaultCa: typeof addFileVaultCa;\n addFileGemaltoCa: typeof addFileGemaltoCa;\n enableEncryption: boolean;\n encryptionType: string;\n gemaltoEndpoint: string;\n gemaltoToken: string;\n gemaltoDomain: string;\n gemaltoRetry: string;\n awsEndpoint: string;\n awsRegion: string;\n awsKMSKey: string;\n awsAccessKey: string;\n awsSecretKey: string;\n awsToken: string;\n vaultEndpoint: string;\n vaultEngine: string;\n vaultNamespace: string;\n vaultPrefix: string;\n vaultAppRoleEngine: string;\n vaultId: string;\n vaultSecret: string;\n vaultRetry: string;\n vaultPing: string;\n gcpProjectID: string;\n gcpEndpoint: string;\n gcpClientEmail: string;\n gcpClientID: string;\n gcpPrivateKeyID: string;\n gcpPrivateKey: string;\n enableCustomCertsForKES: boolean;\n enableAutoCert: boolean;\n enableTLS: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n serverCertificate: KeyPair;\n clientCertificate: KeyPair;\n vaultCertificate: KeyPair;\n vaultCA: KeyPair;\n gemaltoCA: KeyPair;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Encryption = ({\n classes,\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n enableEncryption,\n enableCustomCerts,\n encryptionType,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n awsEndpoint,\n awsRegion,\n awsKMSKey,\n awsAccessKey,\n awsSecretKey,\n awsToken,\n vaultEndpoint,\n vaultEngine,\n vaultNamespace,\n vaultPrefix,\n vaultAppRoleEngine,\n vaultId,\n vaultSecret,\n vaultRetry,\n vaultPing,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n enableCustomCertsForKES,\n enableAutoCert,\n enableTLS,\n minioCertificates,\n serverCertificate,\n clientCertificate,\n vaultCertificate,\n vaultCA,\n gemaltoCA,\n}: IEncryptionProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioCertificates &&\n minioCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"encryption\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_cert,\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n isPageValid(\"encryption\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enableEncryption,\n encryptionType,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n gcpProjectID,\n isPageValid,\n enableAutoCert,\n enableCustomCerts,\n serverCertificate.encoded_key,\n serverCertificate.encoded_cert,\n clientCertificate.encoded_key,\n clientCertificate.encoded_cert,\n ]);\n\n return (\n \n
\n

Encryption

\n \n How would you like to encrypt the information at rest.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n label={\"Enable Server Side Encryption\"}\n disabled={!encryptionAvailable}\n />\n \n {enableEncryption && (\n \n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n ]}\n />\n \n {encryptionType === \"vault\" && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n \n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n \n \n Encryption Service Certificates\n \n \n \n \n {\n addFileServerCert(\"key\", fileName, encodedValue);\n cleanValidation(\"serverKey\");\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={serverCertificate.key}\n required={!enableAutoCert}\n />\n \n \n {\n addFileServerCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"serverCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={serverCertificate.cert}\n required={!enableAutoCert}\n />\n \n \n\n \n \n Mutual TLS authentication\n \n \n \n \n {\n addFileClientCert(\"key\", fileName, encodedValue);\n cleanValidation(\"clientKey\");\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={clientCertificate.key}\n required={!enableAutoCert}\n />\n \n \n {\n addFileClientCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"clientCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={clientCertificate.cert}\n required={!enableAutoCert}\n />\n \n \n \n )}\n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n value={vaultEngine}\n />\n \n \n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n value={vaultNamespace}\n />\n \n \n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n value={vaultPrefix}\n />\n \n
App Role
\n \n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n value={vaultAppRoleEngine}\n />\n \n \n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n \n
Mutual TLS authentication (optional)
\n \n \n {\n addFileVaultCert(\"key\", fileName, encodedValue);\n cleanValidation(\"vault_key\");\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={vaultCertificate.key}\n />\n \n \n {\n addFileVaultCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"vault_cert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={vaultCertificate.cert}\n />\n \n \n \n {\n addFileVaultCa(fileName, encodedValue);\n cleanValidation(\"vault_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={vaultCA.cert}\n />\n \n
Status
\n \n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n \n
\n )}\n {encryptionType === \"gcp\" && (\n \n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n value={gcpProjectID}\n />\n \n \n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n value={gcpEndpoint}\n />\n \n
Credentials
\n \n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n value={gcpClientEmail}\n />\n \n \n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n value={gcpClientID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n value={gcpPrivateKeyID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n value={gcpPrivateKey}\n />\n \n
\n )}\n {encryptionType === \"aws\" && (\n \n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n value={awsKMSKey}\n />\n \n
Credentials
\n \n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n \n
\n )}\n {encryptionType === \"gemalto\" && (\n \n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n \n
Credentials
\n \n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n \n
Custom CA Root certificate verification
\n \n {\n addFileGemaltoCa(fileName, encodedValue);\n cleanValidation(\"gemalto_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"gemalto_ca\"\n name=\"gemalto_ca\"\n label=\"CA\"\n value={gemaltoCA.cert}\n />\n \n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n enableEncryption:\n state.tenants.createTenant.fields.encryption.enableEncryption,\n encryptionType: state.tenants.createTenant.fields.encryption.encryptionType,\n gemaltoEndpoint: state.tenants.createTenant.fields.encryption.gemaltoEndpoint,\n gemaltoToken: state.tenants.createTenant.fields.encryption.gemaltoToken,\n gemaltoDomain: state.tenants.createTenant.fields.encryption.gemaltoDomain,\n gemaltoRetry: state.tenants.createTenant.fields.encryption.gemaltoRetry,\n awsEndpoint: state.tenants.createTenant.fields.encryption.awsEndpoint,\n awsRegion: state.tenants.createTenant.fields.encryption.awsRegion,\n awsKMSKey: state.tenants.createTenant.fields.encryption.awsKMSKey,\n awsAccessKey: state.tenants.createTenant.fields.encryption.awsAccessKey,\n awsSecretKey: state.tenants.createTenant.fields.encryption.awsSecretKey,\n awsToken: state.tenants.createTenant.fields.encryption.awsToken,\n vaultEndpoint: state.tenants.createTenant.fields.encryption.vaultEndpoint,\n vaultEngine: state.tenants.createTenant.fields.encryption.vaultEngine,\n vaultNamespace: state.tenants.createTenant.fields.encryption.vaultNamespace,\n vaultPrefix: state.tenants.createTenant.fields.encryption.vaultPrefix,\n vaultAppRoleEngine:\n state.tenants.createTenant.fields.encryption.vaultAppRoleEngine,\n vaultId: state.tenants.createTenant.fields.encryption.vaultId,\n vaultSecret: state.tenants.createTenant.fields.encryption.vaultSecret,\n vaultRetry: state.tenants.createTenant.fields.encryption.vaultRetry,\n vaultPing: state.tenants.createTenant.fields.encryption.vaultPing,\n gcpProjectID: state.tenants.createTenant.fields.encryption.gcpProjectID,\n gcpEndpoint: state.tenants.createTenant.fields.encryption.gcpEndpoint,\n gcpClientEmail: state.tenants.createTenant.fields.encryption.gcpClientEmail,\n gcpClientID: state.tenants.createTenant.fields.encryption.gcpClientID,\n gcpPrivateKeyID: state.tenants.createTenant.fields.encryption.gcpPrivateKeyID,\n gcpPrivateKey: state.tenants.createTenant.fields.encryption.gcpPrivateKey,\n enableCustomCertsForKES:\n state.tenants.createTenant.fields.encryption.enableCustomCertsForKES,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n serverCertificate: state.tenants.createTenant.certificates.serverCertificate,\n clientCertificate: state.tenants.createTenant.certificates.clientCertificate,\n vaultCertificate: state.tenants.createTenant.certificates.vaultCertificate,\n vaultCA: state.tenants.createTenant.certificates.vaultCA,\n gemaltoCA: state.tenants.createTenant.certificates.gemaltoCA,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n});\n\nexport default withStyles(styles)(connector(Encryption));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { AppState } from \"../../../../../store\";\nimport { updateAddField, isPageValid } from \"../../actions\";\nimport {\n wizardCommon,\n modalBasic,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport {\n getBytes,\n k8sfactorForDropdown,\n niceBytes,\n calculateDistribution,\n erasureCodeCalc,\n setMemoryResource,\n} from \"../../../../../common/utils\";\nimport { clearValidationError } from \"../../utils\";\nimport { ecListTransform, Opts } from \"../../ListTenants/utils\";\nimport { IMemorySize } from \"../../ListTenants/types\";\nimport { ICapacity, IErasureCodeCalc } from \"../../../../../common/types\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { commonFormValidation } from \"../../../../../utils/validationFunctions\";\n\ninterface ITenantSizeProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n advancedMode: boolean;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n maxAllocableMemo: number;\n memorySize: IMemorySize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageClass: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSize = ({\n classes,\n updateAddField,\n isPageValid,\n advancedMode,\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n maxAllocableMemo,\n memorySize,\n distribution,\n ecParityCalc,\n limitSize,\n selectedStorageClass,\n}: ITenantSizeProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n /*Debounce functions*/\n\n // Storage Quotas\n\n const validateMemorySize = useCallback(() => {\n const memSize = parseInt(memoryNode) || 0;\n const clusterSize = volumeSize || 0;\n const maxMemSize = maxAllocableMemo || 0;\n const clusterSizeFactor = sizeFactor;\n\n const clusterSizeBytes = getBytes(\n clusterSize.toString(10),\n clusterSizeFactor\n );\n const memoSize = setMemoryResource(memSize, clusterSizeBytes, maxMemSize);\n\n updateField(\"memorySize\", memoSize);\n }, [maxAllocableMemo, memoryNode, sizeFactor, updateField, volumeSize]);\n\n const getMaxAllocableMemory = (nodes: string) => {\n if (nodes !== \"\" && !isNaN(parseInt(nodes))) {\n api\n .invoke(\n \"GET\",\n `/api/v1/cluster/max-allocatable-memory?num_nodes=${nodes}`\n )\n .then((res: { max_memory: number }) => {\n const maxMemory = res.max_memory ? res.max_memory : 0;\n updateField(\"maxAllocableMemo\", maxMemory);\n })\n .catch((err: any) => {\n updateField(\"maxAllocableMemo\", 0);\n console.error(err);\n });\n }\n };\n\n useEffect(() => {\n validateMemorySize();\n }, [memoryNode, validateMemorySize]);\n\n useEffect(() => {\n validateMemorySize();\n }, [maxAllocableMemo, validateMemorySize]);\n\n useEffect(() => {\n if (ecParityChoices.length > 0 && distribution.error === \"\") {\n const ecCodeValidated = erasureCodeCalc(\n cleanECChoices,\n distribution.persistentVolumes,\n distribution.pvSize,\n distribution.nodes\n );\n\n updateField(\"ecParityCalc\", ecCodeValidated);\n updateField(\"ecParity\", ecCodeValidated.defaultEC);\n }\n }, [ecParityChoices.length, distribution, cleanECChoices, updateField]);\n /*End debounce functions*/\n\n /*Calculate Allocation*/\n useEffect(() => {\n validateClusterSize();\n getECValue();\n getMaxAllocableMemory(nodes);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nodes, volumeSize, sizeFactor, drivesPerServer]);\n\n const validateClusterSize = () => {\n const size = volumeSize;\n const factor = sizeFactor;\n const limitSize = getBytes(\"12\", \"Ti\", true);\n\n const clusterCapacity: ICapacity = {\n unit: factor,\n value: size.toString(),\n };\n\n const distrCalculate = calculateDistribution(\n clusterCapacity,\n parseInt(nodes),\n parseInt(limitSize),\n parseInt(drivesPerServer)\n );\n\n updateField(\"distribution\", distrCalculate);\n };\n\n const getECValue = () => {\n updateField(\"ecParity\", \"\");\n\n if (nodes.trim() !== \"\" && drivesPerServer.trim() !== \"\") {\n api\n .invoke(\"GET\", `/api/v1/get-parity/${nodes}/${drivesPerServer}`)\n .then((ecList: string[]) => {\n updateField(\"ecParityChoices\", ecListTransform(ecList));\n updateField(\"cleanECChoices\", ecList);\n })\n .catch((err: any) => {\n updateField(\"ecparityChoices\", []);\n isPageValid(\"tenantSize\", false);\n updateField(\"ecParity\", \"\");\n });\n }\n };\n /*Calculate Allocation End*/\n\n /* Validations of pages */\n\n useEffect(() => {\n const parsedSize = getBytes(volumeSize, sizeFactor, true);\n\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: parseInt(nodes) < 4,\n customValidationMessage: \"Number of nodes cannot be less than 4\",\n },\n {\n fieldKey: \"volume_size\",\n required: true,\n value: volumeSize,\n customValidation:\n parseInt(parsedSize) < 1073741824 ||\n parseInt(parsedSize) > limitSize[selectedStorageClass],\n customValidationMessage: `Volume size must be greater than 1Gi and less than ${niceBytes(\n limitSize[selectedStorageClass],\n true\n )}`,\n },\n {\n fieldKey: \"memory_per_node\",\n required: true,\n value: memoryNode,\n customValidation: parseInt(memoryNode) < 2,\n customValidationMessage: \"Memory size must be greater than 2Gi\",\n },\n {\n fieldKey: \"drivesps\",\n required: true,\n value: drivesPerServer,\n customValidation: parseInt(drivesPerServer) < 1,\n customValidationMessage: \"There must be at least one drive\",\n },\n ]);\n\n isPageValid(\n \"tenantSize\",\n !(\"nodes\" in commonValidation) &&\n !(\"volume_size\" in commonValidation) &&\n !(\"memory_per_node\" in commonValidation) &&\n !(\"drivesps\" in commonValidation) &&\n distribution.error === \"\" &&\n ecParityCalc.error === 0 &&\n memorySize.error === \"\"\n );\n\n setValidationErrors(commonValidation);\n }, [\n nodes,\n volumeSize,\n sizeFactor,\n memoryNode,\n distribution,\n drivesPerServer,\n ecParityCalc,\n memorySize,\n limitSize,\n selectedStorageClass,\n ]);\n\n /* End Validation of pages */\n\n return (\n \n
\n

Tenant Size

\n \n Please select the desired capacity\n \n
\n {distribution.error}\n {memorySize.error}\n \n ) => {\n updateField(\"nodes\", e.target.value);\n cleanValidation(\"nodes\");\n }}\n label=\"Number of Servers\"\n value={nodes}\n min=\"4\"\n required\n error={validationErrors[\"nodes\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"drivesPerServer\", e.target.value);\n cleanValidation(\"drivesps\");\n }}\n label=\"Number of Drives per Server\"\n value={drivesPerServer}\n min=\"1\"\n required\n error={validationErrors[\"drivesps\"] || \"\"}\n />\n \n \n
\n
\n ) => {\n updateField(\"volumeSize\", e.target.value);\n cleanValidation(\"volume_size\");\n }}\n label=\"Total Size\"\n value={volumeSize}\n required\n error={validationErrors[\"volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"sizeFactor\", e.target.value as string);\n }}\n options={k8sfactorForDropdown()}\n />\n
\n
\n
\n {advancedMode && (\n \n \n ) => {\n updateField(\"memoryNode\", e.target.value);\n cleanValidation(\"memory_per_node\");\n }}\n label=\"Memory per Node [Gi]\"\n value={memoryNode}\n required\n error={validationErrors[\"memory_per_node\"] || \"\"}\n min=\"2\"\n />\n \n \n ) => {\n updateField(\"ecParity\", e.target.value as string);\n }}\n label=\"Erasure Code Parity\"\n value={ecParity}\n options={ecParityChoices}\n />\n \n Please select the desired parity. This setting will change the max\n usable capacity in the cluster\n \n \n \n )}\n

Resource Allocation

\n \n \n \n \n Number of Servers\n \n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n \n \n Drives per Server\n \n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n \n Drive Capacity\n \n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n \n Total Number of Volumes\n \n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {!advancedMode && (\n \n \n Memory per Node\n \n {memoryNode} Gi\n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n

Erasure Code Configuration

\n \n \n \n \n EC Parity\n \n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n \n Raw Capacity\n \n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n \n Usable Capacity\n \n \n {niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Number of server failures to tolerate\n \n \n {distribution\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks\n )\n : \"-\"}\n \n \n \n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n drivesPerServer: state.tenants.createTenant.fields.tenantSize.drivesPerServer,\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n memoryNode: state.tenants.createTenant.fields.tenantSize.memoryNode,\n ecParity: state.tenants.createTenant.fields.tenantSize.ecParity,\n ecParityChoices: state.tenants.createTenant.fields.tenantSize.ecParityChoices,\n cleanECChoices: state.tenants.createTenant.fields.tenantSize.cleanECChoices,\n maxAllocableMemo:\n state.tenants.createTenant.fields.tenantSize.maxAllocableMemo,\n memorySize: state.tenants.createTenant.fields.tenantSize.memorySize,\n distribution: state.tenants.createTenant.fields.tenantSize.distribution,\n ecParityCalc: state.tenants.createTenant.fields.tenantSize.ecParityCalc,\n limitSize: state.tenants.createTenant.fields.tenantSize.limitSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSize));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport { AppState } from \"../../../../../store\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\n\ninterface IPreviewProps {\n classes: any;\n tenantName: string;\n customImage: boolean;\n imageName: string;\n consoleImage: string;\n namespace: string;\n selectedStorageClass: string;\n volumeSize: string;\n sizeFactor: string;\n advancedMode: boolean;\n enableTLS: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Preview = ({\n classes,\n tenantName,\n customImage,\n imageName,\n consoleImage,\n namespace,\n selectedStorageClass,\n volumeSize,\n sizeFactor,\n advancedMode,\n enableTLS,\n}: IPreviewProps) => {\n return (\n \n
\n

Review

\n \n Review the details of the new tenant\n \n
\n \n \n \n \n Tenant Name\n \n {tenantName}\n \n\n {customImage && (\n \n \n \n MinIO Image\n \n {imageName}\n \n \n \n Console Image\n \n {consoleImage}\n \n \n )}\n\n {namespace !== \"\" && (\n \n \n Namespace\n \n {namespace}\n \n )}\n\n \n \n Storage Class\n \n {selectedStorageClass}\n \n\n \n \n Total Size\n \n \n {volumeSize} {sizeFactor}\n \n \n {advancedMode && (\n \n \n \n Enable TLS\n \n {enableTLS ? \"Enabled\" : \"Disabled\"}\n \n \n )}\n \n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n tenantName: state.tenants.createTenant.fields.nameTenant.tenantName,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n consoleImage: state.tenants.createTenant.fields.configure.consoleImage,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n});\n\nconst connector = connect(mapState, {});\n\nexport default withStyles(styles)(connector(Preview));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { LinearProgress } from \"@material-ui/core\";\n\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n modalBasic,\n settingsCommon,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport { generatePoolName } from \"../../../../common/utils\";\nimport GenericWizard from \"../../Common/GenericWizard/GenericWizard\";\nimport { IWizardElement } from \"../../Common/GenericWizard/types\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport { IAffinityModel, ITenantCreator } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\n\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { getHardcodedAffinity } from \"../TenantDetails/utils\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport NameTenant from \"./Steps/NameTenant\";\nimport { AppState } from \"../../../../store\";\nimport { ICertificatesItems, IFieldStore } from \"../types\";\nimport { updateAddField } from \"../actions\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport TenantSize from \"./Steps/TenantSize\";\nimport Preview from \"./Steps/Preview\";\n\ninterface IAddTenantProps {\n closeAndRefresh: (reloadData: boolean) => any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n fields: IFieldStore;\n certificates: ICertificatesItems;\n namespace: string;\n validPages: string[];\n advancedMode: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n ...settingsCommon,\n });\n\nconst AddTenant = ({\n classes,\n advancedMode,\n fields,\n certificates,\n namespace,\n validPages,\n setModalErrorSnackMessage,\n closeAndRefresh,\n}: IAddTenantProps) => {\n // Modals\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [\n createdAccount,\n setCreatedAccount,\n ] = useState(null);\n\n // Fields\n const [addSending, setAddSending] = useState(false);\n\n /* Send Information to backend */\n useEffect(() => {\n const tenantName = fields.nameTenant.tenantName;\n const selectedStorageClass = fields.nameTenant.selectedStorageClass;\n const imageName = fields.configure.imageName;\n const consoleImage = fields.configure.consoleImage;\n const customDockerhub = fields.configure.customDockerhub;\n const imageRegistry = fields.configure.imageRegistry;\n const imageRegistryUsername = fields.configure.imageRegistryUsername;\n const imageRegistryPassword = fields.configure.imageRegistryPassword;\n const exposeMinIO = fields.configure.exposeMinIO;\n const exposeConsole = fields.configure.exposeConsole;\n const idpSelection = fields.identityProvider.idpSelection;\n const openIDURL = fields.identityProvider.openIDURL;\n const openIDClientID = fields.identityProvider.openIDClientID;\n const openIDSecretID = fields.identityProvider.openIDSecretID;\n const ADURL = fields.identityProvider.ADURL;\n const ADSkipTLS = fields.identityProvider.ADSkipTLS;\n const ADServerInsecure = fields.identityProvider.ADServerInsecure;\n const ADUserNameFilter = fields.identityProvider.ADUserNameFilter;\n const ADGroupBaseDN = fields.identityProvider.ADGroupBaseDN;\n const ADGroupSearchFilter = fields.identityProvider.ADGroupSearchFilter;\n const ADNameAttribute = fields.identityProvider.ADNameAttribute;\n const minioCertificates = certificates.minioCertificates;\n const caCertificates = certificates.caCertificates;\n const consoleCertificate = certificates.consoleCertificate;\n const serverCertificate = certificates.serverCertificate;\n const clientCertificate = certificates.clientCertificate;\n const vaultCertificate = certificates.vaultCertificate;\n const vaultCA = certificates.vaultCA;\n const gemaltoCA = certificates.gemaltoCA;\n const enableEncryption = fields.encryption.enableEncryption;\n const encryptionType = fields.encryption.encryptionType;\n const gemaltoEndpoint = fields.encryption.gemaltoEndpoint;\n const gemaltoToken = fields.encryption.gemaltoToken;\n const gemaltoDomain = fields.encryption.gemaltoDomain;\n const gemaltoRetry = fields.encryption.gemaltoRetry;\n const awsEndpoint = fields.encryption.awsEndpoint;\n const awsRegion = fields.encryption.awsRegion;\n const awsKMSKey = fields.encryption.awsKMSKey;\n const awsAccessKey = fields.encryption.awsAccessKey;\n const awsSecretKey = fields.encryption.awsSecretKey;\n const awsToken = fields.encryption.awsToken;\n const vaultEndpoint = fields.encryption.vaultEndpoint;\n const vaultEngine = fields.encryption.vaultEngine;\n const vaultNamespace = fields.encryption.vaultNamespace;\n const vaultPrefix = fields.encryption.vaultPrefix;\n const vaultAppRoleEngine = fields.encryption.vaultAppRoleEngine;\n const vaultId = fields.encryption.vaultId;\n const vaultSecret = fields.encryption.vaultSecret;\n const vaultRetry = fields.encryption.vaultRetry;\n const vaultPing = fields.encryption.vaultPing;\n const gcpProjectID = fields.encryption.gcpProjectID;\n const gcpEndpoint = fields.encryption.gcpEndpoint;\n const gcpClientEmail = fields.encryption.gcpClientEmail;\n const gcpClientID = fields.encryption.gcpClientID;\n const gcpPrivateKeyID = fields.encryption.gcpPrivateKeyID;\n const gcpPrivateKey = fields.encryption.gcpPrivateKey;\n const enableAutoCert = fields.security.enableAutoCert;\n const enableTLS = fields.security.enableTLS;\n const ecParity = fields.tenantSize.ecParity;\n const distribution = fields.tenantSize.distribution;\n const memorySize = fields.tenantSize.memorySize;\n\n if (addSending) {\n const poolName = generatePoolName([]);\n\n const hardCodedAffinity: IAffinityModel = getHardcodedAffinity(\n tenantName,\n poolName\n );\n\n const erasureCode = ecParity.split(\":\")[1];\n\n let dataSend: ITenantCreator = {\n name: tenantName,\n namespace: namespace,\n access_key: \"\",\n secret_key: \"\",\n enable_tls: enableTLS && enableAutoCert,\n enable_console: true,\n enable_prometheus: true,\n service_name: \"\",\n image: imageName,\n console_image: consoleImage,\n expose_minio: exposeMinIO,\n expose_console: exposeConsole,\n pools: [\n {\n name: poolName,\n servers: distribution.nodes,\n volumes_per_server: distribution.disks,\n volume_configuration: {\n size: distribution.pvSize,\n storage_class_name: selectedStorageClass,\n },\n resources: {\n requests: {\n memory: memorySize.request,\n },\n limits: {\n memory: memorySize.limit,\n },\n },\n affinity: hardCodedAffinity,\n },\n ],\n erasureCodingParity: parseInt(erasureCode, 10),\n };\n\n if (customDockerhub) {\n dataSend = {\n ...dataSend,\n image_registry: {\n registry: imageRegistry,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n }\n\n let tenantCerts: any = null;\n let consoleCerts: any = null;\n let caCerts: any = null;\n\n if (caCertificates.length > 0) {\n caCerts = {\n ca_certificates: caCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((keyPair) => keyPair),\n };\n }\n\n if (enableTLS && minioCertificates.length > 0) {\n tenantCerts = {\n minio: minioCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((keyPair) => keyPair.crt && keyPair.key),\n };\n }\n\n if (\n enableTLS &&\n consoleCertificate.encoded_cert !== \"\" &&\n consoleCertificate.encoded_key !== \"\"\n ) {\n consoleCerts = {\n console: {\n crt: consoleCertificate.encoded_cert,\n key: consoleCertificate.encoded_key,\n },\n };\n }\n\n if (tenantCerts || consoleCerts || caCerts) {\n dataSend = {\n ...dataSend,\n tls: {\n ...tenantCerts,\n ...consoleCerts,\n ...caCerts,\n },\n };\n }\n\n if (enableEncryption) {\n let insertEncrypt = {};\n\n switch (encryptionType) {\n case \"gemalto\":\n let gemaltoCAIntroduce = {};\n\n if (gemaltoCA.encoded_cert !== \"\") {\n gemaltoCAIntroduce = {\n ca: gemaltoCA.encoded_cert,\n };\n }\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoEndpoint,\n credentials: {\n token: gemaltoToken,\n domain: gemaltoDomain,\n retry: parseInt(gemaltoRetry),\n },\n tls: {\n ...gemaltoCAIntroduce,\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsEndpoint,\n region: awsRegion,\n kmskey: awsKMSKey,\n credentials: {\n accesskey: awsAccessKey,\n secretkey: awsSecretKey,\n token: awsToken,\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpProjectID,\n endpoint: gcpEndpoint,\n credentials: {\n client_email: gcpClientEmail,\n client_id: gcpClientID,\n private_key_id: gcpPrivateKeyID,\n private_key: gcpPrivateKey,\n },\n },\n },\n };\n break;\n case \"vault\":\n let vaultKeyPair = null;\n let vaultCAInsert = null;\n if (\n vaultCertificate.encoded_key !== \"\" &&\n vaultCertificate.encoded_cert !== \"\"\n ) {\n vaultKeyPair = {\n key: vaultCertificate.encoded_key,\n crt: vaultCertificate.encoded_cert,\n };\n }\n if (vaultCA.encoded_cert !== \"\") {\n vaultCAInsert = {\n ca: vaultCA.encoded_cert,\n };\n }\n let vaultTLS = null;\n if (vaultKeyPair || vaultCA) {\n vaultTLS = {\n tls: {\n ...vaultKeyPair,\n ...vaultCAInsert,\n },\n };\n }\n insertEncrypt = {\n vault: {\n endpoint: vaultEndpoint,\n engine: vaultEngine,\n namespace: vaultNamespace,\n prefix: vaultPrefix,\n approle: {\n engine: vaultAppRoleEngine,\n id: vaultId,\n secret: vaultSecret,\n retry: parseInt(vaultRetry),\n },\n ...vaultTLS,\n status: {\n ping: parseInt(vaultPing),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n\n if (\n clientCertificate.encoded_key !== \"\" &&\n clientCertificate.encoded_cert !== \"\"\n ) {\n encryptionClientKeyPair = {\n client: {\n key: clientCertificate.encoded_key,\n crt: clientCertificate.encoded_cert,\n },\n };\n }\n\n if (\n serverCertificate.encoded_key !== \"\" &&\n serverCertificate.encoded_cert !== \"\"\n ) {\n encryptionServerKeyPair = {\n server: {\n key: serverCertificate.encoded_key,\n crt: serverCertificate.encoded_cert,\n },\n };\n }\n\n dataSend = {\n ...dataSend,\n encryption: {\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...insertEncrypt,\n },\n };\n }\n\n if (idpSelection !== \"Built-in\") {\n let dataIDP: any = {};\n\n switch (idpSelection) {\n case \"OpenID\":\n dataIDP = {\n oidc: {\n url: openIDURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n },\n };\n break;\n case \"AD\":\n dataIDP = {\n active_directory: {\n url: ADURL,\n skip_tls_verification: ADSkipTLS,\n server_insecure: ADServerInsecure,\n username_format: \"\",\n user_search_filter: ADUserNameFilter,\n group_search_base_dn: ADGroupBaseDN,\n group_search_filter: ADGroupSearchFilter,\n group_name_attribute: ADNameAttribute,\n },\n };\n break;\n }\n\n dataSend = {\n ...dataSend,\n idp: { ...dataIDP },\n };\n }\n\n api\n .invoke(\"POST\", `/api/v1/tenants`, dataSend)\n .then((res) => {\n const newSrvAcc: NewServiceAccount = {\n console: {\n accessKey: res.console.access_key,\n secretKey: res.console.secret_key,\n },\n };\n\n setAddSending(false);\n\n setShowNewCredentials(true);\n setCreatedAccount(newSrvAcc);\n })\n .catch((err) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addSending]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"other\",\n enabled: true,\n action: () => {\n closeAndRefresh(false);\n },\n };\n\n const wizardSteps: IWizardElement[] = [\n {\n label: \"Name Tenant\",\n componentRender: ,\n buttons: [\n cancelButton,\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"nameTenant\"),\n },\n ],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"configure\"),\n },\n ],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"identityProvider\"),\n },\n ],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"security\"),\n },\n ],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"encryption\"),\n },\n ],\n },\n {\n label: \"Tenant Size\",\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"tenantSize\"),\n },\n ],\n },\n {\n label: \"Preview Configuration\",\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Create\",\n type: \"submit\",\n enabled: !addSending,\n action: () => {\n setAddSending(true);\n },\n },\n ],\n },\n ];\n\n let filteredWizardSteps = wizardSteps;\n\n if (!advancedMode) {\n filteredWizardSteps = wizardSteps.filter((step) => !step.advancedOnly);\n }\n\n const closeCredentialsModal = () => {\n closeAndRefresh(true);\n };\n\n return (\n \n \n Create New Tenant\n \n {addSending && (\n \n \n \n )}\n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n \n \n \n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n validPages: state.tenants.createTenant.validPages,\n fields: state.tenants.createTenant.fields,\n certificates: state.tenants.createTenant.certificates,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n});\n\nexport default withStyles(styles)(connector(AddTenant));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Button, IconButton } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { ITenant, ITenantsResponse } from \"./types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport {\n actionsTray,\n searchField,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { CreateIcon } from \"../../../../icons\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport DeleteTenant from \"./DeleteTenant\";\nimport AddTenant from \"../AddTenant/AddTenant\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport history from \"../../../../history\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport { resetAddTenantForm } from \"../actions\";\n\ninterface ITenantsList {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n resetAddTenantForm: typeof resetAddTenantForm;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...settingsCommon,\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"0 38px\",\n },\n tenantsContainer: {\n padding: \"15px 0\",\n },\n customConfigurationPage: {\n height: \"calc(100vh - 440px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n });\n\nconst ListTenants = ({\n classes,\n setErrorSnackMessage,\n resetAddTenantForm,\n}: ITenantsList) => {\n const [currentPanel, setCurrentPanel] = useState(0);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedTenant, setSelectedTenant] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [filterTenants, setFilterTenants] = useState(\"\");\n const [records, setRecords] = useState([]);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [\n createdAccount,\n setCreatedAccount,\n ] = useState(null);\n\n const closeAddModalAndRefresh = (reloadData: boolean) => {\n setCurrentPanel(0);\n resetAddTenantForm();\n\n if (reloadData) {\n setIsLoading(true);\n }\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n\n if (reloadData) {\n setIsLoading(true);\n }\n };\n\n const confirmDeleteTenant = (tenant: ITenant) => {\n setSelectedTenant(tenant);\n setDeleteOpen(true);\n };\n\n const redirectToTenantDetails = (tenant: ITenant) => {\n history.push(`/namespaces/${tenant.namespace}/tenants/${tenant.name}`);\n return;\n };\n\n const closeCredentialsModal = () => {\n setShowNewCredentials(false);\n setCreatedAccount(null);\n };\n\n const backClick = () => {\n setCurrentPanel(currentPanel - 1);\n resetAddTenantForm();\n };\n\n const tableActions = [\n { type: \"view\", onClick: redirectToTenantDetails },\n { type: \"delete\", onClick: confirmDeleteTenant },\n ];\n\n const filteredRecords = records.filter((b: any) => {\n if (filterTenants === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterTenants) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/tenants`)\n .then((res: ITenantsResponse) => {\n if (res === null) {\n setIsLoading(false);\n return;\n }\n let resTenants: ITenant[] = [];\n if (res.tenants !== null) {\n resTenants = res.tenants;\n }\n\n for (let i = 0; i < resTenants.length; i++) {\n resTenants[i].capacity = niceBytes(resTenants[i].total_size + \"\");\n }\n\n setRecords(resTenants);\n setIsLoading(false);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, setErrorSnackMessage]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const createTenant = () => {\n setCurrentPanel(1);\n };\n\n return (\n \n {deleteOpen && (\n \n )}\n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n \n \n \n
\n \n \n Tenants List\n \n\n \n \n {\n setFilterTenants(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n {\n setIsLoading(true);\n }}\n >\n \n \n }\n onClick={createTenant}\n >\n Create Tenant\n \n \n \n \n \n \n ,\n \n \n \n \n Back To Tenants List\n \n \n \n {currentPanel === 1 && (\n \n )}\n \n ,\n ]}\n currentSlide={currentPanel}\n />\n
\n
\n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n resetAddTenantForm,\n});\n\nexport default withStyles(styles)(connector(ListTenants));\n","import React, { Fragment, useState } from \"react\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport ListTenants from \"./ListTenants/ListTenants\";\n\ninterface IConfigurationMain {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantsMain = ({ classes }: IConfigurationMain) => {\n const [selectedTab, setSelectedTab] = useState(0);\n return (\n \n \n \n \n \n Tenants Management\n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"tenant-tabs\"\n >\n \n \n \n {selectedTab === 0 && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(TenantsMain);\n","import React, { useState } from \"react\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { generatePoolName, niceBytes } from \"../../../../common/utils\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { IAddPoolRequest, ITenant } from \"../ListTenants/types\";\nimport { IAffinityModel } from \"../../../../common/types\";\nimport { getHardcodedAffinity } from \"./utils\";\n\ninterface IAddPoolProps {\n tenant: ITenant;\n classes: any;\n open: boolean;\n onClosePoolAndReload: (shouldReload: boolean) => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n },\n bottomContainer: {\n display: \"flex\",\n flexGrow: 1,\n alignItems: \"center\",\n \"& div\": {\n flexGrow: 1,\n width: \"100%\",\n },\n },\n factorElements: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n },\n sizeNumber: {\n fontSize: 35,\n fontWeight: 700,\n textAlign: \"center\",\n },\n sizeDescription: {\n fontSize: 14,\n color: \"#777\",\n textAlign: \"center\",\n },\n ...modalBasic,\n });\n\nconst AddPoolModal = ({\n tenant,\n classes,\n open,\n onClosePoolAndReload,\n}: IAddPoolProps) => {\n const [addSending, setAddSending] = useState(false);\n const [numberOfNodes, setNumberOfNodes] = useState(0);\n const [volumeSize, setVolumeSize] = useState(0);\n const [volumesPerServer, setVolumesPerSever] = useState(0);\n\n const instanceCapacity: number = volumeSize * 1073741824 * volumesPerServer;\n const totalCapacity: number = instanceCapacity * numberOfNodes;\n\n return (\n onClosePoolAndReload(false)}\n modalOpen={open}\n title=\"Add Pool\"\n >\n ) => {\n e.preventDefault();\n setAddSending(true);\n\n const poolName = generatePoolName(tenant.pools);\n\n const hardCodedAffinity: IAffinityModel = getHardcodedAffinity(\n tenant.name,\n poolName\n );\n\n const data: IAddPoolRequest = {\n name: poolName,\n servers: numberOfNodes,\n volumes_per_server: volumesPerServer,\n volume_configuration: {\n size: volumeSize * 1073741824,\n storage_class: \"\",\n labels: null,\n },\n affinity: hardCodedAffinity,\n };\n\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant.namespace}/tenants/${tenant.name}/pools`,\n data\n )\n .then(() => {\n setAddSending(false);\n onClosePoolAndReload(true);\n })\n .catch((err) => {\n setAddSending(false);\n // setDeleteError(err);\n });\n }}\n >\n \n ) => {\n setNumberOfNodes(parseInt(e.target.value));\n }}\n label=\"Number o Nodes\"\n value={numberOfNodes.toString(10)}\n />\n \n \n ) => {\n setVolumeSize(parseInt(e.target.value));\n }}\n label=\"Volume Size (Gi)\"\n value={volumeSize.toString(10)}\n />\n \n \n ) => {\n setVolumesPerSever(parseInt(e.target.value));\n }}\n label=\"Volumes per Server\"\n value={volumesPerServer.toString(10)}\n />\n \n \n \n
\n
\n
\n {niceBytes(instanceCapacity.toString(10))}\n
\n
Instance Capacity
\n
\n
\n
\n {niceBytes(totalCapacity.toString(10))}\n
\n
Total Capacity
\n
\n
\n
\n \n Save\n \n
\n
\n {addSending && (\n \n \n \n )}\n
\n \n \n );\n};\n\nexport default withStyles(styles)(AddPoolModal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\n\ninterface IReplicationProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refreshList: boolean) => void;\n}\n\ninterface IDropDownElements {\n label: string;\n value: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n },\n ...modalBasic,\n });\n\nconst ReplicationSetup = ({\n classes,\n open,\n closeModalAndRefresh,\n}: IReplicationProps) => {\n const [addSending, setAddSending] = useState(false);\n const [selectedTab, setSelectedTab] = useState(0);\n const [sourceBucket, setSourceBucket] = useState(\"\");\n const [clusterSelected, setClusterSelected] = useState(\"\");\n const [destinationBucket, setDestinationBucket] = useState(\"\");\n const [address, setAddress] = useState(\"\");\n const [bucket, setBucket] = useState(\"\");\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n\n const clustersList: IDropDownElements[] = [];\n const sourceBuckets: IDropDownElements[] = [];\n const destinationBuckets: IDropDownElements[] = [];\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n >\n ) => {\n e.preventDefault();\n setAddSending(true);\n }}\n >\n \n ) => {\n setSourceBucket(e.target.value as string);\n }}\n value={sourceBucket}\n name=\"source_bucket\"\n id=\"source_bucket\"\n />\n \n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"cluster-tabs\"\n >\n \n \n \n \n \n
\n
\n {selectedTab === 0 && (\n \n \n ) => {\n setClusterSelected(e.target.value as string);\n }}\n value={clusterSelected}\n name=\"cluster\"\n id=\"cluster\"\n />\n \n \n ) => {\n setDestinationBucket(e.target.value as string);\n }}\n value={destinationBucket}\n name=\"destination_bucket\"\n id=\"destination_bucket\"\n />\n \n \n )}\n\n {selectedTab === 1 && (\n \n \n ) => {\n setAddress(e.target.value);\n }}\n label=\"Address\"\n value={address}\n />\n \n \n ) => {\n setBucket(e.target.value);\n }}\n label=\"Bucket\"\n value={bucket}\n />\n \n \n ) => {\n setAccessKey(e.target.value);\n }}\n label=\"Access Key\"\n value={accessKey}\n />\n \n \n ) => {\n setSecretKey(e.target.value);\n }}\n label=\"Secret Key\"\n value={secretKey}\n />\n \n \n )}\n \n \n Save\n \n \n {addSending && (\n \n \n \n )}\n \n \n );\n};\n\nexport default withStyles(styles)(ReplicationSetup);\n","import React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport ErrorBlock from \"../../../shared/ErrorBlock\";\n\ninterface IProgressBar {\n maxValue: number;\n currValue: number;\n label: string;\n renderFunction?: (element: string) => any;\n error: string;\n loading: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperContainer: {\n padding: 15,\n },\n allValue: {\n fontSize: 16,\n fontWeight: 700,\n marginBottom: 8,\n },\n currentUsage: {\n fontSize: 12,\n marginTop: 8,\n },\n centerItem: {\n textAlign: \"center\",\n },\n });\n\nconst BorderLinearProgress = withStyles((theme) => ({\n root: {\n height: 10,\n borderRadius: 5,\n },\n colorPrimary: {\n backgroundColor: \"#F4F4F4\",\n },\n bar: {\n borderRadius: 5,\n backgroundColor: \"#081C42\",\n },\n}))(LinearProgress);\n\nconst UsageBarWrapper = ({\n classes,\n maxValue,\n currValue,\n label,\n renderFunction,\n loading,\n error,\n}: IProgressBar) => {\n const porcentualValue = (currValue * 100) / maxValue;\n\n const renderComponent = () => {\n if (!loading) {\n return error !== \"\" ? (\n \n ) : (\n \n \n {label}{\" \"}\n {renderFunction ? renderFunction(maxValue.toString()) : maxValue}\n \n \n \n Used:{\" \"}\n {renderFunction ? renderFunction(currValue.toString()) : currValue}\n \n \n );\n }\n\n return null;\n };\n\n return (\n \n \n {loading && (\n \n \n \n \n \n )}\n {renderComponent()}\n \n \n );\n};\n\nexport default withStyles(styles)(UsageBarWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IUpdateTenantModal {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst UpdateTenantModal = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n setModalErrorSnackMessage,\n classes,\n}: IUpdateTenantModal) => {\n const [isSending, setIsSending] = useState(false);\n const [minioImage, setMinioImage] = useState(\"\");\n const [consoleImage, setConsoleImage] = useState(\"\");\n const [imageRegistry, setImageRegistry] = useState(false);\n const [imageRegistryEndpoint, setImageRegistryEndpoint] = useState(\n \"\"\n );\n const [imageRegistryUsername, setImageRegistryUsername] = useState(\n \"\"\n );\n const [imageRegistryPassword, setImageRegistryPassword] = useState(\n \"\"\n );\n const [validMinioImage, setValidMinioImage] = useState(true);\n const [validConsoleImage, setValidConsoleImage] = useState(true);\n\n const validateImage = useCallback(\n (fieldToCheck: string) => {\n const pattern = new RegExp(\"^$|^((.*?)/(.*?):(.+))$\");\n\n switch (fieldToCheck) {\n case \"consoleImage\":\n setValidConsoleImage(pattern.test(consoleImage));\n break;\n case \"minioImage\":\n setValidMinioImage(pattern.test(minioImage));\n break;\n }\n },\n [consoleImage, minioImage]\n );\n\n useEffect(() => {\n validateImage(\"minioImage\");\n }, [minioImage, validateImage]);\n\n useEffect(() => {\n validateImage(\"consoleImage\");\n }, [consoleImage, validateImage]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setMinioImage(\"\");\n setConsoleImage(\"\");\n setImageRegistry(false);\n setImageRegistryEndpoint(\"\");\n setImageRegistryUsername(\"\");\n setImageRegistryPassword(\"\");\n };\n\n const updateMinIOImage = () => {\n setIsSending(true);\n\n let payload = {\n image: minioImage,\n console_image: consoleImage,\n enable_prometheus: true,\n };\n\n if (imageRegistry) {\n const registry: any = {\n image_registry: {\n registry: imageRegistryEndpoint,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n payload = {\n ...payload,\n ...registry,\n };\n }\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}`,\n payload\n )\n .then(() => {\n setIsSending(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSending(false);\n });\n };\n\n return (\n \n \n \n \n Please enter the MinIO image from dockerhub to use. If blank, then\n latest build will be used.\n \n
\n
\n \n {\n setMinioImage(e.target.value);\n }}\n />\n \n \n {\n setConsoleImage(e.target.value);\n }}\n />\n \n \n ) => {\n setImageRegistry(!imageRegistry);\n }}\n label={\"Set Custom Image Registry\"}\n indicatorLabels={[\"Yes\", \"No\"]}\n />\n \n {imageRegistry && (\n \n \n {\n setImageRegistryEndpoint(e.target.value);\n }}\n />\n \n \n {\n setImageRegistryUsername(e.target.value);\n }}\n />\n \n \n {\n setImageRegistryPassword(e.target.value);\n }}\n />\n \n \n )}\n
\n \n \n Clear\n \n \n Save\n \n \n
\n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(UpdateTenantModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n containerForHeader,\n modalBasic,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, Typography } from \"@material-ui/core\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\nimport { CreateIcon } from \"../../../../icons\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport AddPoolModal from \"./AddPoolModal\";\nimport AddBucket from \"../../Buckets/ListBuckets/AddBucket\";\nimport ReplicationSetup from \"./ReplicationSetup\";\nimport api from \"../../../../common/api\";\nimport { IPool, ITenant } from \"../ListTenants/types\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport UsageBarWrapper from \"../../Common/UsageBarWrapper/UsageBarWrapper\";\nimport UpdateTenantModal from \"./UpdateTenantModal\";\nimport PencilIcon from \"../../Common/TableWrapper/TableActionIcons/PencilIcon\";\nimport { LicenseInfo } from \"../../License/types\";\nimport { Link } from \"react-router-dom\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport Moment from \"react-moment\";\n\ninterface ITenantDetailsProps {\n classes: any;\n match: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\ninterface ITenantUsage {\n used: string;\n disk_used: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n },\n containerHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n paperContainer: {\n padding: \"15px 15px 15px 50px\",\n },\n infoGrid: {\n display: \"grid\",\n gridTemplateColumns: \"auto auto auto auto\",\n gridGap: 8,\n \"& div\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& div:nth-child(odd)\": {\n justifyContent: \"flex-end\",\n fontWeight: 700,\n },\n \"& div:nth-child(2n)\": {\n paddingRight: 35,\n },\n },\n masterActions: {\n width: \"25%\",\n minWidth: \"120px\",\n \"& div\": {\n margin: \"5px 0px\",\n },\n },\n actionsTray: {\n textAlign: \"right\",\n },\n updateButton: {\n backgroundColor: \"transparent\",\n border: 0,\n padding: \"0 6px\",\n cursor: \"pointer\",\n \"&:focus, &:active\": {\n outline: \"none\",\n },\n \"& svg\": {\n height: 12,\n },\n },\n noUnderLine: {\n textDecoration: \"none\",\n },\n poolLabel: {\n color: \"#666666\",\n },\n licenseContainer: {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: \"#032F51\",\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: \"#FFF\",\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: \"#FFFFFF\",\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n licenseInfo: { color: \"#FFFFFF\", position: \"relative\" },\n licenseInfoTitle: {\n textTransform: \"none\",\n color: \"#BFBFBF\",\n fontSize: 11,\n },\n licenseInfoValue: {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n ...modalBasic,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantDetails = ({\n classes,\n match,\n setErrorSnackMessage,\n}: ITenantDetailsProps) => {\n const [selectedTab, setSelectedTab] = useState(0);\n const [capacity, setCapacity] = useState(0);\n const [poolCount, setPoolCount] = useState(0);\n const [pools, setPools] = useState([]);\n const [instances, setInstances] = useState(0);\n const [volumes, setVolumes] = useState(0);\n const [addPoolOpen, setAddPool] = useState(false);\n const [addBucketOpen, setAddBucketOpen] = useState(false);\n const [addReplicationOpen, setAddReplicationOpen] = useState(false);\n const [tenant, setTenant] = useState(null);\n const [loadingUsage, setLoadingUsage] = useState(true);\n const [usageError, setUsageError] = useState(\"\");\n const [usage, setUsage] = useState(0);\n const [updateMinioVersion, setUpdateMinioVersion] = useState(false);\n const [licenseInfo, setLicenseInfo] = useState();\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingActivateProduct, setLoadingActivateProduct] = useState(\n false\n );\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const onClosePoolAndRefresh = (reload: boolean) => {\n setAddPool(false);\n\n if (reload) {\n loadInfo();\n loadUsage();\n }\n };\n\n const closeBucketsAndRefresh = () => {\n setAddBucketOpen(false);\n };\n\n const closeReplicationAndRefresh = (reload: boolean) => {\n setAddReplicationOpen(false);\n\n if (reload) {\n loadInfo();\n loadUsage();\n }\n };\n\n const activateProduct = (namespace: string, tenant: string) => {\n if (loadingActivateProduct) {\n return;\n }\n setLoadingActivateProduct(true);\n api\n .invoke(\n \"POST\",\n `/api/v1/subscription/namespaces/${namespace}/tenants/${tenant}/activate`,\n {}\n )\n .then(() => {\n setLoadingActivateProduct(false);\n loadInfo();\n })\n .catch((err) => {\n setLoadingActivateProduct(false);\n setErrorSnackMessage(err);\n });\n };\n\n const loadInfo = () => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}`\n )\n .then((res: ITenant) => {\n const resPools = !res.pools ? [] : res.pools;\n\n let totalInstances = 0;\n let totalVolumes = 0;\n let poolNamedIndex = 0;\n for (let pool of resPools) {\n const cap =\n pool.volumes_per_server *\n pool.servers *\n pool.volume_configuration.size;\n pool.label = `pool-${poolNamedIndex}`;\n if (pool.name === undefined || pool.name === \"\") {\n pool.name = pool.label;\n }\n pool.capacity = niceBytes(cap + \"\");\n pool.volumes = pool.servers * pool.volumes_per_server;\n totalInstances += pool.servers;\n totalVolumes += pool.volumes;\n poolNamedIndex += 1;\n }\n setCapacity(res.total_size);\n setPoolCount(resPools.length);\n setVolumes(totalVolumes);\n setInstances(totalInstances);\n\n setPools(resPools);\n\n setTenant(res);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n });\n };\n\n const loadUsage = () => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/usage`\n )\n .then((result: ITenantUsage) => {\n const usage = get(result, \"disk_used\", \"0\");\n setUsage(parseInt(usage));\n setUsageError(\"\");\n setLoadingUsage(false);\n })\n .catch((err) => {\n setUsageError(err);\n setUsage(0);\n setLoadingUsage(false);\n });\n };\n\n const fetchLicenseInfo = () => {\n setLoadingLicenseInfo(true);\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: LicenseInfo) => {\n setLicenseInfo(res);\n setLoadingLicenseInfo(false);\n })\n .catch((err: any) => {\n setLoadingLicenseInfo(false);\n });\n };\n\n useEffect(() => {\n loadInfo();\n loadUsage();\n fetchLicenseInfo();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {addPoolOpen && tenant !== null && (\n \n )}\n {addBucketOpen && (\n \n )}\n {addReplicationOpen && (\n \n )}\n {updateMinioVersion && (\n {\n setUpdateMinioVersion(false);\n }}\n idTenant={tenantName}\n namespace={tenantNamespace}\n />\n )}\n ${match.params[\"tenantName\"]}`} />\n \n \n \n
\n
\n \n \n
\n
Capacity:
\n
{niceBytes(capacity.toString(10))}
\n
Minio:
\n
\n {tenant ? tenant.image : \"\"}{\" \"}\n {\n setUpdateMinioVersion(true);\n }}\n >\n \n \n
\n
Clusters:
\n
{poolCount}
\n
Console:
\n
{tenant ? tenant.console_image : \"\"}
\n
Instances:
\n
{instances}
\n
Volumes:
\n
{volumes}
\n {tenant?.endpoints && (\n \n
Endpoint:
\n
\n \n {tenant?.endpoints.minio}\n \n
\n
Console:
\n
\n \n {tenant?.endpoints.console}\n \n
\n
\n )}\n
\n
\n
\n \n \n \n \n
\n
\n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"tenant-tabs\"\n >\n \n \n \n \n \n }\n onClick={() => {\n setAddPool(true);\n }}\n >\n Expand Tenant\n \n \n \n
\n
\n \n {selectedTab === 0 && (\n {\n console.log(element);\n },\n sendOnlyId: true,\n },\n ]}\n columns={[\n { label: \"Name\", elementKey: \"name\" },\n { label: \"Capacity\", elementKey: \"capacity\" },\n { label: \"# of Instances\", elementKey: \"servers\" },\n { label: \"# of Drives\", elementKey: \"volumes\" },\n ]}\n isLoading={false}\n records={pools}\n entityName=\"Servers\"\n idField=\"name\"\n />\n )}\n {selectedTab === 1 && (\n \n \n \n \n {tenant && tenant.subnet_license ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {tenant.subnet_license.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (\n tenant.subnet_license.storage_capacity *\n 1099511627776\n ) // 1 Terabyte = 1099511627776 Bytes\n .toString(10)\n )}\n \n \n Expiry Date\n \n \n \n {tenant.subnet_license.expires_at}\n \n \n \n \n \n Subscription Plan\n \n \n {tenant.subnet_license.plan}\n \n \n Requester\n \n \n {tenant.subnet_license.email}\n \n \n \n \n \n ) : (\n !loadingLicenseInfo && (\n \n {!licenseInfo && (\n {\n e.stopPropagation();\n }}\n className={classes.noUnderLine}\n >\n \n Activate Product\n \n \n )}\n {licenseInfo && tenant && (\n \n activateProduct(tenant.namespace, tenant.name)\n }\n >\n Attach License\n \n )}\n \n )\n )}\n
\n \n \n
\n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(TenantDetails));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const OBJECT_BROWSER_ADD_ROUTE = \"OBJECT_BROWSER/ADD_ROUTE\";\nexport const OBJECT_BROWSER_RESET_ROUTES_LIST =\n \"OBJECT_BROWSER/RESET_ROUTES_LIST\";\nexport const OBJECT_BROWSER_REMOVE_ROUTE_LEVEL =\n \"OBJECT_BROWSER/REMOVE_ROUTE_LEVEL\";\nexport const OBJECT_BROWSER_SET_ALL_ROUTES = \"OBJECT_BROWSER/SET_ALL_ROUTES\";\nexport const OBJECT_BROWSER_CREATE_FOLDER = \"OBJECT_BROWSER/CREATE_FOLDER\";\nexport const OBJECT_BROWSER_SET_LAST_AS_FILE =\n \"OBJECT_BROWSER/SET_LAST_AS_FILE\";\nexport const OBJECT_BROWSER_DOWNLOAD_FILE_LOADER =\n \"OBJECT_BROWSER/DOWNLOAD_FILE_LOADER\";\nexport const OBJECT_BROWSER_DOWNLOADED_FILE = \"OBJECT_BROWSER/DOWNLOADED_FILE\";\n\ninterface AddRouteAction {\n type: typeof OBJECT_BROWSER_ADD_ROUTE;\n route: string;\n label: string;\n routeType: string;\n}\n\ninterface ResetRoutesList {\n type: typeof OBJECT_BROWSER_RESET_ROUTES_LIST;\n reset: boolean;\n}\n\ninterface RemoveRouteLevel {\n type: typeof OBJECT_BROWSER_REMOVE_ROUTE_LEVEL;\n toRoute: string;\n}\n\ninterface SetAllRoutes {\n type: typeof OBJECT_BROWSER_SET_ALL_ROUTES;\n currentRoute: string;\n}\n\ninterface CreateFolder {\n type: typeof OBJECT_BROWSER_CREATE_FOLDER;\n newRoute: string;\n}\n\ninterface SetLastAsFile {\n type: typeof OBJECT_BROWSER_SET_LAST_AS_FILE;\n}\n\ninterface SetFileDownload {\n type: typeof OBJECT_BROWSER_DOWNLOAD_FILE_LOADER;\n path: string;\n}\n\ninterface FileDownloaded {\n type: typeof OBJECT_BROWSER_DOWNLOADED_FILE;\n path: string;\n}\n\nexport type ObjectBrowserActionTypes =\n | AddRouteAction\n | ResetRoutesList\n | RemoveRouteLevel\n | SetAllRoutes\n | CreateFolder\n | SetLastAsFile\n | SetFileDownload\n | FileDownloaded;\n\nexport const addRoute = (route: string, label: string, routeType: string) => {\n return {\n type: OBJECT_BROWSER_ADD_ROUTE,\n route,\n label,\n routeType,\n };\n};\n\nexport const resetRoutesList = (reset: boolean) => {\n return {\n type: OBJECT_BROWSER_RESET_ROUTES_LIST,\n reset,\n };\n};\n\nexport const removeRouteLevel = (toRoute: string) => {\n return {\n type: OBJECT_BROWSER_REMOVE_ROUTE_LEVEL,\n toRoute,\n };\n};\n\nexport const setAllRoutes = (currentRoute: string) => {\n return {\n type: OBJECT_BROWSER_SET_ALL_ROUTES,\n currentRoute,\n };\n};\n\nexport const createFolder = (newRoute: string) => {\n return {\n type: OBJECT_BROWSER_CREATE_FOLDER,\n newRoute,\n };\n};\n\nexport const setLastAsFile = () => {\n return {\n type: OBJECT_BROWSER_SET_LAST_AS_FILE,\n };\n};\n\nexport const fileIsBeingPrepared = (path: string) => {\n return {\n type: OBJECT_BROWSER_DOWNLOAD_FILE_LOADER,\n path,\n };\n};\n\nexport const fileDownloadStarted = (path: string) => {\n return {\n type: OBJECT_BROWSER_DOWNLOADED_FILE,\n path,\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport { withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme } from \"@material-ui/core/styles\";\nimport { removeRouteLevel } from \"./actions\";\nimport { ObjectBrowserState, Route } from \"./reducers\";\nimport { objectBrowserCommon } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Link } from \"react-router-dom\";\n\ninterface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\ninterface IObjectBrowser {\n classes: any;\n objectsList: Route[];\n removeRouteLevel: (path: string) => any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...objectBrowserCommon,\n });\n\nconst BrowserBreadcrumbs = ({\n classes,\n objectsList,\n removeRouteLevel,\n}: IObjectBrowser) => {\n const listBreadcrumbs = objectsList.map((objectItem, index) => {\n return (\n \n {\n removeRouteLevel(objectItem.route);\n }}\n >\n {objectItem.label}\n \n {index < objectsList.length - 1 && / }\n \n );\n });\n\n return (\n \n \n
\n {objectsList && objectsList.length > 0\n ? objectsList.slice(-1)[0].label\n : \"\"}\n
\n
\n \n {listBreadcrumbs}\n \n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n objectsList: get(objectBrowser, \"routesList\", []),\n});\n\nconst mapDispatchToProps = {\n removeRouteLevel,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(BrowserBreadcrumbs));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Button } from \"@material-ui/core\";\nimport { CreateIcon } from \"../../../icons\";\nimport { niceBytes } from \"../../../common/utils\";\nimport { Bucket, BucketList } from \"../Buckets/types\";\nimport {\n actionsTray,\n objectBrowserCommon,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { addRoute, resetRoutesList } from \"./actions\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport BrowserBreadcrumbs from \"./BrowserBreadcrumbs\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport AddBucket from \"../Buckets/ListBuckets/AddBucket\";\nimport api from \"../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n usedSpaceCol: {\n width: 150,\n textAlign: \"right\",\n },\n subTitleLabel: {\n alignItems: \"center\",\n display: \"flex\",\n },\n bucketName: {\n display: \"flex\",\n alignItems: \"center\",\n },\n iconBucket: {\n backgroundImage: \"url(/images/ob_bucket_clear.svg)\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center center\",\n width: 16,\n height: 40,\n marginRight: 10,\n },\n \"@global\": {\n \".rowLine:hover .iconBucketElm\": {\n backgroundImage: \"url(/images/ob_bucket_filled.svg)\",\n },\n },\n browsePaper: {\n height: \"calc(100vh - 280px)\",\n },\n ...actionsTray,\n ...searchField,\n ...objectBrowserCommon,\n });\n\ninterface IBrowseBucketsProps {\n classes: any;\n addRoute: (path: string, label: string, type: string) => any;\n resetRoutesList: (doVar: boolean) => any;\n displayErrorMessage: typeof setErrorSnackMessage;\n match: any;\n}\n\nconst BrowseBuckets = ({\n classes,\n match,\n addRoute,\n resetRoutesList,\n displayErrorMessage,\n}: IBrowseBucketsProps) => {\n const [loading, setLoading] = useState(true);\n const [records, setRecords] = useState([]);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [filterBuckets, setFilterBuckets] = useState(\"\");\n\n useEffect(() => {\n resetRoutesList(true);\n }, [match, resetRoutesList]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n setLoading(false);\n setRecords(res.buckets || []);\n })\n .catch((err: any) => {\n setLoading(false);\n displayErrorMessage(err);\n });\n }\n }, [loading, displayErrorMessage]);\n\n const closeAddModalAndRefresh = (refresh: boolean) => {\n setAddScreenOpen(false);\n\n if (refresh) {\n setLoading(true);\n }\n };\n\n const filteredRecords = records.filter((b: Bucket) => {\n if (filterBuckets === \"\") {\n return true;\n }\n return b.name.indexOf(filterBuckets) >= 0;\n });\n\n const handleViewChange = (idElement: string) => {\n const currentPath = get(match, \"url\", \"/object-browser\");\n const newPath = `${currentPath}/${idElement}`;\n\n addRoute(newPath, idElement, \"path\");\n };\n\n const renderBucket = (bucketName: string) => {\n return (\n
\n
\n {bucketName}\n
\n );\n };\n\n return (\n \n {addScreenOpen && (\n \n )}\n \n \n
\n \n
\n
\n }\n onClick={() => {\n setAddScreenOpen(true);\n }}\n >\n Create Bucket\n \n
\n
\n \n {\n setFilterBuckets(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n \n \n
\n
\n \n \n \n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n addRoute,\n resetRoutesList,\n displayErrorMessage: setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withRouter(connector(withStyles(styles)(BrowseBuckets)));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid } from \"@material-ui/core\";\nimport BrowseBuckets from \"./BrowseBuckets\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\ninterface IObjectBrowserProps {\n match: any;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n watchList: {\n background: \"white\",\n maxHeight: \"400\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4\",\n padding: \"0\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0\",\n padding: \"0\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n actionsTray: {\n textAlign: \"right\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n inputField: {\n background: \"#FFFFFF\",\n padding: 12,\n borderRadius: 5,\n marginLeft: 10,\n boxShadow: \"0px 3px 6px #00000012\",\n },\n fieldContainer: {\n background: \"#FFFFFF\",\n padding: 0,\n borderRadius: 5,\n marginLeft: 10,\n textAlign: \"left\",\n minWidth: \"206\",\n boxShadow: \"0px 3px 6px #00000012\",\n },\n lastElementWPadding: {\n paddingRight: \"78\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst ObjectBrowser = ({ match, classes }: IObjectBrowserProps) => {\n const pathIn = get(match, \"url\", \"\");\n\n return (\n \n \n \n \n {pathIn === \"/object-browser\" && }\n \n \n \n );\n};\n\nexport default withStyles(styles)(ObjectBrowser);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport api from \"../../../../../../common/api\";\n\ninterface IDeleteObjectProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedObject: string;\n selectedBucket: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteObject = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n selectedObject,\n setErrorSnackMessage,\n}: IDeleteObjectProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n let recursive = false;\n if (selectedObject.endsWith(\"/\")) {\n recursive = true;\n }\n setDeleteLoading(true);\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${selectedBucket}/objects?path=${selectedObject}&recursive=${recursive}`\n )\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete\n \n {deleteLoading && }\n \n Are you sure you want to delete: {selectedObject}?{\" \"}\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n disabled={deleteLoading}\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteObject);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { connect } from \"react-redux\";\nimport { createFolder } from \"../../../../ObjectBrowser/actions\";\n\ninterface ICreateFolder {\n classes: any;\n modalOpen: boolean;\n folderName: string;\n createFolder: (newFolder: string) => any;\n onClose: () => any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n pathLabel: {\n marginTop: 0,\n marginBottom: 32,\n },\n ...modalBasic,\n });\n\nconst CreateFolderModal = ({\n modalOpen,\n folderName,\n onClose,\n createFolder,\n classes,\n}: ICreateFolder) => {\n const [pathUrl, setPathUrl] = useState(\"\");\n\n const resetForm = () => {\n setPathUrl(\"\");\n };\n\n const createProcess = () => {\n createFolder(pathUrl);\n onClose();\n };\n\n const folderTruncated = folderName.split(\"/\").slice(2).join(\"/\");\n\n return (\n \n \n \n

\n Current Path: {folderTruncated}/\n

\n \n {\n setPathUrl(e.target.value);\n }}\n />\n \n \n \n Clear\n \n \n Save\n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n createFolder,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(CreateFolderModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst UploadFile = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default UploadFile;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { isNullOrUndefined } from \"util\";\n\nexport const download = (\n bucketName: string,\n objectPath: string,\n versionID: any,\n callBack?: (objIdentifier: string) => void,\n includeVersionInCallback?: boolean\n) => {\n const anchor = document.createElement(\"a\");\n document.body.appendChild(anchor);\n const xhr = new XMLHttpRequest();\n const allPathData = objectPath.split(\"/\");\n const objectName = allPathData[allPathData.length - 1];\n\n let path = `/api/v1/buckets/${bucketName}/objects/download?prefix=${objectPath}`;\n if (!isNullOrUndefined(versionID) && versionID !== \"null\") {\n path = path.concat(`&version_id=${versionID}`);\n }\n\n xhr.open(\"GET\", path, true);\n xhr.responseType = \"blob\";\n\n xhr.onload = function (e) {\n if (this.status === 200) {\n const blob = new Blob([this.response], {\n type: \"octet/stream\",\n });\n const blobUrl = window.URL.createObjectURL(blob);\n\n anchor.href = blobUrl;\n anchor.download = objectName;\n\n anchor.click();\n window.URL.revokeObjectURL(blobUrl);\n anchor.remove();\n\n if (callBack) {\n callBack(\n `${bucketName}/${objectPath}${\n includeVersionInCallback ? `-${versionID}` : \"\"\n }`\n );\n }\n }\n };\n xhr.send();\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { BucketObject, BucketObjectsList } from \"./types\";\nimport api from \"../../../../../../common/api\";\nimport TableWrapper from \"../../../../Common/TableWrapper/TableWrapper\";\nimport { niceBytes } from \"../../../../../../common/utils\";\nimport DeleteObject from \"./DeleteObject\";\n\nimport {\n actionsTray,\n containerForHeader,\n objectBrowserCommon,\n searchField,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport PageHeader from \"../../../../Common/PageHeader/PageHeader\";\nimport { Button, Input, Typography } from \"@material-ui/core\";\nimport * as reactMoment from \"react-moment\";\nimport { CreateIcon } from \"../../../../../../icons\";\nimport BrowserBreadcrumbs from \"../../../../ObjectBrowser/BrowserBreadcrumbs\";\nimport get from \"lodash/get\";\nimport { withRouter } from \"react-router-dom\";\nimport {\n addRoute,\n setAllRoutes,\n setLastAsFile,\n fileIsBeingPrepared,\n fileDownloadStarted,\n} from \"../../../../ObjectBrowser/actions\";\nimport { connect } from \"react-redux\";\nimport {\n ObjectBrowserReducer,\n Route,\n} from \"../../../../ObjectBrowser/reducers\";\nimport CreateFolderModal from \"./CreateFolderModal\";\nimport UploadFile from \"../../../../../../icons/UploadFile\";\nimport { download } from \"../utils\";\nimport {\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n} from \"../../../../../../actions\";\n\nconst commonIcon = {\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center center\",\n width: 16,\n minWidth: 16,\n height: 40,\n marginRight: 10,\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n fileName: {\n display: \"flex\",\n alignItems: \"center\",\n },\n fileNameText: {\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n iconFolder: {\n backgroundImage: \"url(/images/ob_folder_clear.svg)\",\n ...commonIcon,\n },\n iconFile: {\n backgroundImage: \"url(/images/ob_file_clear.svg)\",\n ...commonIcon,\n },\n buttonsContainer: {\n \"& .MuiButtonBase-root\": {\n marginLeft: 10,\n },\n },\n browsePaper: {\n height: \"calc(100vh - 280px)\",\n },\n \"@global\": {\n \".rowLine:hover .iconFileElm\": {\n backgroundImage: \"url(/images/ob_file_filled.svg)\",\n },\n \".rowLine:hover .iconFolderElm\": {\n backgroundImage: \"url(/images/ob_folder_filled.svg)\",\n },\n },\n ...actionsTray,\n ...searchField,\n ...objectBrowserCommon,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IListObjectsProps {\n classes: any;\n match: any;\n addRoute: (param1: string, param2: string, param3: string) => any;\n setAllRoutes: (path: string) => any;\n routesList: Route[];\n downloadingFiles: string[];\n setLastAsFile: () => any;\n setLoadingProgress: typeof setLoadingProgress;\n setSnackBarMessage: typeof setSnackBarMessage;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n fileIsBeingPrepared: typeof fileIsBeingPrepared;\n fileDownloadStarted: typeof fileDownloadStarted;\n}\n\nfunction useInterval(callback: any, delay: number) {\n const savedCallback = useRef(null);\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n if (savedCallback !== undefined && savedCallback.current) {\n savedCallback.current();\n }\n }\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nconst defLoading = Loading...;\n\nconst ListObjects = ({\n classes,\n match,\n addRoute,\n setAllRoutes,\n routesList,\n downloadingFiles,\n setLastAsFile,\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n}: IListObjectsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [createFolderOpen, setCreateFolderOpen] = useState(false);\n const [selectedObject, setSelectedObject] = useState(\"\");\n const [selectedBucket, setSelectedBucket] = useState(\"\");\n const [filterObjects, setFilterObjects] = useState(\"\");\n const [loadingPromise, setLoadingPromise] = useState | null>(\n null\n );\n const [loadingStartTime, setLoadingStartTime] = useState(0);\n const [loadingMessage, setLoadingMessage] = useState(\n defLoading\n );\n\n const updateMessage = () => {\n let timeDelta = Date.now() - loadingStartTime;\n\n if (timeDelta / 1000 >= 6) {\n setLoadingMessage(\n \n \n This operation is taking longer than expected... (\n {Math.ceil(timeDelta / 1000)}s)\n \n \n );\n } else if (timeDelta / 1000 >= 3) {\n setLoadingMessage(\n \n This operation is taking longer than expected...\n \n );\n }\n };\n\n useInterval(() => {\n // Your custom logic here\n if (loading) {\n updateMessage();\n }\n }, 1000);\n\n useEffect(() => {\n const bucketName = match.params[\"bucket\"];\n const internalPaths = match.params[0];\n\n const verifyIfIsFile = () => {\n const bucketName = match.params[\"bucket\"];\n const internalPaths = match.params[0];\n\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${internalPaths}`\n )\n .then((res: BucketObjectsList) => {\n //It is a file since it has elements in the object, setting file flag and waiting for component mount\n if (res.objects !== null) {\n setLastAsFile();\n } else {\n // It is a folder, we remove loader\n setLoading(false);\n }\n })\n .catch((err: any) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n if (loading) {\n let extraPath = \"\";\n if (internalPaths) {\n extraPath = `?prefix=${internalPaths}/`;\n }\n\n let currentTimestamp = Date.now() + 0;\n setLoadingStartTime(currentTimestamp);\n setLoadingMessage(defLoading);\n\n let p = api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/objects${extraPath}`)\n .then((res: BucketObjectsList) => {\n setSelectedBucket(bucketName);\n\n const records: BucketObject[] = res.objects || [];\n const folders: BucketObject[] = [];\n const files: BucketObject[] = [];\n\n records.forEach((record) => {\n // this is a folder\n if (record.name.endsWith(\"/\")) {\n folders.push(record);\n } else {\n // this is a file\n files.push(record);\n }\n });\n\n const recordsInElement = [...folders, ...files];\n\n setRecords(recordsInElement);\n // In case no objects were retrieved, We check if item is a file\n if (!res.objects && extraPath !== \"\") {\n verifyIfIsFile();\n return;\n }\n setLoading(false);\n })\n .catch((err: any) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n setLoadingPromise(p);\n }\n }, [loading, match, setLastAsFile, setErrorSnackMessage]);\n\n useEffect(() => {\n const url = get(match, \"url\", \"/object-browser\");\n if (url !== routesList[routesList.length - 1].route) {\n setAllRoutes(url);\n }\n }, [match, routesList, setAllRoutes]);\n\n useEffect(() => {\n setLoading(true);\n }, [routesList, setLoading]);\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n setSnackBarMessage(`Object '${selectedObject}' deleted successfully.`);\n setLoading(true);\n }\n };\n\n const closeAddFolderModal = () => {\n setCreateFolderOpen(false);\n };\n\n const upload = (e: any, bucketName: string, path: string) => {\n if (\n e === null ||\n e === undefined ||\n e.target === null ||\n e.target === undefined\n ) {\n return;\n }\n e.preventDefault();\n let files = e.target.files;\n let uploadUrl = `/api/v1/buckets/${bucketName}/objects/upload`;\n if (path !== \"\") {\n uploadUrl = `${uploadUrl}?prefix=${path}`;\n }\n let xhr = new XMLHttpRequest();\n const areMultipleFiles = files.length > 1 ? true : false;\n const errorMessage = `An error occurred while uploading the file${\n areMultipleFiles ? \"s\" : \"\"\n }.`;\n const okMessage = `Object${\n areMultipleFiles ? \"s\" : ``\n } uploaded successfully.`;\n\n xhr.open(\"POST\", uploadUrl, true);\n\n xhr.withCredentials = false;\n xhr.onload = function (event) {\n if (\n xhr.status === 401 ||\n xhr.status === 403 ||\n xhr.status === 400 ||\n xhr.status === 500\n ) {\n setSnackBarMessage(errorMessage);\n }\n if (xhr.status === 200) {\n setSnackBarMessage(okMessage);\n }\n };\n\n xhr.upload.addEventListener(\"error\", (event) => {\n setSnackBarMessage(errorMessage);\n });\n\n xhr.upload.addEventListener(\"progress\", (event) => {\n setLoadingProgress(Math.floor((event.loaded * 100) / event.total));\n });\n\n xhr.onerror = () => {\n setSnackBarMessage(errorMessage);\n };\n xhr.onloadend = () => {\n setLoading(true);\n setLoadingProgress(100);\n };\n\n const formData = new FormData();\n\n for (let file of files) {\n const fileName = file.name;\n const blobFile = new Blob([file]);\n formData.append(fileName, blobFile);\n }\n\n xhr.send(formData);\n e.target.value = null;\n };\n\n const displayParsedDate = (object: BucketObject) => {\n if (object.name.endsWith(\"/\")) {\n return \"\";\n }\n return {object.last_modified};\n };\n\n const displayNiceBytes = (object: BucketObject) => {\n if (object.name.endsWith(\"/\")) {\n return \"\";\n }\n return niceBytes(String(object.size));\n };\n\n const confirmDeleteObject = (object: string) => {\n setDeleteOpen(true);\n setSelectedObject(object);\n };\n\n const removeDownloadAnimation = (path: string) => {\n fileDownloadStarted(path);\n };\n\n const downloadObject = (object: BucketObject) => {\n fileIsBeingPrepared(`${selectedBucket}/${object.name}`);\n if (object.size > 104857600) {\n // If file is bigger than 100MB we show a notification\n setSnackBarMessage(\n \"Download process started, it may take a few moments to complete\"\n );\n }\n\n download(\n selectedBucket,\n object.name,\n object.version_id,\n removeDownloadAnimation\n );\n };\n\n const openPath = (idElement: string) => {\n const currentPath = get(match, \"url\", \"/object-browser\");\n\n // Element is a folder, we redirect to it\n if (idElement.endsWith(\"/\")) {\n const idElementClean = idElement\n .substr(0, idElement.length - 1)\n .split(\"/\");\n const lastIndex = idElementClean.length - 1;\n const newPath = `${currentPath}/${idElementClean[lastIndex]}`;\n\n addRoute(newPath, idElementClean[lastIndex], \"path\");\n return;\n }\n // Element is a file. we open details here\n const pathInArray = idElement.split(\"/\");\n const fileName = pathInArray[pathInArray.length - 1];\n const newPath = `${currentPath}/${fileName}`;\n\n addRoute(newPath, fileName, \"file\");\n return;\n };\n\n const uploadObject = (e: any): void => {\n // Handle of deeper routes.\n const currentPath = routesList[routesList.length - 1].route;\n const splitPaths = currentPath\n .split(\"/\")\n .filter((item) => item.trim() !== \"\");\n\n let path = \"\";\n\n if (splitPaths.length > 2) {\n path = `${splitPaths.slice(2).join(\"/\")}/`;\n }\n\n upload(e, selectedBucket, path);\n };\n\n const tableActions = [\n { type: \"view\", onClick: openPath, sendOnlyId: true },\n {\n type: \"download\",\n onClick: downloadObject,\n showLoaderFunction: (item: string) =>\n downloadingFiles.includes(`${match.params[\"bucket\"]}/${item}`),\n },\n { type: \"delete\", onClick: confirmDeleteObject, sendOnlyId: true },\n ];\n\n const displayName = (element: string) => {\n let elementString = element;\n let icon = `${classes.iconFile} iconFileElm`;\n // Element is a folder\n if (element.endsWith(\"/\")) {\n icon = `${classes.iconFolder} iconFolderElm`;\n elementString = element.substr(0, element.length - 1);\n }\n\n const splitItem = elementString.split(\"/\");\n\n return (\n
\n
\n \n {splitItem[splitItem.length - 1]}\n \n
\n );\n };\n\n const filteredRecords = records.filter((b: BucketObject) => {\n if (filterObjects === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterObjects) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n return (\n \n {deleteOpen && (\n \n )}\n {createFolderOpen && (\n \n )}\n \n \n \n \n
\n \n
\n
\n }\n component=\"label\"\n onClick={() => {\n setCreateFolderOpen(true);\n }}\n >\n Create Folder\n \n }\n component=\"label\"\n >\n File\n uploadObject(e)}\n id=\"file-input\"\n style={{ display: \"none\" }}\n />\n \n
\n
\n \n {\n setFilterObjects(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n routesList: get(objectBrowser, \"routesList\", []),\n downloadingFiles: get(objectBrowser, \"downloadingFiles\", []),\n});\n\nconst mapDispatchToProps = {\n addRoute,\n setAllRoutes,\n setLastAsFile,\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withRouter(connector(withStyles(styles)(ListObjects)));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const months = [\n { value: \"01\", label: \"January\" },\n { value: \"02\", label: \"February\" },\n { value: \"03\", label: \"March\" },\n { value: \"04\", label: \"April\" },\n { value: \"05\", label: \"May\" },\n { value: \"06\", label: \"June\" },\n { value: \"07\", label: \"July\" },\n { value: \"08\", label: \"August\" },\n { value: \"09\", label: \"September\" },\n { value: \"10\", label: \"October\" },\n { value: \"11\", label: \"November\" },\n { value: \"12\", label: \"December\" },\n];\n\nexport const days = Array.from(Array(31), (_, num) => num + 1);\n\nconst currentYear = new Date().getFullYear();\n\nexport const years = Array.from(\n Array(25),\n (_, numYear) => numYear + currentYear\n);\n\nexport const validDate = (year: string, month: string, day: string): any[] => {\n const currentDate = Date.parse(`${year}-${month}-${day}`);\n\n if (isNaN(currentDate)) {\n return [false, \"\"];\n }\n\n const parsedMonth = parseInt(month);\n const parsedDay = parseInt(day);\n\n const monthForString = parsedMonth < 10 ? `0${parsedMonth}` : parsedMonth;\n const dayForString = parsedDay < 10 ? `0${parsedDay}` : parsedDay;\n\n const parsedDate = new Date(currentDate).toISOString().split(\"T\")[0];\n const dateString = `${year}-${monthForString}-${dayForString}`;\n\n return [parsedDate === dateString, dateString];\n};\n\n// twoDigitDate gets a two digit string number used for months or days\n// returns \"NaN\" if number is NaN\nexport const twoDigitDate = (num: number): string => {\n return num < 10 ? `0${num}` : `${num}`;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useEffect,\n} from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport InputBase from \"@material-ui/core/InputBase\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport FormSwitchWrapper from \"../FormSwitchWrapper/FormSwitchWrapper\";\nimport { days, months, validDate, years } from \"./utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n dateInput: {\n \"&:not(:last-child)\": {\n marginRight: 22,\n },\n },\n ...fieldBasic,\n ...tooltipHelper,\n labelContainer: {\n flex: 1,\n },\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingBottom: 10,\n marginTop: 11,\n marginBottom: 6,\n },\n fieldContainerBorder: {\n borderBottom: \"#9c9c9c 1px solid\",\n marginBottom: 20,\n },\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n \"& .MuiSelect-icon\": {\n color: \"#000\",\n \"&.Mui-disabled\": {\n color: \"#9c9c9c\",\n },\n },\n },\n input: {\n borderBottom: 0,\n fontSize: 12,\n },\n })\n)(InputBase);\n\ninterface IDateSelectorProps {\n classes: any;\n id: string;\n label: string;\n disableOptions?: boolean;\n addSwitch?: boolean;\n tooltip?: string;\n borderBottom?: boolean;\n value?: string;\n onDateChange: (date: string, isValid: boolean) => any;\n}\n\nconst DateSelector = forwardRef(\n (\n {\n classes,\n id,\n label,\n disableOptions = false,\n addSwitch = false,\n tooltip = \"\",\n borderBottom = false,\n onDateChange,\n value = \"\",\n }: IDateSelectorProps,\n ref: any\n ) => {\n useImperativeHandle(ref, () => ({ resetDate }));\n\n const [dateEnabled, setDateEnabled] = useState(false);\n const [month, setMonth] = useState(\"\");\n const [day, setDay] = useState(\"\");\n const [year, setYear] = useState(\"\");\n\n useEffect(() => {\n // verify if there is a current value\n // assume is in the format \"2021-12-30\"\n if (value !== \"\") {\n const valueSplit = value.split(\"-\");\n setYear(valueSplit[0]);\n setMonth(valueSplit[1]);\n // Turn to single digit to be displayed on dropdown buttons\n setDay(`${parseInt(valueSplit[2])}`);\n }\n }, [value]);\n\n useEffect(() => {\n const [isValid, dateString] = validDate(year, month, day);\n onDateChange(dateString, isValid);\n }, [month, day, year, onDateChange]);\n\n const resetDate = () => {\n setMonth(\"\");\n setDay(\"\");\n setYear(\"\");\n };\n\n const isDateDisabled = () => {\n if (disableOptions) {\n return disableOptions;\n } else if (addSwitch) {\n return !dateEnabled;\n } else {\n return false;\n }\n };\n\n const onMonthChange = (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => {\n setMonth(e.target.value as string);\n };\n\n const onDayChange = (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => {\n setDay(e.target.value as string);\n };\n\n const onYearChange = (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => {\n setYear(e.target.value as string);\n };\n\n return (\n \n
\n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n {addSwitch && (\n {\n setDateEnabled(e.target.checked);\n if (!e.target.checked) {\n onDateChange(\"\", true);\n }\n }}\n switchOnly\n />\n )}\n
\n
\n
\n \n }\n >\n \n {\"\"}\n \n {months.map((option) => (\n \n {option.label}\n \n ))}\n \n \n \n }\n >\n \n {\"\"}\n \n {days.map((dayNumber) => (\n \n {dayNumber}\n \n ))}\n \n \n \n }\n >\n \n {\"\"}\n \n {years.map((year) => (\n \n {year}\n \n ))}\n \n \n
\n \n );\n }\n);\n\nexport default withStyles(styles)(DateSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../../icons\";\nimport { IFileInfo } from \"./types\";\nimport {\n setModalErrorSnackMessage,\n setModalSnackMessage,\n} from \"../../../../../../actions\";\nimport api from \"../../../../../../common/api\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport DateSelector from \"../../../../Common/FormComponents/DateSelector/DateSelector\";\nimport PredefinedList from \"../../../../Common/FormComponents/PredefinedList/PredefinedList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n copyButtonContainer: {\n paddingLeft: 16,\n },\n modalContent: {\n paddingBottom: 53,\n },\n ...modalBasic,\n });\n\ninterface IShareFileProps {\n classes: any;\n open: boolean;\n bucketName: string;\n dataObject: IFileInfo;\n closeModalAndRefresh: () => void;\n setModalSnackMessage: typeof setModalSnackMessage;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ShareFile = ({\n classes,\n open,\n closeModalAndRefresh,\n bucketName,\n dataObject,\n setModalSnackMessage,\n setModalErrorSnackMessage,\n}: IShareFileProps) => {\n const [shareURL, setShareURL] = useState(\"\");\n const [isLoadingFile, setIsLoadingFile] = useState(false);\n const [selectedDate, setSelectedDate] = useState(\"\");\n const [dateValid, setDateValid] = useState(true);\n\n const dateChanged = (newDate: string, isValid: boolean) => {\n setDateValid(isValid);\n if (isValid) {\n setSelectedDate(newDate);\n return;\n }\n setSelectedDate(\"\");\n };\n\n useEffect(() => {\n if (dateValid) {\n setIsLoadingFile(true);\n setShareURL(\"\");\n\n const slDate = new Date(`${selectedDate}T23:59:59`);\n const currDate = new Date();\n\n const diffDate = slDate.getTime() - currDate.getTime();\n\n if (diffDate < 0) {\n setModalErrorSnackMessage(\n \"Selected date must be greater than current time.\"\n );\n setShareURL(\"\");\n setIsLoadingFile(false);\n\n return;\n }\n\n if (diffDate > 604800000) {\n setModalErrorSnackMessage(\n \"You can share a file only for less than 7 days.\"\n );\n setShareURL(\"\");\n setIsLoadingFile(false);\n\n return;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects/share?prefix=${\n dataObject.name\n }&version_id=${dataObject.version_id}${\n selectedDate !== \"\" ? `&expires=${diffDate}ms` : \"\"\n }`\n )\n .then((res: string) => {\n setShareURL(res);\n setIsLoadingFile(false);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setShareURL(\"\");\n setIsLoadingFile(false);\n });\n return;\n }\n }, [\n dataObject,\n selectedDate,\n bucketName,\n dateValid,\n setShareURL,\n setModalErrorSnackMessage,\n ]);\n\n return (\n \n {\n closeModalAndRefresh();\n }}\n >\n \n \n \n \n \n \n \n \n \n \n }\n onClick={() => {\n setModalSnackMessage(\"Share URL Copied to clipboard\");\n }}\n disabled={shareURL === \"\" || isLoadingFile}\n >\n Copy\n \n \n \n \n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalSnackMessage,\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ShareFile));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nconst ShareIcon = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default ShareIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nconst DownloadIcon = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default DownloadIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport RadioGroupSelector from \"../../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport DateSelector from \"../../../../Common/FormComponents/DateSelector/DateSelector\";\nimport api from \"../../../../../../common/api\";\nimport { twoDigitDate } from \"../../../../Common/FormComponents/DateSelector/utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n objectName: {\n fontSize: 18,\n fontWeight: 700,\n marginBottom: 40,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface ISetRetentionProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (updateInfo: boolean) => void;\n objectName: string;\n bucketName: string;\n objectInfo: IFileInfo;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\ninterface IRefObject {\n resetDate: () => void;\n}\n\nconst SetRetention = ({\n classes,\n open,\n closeModalAndRefresh,\n objectName,\n objectInfo,\n bucketName,\n setModalErrorSnackMessage,\n}: ISetRetentionProps) => {\n const [statusEnabled, setStatusEnabled] = useState(true);\n const [type, setType] = useState(\"\");\n const [date, setDate] = useState(\"\");\n const [isDateValid, setIsDateValid] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [alreadyConfigured, setAlreadyConfigured] = useState(false);\n\n useEffect(() => {\n if (objectInfo.retention_mode) {\n setType(objectInfo.retention_mode.toLowerCase());\n setAlreadyConfigured(true);\n }\n // get retention_until_date if defined\n if (objectInfo.retention_until_date) {\n const valueDate = new Date(objectInfo.retention_until_date);\n if (valueDate.toString() !== \"Invalid Date\") {\n const year = valueDate.getFullYear();\n const month = twoDigitDate(valueDate.getMonth() + 1);\n const day = valueDate.getDate();\n if (!isNaN(day) && month !== \"NaN\" && !isNaN(year)) {\n setDate(`${year}-${month}-${day}`);\n }\n }\n setAlreadyConfigured(true);\n }\n }, [objectInfo]);\n\n const dateElement = useRef(null);\n\n const dateFieldDisabled = () => {\n return !(statusEnabled && (type === \"governance\" || type === \"compliance\"));\n };\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n };\n\n const resetForm = () => {\n setStatusEnabled(false);\n setType(\"\");\n if (dateElement.current) {\n dateElement.current.resetDate();\n }\n };\n\n const addRetention = (\n selectedObject: string,\n versionId: string | null,\n expireDate: string\n ) => {\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/retention?prefix=${selectedObject}&version_id=${versionId}`,\n {\n expires: expireDate,\n mode: type,\n }\n )\n .then((res: any) => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSaving(false);\n });\n };\n\n const disableRetention = (\n selectedObject: string,\n versionId: string | null\n ) => {\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${bucketName}/objects/retention?prefix=${selectedObject}&version_id=${versionId}`\n )\n .then(() => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSaving(false);\n });\n };\n\n const saveNewRetentionPolicy = () => {\n setIsSaving(true);\n const selectedObject = objectInfo.name;\n const versionId = objectInfo.version_id;\n\n const expireDate =\n !statusEnabled && type === \"governance\" ? \"\" : `${date}T23:59:59Z`;\n\n if (!statusEnabled && type === \"governance\") {\n disableRetention(selectedObject, versionId);\n\n return;\n }\n\n addRetention(selectedObject, versionId, expireDate);\n };\n\n const showSwitcher =\n alreadyConfigured && (type === \"governance\" || type === \"\");\n\n return (\n {\n resetForm();\n closeModalAndRefresh(false);\n }}\n >\n \n {objectName}\n \n ) => {\n onSubmit(e);\n }}\n >\n {showSwitcher && (\n \n ) => {\n setStatusEnabled(!statusEnabled);\n }}\n label={\"Status\"}\n indicatorLabels={[\"Enabled\", \"Disabled\"]}\n />\n \n )}\n \n {\n setType(e.target.value);\n }}\n selectorOptions={[\n { label: \"Governance\", value: \"governance\" },\n { label: \"Compliance\", value: \"compliance\" },\n ]}\n />\n \n \n {\n setIsDateValid(isValid);\n if (isValid) {\n setDate(date);\n }\n }}\n />\n \n \n \n Reset\n \n \n Save\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(SetRetention));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../../../common/api\";\n\ninterface ITagModal {\n modalOpen: boolean;\n currentTags: any;\n bucketName: string;\n versionId: string | null;\n onCloseAndUpdate: (refresh: boolean) => void;\n selectedObject: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n pathLabel: {\n marginTop: 0,\n marginBottom: 32,\n },\n ...modalBasic,\n });\n\nconst AddTagModal = ({\n modalOpen,\n currentTags,\n selectedObject,\n onCloseAndUpdate,\n bucketName,\n versionId,\n setModalErrorSnackMessage,\n classes,\n}: ITagModal) => {\n const [newKey, setNewKey] = useState(\"\");\n const [newLabel, setNewLabel] = useState(\"\");\n const [isSending, setIsSending] = useState(false);\n\n const resetForm = () => {\n setNewLabel(\"\");\n setNewKey(\"\");\n };\n\n const addTagProcess = () => {\n setIsSending(true);\n const newTag: any = {};\n\n newTag[newKey] = newLabel;\n const newTagList = { ...currentTags, ...newTag };\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/tags?prefix=${selectedObject}&version_id=${versionId}`,\n { tags: newTagList }\n )\n .then((res: any) => {\n setIsSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSending(false);\n });\n };\n\n return (\n \n {\n onCloseAndUpdate(false);\n }}\n >\n \n

\n Selected Object: {selectedObject}\n

\n \n {\n setNewKey(e.target.value);\n }}\n />\n \n \n {\n setNewLabel(e.target.value);\n }}\n />\n \n \n \n Clear\n \n \n Save\n \n \n
\n \n
\n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddTagModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport api from \"../../../../../../common/api\";\n\ninterface IDeleteTagModal {\n deleteOpen: boolean;\n currentTags: any;\n bucketName: string;\n versionId: string | null;\n selectedTag: string[];\n onCloseAndUpdate: (refresh: boolean) => void;\n selectedObject: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n pathLabel: {\n marginTop: 0,\n marginBottom: 32,\n },\n ...modalBasic,\n });\n\nconst DeleteTagModal = ({\n deleteOpen,\n currentTags,\n selectedObject,\n selectedTag,\n onCloseAndUpdate,\n bucketName,\n versionId,\n setErrorSnackMessage,\n classes,\n}: IDeleteTagModal) => {\n const [deleteLoading, setDeleteSending] = useState(false);\n const [tagKey, tagLabel] = selectedTag;\n\n const removeTagProcess = () => {\n setDeleteSending(true);\n const cleanObject = { ...currentTags };\n delete cleanObject[tagKey];\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/tags?prefix=${selectedObject}&version_id=${versionId}`,\n { tags: cleanObject }\n )\n .then((res: any) => {\n setDeleteSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error) => {\n setErrorSnackMessage(error);\n setDeleteSending(false);\n });\n };\n\n return (\n {\n onCloseAndUpdate(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Tag\n \n {deleteLoading && }\n \n Are you sure you want to delete the tag{\" \"}\n \n {tagKey} : {tagLabel}\n {\" \"}\n from {selectedObject}?\n \n \n \n {\n onCloseAndUpdate(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(DeleteTagModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport { IFileInfo } from \"./types\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n objectName: {\n fontSize: 18,\n fontWeight: 700,\n marginBottom: 40,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface ISetRetentionProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (reload: boolean) => void;\n objectName: string;\n bucketName: string;\n actualInfo: IFileInfo;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst SetLegalHoldModal = ({\n classes,\n open,\n closeModalAndRefresh,\n objectName,\n bucketName,\n actualInfo,\n setModalErrorSnackMessage,\n}: ISetRetentionProps) => {\n const [legalHoldEnabled, setLegalHoldEnabled] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const versionId = actualInfo.version_id;\n\n useEffect(() => {\n const status = get(actualInfo, \"legal_hold_status\", \"OFF\");\n setLegalHoldEnabled(status === \"ON\");\n }, [actualInfo]);\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setIsSaving(true);\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/legalhold?prefix=${objectName}&version_id=${versionId}`,\n { status: legalHoldEnabled ? \"enabled\" : \"disabled\" }\n )\n .then(() => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSaving(false);\n });\n };\n\n const resetForm = () => {\n setLegalHoldEnabled(false);\n };\n\n return (\n {\n resetForm();\n closeModalAndRefresh(false);\n }}\n >\n \n {objectName}\n \n ) => {\n onSubmit(e);\n }}\n >\n \n ) => {\n setLegalHoldEnabled(!legalHoldEnabled);\n }}\n label={\"Legal Hold Status\"}\n indicatorLabels={[\"Enabled\", \"Disabled\"]}\n tooltip={\n \"To enable this feature you need to enable versioning on the bucket before creation\"\n }\n />\n \n \n \n Reset\n \n \n Save\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(SetLegalHoldModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport * as reactMoment from \"react-moment\";\nimport clsx from \"clsx\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Chip from \"@material-ui/core/Chip\";\nimport TextField from \"@material-ui/core/TextField\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport ShareFile from \"./ShareFile\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"./types\";\nimport {\n removeRouteLevel,\n fileIsBeingPrepared,\n fileDownloadStarted,\n} from \"../../../../ObjectBrowser/actions\";\nimport {\n ObjectBrowserReducer,\n Route,\n} from \"../../../../ObjectBrowser/reducers\";\nimport { download } from \"../utils\";\nimport history from \"../../../../../../history\";\nimport api from \"../../../../../../common/api\";\nimport PageHeader from \"../../../../Common/PageHeader/PageHeader\";\nimport ShareIcon from \"../../../../../../icons/ShareIcon\";\nimport DownloadIcon from \"../../../../../../icons/DownloadIcon\";\nimport DeleteIcon from \"../../../../../../icons/DeleteIcon\";\nimport TableWrapper from \"../../../../Common/TableWrapper/TableWrapper\";\nimport PencilIcon from \"../../../../Common/TableWrapper/TableActionIcons/PencilIcon\";\nimport SetRetention from \"./SetRetention\";\nimport BrowserBreadcrumbs from \"../../../../ObjectBrowser/BrowserBreadcrumbs\";\nimport DeleteObject from \"../ListObjects/DeleteObject\";\nimport AddTagModal from \"./AddTagModal\";\nimport DeleteTagModal from \"./DeleteTagModal\";\nimport SetLegalHoldModal from \"./SetLegalHoldModal\";\nimport {\n setSnackBarMessage,\n setErrorSnackMessage,\n} from \"../../../../../../actions\";\nimport { CircularProgress } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n objectNameContainer: {\n marginBottom: 8,\n },\n objectPathContainer: {\n marginBottom: 26,\n fontSize: 10,\n },\n objectPathLink: {\n \"&:visited\": {\n color: \"#000\",\n },\n },\n objectName: {\n fontSize: 24,\n },\n propertiesContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n marginBottom: 15,\n },\n propertiesItem: {\n display: \"flex\",\n flexDirection: \"row\",\n marginRight: 21,\n },\n propertiesItemBold: {\n fontWeight: 700,\n },\n propertiesValue: {\n marginLeft: 8,\n textTransform: \"capitalize\",\n },\n propertiesIcon: {\n marginLeft: 5,\n },\n actionsIconContainer: {\n marginLeft: 12,\n },\n actionsIcon: {\n height: 16,\n width: 16,\n \"& .MuiSvgIcon-root\": {\n height: 16,\n },\n },\n tagsContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginBottom: 15,\n },\n tagText: {\n marginRight: 13,\n },\n tag: {\n marginRight: 6,\n fontSize: 10,\n fontWeight: 700,\n \"&.MuiChip-sizeSmall\": {\n height: 18,\n },\n \"& .MuiSvgIcon-root\": {\n height: 10,\n width: 10,\n },\n },\n search: {\n marginBottom: 8,\n \"&.MuiFormControl-root\": {\n marginRight: 0,\n },\n },\n \"@global\": {\n \".progressDetails\": {\n paddingTop: 3,\n display: \"inline-block\",\n position: \"relative\",\n width: 18,\n height: 18,\n },\n \".progressDetails > .MuiCircularProgress-root\": {\n position: \"absolute\",\n left: 0,\n top: 3,\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IObjectDetailsProps {\n classes: any;\n routesList: Route[];\n downloadingFiles: string[];\n removeRouteLevel: (newRoute: string) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n setSnackBarMessage: typeof setSnackBarMessage;\n fileIsBeingPrepared: typeof fileIsBeingPrepared;\n fileDownloadStarted: typeof fileDownloadStarted;\n}\n\nconst emptyFile: IFileInfo = {\n is_latest: true,\n last_modified: \"\",\n legal_hold_status: \"\",\n name: \"\",\n retention_mode: \"\",\n retention_until_date: \"\",\n size: \"0\",\n tags: {},\n version_id: null,\n};\n\nconst ObjectDetails = ({\n classes,\n routesList,\n downloadingFiles,\n removeRouteLevel,\n setErrorSnackMessage,\n setSnackBarMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n}: IObjectDetailsProps) => {\n const [loadObjectData, setLoadObjectData] = useState(true);\n const [shareFileModalOpen, setShareFileModalOpen] = useState(false);\n const [retentionModalOpen, setRetentionModalOpen] = useState(false);\n const [tagModalOpen, setTagModalOpen] = useState(false);\n const [deleteTagModalOpen, setDeleteTagModalOpen] = useState(false);\n const [selectedTag, setSelectedTag] = useState([\"\", \"\"]);\n const [legalholdOpen, setLegalholdOpen] = useState(false);\n const [actualInfo, setActualInfo] = useState(emptyFile);\n const [versions, setVersions] = useState([]);\n const [filterVersion, setFilterVersion] = useState(\"\");\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n const currentItem = routesList[routesList.length - 1];\n const allPathData = currentItem.route.split(\"/\");\n const objectName = allPathData[allPathData.length - 1];\n const bucketName = allPathData[2];\n const pathInBucket = allPathData.slice(3).join(\"/\");\n\n useEffect(() => {\n if (loadObjectData) {\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${pathInBucket}&with_versions=true`\n )\n .then((res: IFileInfo[]) => {\n const result = get(res, \"objects\", []);\n setActualInfo(\n result.find((el: IFileInfo) => el.is_latest) || emptyFile\n );\n setVersions(result.filter((el: IFileInfo) => !el.is_latest));\n setLoadObjectData(false);\n })\n .catch((error) => {\n setErrorSnackMessage(error);\n setLoadObjectData(false);\n });\n }\n }, [loadObjectData, bucketName, pathInBucket, setErrorSnackMessage]);\n\n let tagKeys: string[] = [];\n\n if (actualInfo.tags) {\n tagKeys = Object.keys(actualInfo.tags);\n }\n\n const openRetentionModal = () => {\n setRetentionModalOpen(true);\n };\n\n const closeRetentionModal = (updateInfo: boolean) => {\n setRetentionModalOpen(false);\n if (updateInfo) {\n setLoadObjectData(true);\n }\n };\n\n const shareObject = () => {\n setShareFileModalOpen(true);\n };\n\n const closeShareModal = () => {\n setShareFileModalOpen(false);\n };\n\n const deleteTag = (tagKey: string, tagLabel: string) => {\n setSelectedTag([tagKey, tagLabel]);\n setDeleteTagModalOpen(true);\n };\n\n const removeDownloadAnimation = (path: string) => {\n fileDownloadStarted(path);\n };\n\n const downloadObject = (object: IFileInfo, includeVersion?: boolean) => {\n fileIsBeingPrepared(\n `${bucketName}/${object.name}${\n includeVersion ? `-${object.version_id}` : \"\"\n }`\n );\n if (object.size && parseInt(object.size) > 104857600) {\n // If file is bigger than 100MB we show a notification\n setSnackBarMessage(\n \"Download process started, it may take a few moments to complete\"\n );\n }\n download(\n bucketName,\n pathInBucket,\n object.version_id,\n removeDownloadAnimation,\n includeVersion\n );\n };\n\n const tableActions = [\n { type: \"share\", onClick: shareObject, sendOnlyId: true },\n {\n type: \"download\",\n onClick: (item: IFileInfo) => {\n downloadObject(item, true);\n },\n showLoaderFunction: (version: string) => {\n return downloadingFiles.includes(\n `${bucketName}/${objectName}-${version}`\n );\n },\n },\n ];\n\n const filteredRecords = versions.filter((version) => {\n if (version.version_id) {\n return version.version_id.includes(filterVersion);\n }\n return false;\n });\n\n const displayParsedDate = (date: string) => {\n return {date};\n };\n\n const closeDeleteModal = (redirectBack: boolean) => {\n setDeleteOpen(false);\n\n if (redirectBack) {\n const newPath = allPathData.slice(0, -1).join(\"/\");\n\n removeRouteLevel(newPath);\n history.push(newPath);\n }\n };\n\n const closeAddTagModal = (reloadObjectData: boolean) => {\n setTagModalOpen(false);\n\n if (reloadObjectData) {\n setLoadObjectData(true);\n }\n };\n\n const closeLegalholdModal = (reload: boolean) => {\n setLegalholdOpen(false);\n\n if (reload) {\n setLoadObjectData(true);\n }\n };\n\n const closeDeleteTagModal = (reloadObjectData: boolean) => {\n setDeleteTagModalOpen(false);\n\n if (reloadObjectData) {\n setLoadObjectData(true);\n }\n };\n\n return (\n \n \n {shareFileModalOpen && (\n \n )}\n {retentionModalOpen && (\n \n )}\n {deleteOpen && (\n \n )}\n {tagModalOpen && (\n \n )}\n {deleteTagModalOpen && (\n \n )}\n {legalholdOpen && (\n \n )}\n \n \n \n
\n \n
\n
\n
\n \n {actualInfo.version_id && actualInfo.version_id !== \"null\" && (\n \n
\n
\n \n Legal Hold:\n \n \n {actualInfo.legal_hold_status\n ? actualInfo.legal_hold_status.toLowerCase()\n : \"Off\"}\n \n
\n
\n {\n setLegalholdOpen(true);\n }}\n >\n \n \n
\n
\n
\n
\n \n Retention:\n \n \n {actualInfo.retention_mode\n ? actualInfo.retention_mode.toLowerCase()\n : \"Undefined\"}\n \n
\n
\n {\n openRetentionModal();\n }}\n >\n \n \n
\n
\n
\n )}\n
\n
File Actions:
\n
\n {\n shareObject();\n }}\n >\n \n \n
\n
\n {downloadingFiles.includes(\n `${bucketName}/${actualInfo.name}`\n ) ? (\n
\n \n
\n ) : (\n {\n downloadObject(actualInfo);\n }}\n >\n \n \n )}\n
\n
\n {\n setDeleteOpen(true);\n }}\n >\n \n \n
\n
\n
\n \n
Tags:
\n {tagKeys &&\n tagKeys.map((tagKey, index) => {\n const tag = get(actualInfo, `tags.${tagKey}`, \"\");\n if (tag !== \"\") {\n return (\n }\n onDelete={() => {\n deleteTag(tagKey, tag);\n }}\n />\n );\n }\n return null;\n })}\n }\n clickable\n size=\"small\"\n label=\"Add tag\"\n color=\"primary\"\n variant=\"outlined\"\n onClick={() => {\n setTagModalOpen(true);\n }}\n />\n
\n\n \n {actualInfo.version_id && actualInfo.version_id !== \"null\" && (\n {\n setFilterVersion(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n )}\n \n \n {actualInfo.version_id && actualInfo.version_id !== \"null\" && (\n \n )}\n \n
\n
\n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n downloadingFiles: get(objectBrowser, \"downloadingFiles\", []),\n});\n\nconst mapDispatchToProps = {\n removeRouteLevel,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n setSnackBarMessage,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ObjectDetails));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport ListObjects from \"./ListObjects\";\nimport ObjectDetails from \"../ObjectDetails/ObjectDetails\";\nimport get from \"lodash/get\";\nimport { setAllRoutes } from \"../../../../ObjectBrowser/actions\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport { ObjectBrowserState, Route } from \"../../../../ObjectBrowser/reducers\";\n\ninterface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\ninterface ObjectRoutingProps {\n routesList: Route[];\n setAllRoutes: (path: string) => any;\n match: any;\n}\n\nconst ObjectRouting = ({\n routesList,\n match,\n setAllRoutes,\n}: ObjectRoutingProps) => {\n const currentItem = routesList[routesList.length - 1];\n\n useEffect(() => {\n const url = get(match, \"url\", \"/object-browser\");\n\n if (url !== routesList[routesList.length - 1].route) {\n setAllRoutes(url);\n }\n }, [match, routesList, setAllRoutes]);\n\n return currentItem.type === \"path\" ? (\n \n ) : (\n \n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n routesList: get(objectBrowser, \"routesList\", []),\n});\n\nconst mapDispatchToProps = {\n setAllRoutes,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withRouter(connector(ObjectRouting));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const planDetails = [\n {\n id: 0,\n title: \"Community\",\n price: \"Open Source\",\n capacityMin: \"\",\n },\n {\n id: 1,\n title: \"Standard\",\n price: \"$10/TB/month\",\n capacityMax: \"Up to 10PB. No additional charges for capacity over 10PB\",\n capacityMin: \"\",\n },\n {\n id: 2,\n title: \"Enterprise\",\n price: \"$20/TB/month\",\n capacityMax: \"Up to 5PB. No additional charges for capacity over 5PB\",\n capacityMin: \"\",\n },\n];\n\nexport const planItems = [\n {\n id: 0,\n field: \"License\",\n community: \"GNU AGPL v3\",\n communityDetail: \"\",\n standard: \"Commercial License\",\n standardDetail: \"\",\n enterprise: \"Commercial License\",\n enterpriseDetail: \"\",\n },\n {\n id: 1,\n field: \"Software Release\",\n community: \"Update to latest\",\n standard: \"1 Year Long Term Support\",\n enterprise: \"5 Years Long Term Support\",\n },\n {\n id: 2,\n field: \"SLA\",\n community: \"No SLA\",\n standard: \"<24 hours\",\n enterprise: \"<1 hour\",\n },\n {\n id: 3,\n field: \"Support\",\n community: \"Community:\",\n communityDetail: \"Public Slack Channel + Github Issues\",\n standard: \"24x7 L4 direct engineering\",\n standardDetail: \"Support via SUBNET\",\n enterprise: \"24x7 L4 direct engineering\",\n enterpriseDetail: \"Support via SUBNET\",\n },\n {\n id: 4,\n field: \"Security Updates & Critical Bugs\",\n community: \"Self Update\",\n standard: \"Guided Update\",\n enterprise: \"Guided Update\",\n },\n {\n id: 5,\n field: \"Panic Button\",\n community: \"N/A\",\n standard: \"1 per year\",\n enterprise: \"Unlimited\",\n },\n {\n id: 6,\n field: \"Annual Architecture Review\",\n community: \"N/A\",\n standard: \"Yes\",\n enterprise: \"Yes\",\n },\n {\n id: 7,\n field: \"Annual Performance Review\",\n community: \"N/A\",\n standard: \"Yes\",\n enterprise: \"Yes\",\n },\n {\n id: 8,\n field: \"Indemnification\",\n community: \"N/A\",\n standard: \"N/A\",\n enterprise: \"Yes\",\n },\n {\n id: 9,\n field: \"Security + Policy Review\",\n community: \"N/A\",\n standard: \"N/A\",\n enterprise: \"Yes\",\n },\n];\n\nexport const planButtons = [\n {\n id: 0,\n text: \"Join Slack\",\n text2: \"\",\n link: \"https://slack.min.io\",\n plan: \"community\",\n },\n {\n id: 1,\n text: \"Subscribe\",\n text2: \"Upgrade\",\n link: \"https://subnet.min.io/subscription\",\n plan: \"standard\",\n },\n {\n id: 2,\n text: \"Subscribe\",\n text2: \"Upgrade\",\n link: \"https://subnet.min.io/subscription\",\n plan: \"enterprise\",\n },\n];\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress, TextField } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { SubscriptionActivateRequest } from \"../Buckets/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport api from \"../../../common/api\";\nimport PersonOutlineOutlinedIcon from \"@material-ui/icons/PersonOutlineOutlined\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: \"red\",\n },\n subnetLicenseKey: {\n padding: \"10px 10px 10px 0px\",\n borderRight: \"1px solid rgba(0, 0, 0, 0.12)\",\n opacity: 0.5,\n \"&:hover\": { opacity: 1 },\n },\n subnetLoginForm: {\n padding: \"10px 0px 10px 10px\",\n opacity: 0.5,\n \"&:hover\": { opacity: 1 },\n },\n licenseKeyField: {},\n pageTitle: {\n marginBottom: 20,\n },\n button: {\n textTransform: \"none\",\n fontSize: 15,\n fontWeight: 700,\n background:\n \"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box\",\n color: \"#fff\",\n },\n buttonSignup: {\n textTransform: \"none\",\n fontSize: 15,\n fontWeight: 700,\n marginLeft: 15,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IActivationModal {\n classes: any;\n open: boolean;\n closeModal: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ActivationModal = ({\n classes,\n open,\n closeModal,\n setModalErrorSnackMessage,\n}: IActivationModal) => {\n const [license, setLicense] = useState(\"\");\n const [subnetPassword, setSubnetPassword] = useState(\"\");\n const [subnetEmail, setSubnetEmail] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const activateProduct = () => {\n if (loading) {\n return;\n }\n setLoading(true);\n let request: SubscriptionActivateRequest = {\n license: license,\n email: subnetEmail,\n password: subnetPassword,\n };\n api\n .invoke(\"POST\", \"/api/v1/subscription/validate\", request)\n .then(() => {\n setLoading(false);\n setLicense(\"\");\n setSubnetPassword(\"\");\n setSubnetEmail(\"\");\n closeModal();\n })\n .catch((err) => {\n setLoading(false);\n setLicense(\"\");\n setSubnetPassword(\"\");\n setSubnetEmail(\"\");\n setModalErrorSnackMessage(err);\n });\n };\n\n return open ? (\n {\n setLicense(\"\");\n setSubnetPassword(\"\");\n setSubnetEmail(\"\");\n closeModal();\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n \n \n \n Activate SUBNET License\n \n \n \n \n \n Enter your license key here\n \n \n ) =>\n setLicense(event.target.value)\n }\n fullWidth\n className={classes.licenseKeyField}\n variant=\"outlined\"\n />\n
\n
\n activateProduct()}\n disabled={loading || license.trim().length === 0}\n >\n Activate\n \n
\n \n \n \n }\n id=\"subnet-email\"\n name=\"subnet-email\"\n onChange={(event: React.ChangeEvent) => {\n setSubnetEmail(event.target.value);\n }}\n placeholder=\"email\"\n label=\"\"\n type=\"text\"\n value={subnetEmail}\n />\n \n \n }\n id=\"subnet-password\"\n name=\"subnet-password\"\n onChange={(event: React.ChangeEvent) => {\n setSubnetPassword(event.target.value);\n }}\n placeholder=\"password\"\n label=\"\"\n type=\"password\"\n value={subnetPassword}\n />\n \n \n activateProduct()}\n disabled={\n loading ||\n subnetEmail.trim().length === 0 ||\n subnetPassword.trim().length === 0\n }\n variant=\"contained\"\n >\n Activate\n \n {\n e.preventDefault();\n window.open(\"https://min.io/pricing\", \"_blank\");\n }}\n variant=\"outlined\"\n >\n Sign Up\n \n \n \n \n
\n {loading && (\n \n \n \n )}\n \n ) : null;\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(ActivationModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Button from \"@material-ui/core/Button\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { planDetails, planItems, planButtons } from \"./utils\";\nimport ActivationModal from \"./ActivationModal\";\nimport api from \"../../../common/api\";\nimport { LicenseInfo } from \"./types\";\nimport { CircularProgress, LinearProgress } from \"@material-ui/core\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { niceBytes } from \"../../../common/utils\";\nimport Moment from \"react-moment\";\n\nconst mapState = (state: AppState) => ({\n operatorMode: state.system.operatorMode,\n});\n\nconst connector = connect(mapState, null);\n\nconst styles = (theme: Theme) =>\n createStyles({\n pageTitle: {\n fontSize: 18,\n marginBottom: 20,\n },\n paper: {\n padding: \"20px 52px 20px 28px\",\n },\n licenseContainer: {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: \"#032F51\",\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: \"#FFF\",\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: \"#FFFFFF\",\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n tableContainer: {\n marginLeft: 28,\n },\n detailsContainer: {\n textAlign: \"center\",\n paddingBottom: 12,\n borderRadius: \"3px 3px 0 0\",\n marginLeft: 8,\n maxWidth: \"calc(25% - 8px)\",\n },\n detailsContainerBorder: {\n border: \"1px solid #e2e2e2\",\n borderBottom: 0,\n borderRadius: \"4px 4px 0px 0px\",\n },\n detailsContainerBorderHighlighted: {\n border: \"1px solid #B5B5B5\",\n borderBottom: 0,\n },\n detailsTitle: {\n fontSize: 19,\n fontWeight: 700,\n marginBottom: 26,\n paddingTop: 18,\n },\n activePlanHeader: {\n fontWeight: 700,\n background: \"#D5DDE5\",\n borderRadius: \"3px 3px 0px 0px\",\n color: \"#121212\",\n padding: 8,\n borderTop: \"1px solid #D5DDE5\",\n marginTop: -2,\n },\n planHeader: {\n background: \"#FFFFFF\",\n borderRadius: \"3px 3px 0px 0px\",\n padding: 8,\n borderTop: \"1px solid #D5DDE5\",\n },\n detailsPrice: {\n fontSize: 13,\n fontWeight: 700,\n marginBottom: 8,\n },\n detailsCapacityMax: {\n minHeight: 28,\n fontSize: 10,\n fontWeight: 700,\n marginBottom: 12,\n padding: \"0% 15%\",\n },\n detailsCapacityMin: {\n fontSize: 10,\n },\n itemContainer: {\n height: 36,\n },\n itemContainerDetail: {\n height: 48,\n },\n item: {\n height: \"100%\",\n borderLeft: \"1px solid #e2e2e2\",\n borderRight: \"1px solid #e2e2e2\",\n textAlign: \"center\",\n fontSize: 10,\n fontWeight: 700,\n display: \"flex\",\n alignItems: \"center\",\n alignContent: \"center\",\n marginLeft: 8,\n maxWidth: \"calc(25% - 8px)\",\n borderTop: \"1px solid #e5e5e5\",\n },\n itemFirst: {\n borderLeft: 0,\n borderRight: 0,\n },\n itemHighlighted: {\n borderLeft: \"1px solid #B5B5B5\",\n borderRight: \"1px solid #B5B5B5\",\n },\n field: {\n textAlign: \"left\",\n fontWeight: 400,\n fontSize: 12,\n },\n checkIcon: {\n height: 12,\n color:\n \"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box\",\n },\n buttonContainer: {\n paddingTop: 8,\n paddingBottom: 24,\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n borderRadius: \"0 0 3px 3px\",\n border: \"1px solid #e2e2e2\",\n borderTop: 0,\n marginLeft: 8,\n maxWidth: \"calc(25% - 8px)\",\n },\n buttonContainerBlank: {\n border: 0,\n },\n buttonContainerHighlighted: {\n border: \"1px solid #B5B5B5\",\n borderTop: 0,\n },\n button: {\n textTransform: \"none\",\n fontSize: 15,\n fontWeight: 700,\n },\n licenseButton: {\n float: \"right\",\n marginTop: 25,\n marginRight: 25,\n },\n openSourcePolicy: {\n color: \"#1C5A8D\",\n fontWeight: \"bold\",\n },\n activateLink: {\n color: \"#1C5A8D\",\n fontWeight: \"bold\",\n clear: \"both\",\n background: \"none\",\n border: \"none\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n },\n subnetRefreshLicenseLink: {\n color: \"#1C5A8D\",\n fontWeight: \"bold\",\n clear: \"both\",\n background: \"none\",\n border: \"none\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n fontSize: 13,\n },\n fullWidth: {\n width: \"100%\",\n height: \"100%\",\n },\n midWidth: {\n width: \"70%\",\n float: \"left\",\n height: \"100%\",\n },\n smallWidth: {\n width: \"30%\",\n float: \"right\",\n height: \"100%\",\n borderRadius: \"0px 3px 0px 0px !important\",\n },\n licenseInfo: { color: \"#FFFFFF\", position: \"relative\" },\n licenseInfoTitle: {\n textTransform: \"none\",\n color: \"#BFBFBF\",\n fontSize: 11,\n },\n licenseInfoValue: {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n licenseDescription: {\n background: \"#032F51\",\n padding: \"30px 30px\",\n borderTop: \"1px solid #e2e5e4\",\n borderLeft: \"1px solid #e2e5e4\",\n borderRight: \"1px solid #e2e5e4\",\n bottom: 0,\n left: \"5%\",\n right: \"5%\",\n position: \"absolute\",\n },\n currentPlanBG: {\n background: \"#022A4A 0% 0% no-repeat padding-box\",\n color: \"#FFFFFF\",\n borderTop: \"1px solid #52687d\",\n },\n currentPlanButton: {\n background: \"#FFFFFF\",\n color: \"#022A4A\",\n \"&:hover\": {\n background: \"#FFFFFF\",\n },\n },\n planItemsPadding: {\n padding: \"23px 33px\",\n },\n subnetSubTitle: {\n fontSize: 12,\n },\n verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n loadingLoginStrategy: {\n textAlign: \"center\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ILicenseProps {\n classes: any;\n operatorMode: boolean;\n}\n\nconst License = ({ classes, operatorMode }: ILicenseProps) => {\n const closeModalAndFetchLicenseInfo = () => {\n setActivateProductModal(false);\n fetchLicenseInfo();\n };\n const fetchLicenseInfo = () => {\n setLoadingLicenseInfo(true);\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: LicenseInfo) => {\n if (res) {\n if (res.plan === \"STANDARD\") {\n setCurrentPlanID(1);\n } else if (res.plan === \"ENTERPRISE\") {\n setCurrentPlanID(2);\n } else {\n setCurrentPlanID(1);\n }\n setLicenseInfo(res);\n }\n setLoadingLicenseInfo(false);\n })\n .catch((err: any) => {\n setLoadingLicenseInfo(false);\n });\n };\n const refreshLicense = () => {\n setLoadingRefreshLicense(true);\n api\n .invoke(\"POST\", `/api/v1/subscription/refresh`, {})\n .then((res: LicenseInfo) => {\n if (res) {\n if (res.plan === \"STANDARD\") {\n setCurrentPlanID(1);\n } else if (res.plan === \"ENTERPRISE\") {\n setCurrentPlanID(2);\n } else {\n setCurrentPlanID(1);\n }\n setLicenseInfo(res);\n }\n setLoadingRefreshLicense(false);\n })\n .catch((err: any) => {\n setLoadingRefreshLicense(false);\n });\n };\n\n const [activateProductModal, setActivateProductModal] = useState(\n false\n );\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [currentPlanID, setCurrentPlanID] = useState(0);\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingRefreshLicense, setLoadingRefreshLicense] = useState(\n false\n );\n\n useEffect(() => {\n fetchLicenseInfo();\n }, []);\n\n if (loadingLicenseInfo) {\n return (\n \n \n \n );\n }\n return (\n \n \n \n \n \n \n {licenseInfo ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {licenseInfo.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (licenseInfo.storage_capacity * 1099511627776) // 1 Terabyte = 1099511627776 Bytes\n .toString(10)\n )}\n \n \n Expiry Date\n \n \n \n {licenseInfo.expires_at}\n \n \n \n \n \n Subscription Plan\n \n \n {licenseInfo.plan}\n \n \n Requester\n \n \n {licenseInfo.email}\n \n \n \n \n \n ) : (\n \n \"agpl\"\n \n GNU Affero General Public License\n \n \n
\n Version 3\n \n The GNU Affero General Public License is a free,\n copyleft license for software and other kinds of works,\n specifically designed to ensure cooperation with the\n Community in the case of network server software.\n \n
\n \n
\n )}\n \n \n {licenseInfo ? (\n \n {\" \"}\n \n Login to MinIO SUBNET !\n \n \n It combines a commercial license with a support experience\n unlike any other.\n \n
\n \n Login to SUBNET\n \n {operatorMode && (\n \n {\" \"}\n
\n
\n {\n e.preventDefault();\n refreshLicense();\n }}\n >\n Refresh Licence\n \n {loadingRefreshLicense && (\n \n )}\n
\n )}\n
\n ) : (\n \n \n Choosing between GNU AGPL v3 and Commercial License\n \n \n If you are building proprietary applications, you may want\n to choose the commercial license included as part of the\n Standard and Enterprise subscription plans. Applications\n must otherwise comply with all the GNU AGPLv3 License &\n Trademark obligations. Follow the links below to learn more\n about the compliance policy.\n \n
\n \n Open Source Policy Compliance\n \n
\n
\n \n Trademark Policy\n \n
\n )}\n
\n
\n \n \n \n {operatorMode ? (\n closeModalAndFetchLicenseInfo()}\n />\n ) : null}\n \n \n \n {planDetails.map((details: any) => {\n let currentPlan =\n (!licenseInfo && details.title === \"Community\") ||\n (licenseInfo &&\n licenseInfo.plan.toLowerCase() ===\n details.title.toLowerCase());\n return (\n \n \n {currentPlan ? \"Current Plan\" : \"\\u00A0\"}\n \n \n {details.title}\n \n \n {details.price}\n \n \n {details.capacityMax || \"\"}\n \n \n );\n })}\n \n {planItems.map((item: any) => {\n return (\n \n \n {item.field}\n \n \n \n {item.community === \"N/A\" ? (\n \"\"\n ) : item.community === \"Yes\" ? (\n \n ) : (\n item.community\n )}\n \n {item.communityDetail !== undefined && (\n \n {item.communityDetail}\n \n )}\n
\n \n \n {item.standard === \"N/A\" ? (\n \"\"\n ) : item.standard === \"Yes\" ? (\n \n ) : (\n item.standard\n )}\n \n \n \n \n {item.enterprise === \"N/A\" ? (\n \"\"\n ) : item.enterprise === \"Yes\" ? (\n \n ) : (\n item.enterprise\n )}\n \n \n \n );\n })}\n \n \n {planButtons.map((button: any, index: any) => {\n return (\n \n \n {\n e.preventDefault();\n window.open(button.link, \"_blank\");\n }}\n >\n {currentPlanID !== index && index > 0\n ? button.text2\n : button.text}\n \n \n {operatorMode &&\n button.text === \"Subscribe\" &&\n !(\n licenseInfo &&\n licenseInfo.plan.toLowerCase() ===\n button.plan.toLowerCase()\n ) && (\n \n {\n e.preventDefault();\n setActivateProductModal(true);\n }}\n >\n Activate\n \n \n )}\n \n );\n })}\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default connector(withStyles(styles)(License));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { TraceMessage } from \"./types\";\n\nexport const TRACE_MESSAGE_RECEIVED = \"TRACE_MESSAGE_RECEIVED\";\nexport const TRACE_RESET_MESSAGES = \"TRACE_RESET_MESSAGES\";\n\ninterface TraceMessageReceivedAction {\n type: typeof TRACE_MESSAGE_RECEIVED;\n message: TraceMessage;\n}\n\ninterface TraceResetMessagesAction {\n type: typeof TRACE_RESET_MESSAGES;\n}\n\nexport type TraceActionTypes =\n | TraceMessageReceivedAction\n | TraceResetMessagesAction;\n\nexport function traceMessageReceived(message: TraceMessage) {\n return {\n type: TRACE_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function traceResetMessages() {\n return {\n type: TRACE_RESET_MESSAGES,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// Close codes for websockets defined in RFC 6455\nexport const WSCloseNormalClosure = 1000;\nexport const WSCloseCloseGoingAway = 1001;\nexport const WSCloseAbnormalClosure = 1006;\nexport const WSClosePolicyViolation = 1008;\nexport const WSCloseInternalServerErr = 1011;\n\nexport const wsProtocol = (protocol: string): string => {\n let wsProtocol = \"ws\";\n if (protocol === \"https:\") {\n wsProtocol = \"wss\";\n }\n return wsProtocol;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { traceMessageReceived, traceResetMessages } from \"./actions\";\nimport { TraceMessage } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { niceBytes, timeFromDate } from \"../../../common/utils\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Grid } from \"@material-ui/core\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport moment from \"moment/moment\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logList: {\n background: \"white\",\n height: \"400px\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4px\",\n padding: \"0px\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0px\",\n padding: \"0px\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n sizeItem: {\n width: 150,\n },\n timeItem: {\n width: 100,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ITrace {\n classes: any;\n traceMessageReceived: typeof traceMessageReceived;\n traceResetMessages: typeof traceResetMessages;\n messages: TraceMessage[];\n namespace: string;\n tenant: string;\n}\n\nconst Trace = ({\n classes,\n traceMessageReceived,\n traceResetMessages,\n messages,\n}: ITrace) => {\n useEffect(() => {\n traceResetMessages();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n const c = new W3CWebSocket(`${wsProt}://${url.hostname}:${port}/ws/trace`);\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: TraceMessage = JSON.parse(message.data.toString());\n m.ptime = moment(m.time, \"YYYY-MM-DD HH:mm:s.SSSS +0000 UTC\").toDate();\n m.key = Math.random();\n traceMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n };\n return () => {\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n };\n }\n }, [traceMessageReceived, traceResetMessages]);\n\n return (\n \n \n \n \n {\n const timeParse = new Date(time);\n return timeFromDate(timeParse);\n },\n globalClass: classes.timeItem,\n },\n { label: \"Name\", elementKey: \"api\" },\n {\n label: \"Status\",\n elementKey: \"\",\n renderFunction: (fullElement: TraceMessage) =>\n `${fullElement.statusCode} ${fullElement.statusMsg}`,\n renderFullObject: true,\n },\n {\n label: \"Location\",\n elementKey: \"configuration_id\",\n renderFunction: (fullElement: TraceMessage) =>\n `${fullElement.host} ${fullElement.client}`,\n renderFullObject: true,\n },\n {\n label: \"Load Time\",\n elementKey: \"callStats.duration\",\n globalClass: classes.timeItem,\n },\n {\n label: \"Upload\",\n elementKey: \"callStats.rx\",\n renderFunction: niceBytes,\n globalClass: classes.sizeItem,\n },\n {\n label: \"Download\",\n elementKey: \"callStats.tx\",\n renderFunction: niceBytes,\n globalClass: classes.sizeItem,\n },\n ]}\n isLoading={false}\n records={messages}\n entityName=\"Traces\"\n idField=\"api\"\n customEmptyMessage=\"There are no traced Elements yet\"\n autoScrollToBottom\n />\n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.trace.messages,\n});\n\nconst connector = connect(mapState, {\n traceMessageReceived: traceMessageReceived,\n traceResetMessages: traceResetMessages,\n});\n\nexport default connector(withStyles(styles)(Trace));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { LogMessage } from \"./types\";\n\nexport const LOG_MESSAGE_RECEIVED = \"LOG_MESSAGE_RECEIVED\";\nexport const LOG_RESET_MESSAGES = \"LOG_RESET_MESSAGES\";\n\ninterface LogMessageReceivedAction {\n type: typeof LOG_MESSAGE_RECEIVED;\n message: LogMessage;\n}\n\ninterface LogResetMessagesAction {\n type: typeof LOG_RESET_MESSAGES;\n}\n\nexport type LogActionTypes = LogMessageReceivedAction | LogResetMessagesAction;\n\nexport function logMessageReceived(message: LogMessage) {\n return {\n type: LOG_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function logResetMessages() {\n return {\n type: LOG_RESET_MESSAGES,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { Fragment, useState, useEffect } from \"react\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { connect } from \"react-redux\";\nimport { Grid } from \"@material-ui/core\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport moment from \"moment/moment\";\nimport { AppState } from \"../../../../store\";\nimport { logMessageReceived, logResetMessages } from \"../actions\";\nimport { LogMessage } from \"../types\";\nimport { timeFromDate } from \"../../../../common/utils\";\nimport { wsProtocol } from \"../../../../utils/wsUtils\";\nimport {\n actionsTray,\n logsCommon,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logList: {\n background: \"#fff\",\n minHeight: 400,\n height: \"calc(100vh - 304px)\",\n overflow: \"auto\",\n fontSize: 13,\n padding: \"25px 45px 0\",\n border: \"1px solid #EAEDEE\",\n borderRadius: 4,\n },\n tab: {\n paddingLeft: 25,\n },\n logerror: {\n color: \"#A52A2A\",\n },\n logerror_tab: {\n color: \"#A52A2A\",\n paddingLeft: 25,\n },\n ansidefault: {\n color: \"#000\",\n },\n highlight: {\n \"& span\": {\n backgroundColor: \"#082F5238\",\n },\n },\n ...actionsTray,\n ...searchField,\n ...logsCommon,\n });\n\ninterface ILogs {\n classes: any;\n logMessageReceived: typeof logMessageReceived;\n logResetMessages: typeof logResetMessages;\n messages: LogMessage[];\n}\n\nconst ErrorLogs = ({\n classes,\n logMessageReceived,\n logResetMessages,\n messages,\n}: ILogs) => {\n const [highlight, setHighlight] = useState(\"\");\n\n useEffect(() => {\n logResetMessages();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/console`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n // console.log(message.data.toString())\n // FORMAT: 00:35:17 UTC 01/01/2021\n let m: LogMessage = JSON.parse(message.data.toString());\n m.time = moment(m.time, \"HH:mm:s UTC MM/DD/YYYY\").toDate();\n m.key = Math.random();\n logMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n };\n return () => {\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n };\n }\n }, [logMessageReceived, logResetMessages]);\n\n const renderError = (logElement: LogMessage) => {\n let errorElems = [];\n if (logElement.error !== null && logElement.error !== undefined) {\n if (logElement.api && logElement.api.name) {\n const errorText = `API: ${logElement.api.name}`;\n\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n\n errorElems.push(\n \n
\n {errorText}\n
\n );\n }\n if (logElement.time) {\n const errorText = `Time: ${timeFromDate(logElement.time)}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n
\n );\n }\n if (logElement.deploymentid) {\n const errorText = `DeploymentID: ${logElement.deploymentid}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.requestID) {\n const errorText = `RequestID: ${logElement.requestID}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.remotehost) {\n const errorText = `RemoteHost: ${logElement.remotehost}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.host) {\n const errorText = `Host: ${logElement.host}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.userAgent) {\n const errorText = `UserAgent: ${logElement.userAgent}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.error.message) {\n const errorText = `Error: ${logElement.error.message}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.error.source) {\n // for all sources add padding\n for (let s in logElement.error.source) {\n const errorText = logElement.error.source[s];\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n }\n }\n return errorElems;\n };\n\n const renderLog = (logElement: LogMessage) => {\n let logMessage = logElement.ConsoleMsg;\n // remove any non ascii characters, exclude any control codes\n logMessage = logMessage.replace(/([^\\x20-\\x7F])/g, \"\");\n\n // regex for terminal colors like e.g. `[31;4m `\n const tColorRegex = /((\\[[0-9;]+m))/g;\n\n // get substring if there was a match for to split what\n // is going to be colored and what not, here we add color\n // only to the first match.\n let substr = logMessage.replace(tColorRegex, \"\");\n\n // in case highlight is set, we select the line that contains the requested string\n let highlightedLine =\n highlight !== \"\"\n ? logMessage.toLowerCase().includes(highlight.toLowerCase())\n : false;\n\n // if starts with multiple spaces add padding\n if (substr.startsWith(\" \")) {\n return (\n \n {substr}\n \n );\n } else if (logElement.error !== null && logElement.error !== undefined) {\n // list error message and all sources and error elems\n return renderError(logElement);\n } else {\n // for all remaining set default class\n return (\n \n {substr}\n \n );\n }\n };\n\n const renderLines = messages.map((m) => {\n return renderLog(m);\n });\n\n return (\n \n \n \n {\n setHighlight(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n \n \n
\n
\n \n
{renderLines}
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.logs.messages,\n});\n\nconst connector = connect(mapState, {\n logMessageReceived: logMessageReceived,\n logResetMessages: logResetMessages,\n});\n\nexport default withStyles(styles)(connector(ErrorLogs));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { searchField } from \"../common/styleLibrary\";\n\ninterface IFilterInputWrapper {\n classes: any;\n value: string;\n onChange: (txtVar: string) => any;\n label: string;\n placeholder?: string;\n id: string;\n name: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n height: 30,\n padding: 0,\n \"& input\": {\n padding: \"0 12px\",\n height: 28,\n fontSize: 12,\n fontWeight: 600,\n color: \"#393939\",\n },\n \"&.isDisabled\": {\n \"&:hover\": {\n borderColor: \"#EAEDEE\",\n },\n },\n \"& input.Mui-disabled\": {\n backgroundColor: \"#EAEAEA\",\n },\n },\n labelStyle: {\n color: \"#393939\",\n fontSize: 12,\n marginBottom: 4,\n },\n buttonKit: {\n display: \"flex\",\n alignItems: \"center\",\n },\n toggleButton: {\n marginRight: 10,\n },\n fieldContainer: {\n flexGrow: 1,\n margin: \"0 15px\",\n },\n });\n\nconst FilterInputWrapper = ({\n classes,\n label,\n onChange,\n value,\n placeholder = \"\",\n id,\n name,\n}: IFilterInputWrapper) => {\n return (\n \n
\n
{label}
\n
\n {\n onChange(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n }}\n className={classes.searchField}\n value={value}\n />\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(FilterInputWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport { ArrowDropUp } from \"@material-ui/icons\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport {\n actionsTray,\n containerForHeader,\n logsCommon,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { IReqInfoSearchResults, ISearchResponse } from \"./types\";\nimport { niceBytes, nsToSeconds } from \"../../../../common/utils\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport FilterInputWrapper from \"../../Common/FormComponents/FilterInputWrapper/FilterInputWrapper\";\nimport DateTimePickerWrapper from \"../../Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper\";\n\ninterface ILogSearchProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n inputBar: {\n flexGrow: 1,\n marginLeft: 15,\n },\n advancedLabel: {\n display: \"flex\",\n alignItems: \"center\",\n color: \"#091C42\",\n border: 0,\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n \"&:focus, &:active\": {\n outline: \"none\",\n },\n },\n advancedLabelContainer: {\n marginTop: 10,\n },\n getInformationContainer: {\n textAlign: \"right\",\n },\n orderButton: {\n width: 93,\n },\n recordsLabel: {\n alignSelf: \"center\",\n marginLeft: 15,\n },\n blockCollapsed: {\n height: 0,\n overflowY: \"hidden\",\n transitionDuration: \"0.3s\",\n },\n filterOpen: {\n height: 200,\n marginBottom: 12,\n },\n endLineAction: {\n marginBottom: 15,\n },\n filtersContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: 12,\n },\n innerContainer: {\n backgroundColor: \"#fff\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n padding: 10,\n marginBottom: 15,\n },\n noticeLabel: {\n marginLeft: 15,\n marginBottom: 15,\n fontSize: 12,\n color: \"#9C9C9C\",\n },\n\n tableFOpen: {\n height: \"calc(100vh - 561px)\",\n },\n tableFClosed: {\n height: \"calc(100vh - 349px)\",\n },\n \"@global\": {\n \".overrideMargin\": {\n marginLeft: 0,\n },\n },\n ...searchField,\n ...actionsTray,\n ...logsCommon,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst LogsSearchMain = ({ classes, setErrorSnackMessage }: ILogSearchProps) => {\n const [loading, setLoading] = useState(true);\n const [timeStart, setTimeStart] = useState(null);\n const [timeEnd, setTimeEnd] = useState(null);\n const [filterOpen, setFilterOpen] = useState(false);\n const [records, setRecords] = useState([]);\n const [bucket, setBucket] = useState(\"\");\n const [apiName, setApiName] = useState(\"\");\n const [userAgent, setUserAgent] = useState(\"\");\n const [object, setObject] = useState(\"\");\n const [requestID, setRequestID] = useState(\"\");\n const [responseStatus, setResponseStatus] = useState(\"\");\n const [sortOrder, setSortOrder] = useState<\"ASC\" | \"DESC\" | undefined>(\n \"DESC\"\n );\n const [columnsShown, setColumnsShown] = useState([\n \"time\",\n \"api_name\",\n \"bucket\",\n \"object\",\n \"remote_host\",\n \"request_id\",\n \"user_agent\",\n \"response_status\",\n ]);\n const [nextPage, setNextPage] = useState(0);\n const [alreadyFetching, setAlreadyFetching] = useState(false);\n\n let recordsResp: any = null;\n\n const fetchRecords = useCallback(() => {\n if (!alreadyFetching) {\n setAlreadyFetching(true);\n let queryParams = `${bucket !== \"\" ? `&fp=bucket:${bucket}` : \"\"}${\n object !== \"\" ? `&fp=object:${object}` : \"\"\n }${apiName !== \"\" ? `&fp=api_name:${apiName}` : \"\"}${\n requestID !== \"\" ? `&fp=request_id:${requestID}` : \"\"\n }${userAgent !== \"\" ? `&fp=user_agent:${userAgent}` : \"\"}${\n responseStatus !== \"\" ? `&fp=response_status:${responseStatus}` : \"\"\n }`;\n\n queryParams = queryParams.trim();\n\n if (queryParams.endsWith(\",\")) {\n queryParams = queryParams.slice(0, -1);\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/logs/search?q=reqinfo${\n queryParams !== \"\" ? `${queryParams}` : \"\"\n }&pageSize=100&pageNo=${nextPage}&order=${\n sortOrder === \"DESC\" ? \"timeDesc\" : \"timeAsc\"\n }${\n timeStart !== null ? `&timeStart=${timeStart.toISOString()}` : \"\"\n }${timeEnd !== null ? `&timeEnd=${timeEnd.toISOString()}` : \"\"}`\n )\n .then((res: ISearchResponse) => {\n const fetchedResults = res.results || [];\n const newResultSet = [...records, ...fetchedResults];\n\n setLoading(false);\n setAlreadyFetching(false);\n setRecords(newResultSet);\n setNextPage(nextPage + 1);\n\n if (recordsResp !== null) {\n recordsResp();\n }\n })\n .catch((err: any) => {\n setLoading(false);\n setAlreadyFetching(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n bucket,\n object,\n apiName,\n requestID,\n userAgent,\n responseStatus,\n nextPage,\n sortOrder,\n timeStart,\n timeEnd,\n alreadyFetching,\n records,\n recordsResp,\n setErrorSnackMessage,\n ]);\n\n useEffect(() => {\n if (loading) {\n setRecords([]);\n fetchRecords();\n }\n }, [loading, sortOrder, fetchRecords]);\n\n const triggerLoad = () => {\n setNextPage(0);\n setLoading(true);\n };\n\n const selectColumn = (colName: string, active: boolean) => {\n let newArray = [...columnsShown];\n\n if (!active) {\n newArray = columnsShown.filter((element) => element !== colName);\n } else {\n if (!newArray.includes(colName)) {\n newArray.push(colName);\n }\n }\n setColumnsShown(newArray);\n };\n\n const sortChange = (sortData: any) => {\n const newSortDirection = get(sortData, \"sortDirection\", \"DESC\");\n setSortOrder(newSortDirection);\n setNextPage(0);\n setLoading(true);\n };\n\n const loadMoreRecords = (_: { startIndex: number; stopIndex: number }) => {\n fetchRecords();\n return new Promise((resolve) => {\n recordsResp = resolve;\n });\n };\n\n return (\n \n \n \n Start Time\n \n End Time\n \n \n \n \n
\n
\n Enable your preferred options to get filtered records.\n
\n You can use '*' to match any character, '.' to signify a single\n character or '\\' to scape an special character (E.g. mybucket-*)\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n
\n \n
\n {\n setFilterOpen(!filterOpen);\n }}\n >\n Advanced Filters{\" \"}\n {filterOpen ? : }\n \n
\n \n Get Information\n \n \n \n (\n \n \n {element.response_status_code} ({element.response_status})\n \n \n ),\n renderFullObject: true,\n },\n {\n label: \"Request Content Length\",\n elementKey: \"request_content_length\",\n renderFunction: niceBytes,\n },\n {\n label: \"Response Content Length\",\n elementKey: \"response_content_length\",\n renderFunction: niceBytes,\n },\n {\n label: \"Time to Response NS\",\n elementKey: \"time_to_response_ns\",\n renderFunction: nsToSeconds,\n contentTextAlign: \"right\",\n },\n ]}\n isLoading={loading}\n records={records}\n entityName=\"Logs\"\n customEmptyMessage={\"There is no information with this criteria\"}\n idField=\"request_id\"\n columnsSelector\n columnsShown={columnsShown}\n onColumnChange={selectColumn}\n customPaperHeight={\n filterOpen ? classes.tableFOpen : classes.tableFClosed\n }\n sortConfig={{\n currentSort: \"time\",\n currentDirection: sortOrder,\n triggerSort: sortChange,\n }}\n infiniteScrollConfig={{\n recordsCount: 1000000,\n loadMoreRecords: loadMoreRecords,\n }}\n textSelectable\n />\n \n \n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(LogsSearchMain));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect } from \"react\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport ErrorLogs from \"./ErrorLogs/ErrorLogs\";\nimport LogsSearchMain from \"./LogSearch/LogsSearchMain\";\nimport api from \"../../../common/api\";\n\ninterface ILogsMainProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst LogsMain = ({ classes }: ILogsMainProps) => {\n const [currentTab, setCurrentTab] = useState(0);\n const [loading, setLoading] = useState(true);\n const [showLogSearch, setShowLogSearch] = useState(false);\n\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/logs/search?q=reqinfo&pageSize=10&pageNo=0`)\n .then(() => {\n setShowLogSearch(true);\n setLoading(false);\n })\n .catch((err: any) => {\n setLoading(false);\n console.info(\"Log Search API not available.\");\n });\n }, [loading]);\n\n return (\n \n \n \n \n {!loading ? (\n \n \n All Logs\n \n , newValue: number) => {\n setCurrentTab(newValue);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n >\n \n {showLogSearch && }\n \n \n {currentTab === 0 && (\n \n \n \n )}\n {currentTab === 1 && showLogSearch && (\n \n \n \n )}\n \n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default withStyles(styles)(LogsMain);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { HorizontalBar } from \"react-chartjs-2\";\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Grid, TextField, InputBase } from \"@material-ui/core\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport api from \"../../../common/api\";\nimport { FormControl, MenuItem, Select } from \"@material-ui/core\";\nimport { BucketList, Bucket } from \"../Watch/types\";\nimport { HealStatus, colorH } from \"./types\";\nimport { niceBytes } from \"../../../common/utils\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport CheckboxWrapper from \"../Common/FormComponents/CheckboxWrapper/CheckboxWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n watchList: {\n background: \"white\",\n maxHeight: \"400\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4\",\n padding: \"0\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0\",\n padding: \"0\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n graphContainer: {\n backgroundColor: \"#fff\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n padding: \"19px 38px\",\n },\n scanInfo: {\n marginTop: 20,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n scanData: {\n fontSize: 13,\n },\n inlineCheckboxes: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IHeal {\n classes: any;\n}\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n width: 450,\n lineHeight: \"50px\",\n marginRight: 15,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n \"& .MuiSelect-select:focus\": {\n backgroundColor: \"transparent\",\n },\n },\n input: {\n height: 50,\n fontSize: 13,\n lineHeight: \"50px\",\n width: 450,\n },\n })\n)(InputBase);\n\nconst Heal = ({ classes }: IHeal) => {\n const [start, setStart] = useState(false);\n const [bucketName, setBucketName] = useState(\"\");\n const [bucketList, setBucketList] = useState([]);\n const [prefix, setPrefix] = useState(\"\");\n const [recursive, setRecursive] = useState(false);\n const [forceStart, setForceStart] = useState(false);\n const [forceStop, setForceStop] = useState(false);\n // healStatus states\n const [hStatus, setHStatus] = useState({\n beforeHeal: [0, 0, 0, 0],\n afterHeal: [0, 0, 0, 0],\n objectsHealed: 0,\n objectsScanned: 0,\n healDuration: 0,\n sizeScanned: \"\",\n });\n\n const fetchBucketList = () => {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n let buckets: Bucket[] = [];\n if (res.buckets !== null) {\n buckets = res.buckets;\n }\n setBucketList(buckets);\n })\n .catch((err: any) => {\n console.log(err);\n });\n };\n\n useEffect(() => {\n fetchBucketList();\n }, []);\n\n // forceStart and forceStop need to be mutually exclusive\n useEffect(() => {\n if (forceStart === true) {\n setForceStop(false);\n }\n }, [forceStart]);\n\n useEffect(() => {\n if (forceStop === true) {\n setForceStart(false);\n }\n }, [forceStop]);\n\n const colorHealthArr = (color: colorH) => {\n return [color.Green, color.Yellow, color.Red, color.Grey];\n };\n\n useEffect(() => {\n // begin watch if bucketName in bucketList and start pressed\n if (start) {\n // values stored here to update chart\n const cB: colorH = { Green: 0, Yellow: 0, Red: 0, Grey: 0 };\n const cA: colorH = { Green: 0, Yellow: 0, Red: 0, Grey: 0 };\n\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/heal/${bucketName}?prefix=${prefix}&recursive=${recursive}&force-start=${forceStart}&force-stop=${forceStop}`\n );\n\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: HealStatus = JSON.parse(message.data.toString());\n // Store percentage per health color\n for (const [key, value] of Object.entries(m.healthAfterCols)) {\n cA[key] = (value * 100) / m.itemsScanned;\n }\n for (const [key, value] of Object.entries(m.healthBeforeCols)) {\n cB[key] = (value * 100) / m.itemsScanned;\n }\n setHStatus({\n beforeHeal: colorHealthArr(cB),\n afterHeal: colorHealthArr(cA),\n objectsHealed: m.objectsHealed,\n objectsScanned: m.objectsScanned,\n healDuration: m.healDuration,\n sizeScanned: niceBytes(m.bytesScanned.toString()),\n });\n };\n c.onclose = () => {\n setStart(false);\n console.log(\"connection closed by server\");\n };\n return () => {\n // close websocket on useEffect cleanup\n c.close(1000);\n console.log(\"closing websockets\");\n };\n }\n }\n }, [start, bucketName, forceStart, forceStop, prefix, recursive]);\n\n let data = {\n labels: [\"Green\", \"Yellow\", \"Red\", \"Grey\"],\n datasets: [\n {\n label: \"After Healing\",\n data: hStatus.afterHeal,\n backgroundColor: \"rgba(0, 0, 255, 0.2)\",\n borderColor: \"rgba(54, 162, 235, 1)\",\n borderWidth: 1,\n },\n {\n label: \"Before Healing\",\n data: hStatus.beforeHeal,\n backgroundColor: \"rgba(153, 102, 255, 0.2)\",\n borderColor: \"rgba(153, 102, 255, 1)\",\n borderWidth: 1,\n },\n ],\n };\n const bucketNames = bucketList.map((bucketName) => ({\n label: bucketName.name,\n value: bucketName.name,\n }));\n return (\n \n \n \n \n \n \n {\n setBucketName(e.target.value as string);\n }}\n className={classes.searchField}\n input={}\n displayEmpty\n >\n \n Select Bucket\n \n {bucketNames.map((option) => (\n \n {option.label}\n \n ))}\n \n \n {\n setPrefix(e.target.value);\n }}\n />\n setStart(true)}\n >\n Start\n \n \n \n {\n setRecursive(e.target.checked);\n }}\n disabled={false}\n label=\"Recursive\"\n />\n {\n setForceStart(e.target.checked);\n }}\n disabled={false}\n label=\"Force Start\"\n />\n {\n setForceStop(e.target.checked);\n }}\n disabled={false}\n label=\"Force Stop\"\n />\n \n \n
\n
\n \n \n \n
\n Size scanned: {hStatus.sizeScanned}\n
\n
\n Objects healed: {hStatus.objectsHealed} /{\" \"}\n {hStatus.objectsScanned}\n
\n
\n Healing time: {hStatus.healDuration}s\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(Heal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { EventInfo } from \"./types\";\n\nexport const WATCH_MESSAGE_RECEIVED = \"WATCH_MESSAGE_RECEIVED\";\nexport const WATCH_RESET_MESSAGES = \"WATCH_RESET_MESSAGES\";\n\ninterface WatchMessageReceivedAction {\n type: typeof WATCH_MESSAGE_RECEIVED;\n message: EventInfo;\n}\n\ninterface WatchResetMessagesAction {\n type: typeof WATCH_RESET_MESSAGES;\n}\n\nexport type WatchActionTypes =\n | WatchMessageReceivedAction\n | WatchResetMessagesAction;\n\nexport function watchMessageReceived(message: EventInfo) {\n return {\n type: WATCH_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function watchResetMessages() {\n return {\n type: WATCH_RESET_MESSAGES,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Grid, TextField, InputBase } from \"@material-ui/core\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { watchMessageReceived, watchResetMessages } from \"./actions\";\nimport { EventInfo, BucketList, Bucket } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { niceBytes, timeFromDate } from \"../../../common/utils\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport api from \"../../../common/api\";\nimport { FormControl, MenuItem, Select } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n watchList: {\n background: \"white\",\n height: \"400px\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4px\",\n padding: \"0px\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0px\",\n padding: \"0px\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n searchPrefix: {\n flexGrow: 1,\n marginLeft: 15,\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n width: 450,\n lineHeight: \"50px\",\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n \"& .MuiSelect-select:focus\": {\n backgroundColor: \"transparent\",\n },\n },\n input: {\n height: 50,\n fontSize: 13,\n lineHeight: \"50px\",\n width: 450,\n },\n })\n)(InputBase);\n\ninterface IWatch {\n classes: any;\n watchMessageReceived: typeof watchMessageReceived;\n watchResetMessages: typeof watchResetMessages;\n messages: EventInfo[];\n}\n\nconst Watch = ({\n classes,\n watchMessageReceived,\n watchResetMessages,\n messages,\n}: IWatch) => {\n const [start, setStart] = useState(false);\n const [bucketName, setBucketName] = useState(\"Select Bucket\");\n const [prefix, setPrefix] = useState(\"\");\n const [suffix, setSuffix] = useState(\"\");\n const [bucketList, setBucketList] = useState([]);\n\n const fetchBucketList = () => {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n let buckets: Bucket[] = [];\n if (res.buckets !== null) {\n buckets = res.buckets;\n }\n setBucketList(buckets);\n })\n .catch((err: any) => {\n console.log(err);\n });\n };\n useEffect(() => {\n fetchBucketList();\n }, []);\n\n useEffect(() => {\n watchResetMessages();\n // begin watch if bucketName in bucketList and start pressed\n if (start && bucketList.some((bucket) => bucket.name === bucketName)) {\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/watch/${bucketName}?prefix=${prefix}&suffix=${suffix}`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: EventInfo = JSON.parse(message.data.toString());\n m.Time = new Date(m.Time.toString());\n m.key = Math.random();\n watchMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n // reset start status\n setStart(false);\n };\n return () => {\n // close websocket on useEffect cleanup\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n };\n }\n } else {\n // reset start status\n setStart(false);\n }\n }, [\n watchMessageReceived,\n start,\n bucketList,\n bucketName,\n prefix,\n suffix,\n watchResetMessages,\n ]);\n\n const bucketNames = bucketList.map((bucketName) => ({\n label: bucketName.name,\n value: bucketName.name,\n }));\n\n return (\n \n \n \n \n \n \n {\n setBucketName(e.target.value as string);\n }}\n className={classes.searchField}\n disabled={start}\n input={}\n >\n \n Select Bucket\n \n {bucketNames.map((option) => (\n \n {option.label}\n \n ))}\n \n \n {\n setPrefix(e.target.value);\n }}\n />\n {\n setSuffix(e.target.value);\n }}\n />\n setStart(true)}\n >\n Start\n \n \n \n
\n
\n \n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.watch.messages,\n});\n\nconst connector = connect(mapState, {\n watchMessageReceived: watchMessageReceived,\n watchResetMessages: watchResetMessages,\n});\n\nexport default connector(withStyles(styles)(Watch));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { HealthInfoMessage } from \"./types\";\n\nexport const HEALTH_INFO_MESSAGE_RECEIVED = \"HEALTH_INFO_MESSAGE_RECEIVED\";\nexport const HEALTH_INFO_RESET_MESSAGE = \"HEALTH_INFO_RESET_MESSAGE\";\n\ninterface HealthInfoMessageReceivedAction {\n type: typeof HEALTH_INFO_MESSAGE_RECEIVED;\n message: HealthInfoMessage;\n}\n\ninterface HealthInfoResetMessagesAction {\n type: typeof HEALTH_INFO_RESET_MESSAGE;\n}\n\nexport type HealthInfoActionTypes =\n | HealthInfoMessageReceivedAction\n | HealthInfoResetMessagesAction;\n\nexport function healthInfoMessageReceived(message: HealthInfoMessage) {\n return {\n type: HEALTH_INFO_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function healthInfoResetMessage() {\n return {\n type: HEALTH_INFO_RESET_MESSAGE,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const DiagStatError = \"error\";\nexport const DiagStatSuccess = \"success\";\nexport const DiagStatInProgress = \"inProgress\";\nexport interface HealthInfoMessage {\n timestamp: Date;\n error: string;\n perf: perfInfo;\n minio: minioHealthInfo;\n sys: sysHealthInfo;\n}\n\nexport interface perfInfo {\n drives: serverDrivesInfo[];\n net: serverNetHealthInfo[];\n net_parallel: serverNetHealthInfo;\n error: string;\n}\n\nexport interface serverDrivesInfo {\n addr: string;\n serial: drivePerfInfo[];\n parallel: drivePerfInfo[];\n error: string;\n}\n\nexport interface drivePerfInfo {\n endpoint: string;\n latency: diskLatency;\n throughput: diskThroughput;\n error: string;\n}\nexport interface diskLatency {\n avg_secs: number;\n percentile50_secs: number;\n percentile90_secs: number;\n percentile99_secs: number;\n min_secs: number;\n max_secs: number;\n}\n\nexport interface diskThroughput {\n avg_bytes_per_sec: number;\n percentile50_bytes_per_sec: number;\n percentile90_bytes_per_sec: number;\n percentile99_bytes_per_sec: number;\n min_bytes_per_sec: number;\n max_bytes_per_sec: number;\n}\n\nexport interface serverNetHealthInfo {\n addr: string;\n net: netPerfInfo[];\n error: string;\n}\n\nexport interface netPerfInfo {\n remote: string;\n latency: netLatency;\n throughput: netThroughput;\n error: string;\n}\n\nexport interface netLatency {\n avg_secs: number;\n percentile50_secs: number;\n percentile90_secs: number;\n percentile99_secs: number;\n min_secs: number;\n max_secs: number;\n}\nexport interface netThroughput {\n avg_bytes_per_sec: number;\n percentile50_bytes_per_sec: number;\n percentile90_bytes_per_sec: number;\n percentile99_bytes_per_sec: number;\n min_bytes_per_sec: number;\n max_bytes_per_sec: number;\n}\n\nexport interface minioHealthInfo {\n info: infoMessage;\n config: any;\n error: string;\n}\n\nexport interface infoMessage {\n mode: string;\n domain: string[];\n region: string;\n sqsARN: string[];\n deploymentID: string;\n buckets: buckets;\n objects: objects;\n usage: usage;\n services: services;\n backend: any;\n servers: serverProperties[];\n}\n\nexport interface buckets {\n count: number;\n}\n\nexport interface objects {\n count: number;\n}\n\nexport interface usage {\n size: number;\n}\n\nexport interface services {\n vault: vault;\n ldap: ldap;\n logger: Map[];\n audit: Map[];\n notifications: Map[]>;\n}\n\nexport interface vault {\n status: string;\n encrypt: string;\n decrypt: string;\n}\n\nexport interface ldap {\n status: string;\n}\n\nexport interface status {\n status: string;\n}\n\nexport interface serverProperties {\n state: string;\n endpoint: string;\n uptime: number;\n version: string;\n commitID: string;\n network: Map;\n drives: disk[];\n}\n\nexport interface disk {\n endpoint: string;\n rootDisk: boolean;\n path: string;\n healing: boolean;\n state: string;\n uuid: string;\n model: string;\n totalspace: number;\n usedspace: number;\n availspace: number;\n readthroughput: number;\n writethroughput: number;\n readlatency: number;\n writelatency: number;\n utilization: number;\n}\n\nexport interface sysHealthInfo {\n cpus: serverCpuInfo[];\n drives: serverDiskHwInfo[];\n osinfos: serverOsInfo[];\n meminfos: serverMemInfo[];\n procinfos: serverProcInfo[];\n error: string;\n}\n\nexport interface serverCpuInfo {\n addr: string;\n cpu: cpuInfoStat[];\n time: cpuTimeStat[];\n error: string;\n}\n\nexport interface cpuInfoStat {\n cpu: number;\n vendorId: string;\n family: string;\n model: string;\n stepping: number;\n physicalId: string;\n coreId: string;\n cores: number;\n modelName: string;\n mhz: number;\n cacheSize: number;\n flags: string[];\n microcode: string;\n}\n\nexport interface cpuTimeStat {\n cpu: string;\n user: number;\n system: number;\n idle: number;\n nice: number;\n iowait: number;\n irq: number;\n softirq: number;\n steal: number;\n guest: number;\n guestNice: number;\n}\n\nexport interface serverDiskHwInfo {\n addr: string;\n usages: diskUsageStat[];\n partitions: partitionStat[];\n counters: Map;\n error: string;\n}\n\nexport interface diskUsageStat {\n path: string;\n fstype: string;\n total: number;\n free: number;\n used: number;\n usedPercent: number;\n inodesTotal: number;\n inodesUsed: number;\n inodesFree: number;\n inodesUsedPercent: number;\n}\n\nexport interface partitionStat {\n device: string;\n mountpoint: string;\n fstype: string;\n opts: string;\n smartInfo: smartInfo;\n}\n\nexport interface smartInfo {\n device: string;\n scsi: scsiInfo;\n nvme: nvmeInfo;\n ata: ataInfo;\n error: string;\n}\n\nexport interface scsiInfo {\n scsiCapacityBytes: number;\n scsiModeSenseBuf: string;\n scsirespLen: number;\n scsiBdLen: number;\n scsiOffset: number;\n sciRpm: number;\n}\n\nexport interface nvmeInfo {\n serialNum: string;\n vendorId: string;\n firmwareVersion: string;\n modelNum: string;\n spareAvailable: string;\n spareThreshold: string;\n temperature: string;\n criticalWarning: string;\n maxDataTransferPages: number;\n controllerBusyTime: number;\n powerOnHours: number;\n powerCycles: number;\n unsafeShutdowns: number;\n mediaAndDataIntgerityErrors: number;\n dataUnitsReadBytes: number;\n dataUnitsWrittenBytes: number;\n hostReadCommands: number;\n hostWriteCommands: number;\n}\n\nexport interface ataInfo {\n scsiLuWWNDeviceID: string;\n serialNum: string;\n modelNum: string;\n firmwareRevision: string;\n RotationRate: string;\n MajorVersion: string;\n MinorVersion: string;\n smartSupportAvailable: boolean;\n smartSupportEnabled: boolean;\n smartErrorLog: string;\n transport: string;\n}\n\nexport interface diskIOCountersStat {\n readCount: number;\n mergedReadCount: number;\n DriteCount: number;\n mergedWriteCount: number;\n readBytes: number;\n writeBytes: number;\n readTime: number;\n writeTime: number;\n iopsInProgress: number;\n ioTime: number;\n weightedIO: number;\n name: string;\n serialNumber: string;\n label: string;\n}\n\nexport interface serverOsInfo {\n addr: string;\n info: infoStat;\n sensors: temperatureStat[];\n users: userStat[];\n error: string;\n}\n\nexport interface infoStat {\n hostname: string;\n uptime: number;\n bootTime: number;\n procs: number;\n os: string;\n platform: string;\n platformFamily: string;\n platformVersion: string;\n kernelVersion: string;\n kernelArch: string;\n virtualizationSystem: string;\n virtualizationRole: string;\n hostid: string;\n}\n\nexport interface temperatureStat {\n sensorKey: string;\n sensorTemperature: number;\n}\n\nexport interface userStat {\n user: string;\n terminal: string;\n host: string;\n started: number;\n}\n\nexport interface serverMemInfo {\n addr: string;\n swap: swapMemoryStat;\n virtualmem: virtualMemoryStat;\n error: string;\n}\n\nexport interface swapMemoryStat {\n total: number;\n used: number;\n free: number;\n usedPercent: number;\n sin: number;\n sout: number;\n pgin: number;\n pgout: number;\n pgfault: number;\n pgmajfault: number;\n}\n\nexport interface virtualMemoryStat {\n total: number;\n available: number;\n used: number;\n usedPercent: number;\n free: number;\n active: number;\n inactive: number;\n wired: number;\n laundry: number;\n buffers: number;\n cached: number;\n writeback: number;\n dirty: number;\n writebacktmp: number;\n shared: number;\n slab: number;\n sreclaimable: number;\n sunreclaim: number;\n pagetables: number;\n swapcached: number;\n commitlimit: number;\n committedas: number;\n hightotal: number;\n highfree: number;\n lowtotal: number;\n lowfree: number;\n swaptotal: number;\n swapfree: number;\n mapped: number;\n vmalloctotal: number;\n vmallocused: number;\n vmallocchunk: number;\n hugepagestotal: number;\n hugepagesfree: number;\n hugepagesize: number;\n}\n\nexport interface serverProcInfo {\n addr: string;\n processes: sysProcess[];\n error: string;\n}\n\nexport interface sysProcess {\n pid: number;\n background: boolean;\n cpupercent: number;\n children: number[];\n cmd: string;\n connections: nethwConnectionStat[];\n createtime: number;\n cwd: string;\n exe: string;\n gids: number[];\n iocounters: processIOCountersStat;\n isrunning: boolean;\n meminfo: memoryInfoStat;\n memmaps: any[];\n mempercent: number;\n name: string;\n netiocounters: nethwIOCounterStat[];\n nice: number;\n numctxswitches: processNmCtxSwitchesStat;\n numfds: number;\n numthreads: number;\n pagefaults: processPageFaultsStat;\n parent: number;\n ppid: number;\n rlimit: processRLimitStat[];\n status: string;\n tgid: number;\n cputimes: cpuTimeStat;\n uids: number[];\n username: string;\n}\n\nexport interface nethwConnectionStat {\n fd: number;\n family: number;\n type: number;\n localaddr: netAddr;\n remoteaddr: netAddr;\n status: string;\n uids: number[];\n pid: number;\n}\n\nexport interface netAddr {\n ip: string;\n port: number;\n}\n\nexport interface processIOCountersStat {\n readCount: number;\n writeCount: number;\n readBytes: number;\n writeBytes: number;\n}\n\nexport interface memoryInfoStat {\n rss: number;\n vms: number;\n hwm: number;\n data: number;\n stack: number;\n locked: number;\n swap: number;\n}\n\nexport interface nethwIOCounterStat {\n name: string;\n bytesSent: number;\n bytesRecv: number;\n packetsSent: number;\n packetsRecv: number;\n errin: number;\n errout: number;\n dropin: number;\n dropout: number;\n fifoin: number;\n fifoout: number;\n}\n\nexport interface processNmCtxSwitchesStat {\n voluntary: number;\n involuntary: number;\n}\n\nexport interface processPageFaultsStat {\n minorFaults: number;\n majorFaults: number;\n childMinorFaults: number;\n childMajorFaults: number;\n}\n\nexport interface processRLimitStat {\n resource: number;\n soft: number;\n hard: number;\n used: number;\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useState, useEffect } from \"react\";\nimport {\n IMessageEvent,\n w3cwebsocket as W3CWebSocket,\n ICloseEvent,\n} from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { healthInfoMessageReceived, healthInfoResetMessage } from \"./actions\";\nimport {\n HealthInfoMessage,\n DiagStatInProgress,\n DiagStatSuccess,\n DiagStatError,\n} from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n wsProtocol,\n WSCloseInternalServerErr,\n WSClosePolicyViolation,\n WSCloseAbnormalClosure,\n} from \"../../../utils/wsUtils\";\nimport {\n actionsTray,\n containerForHeader,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { Grid, Button } from \"@material-ui/core\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { setSnackBarMessage, setServerDiagStat } from \"../../../actions\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logList: {\n background: \"#fff\",\n minHeight: 400,\n height: \"calc(100vh - 270px)\",\n overflow: \"auto\",\n fontSize: 13,\n padding: \"25px 45px\",\n border: \"1px solid #EAEDEE\",\n borderRadius: 4,\n },\n loading: {\n paddingTop: 8,\n paddingLeft: 40,\n },\n buttons: {\n justifyContent: \"flex-start\",\n gap: 20,\n },\n ...actionsTray,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n};\n\ninterface IHealthInfo {\n classes: any;\n healthInfoMessageReceived: typeof healthInfoMessageReceived;\n healthInfoResetMessage: typeof healthInfoResetMessage;\n message: HealthInfoMessage;\n namespace: string;\n tenant: string;\n setSnackBarMessage: typeof setSnackBarMessage;\n setServerDiagStat: typeof setServerDiagStat;\n serverDiagnosticStatus: string;\n}\n\nconst HealthInfo = ({\n classes,\n healthInfoMessageReceived,\n healthInfoResetMessage,\n message,\n setSnackBarMessage,\n setServerDiagStat,\n serverDiagnosticStatus,\n}: IHealthInfo) => {\n const [startDiagnostic, setStartDiagnostic] = useState(false);\n const [downloadDisabled, setDownloadDisabled] = useState(true);\n\n useEffect(() => {\n if (\n serverDiagnosticStatus === DiagStatSuccess &&\n message !== ({} as HealthInfoMessage)\n ) {\n // Allow download of diagnostics file only when\n // it succeded fetching all the results and info is not empty.\n setDownloadDisabled(false);\n }\n if (serverDiagnosticStatus === DiagStatInProgress) {\n // Disable Start Diagnotic and Disable Download buttons\n // if a Diagnosis is in progress.\n setDownloadDisabled(true);\n }\n setStartDiagnostic(false);\n }, [serverDiagnosticStatus, message]);\n\n useEffect(() => {\n if (startDiagnostic) {\n healthInfoResetMessage();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/health-info?deadline=1h`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n setSnackBarMessage(\n \"Diagnostic started. Please do not refresh page during diagnosis.\"\n );\n setServerDiagStat(DiagStatInProgress);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: HealthInfoMessage = JSON.parse(message.data.toString());\n m.timestamp = new Date(m.timestamp.toString());\n healthInfoMessageReceived(m);\n };\n c.onerror = (error: Error) => {\n console.log(\"error closing websocket:\", error.message);\n c.close(1000);\n clearInterval(interval);\n setServerDiagStat(DiagStatError);\n };\n c.onclose = (event: ICloseEvent) => {\n clearInterval(interval);\n if (\n event.code === WSCloseInternalServerErr ||\n event.code === WSClosePolicyViolation ||\n event.code === WSCloseAbnormalClosure\n ) {\n // handle close with error\n console.log(\"connection closed by server with code:\", event.code);\n setSnackBarMessage(\n \"An error occurred while getting Diagnostic file.\"\n );\n setServerDiagStat(DiagStatError);\n } else {\n console.log(\"connection closed by server\");\n setSnackBarMessage(\"Diagnostic file is ready to be downloaded.\");\n setServerDiagStat(DiagStatSuccess);\n }\n };\n }\n } else {\n // reset start status\n setStartDiagnostic(false);\n }\n }, [\n healthInfoMessageReceived,\n healthInfoResetMessage,\n startDiagnostic,\n setSnackBarMessage,\n setServerDiagStat,\n ]);\n\n return (\n \n \n\n \n \n \n \n setStartDiagnostic(true)}\n >\n Start Diagnostic\n \n \n \n {serverDiagnosticStatus === DiagStatInProgress ? (\n
\n \n
\n ) : (\n {\n download(\n \"diagnostic.json\",\n JSON.stringify(message, null, 2)\n );\n }}\n disabled={downloadDisabled}\n >\n Download\n \n )}\n
\n
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n message: state.healthInfo.message,\n serverDiagnosticStatus: state.system.serverDiagnosticStatus,\n});\n\nconst connector = connect(mapState, {\n healthInfoMessageReceived: healthInfoMessageReceived,\n healthInfoResetMessage: healthInfoResetMessage,\n setSnackBarMessage,\n setServerDiagStat,\n});\n\nexport default connector(withStyles(styles)(HealthInfo));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport Container from \"@material-ui/core/Container\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport history from \"../../history\";\nimport { Redirect, Route, Router, Switch } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../store\";\nimport {\n serverIsLoading,\n serverNeedsRestart,\n setMenuOpen,\n setSnackBarMessage,\n} from \"../../actions\";\nimport { ISessionResponse } from \"./types\";\nimport { snackBarMessage } from \"../../types\";\nimport { snackBarCommon } from \"./Common/FormComponents/common/styleLibrary\";\nimport Buckets from \"./Buckets/Buckets\";\nimport Policies from \"./Policies/Policies\";\nimport Dashboard from \"./Dashboard/Dashboard\";\nimport Menu from \"./Menu/Menu\";\nimport api from \"../../common/api\";\nimport Account from \"./Account/Account\";\nimport Users from \"./Users/Users\";\nimport Groups from \"./Groups/Groups\";\nimport ConfigurationMain from \"./Configurations/ConfigurationMain\";\nimport WebhookPanel from \"./Configurations/ConfigurationPanels/WebhookPanel\";\nimport TenantsMain from \"./Tenants/TenantsMain\";\nimport TenantDetails from \"./Tenants/TenantDetails/TenantDetails\";\nimport ObjectBrowser from \"./ObjectBrowser/ObjectBrowser\";\nimport ObjectRouting from \"./Buckets/ListBuckets/Objects/ListObjects/ObjectRouting\";\nimport License from \"./License/License\";\nimport Trace from \"./Trace/Trace\";\nimport LogsMain from \"./Logs/LogsMain\";\nimport Heal from \"./Heal/Heal\";\nimport Watch from \"./Watch/Watch\";\nimport HealthInfo from \"./HealthInfo/HealthInfo\";\n\nconst drawerWidth = 245;\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n \"& .MuiPaper-root.MuiSnackbarContent-root\": {\n borderRadius: \"0px 0px 5px 5px\",\n boxShadow: \"none\",\n },\n },\n toolbar: {\n background: theme.palette.background.default,\n color: \"black\",\n paddingRight: 24, // keep right padding when drawer closed\n },\n toolbarIcon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: \"0 8px\",\n ...theme.mixins.toolbar,\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: 36,\n },\n menuButtonHidden: {\n display: \"none\",\n },\n title: {\n flexGrow: 1,\n },\n drawerPaper: {\n position: \"relative\",\n whiteSpace: \"nowrap\",\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: \"hidden\",\n background:\n \"transparent linear-gradient(90deg, #073052 0%, #081C42 100%) 0% 0% no-repeat padding-box\",\n boxShadow: \"0px 3px 7px #00000014\",\n },\n drawerPaperClose: {\n overflowX: \"hidden\",\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n width: theme.spacing(7),\n [theme.breakpoints.up(\"sm\")]: {\n width: theme.spacing(9),\n },\n },\n content: {\n flexGrow: 1,\n height: \"100vh\",\n overflow: \"auto\",\n position: \"relative\",\n },\n container: {\n paddingBottom: theme.spacing(4),\n margin: 0,\n width: \"100%\",\n maxWidth: \"initial\",\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n fixedHeight: {\n minHeight: 240,\n },\n warningBar: {\n background: theme.palette.primary.main,\n color: \"white\",\n heigh: \"60px\",\n widht: \"100%\",\n lineHeight: \"60px\",\n textAlign: \"center\",\n },\n progress: {\n height: \"3px\",\n backgroundColor: \"#eaeaea\",\n },\n ...snackBarCommon,\n });\n\ninterface IConsoleProps {\n open: boolean;\n needsRestart: boolean;\n isServerLoading: boolean;\n title: string;\n classes: any;\n setMenuOpen: typeof setMenuOpen;\n serverNeedsRestart: typeof serverNeedsRestart;\n serverIsLoading: typeof serverIsLoading;\n session: ISessionResponse;\n loadingProgress: number;\n snackBarMessage: snackBarMessage;\n setSnackBarMessage: typeof setSnackBarMessage;\n}\n\nconst Console = ({\n classes,\n open,\n needsRestart,\n isServerLoading,\n serverNeedsRestart,\n serverIsLoading,\n session,\n loadingProgress,\n snackBarMessage,\n setSnackBarMessage,\n}: IConsoleProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const restartServer = () => {\n serverIsLoading(true);\n api\n .invoke(\"POST\", \"/api/v1/service/restart\", {})\n .then((res) => {\n console.log(\"success restarting service\");\n console.log(res);\n serverIsLoading(false);\n serverNeedsRestart(false);\n })\n .catch((err) => {\n serverIsLoading(false);\n console.log(\"failure restarting service\");\n console.log(err);\n });\n };\n\n const allowedPages = session.pages.reduce(\n (result: any, item: any, index: any) => {\n result[item] = true;\n return result;\n },\n {}\n );\n const routes = [\n {\n component: Dashboard,\n path: \"/dashboard\",\n },\n {\n component: Buckets,\n path: \"/buckets\",\n },\n {\n component: Buckets,\n path: \"/buckets/:bucketName\",\n },\n {\n component: ObjectBrowser,\n path: \"/object-browser\",\n },\n {\n component: ObjectRouting,\n path: \"/object-browser/:bucket\",\n },\n {\n component: ObjectRouting,\n path: \"/object-browser/:bucket/*\",\n },\n {\n component: Watch,\n path: \"/watch\",\n },\n {\n component: Users,\n path: \"/users\",\n },\n {\n component: Groups,\n path: \"/groups\",\n },\n {\n component: Policies,\n path: \"/policies\",\n },\n {\n component: Heal,\n path: \"/heal\",\n },\n {\n component: Trace,\n path: \"/trace\",\n },\n {\n component: LogsMain,\n path: \"/logs\",\n },\n {\n component: HealthInfo,\n path: \"/health-info\",\n },\n {\n component: ConfigurationMain,\n path: \"/settings\",\n },\n {\n component: Account,\n path: \"/account\",\n props: {\n changePassword: session.pages.includes(\"/account/change-password\"),\n },\n },\n {\n component: WebhookPanel,\n path: \"/webhook/logger\",\n },\n {\n component: WebhookPanel,\n path: \"/webhook/audit\",\n },\n {\n component: TenantsMain,\n path: \"/tenants\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName\",\n },\n {\n component: License,\n path: \"/license\",\n },\n ];\n const allowedRoutes = routes.filter((route: any) => allowedPages[route.path]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setSnackBarMessage(\"\");\n };\n\n useEffect(() => {\n if (snackBarMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n setOpenSnackbar(true);\n }, [snackBarMessage]);\n\n return (\n \n {session.status === \"ok\" ? (\n
\n \n \n \n \n\n
\n {needsRestart && (\n
\n {isServerLoading ? (\n \n The server is restarting.\n \n \n ) : (\n \n The instance needs to be restarted for configuration changes\n to take effect.{\" \"}\n {\n restartServer();\n }}\n >\n Restart\n \n \n )}\n
\n )}\n {loadingProgress < 100 && (\n \n )}\n
\n {\n closeSnackBar();\n }}\n autoHideDuration={\n snackBarMessage.type === \"error\" ? 10000 : 5000\n }\n message={snackBarMessage.message}\n className={classes.snackBarExternal}\n ContentProps={{\n className: `${classes.snackBar} ${\n snackBarMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n />\n
\n \n \n \n {allowedRoutes.map((route: any) => (\n (\n \n )}\n />\n ))}\n {allowedRoutes.length > 0 ? (\n \n ) : null}\n \n \n \n
\n
\n ) : null}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n needsRestart: state.system.serverNeedsRestart,\n isServerLoading: state.system.serverIsLoading,\n session: state.console.session,\n loadingProgress: state.system.loadingProgress,\n snackBarMessage: state.system.snackBar,\n});\n\nconst connector = connect(mapState, {\n setMenuOpen,\n serverNeedsRestart,\n serverIsLoading,\n setSnackBarMessage,\n});\n\nexport default withStyles(styles)(connector(Console));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { FC, useEffect } from \"react\"; // eslint-disable-line @typescript-eslint/no-unused-vars\nimport { RouteComponentProps } from \"react-router\";\nimport storage from \"local-storage-fallback\";\nimport api from \"../../common/api\";\n\nconst LoginCallback: FC = ({ location }) => {\n useEffect(() => {\n const code = (location.search.match(/code=([^&]+)/) || [])[1];\n const state = (location.search.match(/state=([^&]+)/) || [])[1];\n api\n .invoke(\"POST\", \"/api/v1/login/oauth2/auth\", { code, state })\n .then((res: any) => {\n if (res && res.sessionId) {\n // store the jwt token\n storage.setItem(\"token\", res.sessionId);\n // We push to history the new URL.\n window.location.href = \"/\";\n }\n })\n .catch((res: any) => {\n window.location.href = \"/login\";\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return null;\n};\n\nexport default LoginCallback;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ISessionResponse } from \"./types\";\n\nexport const SESSION_RESPONSE = \"SESSION_RESPONSE\";\n\ninterface SessionAction {\n type: typeof SESSION_RESPONSE;\n message: ISessionResponse;\n}\nexport type SessionActionTypes = SessionAction;\n\nexport function saveSessionResponse(message: ISessionResponse) {\n return {\n type: SESSION_RESPONSE,\n message: message,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"./store\";\nimport { consoleOperatorMode, userLoggedIn } from \"./actions\";\nimport api from \"./common/api\";\nimport { saveSessionResponse } from \"./screens/Console/actions\";\nimport { ISessionResponse } from \"./screens/Console/types\";\n\nconst mapState = (state: AppState) => ({\n loggedIn: state.system.loggedIn,\n});\n\nconst connector = connect(mapState, {\n userLoggedIn,\n consoleOperatorMode,\n saveSessionResponse,\n});\n\ninterface ProtectedRouteProps {\n loggedIn: boolean;\n Component: any;\n userLoggedIn: typeof userLoggedIn;\n consoleOperatorMode: typeof consoleOperatorMode;\n saveSessionResponse: typeof saveSessionResponse;\n}\n\nconst ProtectedRoute = ({\n Component,\n loggedIn,\n userLoggedIn,\n consoleOperatorMode,\n saveSessionResponse,\n}: ProtectedRouteProps) => {\n const [sessionLoading, setSessionLoading] = useState(true);\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/session`)\n .then((res: ISessionResponse) => {\n saveSessionResponse(res);\n userLoggedIn(true);\n setSessionLoading(false);\n // check for tenants presence, that indicates we are in operator mode\n if (res.operator) {\n consoleOperatorMode(true);\n document.title = \"MinIO Operator\";\n }\n })\n .catch(() => setSessionLoading(false));\n }, [saveSessionResponse, consoleOperatorMode, userLoggedIn]);\n\n // if we still trying to retrieve user session render nothing\n if (sessionLoading) {\n return null;\n }\n // redirect user to the right page based on session status\n return loggedIn ? : ;\n};\n\nexport default connector(ProtectedRoute);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Route, Router, Switch } from \"react-router-dom\";\nimport history from \"./history\";\nimport Login from \"./screens/LoginPage/LoginPage\";\nimport Console from \"./screens/Console/Console\";\nimport LoginCallback from \"./screens/LoginPage/LoginCallback\";\nimport { hot } from \"react-hot-loader/root\";\nimport ProtectedRoute from \"./ProtectedRoutes\";\n\nconst Routes = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default hot(Routes);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n MENU_OPEN,\n OPERATOR_MODE,\n SERVER_IS_LOADING,\n SERVER_NEEDS_RESTART,\n SystemActionTypes,\n SystemState,\n USER_LOGGED,\n SET_LOADING_PROGRESS,\n SET_SNACK_BAR_MESSAGE,\n SET_ERROR_SNACK_MESSAGE,\n SET_SERVER_DIAG_STAT,\n SET_SNACK_MODAL_MESSAGE,\n SET_MODAL_ERROR_MESSAGE,\n} from \"./types\";\n\nconst initialState: SystemState = {\n loggedIn: false,\n operatorMode: false,\n session: \"\",\n userName: \"\",\n sidebarOpen: true,\n serverNeedsRestart: false,\n serverIsLoading: false,\n loadingProgress: 100,\n snackBar: {\n message: \"\",\n type: \"message\",\n },\n modalSnackBar: {\n message: \"\",\n type: \"message\",\n },\n serverDiagnosticStatus: \"\",\n};\n\nexport function systemReducer(\n state = initialState,\n action: SystemActionTypes\n): SystemState {\n switch (action.type) {\n case USER_LOGGED:\n return {\n ...state,\n loggedIn: action.logged,\n };\n case OPERATOR_MODE:\n return {\n ...state,\n operatorMode: action.operatorMode,\n };\n case MENU_OPEN:\n return {\n ...state,\n sidebarOpen: action.open,\n };\n case SERVER_NEEDS_RESTART:\n return {\n ...state,\n serverNeedsRestart: action.needsRestart,\n };\n\n case SERVER_IS_LOADING:\n return {\n ...state,\n serverIsLoading: action.isLoading,\n };\n case SET_LOADING_PROGRESS:\n return {\n ...state,\n loadingProgress: action.loadingProgress,\n };\n case SET_SNACK_BAR_MESSAGE:\n return {\n ...state,\n snackBar: { message: action.message, type: \"message\" },\n };\n case SET_ERROR_SNACK_MESSAGE:\n return {\n ...state,\n snackBar: { message: action.message, type: \"error\" },\n };\n case SET_SNACK_MODAL_MESSAGE:\n return {\n ...state,\n modalSnackBar: { message: action.message, type: \"message\" },\n };\n case SET_MODAL_ERROR_MESSAGE:\n return {\n ...state,\n modalSnackBar: { message: action.message, type: \"error\" },\n };\n case SET_SERVER_DIAG_STAT:\n return {\n ...state,\n serverDiagnosticStatus: action.serverDiagnosticStatus,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n TRACE_MESSAGE_RECEIVED,\n TRACE_RESET_MESSAGES,\n TraceActionTypes,\n} from \"./actions\";\nimport { TraceMessage } from \"./types\";\n\nexport interface TraceState {\n messages: TraceMessage[];\n}\n\nconst initialState: TraceState = {\n messages: [],\n};\n\nexport function traceReducer(\n state = initialState,\n action: TraceActionTypes\n): TraceState {\n switch (action.type) {\n case TRACE_MESSAGE_RECEIVED:\n return {\n ...state,\n messages: [...state.messages, action.message],\n };\n case TRACE_RESET_MESSAGES:\n return {\n ...state,\n messages: [],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n LOG_MESSAGE_RECEIVED,\n LOG_RESET_MESSAGES,\n LogActionTypes,\n} from \"./actions\";\nimport { LogMessage } from \"./types\";\n\nexport interface LogState {\n messages: LogMessage[];\n}\n\nconst initialState: LogState = {\n messages: [],\n};\n\nexport function logReducer(\n state = initialState,\n action: LogActionTypes\n): LogState {\n switch (action.type) {\n case LOG_MESSAGE_RECEIVED:\n return {\n ...state,\n messages: [...state.messages, action.message],\n };\n case LOG_RESET_MESSAGES:\n return {\n ...state,\n messages: [],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n HEALTH_INFO_MESSAGE_RECEIVED,\n HEALTH_INFO_RESET_MESSAGE,\n HealthInfoActionTypes,\n} from \"./actions\";\nimport { HealthInfoMessage } from \"./types\";\n\nexport interface HealthInfoState {\n message: HealthInfoMessage;\n}\n\nconst initialState: HealthInfoState = {\n message: {} as HealthInfoMessage,\n};\n\nexport function healthInfoReducer(\n state = initialState,\n action: HealthInfoActionTypes\n): HealthInfoState {\n switch (action.type) {\n case HEALTH_INFO_MESSAGE_RECEIVED:\n return {\n ...state,\n message: action.message,\n };\n case HEALTH_INFO_RESET_MESSAGE:\n return {\n ...state,\n message: {} as HealthInfoMessage,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n WATCH_MESSAGE_RECEIVED,\n WATCH_RESET_MESSAGES,\n WatchActionTypes,\n} from \"./actions\";\nimport { EventInfo } from \"./types\";\n\nexport interface WatchState {\n messages: EventInfo[];\n}\n\nconst initialState: WatchState = {\n messages: [],\n};\n\nexport function watchReducer(\n state = initialState,\n action: WatchActionTypes\n): WatchState {\n switch (action.type) {\n case WATCH_MESSAGE_RECEIVED:\n return {\n ...state,\n messages: [...state.messages, action.message],\n };\n case WATCH_RESET_MESSAGES:\n return {\n ...state,\n messages: [],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ISessionResponse } from \"./types\";\nimport { SessionActionTypes, SESSION_RESPONSE } from \"./actions\";\n\nexport interface ConsoleState {\n session: ISessionResponse;\n}\n\nconst initialState: ConsoleState = {\n session: {\n operator: false,\n status: \"\",\n pages: [],\n },\n};\n\nexport function consoleReducer(\n state = initialState,\n action: SessionActionTypes\n): ConsoleState {\n switch (action.type) {\n case SESSION_RESPONSE:\n return {\n ...state,\n session: action.message,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n ADD_BUCKET_NAME,\n ADD_BUCKET_OPEN,\n ADD_BUCKET_QUOTA,\n ADD_BUCKET_QUOTA_SIZE,\n ADD_BUCKET_QUOTA_TYPE,\n ADD_BUCKET_QUOTA_UNIT,\n ADD_BUCKET_RESET,\n ADD_BUCKET_VERSIONED,\n ADD_BUCKET_RETENTION,\n ADD_BUCKET_RETENTION_MODE,\n ADD_BUCKET_RETENTION_UNIT,\n ADD_BUCKET_RETENTION_VALIDITY,\n BucketActionTypes,\n ADD_BUCKET_LOCKING,\n} from \"./actions\";\n\nexport interface BucketsState {\n open: boolean;\n addBucketName: string;\n addBucketVersioningEnabled: boolean;\n addBucketLockingEnabled: boolean;\n addBucketQuotaEnabled: boolean;\n addBucketQuotaType: string;\n addBucketQuotaSize: string;\n addBucketQuotaUnit: string;\n addBucketRetentionEnabled: boolean;\n addBucketRetentionMode: string;\n addBucketRetentionUnit: string;\n addBucketRetentionValidity: number;\n}\n\nconst initialState: BucketsState = {\n open: false,\n addBucketName: \"\",\n addBucketVersioningEnabled: false,\n addBucketLockingEnabled: false,\n addBucketQuotaEnabled: false,\n addBucketQuotaType: \"hard\",\n addBucketQuotaSize: \"1\",\n addBucketQuotaUnit: \"TiB\",\n addBucketRetentionEnabled: false,\n addBucketRetentionMode: \"compliance\",\n addBucketRetentionUnit: \"days\",\n addBucketRetentionValidity: 1,\n};\n\nexport function bucketsReducer(\n state = initialState,\n action: BucketActionTypes\n): BucketsState {\n switch (action.type) {\n case ADD_BUCKET_OPEN:\n return {\n ...state,\n open: action.open,\n };\n case ADD_BUCKET_NAME:\n return {\n ...state,\n addBucketName: action.name,\n };\n case ADD_BUCKET_VERSIONED:\n return {\n ...state,\n addBucketVersioningEnabled: action.versioned,\n };\n case ADD_BUCKET_LOCKING:\n return {\n ...state,\n addBucketLockingEnabled: action.locking,\n };\n case ADD_BUCKET_QUOTA:\n return {\n ...state,\n addBucketQuotaEnabled: action.quota,\n };\n case ADD_BUCKET_QUOTA_TYPE:\n return {\n ...state,\n addBucketQuotaType: action.quotaType,\n };\n case ADD_BUCKET_QUOTA_SIZE:\n return {\n ...state,\n addBucketQuotaSize: action.quotaSize,\n };\n case ADD_BUCKET_QUOTA_UNIT:\n return {\n ...state,\n addBucketQuotaUnit: action.quotaUnit,\n };\n case ADD_BUCKET_RETENTION:\n return {\n ...state,\n addBucketRetentionEnabled: action.retention,\n };\n case ADD_BUCKET_RETENTION_MODE:\n return {\n ...state,\n addBucketRetentionMode: action.retentionMode,\n };\n case ADD_BUCKET_RETENTION_UNIT:\n return {\n ...state,\n addBucketRetentionUnit: action.retentionUnit,\n };\n case ADD_BUCKET_RETENTION_VALIDITY:\n return {\n ...state,\n addBucketRetentionValidity: action.retentionValidity,\n };\n\n case ADD_BUCKET_RESET:\n return {\n ...state,\n addBucketName: \"\",\n addBucketVersioningEnabled: false,\n addBucketLockingEnabled: false,\n addBucketQuotaEnabled: false,\n addBucketQuotaType: \"hard\",\n addBucketQuotaSize: \"1\",\n addBucketQuotaUnit: \"TiB\",\n addBucketRetentionEnabled: false,\n addBucketRetentionMode: \"compliance\",\n addBucketRetentionUnit: \"days\",\n addBucketRetentionValidity: 1,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport history from \"../../../history\";\n\nimport {\n OBJECT_BROWSER_ADD_ROUTE,\n OBJECT_BROWSER_CREATE_FOLDER,\n OBJECT_BROWSER_REMOVE_ROUTE_LEVEL,\n OBJECT_BROWSER_RESET_ROUTES_LIST,\n OBJECT_BROWSER_SET_ALL_ROUTES,\n OBJECT_BROWSER_SET_LAST_AS_FILE,\n OBJECT_BROWSER_DOWNLOAD_FILE_LOADER,\n OBJECT_BROWSER_DOWNLOADED_FILE,\n ObjectBrowserActionTypes,\n} from \"./actions\";\n\nexport interface Route {\n route: string;\n label: string;\n type: string;\n}\n\nexport interface ObjectBrowserState {\n routesList: Route[];\n downloadingFiles: string[];\n}\n\nexport interface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\nconst initialRoute = [\n { route: \"/object-browser\", label: \"All Buckets\", type: \"path\" },\n];\n\nconst initialState: ObjectBrowserState = {\n routesList: initialRoute,\n downloadingFiles: [],\n};\n\nexport function objectBrowserReducer(\n state = initialState,\n action: ObjectBrowserActionTypes\n): ObjectBrowserState {\n switch (action.type) {\n case OBJECT_BROWSER_ADD_ROUTE:\n const newRouteList = [\n ...state.routesList,\n { route: action.route, label: action.label, type: action.routeType },\n ];\n history.push(action.route);\n\n return { ...state, routesList: newRouteList };\n case OBJECT_BROWSER_RESET_ROUTES_LIST:\n return {\n ...state,\n routesList: [...initialRoute],\n };\n case OBJECT_BROWSER_REMOVE_ROUTE_LEVEL:\n const indexOfTopPath =\n state.routesList.findIndex(\n (element) => element.route === action.toRoute\n ) + 1;\n const newRouteLevels = state.routesList.slice(0, indexOfTopPath);\n\n return {\n ...state,\n routesList: newRouteLevels,\n };\n case OBJECT_BROWSER_SET_ALL_ROUTES:\n const splitRoutes = action.currentRoute.split(\"/\");\n const routesArray: Route[] = [];\n let initRoute = initialRoute[0].route;\n\n splitRoutes.forEach((route) => {\n if (route !== \"\" && route !== \"object-browser\") {\n initRoute = `${initRoute}/${route}`;\n\n routesArray.push({\n route: initRoute,\n label: route,\n type: \"path\",\n });\n }\n });\n\n const newSetOfRoutes = [...initialRoute, ...routesArray];\n\n return {\n ...state,\n routesList: newSetOfRoutes,\n };\n case OBJECT_BROWSER_CREATE_FOLDER:\n const newFoldersRoutes = [...state.routesList];\n let lastRoute = state.routesList[state.routesList.length - 1].route;\n\n const splitElements = action.newRoute.split(\"/\");\n\n splitElements.forEach((element) => {\n const folderTrim = element.trim();\n if (folderTrim !== \"\") {\n lastRoute = `${lastRoute}/${folderTrim}`;\n\n const newItem = { route: lastRoute, label: folderTrim, type: \"path\" };\n newFoldersRoutes.push(newItem);\n }\n });\n\n history.push(lastRoute);\n\n return {\n ...state,\n routesList: newFoldersRoutes,\n };\n case OBJECT_BROWSER_SET_LAST_AS_FILE:\n const currentList = state.routesList;\n const lastItem = currentList.slice(-1)[0];\n\n if (lastItem.type === \"path\") {\n lastItem.type = \"file\";\n }\n\n const newList = [...currentList.slice(0, -1), lastItem];\n\n return {\n ...state,\n routesList: newList,\n };\n case OBJECT_BROWSER_DOWNLOAD_FILE_LOADER:\n const actualFiles = [...state.downloadingFiles];\n\n actualFiles.push(action.path);\n\n return {\n ...state,\n downloadingFiles: [...actualFiles],\n };\n case OBJECT_BROWSER_DOWNLOADED_FILE:\n const downloadingFiles = state.downloadingFiles.filter(\n (item) => item !== action.path\n );\n\n return {\n ...state,\n downloadingFiles: [...downloadingFiles],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport has from \"lodash/has\";\nimport get from \"lodash/get\";\nimport {\n TenantsManagementTypes,\n ITenantState,\n ADD_TENANT_SET_CURRENT_PAGE,\n ADD_TENANT_SET_ADVANCED_MODE,\n ADD_TENANT_UPDATE_FIELD,\n ADD_TENANT_SET_PAGE_VALID,\n ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n ADD_TENANT_ADD_MINIO_KEYPAIR,\n ADD_TENANT_DELETE_MINIO_KEYPAIR,\n ADD_TENANT_ADD_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n ADD_TENANT_DELETE_CA_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CERT,\n ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n ADD_TENANT_ENCRYPTION_SERVER_CERT,\n ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CA,\n ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n ADD_TENANT_RESET_FORM,\n} from \"./types\";\nimport { KeyPair } from \"./ListTenants/utils\";\n\nconst initialState: ITenantState = {\n createTenant: {\n page: 0,\n validPages: [],\n advancedModeOn: false,\n storageClasses: [],\n limitSize: {},\n fields: {\n nameTenant: {\n tenantName: \"\",\n namespace: \"\",\n selectedStorageClass: \"\",\n },\n configure: {\n customImage: false,\n imageName: \"\",\n consoleImage: \"\",\n customDockerhub: false,\n imageRegistry: \"\",\n imageRegistryUsername: \"\",\n imageRegistryPassword: \"\",\n exposeMinIO: true,\n exposeConsole: true,\n },\n identityProvider: {\n idpSelection: \"Built-in\",\n openIDURL: \"\",\n openIDClientID: \"\",\n openIDSecretID: \"\",\n ADURL: \"\",\n ADSkipTLS: false,\n ADServerInsecure: false,\n ADUserNameFilter: \"\",\n ADGroupBaseDN: \"\",\n ADGroupSearchFilter: \"\",\n ADNameAttribute: \"\",\n },\n security: {\n enableAutoCert: true,\n enableCustomCerts: false,\n enableTLS: true,\n },\n encryption: {\n enableEncryption: false,\n encryptionType: \"vault\",\n gemaltoEndpoint: \"\",\n gemaltoToken: \"\",\n gemaltoDomain: \"\",\n gemaltoRetry: \"0\",\n awsEndpoint: \"\",\n awsRegion: \"\",\n awsKMSKey: \"\",\n awsAccessKey: \"\",\n awsSecretKey: \"\",\n awsToken: \"\",\n vaultEndpoint: \"\",\n vaultEngine: \"\",\n vaultNamespace: \"\",\n vaultPrefix: \"\",\n vaultAppRoleEngine: \"\",\n vaultId: \"\",\n vaultSecret: \"\",\n vaultRetry: \"0\",\n vaultPing: \"0\",\n gcpProjectID: \"\",\n gcpEndpoint: \"\",\n gcpClientEmail: \"\",\n gcpClientID: \"\",\n gcpPrivateKeyID: \"\",\n gcpPrivateKey: \"\",\n enableCustomCertsForKES: false,\n },\n tenantSize: {\n volumeSize: \"100\",\n sizeFactor: \"Gi\",\n drivesPerServer: \"1\",\n nodes: \"4\",\n memoryNode: \"2\",\n ecParity: \"\",\n ecParityChoices: [],\n cleanECChoices: [],\n maxAllocableMemo: 0,\n memorySize: {\n error: \"\",\n limit: 0,\n request: 0,\n },\n distribution: {\n error: \"\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n },\n ecParityCalc: {\n error: 0,\n defaultEC: \"\",\n erasureCodeSet: 0,\n maxEC: \"\",\n rawCapacity: \"0\",\n storageFactors: [],\n },\n limitSize: {},\n },\n },\n certificates: {\n minioCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n caCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n consoleCertificate: {\n id: \"console_cert_pair\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n serverCertificate: {\n id: \"encryptionServerCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n clientCertificate: {\n id: \"encryptionClientCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCertificate: {\n id: \"encryptionVaultCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCA: {\n id: \"encryptionVaultCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n gemaltoCA: {\n id: \"encryptionGemaltoCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n },\n },\n};\n\nexport function tenantsReducer(\n state = initialState,\n action: TenantsManagementTypes\n): ITenantState {\n let newState: ITenantState = { ...state };\n\n switch (action.type) {\n case ADD_TENANT_SET_CURRENT_PAGE:\n newState.createTenant.page = action.page;\n\n return { ...newState };\n case ADD_TENANT_SET_ADVANCED_MODE:\n newState.createTenant.advancedModeOn = action.state;\n\n return { ...newState };\n case ADD_TENANT_UPDATE_FIELD:\n if (\n has(newState.createTenant.fields, `${action.pageName}.${action.field}`)\n ) {\n const originPageNameItems = get(\n newState.createTenant.fields,\n `${action.pageName}`,\n {}\n );\n\n let newValue: typeof originPageNameItems = {};\n newValue[action.field] = action.value;\n\n const joinValue = { ...originPageNameItems, ...newValue };\n\n newState.createTenant.fields[action.pageName] = { ...joinValue };\n\n return { ...newState };\n }\n return state;\n case ADD_TENANT_SET_PAGE_VALID:\n let originValidPages = state.createTenant.validPages;\n\n if (action.valid) {\n if (!originValidPages.includes(action.pageName)) {\n originValidPages.push(action.pageName);\n\n newState.createTenant.validPages = [...originValidPages];\n }\n } else {\n const newSetOfPages = originValidPages.filter(\n (elm) => elm !== action.pageName\n );\n\n newState.createTenant.validPages = [...newSetOfPages];\n }\n\n return { ...newState };\n case ADD_TENANT_SET_STORAGE_CLASSES_LIST:\n const changeCL = {\n ...state,\n createTenant: {\n ...state.createTenant,\n storageClasses: action.storageClasses,\n },\n };\n return { ...changeCL };\n case ADD_TENANT_ADD_MINIO_KEYPAIR:\n const minioCerts = [\n ...state.createTenant.certificates.minioCertificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n newState.createTenant.certificates.minioCertificates = [...minioCerts];\n return { ...newState };\n case ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR:\n const minioCertificates =\n state.createTenant.certificates.minioCertificates;\n\n const NCertList = minioCertificates.map((item: KeyPair) => {\n if (item.id === action.id) {\n return {\n ...item,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n }\n return item;\n });\n newState.createTenant.certificates.minioCertificates = [...NCertList];\n return { ...newState };\n case ADD_TENANT_DELETE_MINIO_KEYPAIR:\n const minioCertsList = state.createTenant.certificates.minioCertificates;\n\n if (minioCertsList.length > 1) {\n const cleanMinioCertsList = minioCertsList.filter(\n (item: KeyPair) => item.id !== action.id\n );\n newState.createTenant.certificates.minioCertificates = [\n ...cleanMinioCertsList,\n ];\n return { ...newState };\n }\n return { ...state };\n case ADD_TENANT_ADD_CA_KEYPAIR:\n const CACerts = [\n ...state.createTenant.certificates.caCertificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n newState.createTenant.certificates.caCertificates = [...CACerts];\n return { ...newState };\n case ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR:\n const caCertificates = state.createTenant.certificates.caCertificates;\n\n const NACList = caCertificates.map((item: KeyPair) => {\n if (item.id === action.id) {\n return {\n ...item,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n }\n return item;\n });\n newState.createTenant.certificates.caCertificates = [...NACList];\n return { ...newState };\n case ADD_TENANT_DELETE_CA_KEYPAIR:\n const CACertsList = state.createTenant.certificates.minioCertificates;\n\n if (CACertsList.length > 1) {\n const cleanMinioCertsList = CACertsList.filter(\n (item: KeyPair) => item.id !== action.id\n );\n newState.createTenant.certificates.caCertificates = [\n ...cleanMinioCertsList,\n ];\n return { ...newState };\n }\n return { ...state };\n case ADD_TENANT_ADD_CONSOLE_CERT:\n const consoleCert = state.createTenant.certificates.consoleCertificate;\n\n newState.createTenant.certificates.consoleCertificate = {\n ...consoleCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_SERVER_CERT:\n const encServerCert = state.createTenant.certificates.serverCertificate;\n\n newState.createTenant.certificates.serverCertificate = {\n ...encServerCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_CLIENT_CERT:\n const encClientCert = state.createTenant.certificates.clientCertificate;\n\n newState.createTenant.certificates.clientCertificate = {\n ...encClientCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_VAULT_CERT:\n const encVaultCert = state.createTenant.certificates.vaultCertificate;\n\n newState.createTenant.certificates.vaultCertificate = {\n ...encVaultCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_VAULT_CA:\n const encVaultCA = state.createTenant.certificates.vaultCA;\n\n newState.createTenant.certificates.vaultCA = {\n ...encVaultCA,\n cert: action.fileName,\n encoded_cert: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_GEMALTO_CA:\n const encGemaltoCA = state.createTenant.certificates.gemaltoCA;\n\n newState.createTenant.certificates.gemaltoCA = {\n ...encGemaltoCA,\n cert: action.fileName,\n encoded_cert: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_RESET_FORM:\n return {\n ...state,\n createTenant: {\n page: 0,\n validPages: [],\n advancedModeOn: false,\n storageClasses: [],\n limitSize: {},\n fields: {\n nameTenant: {\n tenantName: \"\",\n namespace: \"\",\n selectedStorageClass: \"\",\n },\n configure: {\n customImage: false,\n imageName: \"\",\n consoleImage: \"\",\n customDockerhub: false,\n imageRegistry: \"\",\n imageRegistryUsername: \"\",\n imageRegistryPassword: \"\",\n exposeMinIO: true,\n exposeConsole: true,\n },\n identityProvider: {\n idpSelection: \"Built-in\",\n openIDURL: \"\",\n openIDClientID: \"\",\n openIDSecretID: \"\",\n ADURL: \"\",\n ADSkipTLS: false,\n ADServerInsecure: false,\n ADUserNameFilter: \"\",\n ADGroupBaseDN: \"\",\n ADGroupSearchFilter: \"\",\n ADNameAttribute: \"\",\n },\n security: {\n enableAutoCert: true,\n enableCustomCerts: false,\n enableTLS: true,\n },\n encryption: {\n enableEncryption: false,\n encryptionType: \"vault\",\n gemaltoEndpoint: \"\",\n gemaltoToken: \"\",\n gemaltoDomain: \"\",\n gemaltoRetry: \"0\",\n awsEndpoint: \"\",\n awsRegion: \"\",\n awsKMSKey: \"\",\n awsAccessKey: \"\",\n awsSecretKey: \"\",\n awsToken: \"\",\n vaultEndpoint: \"\",\n vaultEngine: \"\",\n vaultNamespace: \"\",\n vaultPrefix: \"\",\n vaultAppRoleEngine: \"\",\n vaultId: \"\",\n vaultSecret: \"\",\n vaultRetry: \"0\",\n vaultPing: \"0\",\n gcpProjectID: \"\",\n gcpEndpoint: \"\",\n gcpClientEmail: \"\",\n gcpClientID: \"\",\n gcpPrivateKeyID: \"\",\n gcpPrivateKey: \"\",\n enableCustomCertsForKES: false,\n },\n tenantSize: {\n volumeSize: \"100\",\n sizeFactor: \"Gi\",\n drivesPerServer: \"1\",\n nodes: \"4\",\n memoryNode: \"2\",\n ecParity: \"\",\n ecParityChoices: [],\n cleanECChoices: [],\n maxAllocableMemo: 0,\n memorySize: {\n error: \"\",\n limit: 0,\n request: 0,\n },\n distribution: {\n error: \"\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n },\n ecParityCalc: {\n error: 0,\n defaultEC: \"\",\n erasureCodeSet: 0,\n maxEC: \"\",\n rawCapacity: \"0\",\n storageFactors: [],\n },\n limitSize: {},\n },\n },\n certificates: {\n minioCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n caCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n consoleCertificate: {\n id: \"console_cert_pair\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n serverCertificate: {\n id: \"encryptionServerCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n clientCertificate: {\n id: \"encryptionClientCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCertificate: {\n id: \"encryptionVaultCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCA: {\n id: \"encryptionVaultCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n gemaltoCA: {\n id: \"encryptionGemaltoCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n },\n },\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { applyMiddleware, combineReducers, compose, createStore } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { systemReducer } from \"./reducer\";\nimport { traceReducer } from \"./screens/Console/Trace/reducers\";\nimport { logReducer } from \"./screens/Console/Logs/reducers\";\nimport { healthInfoReducer } from \"./screens/Console/HealthInfo/reducers\";\nimport { watchReducer } from \"./screens/Console/Watch/reducers\";\nimport { consoleReducer } from \"./screens/Console/reducer\";\nimport { bucketsReducer } from \"./screens/Console/Buckets/reducers\";\nimport { objectBrowserReducer } from \"./screens/Console/ObjectBrowser/reducers\";\nimport { tenantsReducer } from \"./screens/Console/Tenants/reducer\";\n\nconst globalReducer = combineReducers({\n system: systemReducer,\n trace: traceReducer,\n logs: logReducer,\n watch: watchReducer,\n console: consoleReducer,\n buckets: bucketsReducer,\n objectBrowser: objectBrowserReducer,\n healthInfo: healthInfoReducer,\n tenants: tenantsReducer,\n});\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;\n }\n}\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nexport type AppState = ReturnType;\n\nexport default function configureStore() {\n return createStore(globalReducer, composeEnhancers(applyMiddleware(thunk)));\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import { createMuiTheme } from \"@material-ui/core\";\n\nconst theme = createMuiTheme({\n palette: {\n primary: {\n light: \"#073052\",\n main: \"#081C42\",\n dark: \"#05122B\",\n contrastText: \"#fff\",\n },\n secondary: {\n light: \"#ff7961\",\n main: \"#f44336\",\n dark: \"#ba000d\",\n contrastText: \"#000\",\n },\n error: {\n light: \"#e03a48\",\n main: \"#dc1f2e\",\n contrastText: \"#ffffff\",\n },\n grey: {\n 100: \"#f0f0f0\",\n 200: \"#e6e6e6\",\n 300: \"#cccccc\",\n 400: \"#999999\",\n 500: \"#8c8c8c\",\n 600: \"#737373\",\n 700: \"#666666\",\n 800: \"#4d4d4d\",\n 900: \"#333333\",\n },\n background: {\n default: \"#F4F4F4\",\n },\n },\n typography: {\n fontFamily: [\"Lato\", \"sans-serif\"].join(\",\"),\n h1: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h2: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h3: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h4: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h5: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h6: {\n fontWeight: \"bold\",\n color: \"#000000\",\n },\n },\n overrides: {\n MuiButton: {\n root: {\n borderRadius: 3,\n color: \"white\",\n height: 40,\n padding: \"0 20px\",\n fontSize: 14,\n fontWeight: 600,\n boxShadow: \"none\",\n \"& .MuiSvgIcon-root\": {\n maxHeight: 18,\n },\n \"&.MuiButton-contained.Mui-disabled\": {\n backgroundColor: \"#EAEDEE\",\n fontWeight: 600,\n color: \"#767676\",\n },\n \"& .MuiButton-iconSizeMedium > *:first-child\": {\n fontSize: 12,\n },\n },\n },\n },\n});\n\nexport default theme;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport Routes from \"./Routes\";\nimport configureStore from \"./store\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { ThemeProvider, withStyles } from \"@material-ui/core/styles\";\nimport \"react-virtualized/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\nimport \"react-resizable/css/styles.css\";\n\nimport \"./index.css\";\nimport theme from \"./theme/main\";\n\nconst GlobalCss = withStyles({\n // @global is handled by jss-plugin-global.\n \"@global\": {\n // You should target [class*=\"MuiButton-root\"] instead if you nest themes.\n \".MuiButton-contained\": {\n fontSize: \"14px\",\n textTransform: \"capitalize\",\n padding: \"16px 25px 16px 25px\",\n borderRadius: 3,\n },\n \".MuiButton-sizeSmall\": {\n padding: \"4px 10px\",\n fontSize: \"0.8125rem\",\n },\n \".MuiTableCell-head\": {\n borderRadius: \"3px 3px 0px 0px\",\n fontSize: 13,\n },\n \".MuiPaper-root\": {\n borderRadius: 3,\n },\n \".MuiDrawer-paperAnchorDockedLeft\": {\n borderRight: 0,\n },\n \".MuiDrawer-root\": {\n \"& .MuiPaper-root\": {\n borderRadius: 0,\n },\n },\n },\n})(() => null);\n\nReactDOM.render(\n \n \n \n {/**/}\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/build/static/js/main.1ecd68ff.chunk.js b/portal-ui/build/static/js/main.e71727db.chunk.js similarity index 67% rename from portal-ui/build/static/js/main.1ecd68ff.chunk.js rename to portal-ui/build/static/js/main.e71727db.chunk.js index ca1aa1083..b81991c5f 100644 --- a/portal-ui/build/static/js/main.1ecd68ff.chunk.js +++ b/portal-ui/build/static/js/main.e71727db.chunk.js @@ -1,2 +1,2 @@ -(this["webpackJsonpportal-ui"]=this["webpackJsonpportal-ui"]||[]).push([[0],{437:function(e,t,n){},564:function(e,t,n){},565:function(e,t,n){"use strict";n.r(t);var a=n(0),c=n(1),i=n.n(c),r=n(27),o=n.n(r),s=n(10),l=n(50),d=n(70),u=Object(d.a)(),b=n(3),j=n(2),m=n(178),p=n.n(m),h=n(303),O=n.n(h),g=n(618),f=n(665),x=n(617),v=n(106),y=n(619),C=n(620),S=n(352),k=n(667),w=n(608),N=n(12),T="USER_LOGGED",E="OPERATOR_MODE",_="MENU_OPEN",A="SERVER_NEEDS_RESTART",I="SERVER_IS_LOADING",M="SET_LOADING_PROGRESS",L="SET_SNACK_BAR_MESSAGE",D="SET_SERVER_DIAG_STAT",B="SET_ERROR_SNACK_MESSAGE",F="SET_SNACK_MODAL_MESSAGE",R="SET_MODAL_ERROR_MESSAGE";function P(e){return{type:T,logged:e}}function z(e){return{type:_,open:e}}function K(e){return{type:A,needsRestart:e}}var U,W=function(e){return{type:L,message:e}},q=function(e){return{type:B,message:e}},V=function(e){return{type:F,message:e}},G=function(e){return{type:R,message:e}},H=n(298),Y=n(299),Q=n(13),Z=n.n(Q),J=n(179),$=n.n(J),X=1073741824,ee=2147483648,te=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],ne=["Ki","Mi","Gi","Ti","Pi","Ei"],ae=["B"].concat(ne),ce=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=0,a=parseInt(e,10)||0;a>=1024&&++n;)a/=1024;var c=["B"].concat(ne);return a.toFixed(a<10&&n>0?1:0)+" "+(t?c[n]:te[n])},ie=function(){var e;$.a.removeItem("token"),e="token",document.cookie=e+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;"},re=function(e){var t=e.getHours()<10?"0".concat(e.getHours()):"".concat(e.getHours()),n=e.getMinutes()<10?"0".concat(e.getMinutes()):"".concat(e.getMinutes()),a=e.getSeconds()<10?"0".concat(e.getSeconds()):"".concat(e.getSeconds());return"".concat(t,":").concat(n,":").concat(a,":").concat(e.getMilliseconds())},oe=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=parseFloat(e),c=n?ae:te,i=c.findIndex((function(e){return e===t}));if(-1===i)return"0";var r=Math.pow(1024,i),o=a*r;return o.toString(10)},se=function(e,t,n,a){var c=parseInt(e,10);return le(t,c,274877906944,n,a)},le=function(e,t,n,a){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(a))return{error:"Some provided data is invalid, please try again.",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0};var i=0,r=0,o=0;if(0===c&&(o=(r=t/(i=Math.floor(Math.min(t/Math.max(4,e),n))))/e),c&&(r=(o=c)*e,i=Math.floor(t/r)),o%1>0){r=(o=Math.ceil(o))*e;var s=(i=Math.floor(t/r))*o*e;if(s>a)return{error:"We were not able to allocate this server.",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0}}return i1&&void 0!==arguments[1]&&arguments[1],n=new Date(1e3*parseInt(e));return t?"".concat(n.getFullYear(),"-").concat(String(n.getMonth()+1).padStart(2,"0"),"-").concat(String(n.getDay()).padStart(2,"0")," ").concat(n.getHours(),":").concat(String(n.getMinutes()).padStart(2,"0"),":").concat(String(n.getSeconds()).padStart(2,"0")):"".concat(n.getHours(),":").concat(String(n.getMinutes()).padStart(2,"0"))},be=function(e){var t=1e-9*e,n=Math.round(1e4*(t+Number.EPSILON))/1e4;return"".concat(n," s")},je=function(e){var t=(100*e.split("").reduce((function(e,t){return e+t.charCodeAt(0)+((e<<5)-e)}),0)&16777215).toString(16).toUpperCase();return"#".concat(t.padStart(6,"0"))},me=new(function(){function e(){Object(H.a)(this,e)}return Object(Y.a)(e,[{key:"invoke",value:function(e,t,n){var a=this;return p()(e,t).send(n).then((function(e){return e.body})).catch((function(e){return 401===e.status?(ie(),void(window.location.href="/login")):a.onError(e)}))}},{key:"onError",value:function(e){if(e.status){var t=Z()(e.response,"body.message",e.status.toString()),n=t.charAt(0).toUpperCase()+t.slice(1);return Promise.reject(n)}ie(),window.location.href="/login"}}]),e}());!function(e){e.unknown="unknown",e.form="form",e.redirect="redirect",e.serviceAccount="service-account"}(U||(U={}));var pe=Object(w.a)((function(e){return Object(k.a)({disabled:{"&.MuiInput-underline::before":{borderColor:"#eaeaea",borderBottomStyle:"solid"}}})}));function he(e){var t=pe();return Object(a.jsx)(f.a,Object(j.a)({InputProps:{classes:t}},e))}var Oe=Object(s.b)((function(e){return{loggedIn:e.loggedIn}}),{userLoggedIn:P})(Object(N.a)((function(e){return Object(k.a)({"@global":{body:{backgroundColor:"#FAFAFA"}},paper:{borderRadius:8,display:"flex",flexDirection:"column",alignItems:"center",width:800,height:424,margin:"auto",position:"absolute",top:"50%",left:"50%",marginLeft:-400,marginTop:-212,"&.MuiPaper-root":{borderRadius:8}},avatar:{margin:e.spacing(1),backgroundColor:e.palette.secondary.main},form:{width:"100%"},submit:{margin:"30px 0px 16px",height:40,boxShadow:"none",padding:"16px 30px"},errorBlock:{backgroundColor:"#C72C48",width:800,height:64,display:"flex",justifyContent:"center",alignItems:"center",position:"absolute",left:"50%",top:"50%",marginLeft:-400,marginTop:-290,color:"#fff",fontWeight:700,fontSize:14,borderRadius:8,padding:10,boxSizing:"border-box"},mainContainer:{position:"relative",height:424},theOcean:{borderTopLeftRadius:8,borderBottomLeftRadius:8,background:"transparent linear-gradient(to bottom, #073052 0%,#05122b 100%); 0% 0% no-repeat padding-box;"},oceanBg:{backgroundImage:"url(/images/BG_Illustration.svg)",backgroundRepeat:"no-repeat",backgroundPosition:"bottom left",height:"100%",width:324},theLogin:{padding:"40px 45px 20px 45px"},loadingLoginStrategy:{textAlign:"center"},headerTitle:{marginBottom:10},submitContainer:{textAlign:"right"},disclaimer:{fontSize:12,marginTop:30},jwtInput:{marginTop:45},linearPredef:{height:10},errorIconStyle:{marginRight:3}})}))((function(e){var t=e.classes,n=e.userLoggedIn,r=Object(c.useState)(""),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(""),j=Object(b.a)(d,2),m=j[0],h=j[1],f=Object(c.useState)(""),k=Object(b.a)(f,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)({loginStrategy:U.unknown,redirect:""}),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(!1),F=Object(b.a)(B,2),R=F[0],P=F[1],z={form:"/api/v1/login","service-account":"/api/v1/login/operator"},K={form:{accessKey:s,secretKey:w},"service-account":{jwt:m}},W=function(e){e.preventDefault(),P(!0),p.a.post(z[L.loginStrategy]||"/api/v1/login").send(K[L.loginStrategy]).then((function(e){var t=e.body;if(t.error)throw P(!1),t.error})).then((function(){n(!0),L.loginStrategy===U.form&&localStorage.setItem("userLoggedIn",btoa(s)),u.push("/")})).catch((function(e){P(!1),A(e.message)}))};Object(c.useEffect)((function(){me.invoke("GET","/api/v1/login").then((function(e){D(e),A(""),"redirect"===e.loginStrategy&&e.redirect})).catch((function(e){A(e)}))}),[]);var q=null;switch(L.loginStrategy){case U.form:q=Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h1",variant:"h6",className:t.headerTitle,children:"Console Login"}),Object(a.jsxs)("form",{className:t.form,noValidate:!0,onSubmit:W,children:[Object(a.jsxs)(x.a,{container:!0,spacing:2,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(he,{fullWidth:!0,id:"accessKey",value:s,onChange:function(e){return l(e.target.value)},label:"Enter Access Key",name:"accessKey",autoComplete:"username",disabled:R})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(he,{fullWidth:!0,value:w,onChange:function(e){return N(e.target.value)},name:"secretKey",label:"Enter Secret Key",type:"password",id:"secretKey",autoComplete:"current-password",disabled:R})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.submitContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",className:t.submit,disabled:""===w||""===s||R,children:"Login"})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.linearPredef,children:R&&Object(a.jsx)(y.a,{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.disclaimer,children:[Object(a.jsx)("strong",{children:"Don't have an access key?"}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),"Contact your administrator to have one made"]})]})]});break;case U.redirect:q=Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h1",variant:"h6",className:t.headerTitle,children:"Login"}),Object(a.jsx)(g.a,{component:"a",href:L.redirect.replace("%5BHOSTNAME%5D",window.location.hostname),type:"submit",variant:"contained",color:"primary",className:t.submit,children:"Welcome"})]});break;case U.serviceAccount:q=Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h1",variant:"h6",className:t.headerTitle,children:"Operator Login"}),Object(a.jsxs)("form",{className:t.form,noValidate:!0,onSubmit:W,children:[Object(a.jsx)(x.a,{container:!0,spacing:2,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.jwtInput,children:Object(a.jsx)(he,{required:!0,fullWidth:!0,id:"jwt",value:m,onChange:function(e){return h(e.target.value)},label:"JWT",name:"jwt",autoComplete:"off",disabled:R})})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.submitContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",className:t.submit,disabled:""===m||R,children:"Login"})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.linearPredef,children:R&&Object(a.jsx)(y.a,{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.disclaimer,children:[Object(a.jsx)("strong",{children:"Don't have an access key?"}),Object(a.jsx)("br",{}),"Contact your administrator to have one made"]})]})]});break;default:q=Object(a.jsx)(C.a,{className:t.loadingLoginStrategy})}return Object(a.jsxs)(i.a.Fragment,{children:[""!==_&&Object(a.jsxs)("div",{className:t.errorBlock,children:[Object(a.jsx)(O.a,{fontSize:"small",className:t.errorIconStyle})," ",_]}),Object(a.jsx)(S.a,{className:t.paper,children:Object(a.jsxs)(x.a,{container:!0,className:t.mainContainer,children:[Object(a.jsx)(x.a,{item:!0,xs:7,className:t.theOcean,children:Object(a.jsx)("div",{className:t.oceanBg})}),Object(a.jsx)(x.a,{item:!0,xs:5,className:t.theLogin,children:q})]})})]})}))),ge=n(36),fe=n(5),xe=n(623),ve=n(668),ye=n(622),Ce=n(660),Se={inputLabel:{fontWeight:600,marginRight:10,fontSize:15,color:"#000",textAlign:"left",overflow:"hidden","& span":{display:"flex",alignItems:"center"},display:"flex"},fieldLabelError:{paddingBottom:22},fieldContainer:{marginBottom:20,position:"relative",maxWidth:840,margin:"0px auto"},tooltipContainer:{marginLeft:5,display:"flex",alignItems:"center"}},ke={formScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",marginBottom:25},formSlider:{marginLeft:0},clearButton:{fontFamily:"Lato, sans-serif",border:"0",backgroundColor:"transparent",color:"#393939",fontWeight:600,fontSize:14,marginRight:10,outline:"0",padding:"16px 25px 16px 25px",cursor:"pointer"},floatingEnabled:{position:"absolute",right:58,zIndex:1e3,marginTop:-38},configureString:{border:"#EAEAEA 1px solid",borderRadius:4,padding:"24px 50px",overflowY:"auto",height:170,maxWidth:840,margin:"0 auto"}},we={tooltip:{fontSize:16}},Ne={width:14,height:14,borderRadius:2},Te={unCheckedIcon:Object(j.a)(Object(j.a)({},Ne),{},{border:"1px solid #c3c3c3"}),checkedIcon:Object(j.a)(Object(j.a)({},Ne),{},{border:"1px solid #081C42",backgroundColor:"#081C42"})},Ee={width:12,height:12,borderRadius:"100%","input:disabled ~ &":{border:"1px solid #9C9C9C"}},_e={radioUnselectedIcon:Object(j.a)(Object(j.a)({},Ee),{},{border:"1px solid #000"}),radioSelectedIcon:Object(j.a)(Object(j.a)({},Ee),{},{border:"1px solid #000",backgroundColor:"#000"})},Ae={label:{color:"#393939",fontWeight:600,fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},timeContainers:{height:40},actionsTray:{display:"flex",justifyContent:"space-between","& button":{flexGrow:0,marginLeft:15}}},Ie={searchField:{flexGrow:1,height:40,background:"#FFFFFF",borderRadius:5,border:"#EAEDEE 1px solid",display:"flex",justifyContent:"center",padding:"0 16px","& input":{fontSize:12,fontWeight:700,color:"#000","&::placeholder":{color:"#393939",opacity:1}},"&:hover":{borderColor:"#000"}}},Me={prefinedContainer:{maxWidth:840,width:"100%",margin:"0 auto"},predefinedTitle:{fontSize:16,fontWeight:600,color:"#000",margin:"10px 0"},predefinedList:{backgroundColor:"#eaeaea",padding:"12px 10px",color:"#393939",fontSize:12,fontWeight:600,minHeight:41},innerContent:{width:"100%",overflowX:"auto",whiteSpace:"nowrap",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},innerContentMultiline:{width:"100%",maxHeight:100,overflowY:"auto",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}},Le={obTitleSection:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:20},sectionTitle:{fontSize:22,color:"#000",fontWeight:600,height:40,lineHeight:"40px"},breadcrumbs:{fontSize:10,color:"#000",marginTop:2,"& a":{textDecoration:"none",color:"#000","&:hover":{textDecoration:"underline"}}}},De={multiSelectTable:{height:200}},Be={customTitle:{fontSize:18,color:"#000",fontWeight:600,padding:"12px 0",borderBottom:"#eaedee 1px solid",marginBottom:10,margin:"15px 38px 27px"},settingsFormContainer:{height:"calc(100vh - 421px)",padding:"15px 38px",overflowY:"auto",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},settingsButtonContainer:{borderTop:"1px solid #EAEAEA",padding:"15px 38px",textAlign:"right"},settingsOptionsContainer:{height:"calc(100vh - 244px)",backgroundColor:"#fff",border:"#EAEDEE 1px solid",borderRadius:3,marginTop:15},backButton:{cursor:"pointer",fontSize:10,fontWeight:600,color:"#000",backgroundColor:"transparent",border:0,padding:0,display:"flex",alignItems:"center","&:active, &:focus":{outline:0},"& svg":{width:10,marginRight:4}},backContainer:{margin:"20px 38px 0"}},Fe={logsSubContainer:{height:"calc(100vh - 230px)",padding:"15px 0"}},Re={singleValueContainer:{position:"relative",flexGrow:1,width:"100%",height:"100%",border:"#EAEAEA 1px solid",borderRadius:5,backgroundColor:"#fff"},titleContainer:{color:"#393939",fontWeight:600,height:15,textAlign:"center",fontSize:10},contentContainer:{flexGrow:2,justifyContent:"center",alignItems:"center",display:"flex",position:"absolute",width:"100%",height:"calc(100% - 15px)"},contentContainerWithLabel:{height:"calc(100% - 25px)"},legendBlock:{position:"absolute",bottom:5,display:"flex",width:"100%",height:15,flexWrap:"wrap",overflowY:"auto"},singleLegendContainer:{display:"flex",alignItems:"center",padding:"0 10px",maxWidth:"100%"},colorContainer:{width:8,height:8,minWidth:8,borderRadius:"100%",marginRight:5},legendLabel:{fontSize:"80%",color:"#393939",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},Pe={customTooltip:{backgroundColor:"rgba(255, 255, 255, 0.90)",border:"#eaeaea 1px solid",borderRadius:3,padding:"5px 10px",maxHeight:300,overflowY:"auto"},labelContainer:{display:"flex",alignItems:"center"},labelColor:{width:6,height:6,display:"block",borderRadius:"100%",marginRight:5},itemValue:{fontSize:"75%",color:"#393939"},valueContainer:{fontWeight:600},timeStampTitle:{fontSize:"80%",color:"#9c9c9c",textAlign:"center",marginBottom:6}},ze={snackBar:{backgroundColor:"#081F44",fontWeight:400,fontFamily:"Lato, sans-serif",fontSize:14,padding:"0px 20px 0px 20px;",boxShadow:"none","&.MuiPaper-root.MuiSnackbarContent-root":{borderRadius:"0px 0px 5px 5px"},"& div":{textAlign:"center",padding:"6px 30px",width:"100%",overflowX:"hidden",textOverflow:"ellipsis"}},errorSnackBar:{backgroundColor:"#C72C48",color:"#fff"},snackBarExternal:{top:"-17px",position:"absolute",minWidth:"348px",whiteSpace:"nowrap",height:"33px"},snackDiv:{top:"17px",left:"50%",position:"absolute"},snackBarModal:{top:0,position:"absolute",minWidth:"348px",whiteSpace:"nowrap",height:"33px",maxWidth:"calc(100% - 140px)"}},Ke={multiContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start"},sizeFactorContainer:{marginLeft:8,alignSelf:"flex-start"},headerElement:{position:"sticky",top:0,paddingTop:5,marginBottom:10,zIndex:500,backgroundColor:"#fff"},tableTitle:{fontWeight:700,width:"30%"},poolError:{color:"#dc1f2e",fontSize:"0.75rem",paddingLeft:120},error:{color:"#dc1f2e",fontSize:"0.75rem"},h3Section:{marginTop:0},descriptionText:{fontSize:13,color:"#777777"},container:{padding:"77px 0 0 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}},Ue=n(652),We=n(621);function qe(){return Object(a.jsxs)(v.a,{variant:"body2",color:"textSecondary",align:"center",children:["Copyright \xa9 ",Object(a.jsx)(We.a,{color:"inherit",href:"https://material-ui.com/",children:"MinIO"})," ",(new Date).getFullYear(),"."]})}var Ve=Object(w.a)((function(e){return{"@global":{body:{backgroundColor:e.palette.common.white}},paper:{marginTop:e.spacing(8),display:"flex",flexDirection:"column",alignItems:"center"}}})),Ge=function(){var e=Ve();return Object(a.jsxs)(ye.a,{component:"main",children:[Object(a.jsx)(xe.a,{}),Object(a.jsx)("div",{className:e.paper,children:Object(a.jsx)(v.a,{variant:"h1",component:"h1",children:"404 Not Found"})}),Object(a.jsx)(Ue.a,{mt:5,children:Object(a.jsx)(qe,{})})]})},He=n(632),Ye=n(41),Qe=n.n(Ye),Ze=n(88),Je=n.n(Ze),$e=n(351),Xe=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",children:[Object(a.jsx)("title",{children:"ic_h_copy-new_sl"}),Object(a.jsx)("g",{id:"Layer_2","data-name":"Layer 2",children:Object(a.jsx)("g",{id:"Layer_1-2","data-name":"Layer 1",children:Object(a.jsx)("path",{className:"cls-1",d:"M0,0V16H16V0ZM11.886,9.048H9.048v2.838h-2.1V9.048H4.114v-2.1H6.952V4.114h2.1V6.952h2.838Z"})})})]})})},et=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",children:Object(a.jsxs)("g",{id:"Group_55","data-name":"Group 55",transform:"translate(1002 -2555)",children:[Object(a.jsx)("rect",{id:"Rectangle_29",width:"2",height:"12",transform:"translate(-997 2555)",fill:"#fff"}),Object(a.jsx)("rect",{id:"Rectangle_30",width:"2",height:"12",transform:"translate(-990 2560) rotate(90)",fill:"#fff"})]})})})},tt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10.402 13",children:Object(a.jsx)("path",{d:"M6.761 1V0H3.64v1H.004v1h10.4V1zM.004 2.998l1.672 10h7.052l1.673-10zm3.412 8.243l-.552-6.478h.653l.553 6.472zm3.569 0h-.653l.551-6.472h.654z",className:"a"})})})},nt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(249 720)",children:[Object(a.jsx)("rect",{width:"6",height:"5",transform:"translate(-244 -720) rotate(90)"}),Object(a.jsx)("rect",{width:"4",height:"4",transform:"translate(-243 -720)"}),Object(a.jsx)("rect",{width:"5",height:"4",transform:"translate(-239 -715) rotate(90)"}),Object(a.jsx)("rect",{width:"5",height:"3",transform:"translate(-244 -710) rotate(180)"})]})})})},at=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsx)("path",{d:"M8.392,10H1.608L0,0H10Z"})})})},ct=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 6.131 10",children:Object(a.jsx)("g",{transform:"translate(193 719.787)",children:Object(a.jsxs)("g",{transform:"translate(-193 -719.787)",children:[Object(a.jsx)("path",{d:"M3,0h.131a3,3,0,0,1,3,3V5a0,0,0,0,1,0,0H0A0,0,0,0,1,0,5V3A3,3,0,0,1,3,0Z",transform:"translate(0 5)"}),Object(a.jsx)("ellipse",{cx:"2.065",cy:"2",rx:"2.065",ry:"2",transform:"translate(1 0)"})]})})})})},it=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9.5",children:Object(a.jsxs)("g",{transform:"translate(231 719.516)",children:[Object(a.jsx)("path",{d:"M-125.5,7.984a4.5,4.5,0,0,1,4.5-4.5,4.5,4.5,0,0,1,4.5,4.5Z",transform:"translate(-105 -720)"}),Object(a.jsx)("rect",{width:"10",height:"1",transform:"translate(-231 -711.016)"}),Object(a.jsx)("path",{d:"M-119.5.484h-3v1h1v1h1v-1h1Z",transform:"translate(-105 -720)"})]})})})},rt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9.787",children:Object(a.jsx)("g",{transform:"translate(177 719.787)",children:Object(a.jsxs)("g",{transform:"translate(-105 -720)",children:[Object(a.jsx)("path",{d:"M-65,5a3,3,0,0,0-1.131.224A3.981,3.981,0,0,1-65,8v2h3V8A3,3,0,0,0-65,5Z"}),Object(a.jsx)("path",{d:"M-72,10h6V8a3,3,0,0,0-3-3,3,3,0,0,0-3,3Z"}),Object(a.jsx)("path",{className:"a",d:"M-65,.213a1.993,1.993,0,0,0-1.384.561A2.967,2.967,0,0,1-66,2.213a2.964,2.964,0,0,1-.384,1.439A1.989,1.989,0,0,0-65,4.213a2,2,0,0,0,2-2A2,2,0,0,0-65,.213Z"}),Object(a.jsx)("circle",{cx:"2",cy:"2",r:"2",transform:"translate(-71 0.213)"})]})})})})},ot=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 8.75 10",children:Object(a.jsx)("path",{d:"M-44.625,10l-4.353-2.419L-53.375,10V0h8.75Z",transform:"translate(53.375)"})})})},st=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 9.998 10",children:Object(a.jsx)("g",{transform:"translate(140.999 720)",children:Object(a.jsxs)("g",{transform:"translate(-105 -720)",children:[Object(a.jsx)("rect",{width:"1.114",height:"1.667",transform:"translate(-27.116 8.333)"}),Object(a.jsx)("path",{d:"M-28.184,10H-29.3V8.154l2.182-3.037V3.147H-26V5.476l-2.182,3.037Z"}),Object(a.jsx)("rect",{width:"1.114",height:"2.963",transform:"translate(-31.531)"}),Object(a.jsx)("rect",{width:"1.114",height:"2.132",transform:"translate(-27.115 0)"}),Object(a.jsx)("rect",{width:"1.114",height:"5.389",transform:"translate(-29.298)"}),Object(a.jsx)("path",{d:"M-30.417,10h-1.114V5.722l-2.233-3V0h1.114V2.353l2.233,3Z"}),Object(a.jsx)("path",{d:"M-32.65,10h-1.114V6.185l-2.234-3V0h1.114V2.815l2.234,3Z"}),Object(a.jsx)("rect",{width:"1.114",height:"4.463",transform:"translate(-35.999 5.537)"})]})})})})},lt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:[Object(a.jsx)("rect",{width:"1.433",height:"1"}),Object(a.jsx)("rect",{width:"7.828",height:"1",transform:"translate(2.172)"}),Object(a.jsx)("rect",{width:"1.433",height:"1",transform:"translate(0 6)"}),Object(a.jsx)("rect",{width:"1.433",height:"1",transform:"translate(0 3)"}),Object(a.jsx)("rect",{width:"1.433",height:"1",transform:"translate(0 9)"}),Object(a.jsx)("rect",{width:"1.368",height:"0.569",transform:"translate(6.316 9)"}),Object(a.jsx)("path",{d:"M5.566,9.569v-.31l-.238-.138-.269.155-.65.375L4.034,9V9H2.172v1H5.566Z"}),Object(a.jsx)("path",{d:"M9.966,9l-.375.65-.65-.375-.269-.155-.238.138V10H10V9H9.967Z"}),Object(a.jsx)("path",{d:"M3.625,6.793l.269-.155V6.362l-.269-.155L3.266,6H2.172V7H3.266Z"}),Object(a.jsx)("path",{d:"M8.434,3.431v.31l.238.138.269-.155.649-.375L9.966,4V4H10V3H8.434Z"}),Object(a.jsx)("path",{d:"M4.034,4l.375-.65.65.375.269.155.238-.138V3H2.172V4H4.033Z"}),Object(a.jsx)("path",{d:"M9.356,5.929,10,5.558,9.316,4.373l-.644.372-.988-.571V3.431H6.316v.743l-.988.571-.644-.372L4,5.558l.644.371V7.071L4,7.442l.684,1.185.644-.372.988.571v.743H7.684V8.826l.988-.571.644.372L10,7.442l-.644-.371ZM7,7.278A.778.778,0,1,1,7.778,6.5.779.779,0,0,1,7,7.278Z"})]})})},dt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9",children:Object(a.jsxs)("g",{transform:"translate(79 438.479)",children:[Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("rect",{x:"-77.9",y:"-434.5",width:"7.8",height:"1"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("rect",{x:"-77.9",y:"-434.5",transform:"matrix(0.4999 -0.8661 0.8661 0.4999 338.8698 -281.1237)",width:"7.8",height:"1"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("rect",{x:"-74.5",y:"-437.9",transform:"matrix(0.866 -0.5001 0.5001 0.866 207.1129 -95.1668)",width:"1",height:"7.8"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-71.8-430.1h-4.5l-2.2-3.9l2.2-3.9h4.5l2.2,3.9L-71.8-430.1z M-75.7-431.1h3.3l1.7-2.9l-1.7-2.9h-3.3 l-1.7,2.9L-75.7-431.1z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-72.3-434c0,0.9-0.7,1.7-1.7,1.7c-0.9,0-1.7-0.7-1.7-1.7c0-0.9,0.7-1.7,1.7-1.7 C-73.1-435.7-72.3-434.9-72.3-434z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-76.8-434c0,0.6-0.5,1.1-1.1,1.1c0,0,0,0,0,0c-0.6,0-1.1-0.5-1.1-1.1c0,0,0,0,0,0c0-0.6,0.5-1.1,1.1-1.1 c0,0,0,0,0,0C-77.3-435.1-76.8-434.6-76.8-434C-76.8-434-76.8-434-76.8-434z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-69-434c0,0.6-0.5,1.1-1.1,1.1c0,0,0,0,0,0c-0.6,0-1.1-0.5-1.1-1.1c0,0,0,0,0,0c0-0.6,0.5-1.1,1.1-1.1 c0,0,0,0,0,0C-69.5-435.1-69-434.6-69-434C-69-434-69-434-69-434z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-75.4-431.6c0.5,0.3,0.7,1,0.4,1.5c-0.3,0.5-1,0.7-1.5,0.4c0,0,0,0,0,0c-0.5-0.3-0.7-1-0.4-1.5 C-76.6-431.7-75.9-431.9-75.4-431.6C-75.4-431.6-75.4-431.6-75.4-431.6z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-71.5-438.3c0.5,0.3,0.7,1,0.4,1.5c-0.3,0.5-1,0.7-1.5,0.4c0,0,0,0,0,0c-0.5-0.3-0.7-1-0.4-1.5 C-72.7-438.5-72-438.6-71.5-438.3C-71.5-438.3-71.5-438.3-71.5-438.3z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-72.6-431.6c0.5-0.3,1.2-0.1,1.5,0.4c0,0,0,0,0,0c0.3,0.5,0.1,1.2-0.4,1.5c-0.5,0.3-1.2,0.1-1.5-0.4 c0,0,0,0,0,0C-73.3-430.6-73.1-431.3-72.6-431.6z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-76.5-438.3c0.5-0.3,1.2-0.1,1.5,0.4c0,0,0,0,0,0c0.3,0.5,0.1,1.2-0.4,1.5c-0.5,0.3-1.2,0.1-1.5-0.4 c0,0,0,0,0,0C-77.2-437.3-77-438-76.5-438.3z"})})})]})})})},ut=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(61 439)",children:[Object(a.jsx)("rect",{width:"1.5",height:"10",transform:"translate(-56.75 -439)"}),Object(a.jsx)("path",{d:"M6.5,10V0h.572L10,10Z",transform:"translate(-61 -439)"}),Object(a.jsx)("path",{d:"M3.5,10V0H2.928L0,10Z",transform:"translate(-61 -439)"})]})})})},bt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(43 439)",children:[Object(a.jsx)("path",{d:"M27.5,10",transform:"translate(-61 -439)"}),Object(a.jsx)("rect",{width:"1.5",height:"2",transform:"translate(-43 -431)"}),Object(a.jsx)("rect",{width:"1.5",height:"6",transform:"translate(-38.75 -435)"}),Object(a.jsx)("rect",{width:"1.5",height:"8",transform:"translate(-36.625 -437)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-40.875 -433)"}),Object(a.jsx)("rect",{width:"1.5",height:"10",transform:"translate(-34.5 -439)"}),Object(a.jsx)("path",{d:"M18.5,10",transform:"translate(-61 -439)"})]})})})},jt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsx)("g",{transform:"translate(213 720)",children:Object(a.jsxs)("g",{transform:"translate(-105 -720)",children:[Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-108)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-108 6)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-99.5 6)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-99.5)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-98) rotate(90)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-104) rotate(90)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-104 8.5) rotate(90)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-98 8.5) rotate(90)"}),Object(a.jsx)("circle",{cx:"2",cy:"2",r:"2",transform:"translate(-105 3)"})]})})})})},mt="ADD_BUCKET_OPEN",pt="ADD_BUCKET_NAME",ht="ADD_BUCKET_VERSIONED",Ot="ADD_BUCKET_LOCKING",gt="ADD_BUCKET_QUOTA",ft="ADD_BUCKET_QUOTA_TYPE",xt="ADD_BUCKET_QUOTA_SIZE",vt="ADD_BUCKET_QUOTA_UNIT",yt="ADD_BUCKET_RESET",Ct="ADD_BUCKET_RETENTION",St="ADD_BUCKET_RETENTION_MODE",kt="ADD_BUCKET_RETENTION_UNIT",wt="ADD_BUCKET_RETENTION_VALIDITY";var Nt=n(25),Tt=n(63),Et=n.n(Tt),_t=n(568),At=n(614),It=n(658),Mt=n(85),Lt=n(308),Dt=n.n(Lt),Bt=n(187),Ft=n.n(Bt),Rt=n(307),Pt=n.n(Rt),zt="#081C42",Kt="#081C42",Ut=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 11.856",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M-54,8l1.764,2.614A7.52,7.52,0,0,0-46,13.928h0a7.52,7.52,0,0,0,6.234-3.314L-38,8l-1.764-2.614A7.52,7.52,0,0,0-46,2.072h0a7.52,7.52,0,0,0-6.234,3.314Zm10.286,0A2.285,2.285,0,0,1-46,10.286,2.285,2.285,0,0,1-48.286,8,2.285,2.285,0,0,1-46,5.714,2.285,2.285,0,0,1-43.714,8Zm1.3,0A3.59,3.59,0,0,1-46,11.59,3.59,3.59,0,0,1-49.59,8,3.59,3.59,0,0,1-46,4.41,3.59,3.59,0,0,1-42.41,8Z",transform:"translate(54 -2.072)"})})},Wt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 13.833 13.833",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M2.934,16H0V13.066L10.607,2.459a1,1,0,0,1,1.414,0l1.52,1.52a1,1,0,0,1,0,1.414Z",transform:"translate(0 -2.167)"})})},qt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 13 13",children:[Object(a.jsx)("path",{fill:n?Kt:zt,d:"M11.05 8.617v2.429h-9.1v-9.1h2.429v-1.95H0v13h13V8.617z",className:"a"}),Object(a.jsx)("path",{fill:n?Kt:zt,d:"M3.854 9.256h1.95a4.945 4.945 0 013.6-4.74v1.3l.6-.487 2.474-2.012L9.4.817v1.7a6.9 6.9 0 00-5.546 6.739z",className:"a"})]})},Vt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 10.402 13",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M6.761 1V0H3.64v1H.004v1h10.4V1zM.004 2.998l1.672 10h7.052l1.673-10zm3.412 8.243l-.552-6.478h.653l.553 6.472zm3.569 0h-.653l.551-6.472h.654z"})})},Gt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 10 11.429",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M-43.375,11.429-48.35,8.664l-5.025,2.764V0h10Z",transform:"translate(53.375)"})})},Ht=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"})})},Yt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"})})},Qt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 13 12.996",children:[Object(a.jsx)("path",{fill:n?Kt:zt,d:"M11.05 9.096v1.95h-9.1v-1.95H0v3.9h13v-3.9z"}),Object(a.jsx)("path",{fill:n?Kt:zt,d:"M6.5 9.75L9 6.672H7.475V0h-1.95v6.672H4z"})]})},Zt=n(37),Jt=function(e,t){switch(e){case"view":return Object(a.jsx)(Ut,{active:t});case"edit":return Object(a.jsx)(Wt,{active:t});case"delete":return Object(a.jsx)(Vt,{active:t});case"description":return Object(a.jsx)(Gt,{active:t});case"share":return Object(a.jsx)(qt,{active:t});case"cloud":return Object(a.jsx)(Ht,{active:t});case"console":return Object(a.jsx)(Yt,{active:t});case"download":return Object(a.jsx)(Qt,{active:t})}return null},$t=Object(N.a)((function(){return Object(k.a)({spacing:{margin:"0 8px"}})}))((function(e){var t=e.type,n=e.onClick,c=e.valueToSend,i=e.idField,r=e.selected,o=e.to,s=e.sendOnlyId,l=void 0!==s&&s,d=e.classes,u=l?c[i]:c,b=Object(a.jsx)(_t.a,{"aria-label":t,size:"small",onClick:n?function(e){e.stopPropagation(),n(u)}:function(){return null},className:d.spacing,children:Jt(t,r)});return n?b:Et()(o)?Object(a.jsx)(Zt.a,{to:"".concat(o,"/").concat(u),onClick:function(e){e.stopPropagation()},children:b}):null})),Xt=n(661),en=n(666),tn=function(e){return Object(a.jsxs)($e.a,Object(j.a)(Object(j.a)({},e),{},{viewBox:"0 0 12 12",children:[Object(a.jsx)("path",{d:"M357.14,346a5,5,0,1,1-5,5,5,5,0,0,1,5-5m0-1a6,6,0,1,0,6,6,6,6,0,0,0-6-6Z",transform:"translate(-351.14 -345.03)"}),Object(a.jsx)("path",{d:"M356.21,352.42v-1.86h.52c1.23,0,1.92-.45,1.92-1.29s-.68-1.18-1.89-1.18a8.07,8.07,0,0,0-.93.06l-.1-1.25a9.13,9.13,0,0,1,1.08-.08c2,0,3.19.94,3.19,2.4s-.93,2.24-2.64,2.46l-.05.74Zm1.56,1.8a1,1,0,1,1-1-1A1,1,0,0,1,357.77,354.22Z",transform:"translate(-351.14 -345.03)"})]}))},nn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),Te),{},{fieldContainer:Object(j.a)(Object(j.a)({},Se.fieldContainer),{},{display:"flex",justifyContent:"flex-start",alignItems:"center",margin:"15px 0",marginBottom:0,flexBasis:"initial"})}))}))((function(e){var t=e.label,n=e.onChange,c=e.value,r=e.id,o=e.name,s=e.checked,l=void 0!==s&&s,d=e.disabled,u=void 0!==d&&d,b=e.tooltip,j=void 0===b?"":b,m=e.classes;return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:m.fieldContainer,children:[Object(a.jsx)("div",{children:Object(a.jsx)(It.a,{name:o,id:r,value:c,color:"primary",inputProps:{"aria-label":"secondary checkbox"},checked:l,onChange:n,checkedIcon:Object(a.jsx)("span",{className:m.checkedIcon}),icon:Object(a.jsx)("span",{className:m.unCheckedIcon}),disabled:u})}),""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:r,className:m.inputLabel,children:[Object(a.jsx)("span",{children:t}),""!==j&&Object(a.jsx)("div",{className:m.tooltipContainer,children:Object(a.jsx)(en.a,{title:j,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:m.tooltip})})})})]})]})})})),an="#9c9c9c80",cn={fontWeight:400,fontSize:14,borderColor:an,borderWidth:"0.5px",height:40,transitionDuration:"0.3s",padding:"initial",paddingRight:6,paddingLeft:6},rn=function(e,t,n,i,r,o,s,l,d,u,b){var j=function(e,t,n,a,c,i,r){var o=Object(Nt.a)(e);i&&(o=e.filter((function(e){return r.includes(e.elementKey)})));var s=t;return a&&(s-=45),c&&(s-=n),o.reduce((function(e,t){return t.width?e-t.width:e}),s)/o.filter((function(e){return!e.width})).length}(e,t,n,i,r,l,d);return e.map((function(e,t){if(l&&!d.includes(e.elementKey))return null;var n=!e.enableSort||!e.enableSort;return Object(a.jsx)(Mt.b,{dataKey:e.elementKey,headerClassName:"titleHeader ".concat(e.headerTextAlign?"text-".concat(e.headerTextAlign):""),headerRenderer:function(){return Object(a.jsxs)(c.Fragment,{children:[u===e.elementKey&&Object(a.jsx)(c.Fragment,{children:"ASC"===b?Object(a.jsx)(Pt.a,{}):Object(a.jsx)(Ft.a,{})}),e.label]})},className:e.contentTextAlign?"text-".concat(e.contentTextAlign):"",cellRenderer:function(t){var n=t.rowData,i=!!o&&o.includes(Et()(n)?n:n[s]);return function(e,t,n){var i=Et()(e)?e:Z()(e,t.elementKey,null),r=t.renderFullObject?e:i,o=t.renderFunction?t.renderFunction(r):r;return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)("span",{className:n?"selected":"",children:o})})}(n,e,i)},width:e.width||j,disableSort:n,defaultSortDirection:"ASC"},"col-tb-".concat(t.toString()))}))},on=Object(N.a)((function(){return Object(k.a)(Object(j.a)(Object(j.a)({dialogContainer:{padding:"12px 26px 22px"},paper:{display:"flex",overflow:"auto",flexDirection:"column",padding:"19px 38px",boxShadow:"none",border:"#EAEDEE 1px solid",borderRadius:3,minHeight:200,overflowY:"scroll",position:"relative","&::-webkit-scrollbar":{width:3,height:3}},noBackground:{backgroundColor:"transparent",border:0},defaultPaperHeight:{height:"calc(100vh - 205px)"},allTableSettings:{"& .MuiTableCell-sizeSmall:last-child":{paddingRight:"initial"},"& .MuiTableCell-body.MuiTableCell-sizeSmall:last-child":{paddingRight:6}},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:700,fontSize:14,borderColor:"#39393980",borderWidth:"0.5px",padding:"6px 0 10px"}}},rowUnselected:Object(j.a)(Object(j.a)({},cn),{},{color:"#393939"}),rowSelected:Object(j.a)(Object(j.a)({},cn),{},{color:"#081C42",fontWeight:600}),paginatorContainer:{display:"flex",justifyContent:"flex-end",padding:"5px 38px"},checkBoxHeader:{width:50,textAlign:"left",paddingRight:10,"&.MuiTableCell-paddingCheckbox":{paddingBottom:4,paddingLeft:0}},actionsContainer:{width:150,borderColor:an},paginatorComponent:{borderBottom:0},checkBoxRow:{borderColor:an,padding:"0 10px 0 0"},loadingBox:{paddingTop:"100px",paddingBottom:"100px"},overlayColumnSelection:{position:"absolute",right:0,top:0},popoverContainer:{position:"relative"},popoverContent:{maxHeight:250,overflowY:"auto",padding:"0 10px 10px"},shownColumnsLabel:{color:"#9c9c9c",fontSize:12,padding:10,borderBottom:"#eaeaea 1px solid",width:"100%"},"@global":{".rowLine":{borderBottom:"1px solid ".concat(an),height:40,color:"#393939",fontSize:14,transitionDuration:.3,"&:focus":{outline:"initial"},"&:hover:not(.ReactVirtualized__Table__headerRow)":{userSelect:"none",backgroundColor:"#ececec",fontWeight:600,"&.canClick":{cursor:"pointer"},"&.canSelectText":{userSelect:"text"}},"& .selected":{color:"#081C42",fontWeight:600}},".headerItem":{userSelect:"none",fontWeight:700,fontSize:14,fontStyle:"initial",display:"flex",alignItems:"center",outline:"none"},".ReactVirtualized__Table__headerRow":{fontWeight:700,fontSize:14,borderColor:"#39393980",textTransform:"initial"},".optionsAlignment":{textAlign:"center"},".text-center":{textAlign:"center"},".text-right":{textAlign:"right"},".progress-enabled":{paddingTop:3,display:"inline-block",margin:"0 10px",position:"relative",width:18,height:18},".progress-enabled > .MuiCircularProgress-root":{position:"absolute",left:0,top:3}}},Te),_e))}))((function(e){var t=e.itemActions,n=e.columns,r=e.onSelect,o=e.records,s=e.isLoading,l=e.loadingMessage,d=void 0===l?Object(a.jsx)(v.a,{component:"h3",children:"Loading..."}):l,j=e.entityName,m=e.selectedItems,p=e.idField,h=e.classes,O=e.radioSelection,g=void 0!==O&&O,f=e.customEmptyMessage,k=void 0===f?"":f,w=e.customPaperHeight,N=void 0===w?"":w,T=e.noBackground,E=void 0!==T&&T,_=e.columnsSelector,A=void 0!==_&&_,I=e.textSelectable,M=void 0!==I&&I,L=e.columnsShown,D=void 0===L?[]:L,B=e.onColumnChange,F=void 0===B?function(e,t){}:B,R=e.infiniteScrollConfig,P=e.sortConfig,z=e.autoScrollToBottom,K=void 0!==z&&z,U=Object(c.useState)(!1),W=Object(b.a)(U,2),q=W[0],V=W[1],G=i.a.useState(null),H=Object(b.a)(G,2),Y=H[0],Q=H[1],Z=t?t.find((function(e){return"view"===e.type})):null,J=function(e){V(!q),Q(e.currentTarget)},$=function(){V(!1),Q(null)};return Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:"".concat(h.paper," ").concat(E?h.noBackground:""," ").concat(""!==N?N:h.defaultPaperHeight),children:[s&&Object(a.jsxs)(x.a,{container:!0,className:h.loadingBox,children:[Object(a.jsx)(x.a,{item:!0,xs:12,style:{textAlign:"center"},children:d}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]}),A&&!s&&o.length>0&&Object(a.jsx)("div",{className:h.overlayColumnSelection,children:function(e){return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(_t.a,{"aria-describedby":"columnsSelector",color:"primary",onClick:J,children:Object(a.jsx)(Dt.a,{fontSize:"inherit"})}),Object(a.jsxs)(At.a,{anchorEl:Y,id:"columnsSelector",open:q,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:$,className:h.popoverContainer,children:[Object(a.jsx)("div",{className:h.shownColumnsLabel,children:"Shown Columns"}),Object(a.jsx)("div",{className:h.popoverContent,children:e.map((function(e){return Object(a.jsx)(nn,{label:e.label,checked:D.includes(e.elementKey),onChange:function(t){F(e.elementKey,t.target.checked)},id:"chbox-".concat(e.label),name:"chbox-".concat(e.label),value:e.label},"tableColumns-".concat(e.label))}))})]})]})}(n)}),o&&!s&&o.length>0?Object(a.jsx)(Mt.c,{isRowLoaded:function(e){var t=e.index;return!!o[t]},loadMoreRows:R?R.loadMoreRecords:function(){return new Promise((function(){return!0}))},rowCount:R?R.recordsCount:o.length,children:function(e){var i=e.onRowsRendered,s=e.registerChild;return Object(a.jsx)(Mt.a,{children:function(e){var l=e.width,d=e.height,b=function(e,t){var n=45*t;return n<80?80:n>e?e:n}(l,t?t.filter((function(e){return"view"!==e.type})).length:0),O=!(!r||!m),f=!!(t&&t.length>1||t&&1===t.length&&"view"!==t[0].type);return Object(a.jsxs)(Mt.d,{ref:s,disableHeader:!1,headerClassName:"headerItem",headerHeight:40,height:d,noRowsRenderer:function(){return Object(a.jsx)(c.Fragment,{children:""!==k?k:"There are no ".concat(j," yet.")})},overscanRowCount:10,rowHeight:40,width:l,rowCount:o.length,rowGetter:function(e){var t=e.index;return o[t]},onRowClick:function(e){!function(e){if(Z){var t=Z.sendOnlyId?e[p]:e;if(Z.to)return void u.push("".concat(Z.to,"/").concat(t));Z.onClick&&Z.onClick(t)}}(e.rowData)},rowClassName:"rowLine ".concat(Z?"canClick":""," ").concat(!Z&&M?"canSelectText":""),onRowsRendered:i,sort:P?P.triggerSort:void 0,sortBy:P?P.currentSort:void 0,sortDirection:P?P.currentDirection:void 0,scrollToIndex:K?o.length-1:-1,children:[O&&Object(a.jsx)(Mt.b,{headerRenderer:function(){return Object(a.jsx)(c.Fragment,{children:"Select"})},dataKey:p,width:45,cellRenderer:function(e){var t=e.rowData,n=!!m&&m.includes(Et()(t)?t:t[p]);return Object(a.jsx)(It.a,{value:Et()(t)?t:t[p],color:"primary",inputProps:{"aria-label":"secondary checkbox"},checked:n,onChange:r,onClick:function(e){e.stopPropagation()},checkedIcon:Object(a.jsx)("span",{className:g?h.radioSelectedIcon:h.checkedIcon}),icon:Object(a.jsx)("span",{className:g?h.radioUnselectedIcon:h.unCheckedIcon})})}}),rn(n,l,b,O,f,m||[],p,A,D,P?P.currentSort:"",P?P.currentDirection:void 0),f&&Object(a.jsx)(Mt.b,{headerRenderer:function(){return Object(a.jsx)(c.Fragment,{children:"Options"})},dataKey:p,width:b,headerClassName:"optionsAlignment",className:"optionsAlignment",cellRenderer:function(e){var n=e.rowData,c=!!m&&m.includes(Et()(n)?n:n[p]);return function(e,t,n,c){return e.map((function(e,i){if("view"===e.type)return null;var r="string"===typeof t?t:t[c];return e.hideButtonFunction&&e.hideButtonFunction(r)?null:e.showLoaderFunction&&e.showLoaderFunction(r)?Object(a.jsx)("div",{className:"progress-enabled",children:Object(a.jsx)(C.a,{color:"primary",size:18,variant:"indeterminate"},"actions-loader-".concat(e.type,"-").concat(i.toString()))}):Object(a.jsx)($t,{type:e.type,onClick:e.onClick,to:e.to,valueToSend:t,selected:n,idField:c,sendOnlyId:!!e.sendOnlyId},"actions-".concat(e.type,"-").concat(i.toString()))}))}(t||[],n,c,p)}})]})}})}}):Object(a.jsx)(c.Fragment,{children:!s&&Object(a.jsx)("div",{children:""!==k?k:"There are no ".concat(j," yet.")})})]})})})),sn=n(624),ln=n(625),dn=n(626),un={content:'" "',borderLeft:"2px solid #9C9C9C",height:33,width:1,position:"absolute"},bn=Object(s.b)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:V}),jn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({dialogContainer:{padding:"8px 15px 22px"},closeContainer:{textAlign:"right"},closeButton:{width:45,height:45,padding:0,backgroundColor:"initial","&:hover":{backgroundColor:"initial"},"&:active":{backgroundColor:"initial"}},modalCloseIcon:{fontSize:35,color:"#9C9C9C",fontWeight:300,"&:hover":{color:"#9C9C9C"}},closeIcon:{"&::before":Object(j.a)(Object(j.a)({},un),{},{transform:"rotate(45deg)"}),"&::after":Object(j.a)(Object(j.a)({},un),{},{transform:"rotate(-45deg)"}),"&:hover::before, &:hover::after":{borderColor:"#9C9C9C"},width:24,height:24,display:"block",position:"relative"},titleClass:{padding:"0px 50px 12px","& h2":{fontWeight:600,color:"#000",fontSize:22}},modalContent:{padding:"0 50px"},customDialogSize:{width:"100%",maxWidth:765}},ze))}))(bn((function(e){var t=e.onClose,n=e.modalOpen,i=e.title,r=e.children,o=e.classes,s=e.wideLimit,l=void 0===s||s,d=e.modalSnackMessage,u=e.setModalSnackMessage,m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1];Object(c.useEffect)((function(){if(d){if(""===d.message)return void O(!1);O(!0)}}),[d]);var g=l?{classes:{paper:o.customDialogSize}}:{maxWidth:"md",fullWidth:!0};return Object(a.jsx)(sn.a,Object(j.a)(Object(j.a)({open:n,onClose:t,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description"},g),{},{children:Object(a.jsxs)("div",{className:o.dialogContainer,children:[Object(a.jsx)(Ce.a,{open:h,className:o.snackBarModal,onClose:function(){O(!1),u("")},message:d?d.message:"",ContentProps:{className:"".concat(o.snackBar," ").concat(d&&"error"===d.type?o.errorSnackBar:"")},autoHideDuration:d&&"error"===d.type?1e4:5e3}),Object(a.jsx)("div",{className:o.closeContainer,children:Object(a.jsx)(_t.a,{"aria-label":"close",className:o.closeButton,onClick:t,disableRipple:!0,children:Object(a.jsx)("span",{className:o.closeIcon})})}),Object(a.jsx)(ln.a,{id:"alert-dialog-title",className:o.titleClass,children:i}),Object(a.jsx)(dn.a,{className:o.modalContent,children:r})]})}))}))),mn=Object(w.a)((function(e){return Object(k.a)({root:{borderRadius:0,"&::before":{borderColor:"#9c9c9c"}},disabled:{"&.MuiInput-underline::before":{borderColor:"#eaeaea",borderBottomStyle:"solid"}},input:{padding:"15px 30px 10px 5px",color:"#393939",fontSize:13,fontWeight:600,"&:placeholder":{color:"#393939",opacity:1}},error:{color:"#b53b4b"}})}));function pn(e){var t=mn();return Object(a.jsx)(f.a,Object(j.a)({InputProps:{classes:t}},e))}var hn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{textBoxContainer:{flexGrow:1},textBoxWithIcon:{position:"relative",paddingRight:25},errorState:{color:"#b53b4b",fontSize:14,position:"absolute",top:7,right:7},overlayAction:{position:"absolute",right:0,top:15,"& svg":{maxWidth:15,maxHeight:15}}}))}))((function(e){var t=e.label,n=e.onChange,c=e.value,r=e.id,o=e.name,s=e.type,l=void 0===s?"text":s,d=e.autoComplete,u=void 0===d?"off":d,b=e.disabled,j=void 0!==b&&b,m=e.multiline,p=void 0!==m&&m,h=e.tooltip,O=void 0===h?"":h,g=e.index,f=void 0===g?0:g,v=e.error,y=void 0===v?"":v,C=e.required,S=void 0!==C&&C,k=e.placeholder,w=void 0===k?"":k,N=e.min,T=e.max,E=e.overlayIcon,_=void 0===E?null:E,A=e.overlayAction,I=e.classes,M={"data-index":f};return"number"===l&&N&&(M.min=N),"number"===l&&T&&(M.max=T),Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(I.fieldContainer," ").concat(""!==y?I.errorInField:""),children:[""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:r,className:I.inputLabel,children:[Object(a.jsxs)("span",{children:[t,S?"*":""]}),""!==O&&Object(a.jsx)("div",{className:I.tooltipContainer,children:Object(a.jsx)(en.a,{title:O,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:I.tooltip})})})})]}),Object(a.jsx)("div",{className:I.textBoxContainer,children:Object(a.jsx)(pn,{id:r,name:o,fullWidth:!0,value:c,disabled:j,onChange:n,type:l,multiline:p,autoComplete:u,inputProps:M,error:""!==y,helperText:y,placeholder:w,className:I.inputRebase})}),_&&Object(a.jsx)("div",{className:I.overlayAction,children:Object(a.jsx)(_t.a,{onClick:A?function(){A()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:_})})]})})})),On=n(356),gn=n(613),fn=n(655),xn=n(627),vn=Object(N.a)((function(e){return Object(k.a)({root:{lineHeight:1,"label + &":{marginTop:e.spacing(3)}},input:{position:"relative",color:"#393939",fontSize:13,fontWeight:600,padding:"15px 20px 10px 10px",borderBottom:"1px solid #9c9c9c",display:"flex",alignItems:"center","&:hover":{borderColor:"#393939"},"&:focus":{backgroundColor:"#fff"}}})}))(On.a),yn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},Se),we))}))((function(e){var t=e.classes,n=e.id,c=e.name,r=e.onChange,o=e.options,s=e.label,l=e.tooltip,d=void 0===l?"":l,u=e.value,b=e.disabled,j=void 0!==b&&b;return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.fieldContainer,children:[""!==s&&Object(a.jsxs)(Xt.a,{htmlFor:n,className:t.inputLabel,children:[Object(a.jsx)("span",{children:s}),""!==d&&Object(a.jsx)("div",{className:t.tooltipContainer,children:Object(a.jsx)(en.a,{title:d,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:t.tooltip})})})})]}),Object(a.jsx)(gn.a,{fullWidth:!0,children:Object(a.jsx)(fn.a,{id:n,name:c,value:u,onChange:r,input:Object(a.jsx)(vn,{}),disabled:j,children:o.map((function(e){return Object(a.jsx)(xn.a,{value:e.value,children:e.label},"select-".concat(c,"-").concat(e.label))}))})})]})})})),Cn=n(671),Sn=n(628),kn=n(656),wn=Object(w.a)(Object(j.a)({root:{"&:hover":{backgroundColor:"transparent"}}},_e)),Nn=function(e){var t=wn();return Object(a.jsx)(kn.a,Object(j.a)({className:t.root,disableRipple:!0,color:"default",checkedIcon:Object(a.jsx)("span",{className:t.radioSelectedIcon}),icon:Object(a.jsx)("span",{className:t.radioUnselectedIcon})},e))},Tn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{radioBoxContainer:{},fieldContainer:Object(j.a)(Object(j.a)({},Se.fieldContainer),{},{display:"flex",justifyContent:"space-between",borderBottom:"#9c9c9c 1px solid",paddingBottom:10,marginTop:11}),optionLabel:{"&.Mui-disabled":{"& .MuiFormControlLabel-label":{color:"#9c9c9c"}},"&:last-child":{marginRight:0},"& .MuiFormControlLabel-label":{fontSize:12,color:"#000"}},checkedOption:{"& .MuiFormControlLabel-label":{fontSize:12,color:"#000",fontWeight:700}}}))}))((function(e){var t=e.selectorOptions,n=void 0===t?[]:t,c=e.currentSelection,r=e.label,o=e.id,s=e.name,l=e.onChange,d=e.tooltip,u=void 0===d?"":d,b=e.disableOptions,j=void 0!==b&&b,m=e.classes,p=e.displayInColumn,h=void 0!==p&&p;return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:m.fieldContainer,children:[Object(a.jsxs)(Xt.a,{htmlFor:o,className:m.inputLabel,children:[Object(a.jsx)("span",{children:r}),""!==u&&Object(a.jsx)("div",{className:m.tooltipContainer,children:Object(a.jsx)(en.a,{title:u,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:m.tooltip})})})})]}),Object(a.jsx)("div",{className:m.radioBoxContainer,children:Object(a.jsx)(Cn.a,{"aria-label":o,id:o,name:s,value:c,onChange:l,row:!h,children:n.map((function(e){return Object(a.jsx)(Sn.a,{value:e.value,control:Object(a.jsx)(Nn,{}),label:e.label,disabled:j,className:Object(fe.a)(m.optionLabel,Object(ge.a)({},m.checkedOption,e.value===c))},"rd-".concat(s,"-").concat(e.value))}))})})]})})})),En=n(664),_n=n(629),An=Object(N.a)({root:{alignItems:"flex-start",height:18,padding:"0 12px",display:"flex",position:"relative"},switchBase:{color:"#fff",padding:0,top:"initial","&$checked":{color:"#fff"},"&$checked + $track":{backgroundColor:"#081C42",opacity:1,height:15},"&:hover":{backgroundColor:"#fff"}},checked:{},track:{height:15,backgroundColor:"#9C9C9C",border:"#081C42 1px solid",opacity:1,padding:0,marginTop:1.5,"&$checked":{backgroundColor:"#081C42"}},thumb:{backgroundColor:"#fff",border:"#081C42 1px solid",boxShadow:"none",width:18,height:18,padding:0,marginLeft:10}})(_n.a),In=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#081C42",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#081C42"}}},divContainer:{borderBottom:"#9c9c9c 1px solid",paddingBottom:14,marginBottom:20},wrapperContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",maxWidth:840,margin:"0px auto"},indicatorLabel:{fontSize:12,fontWeight:600,color:"#081C42",margin:"0 8px 0 10px"},switchContainer:{display:"flex"},fieldDescription:{marginTop:4,color:"#999999"}},Ae),Se))}))((function(e){var t=e.label,n=void 0===t?"":t,c=e.onChange,r=e.value,o=e.id,s=e.name,l=e.checked,d=void 0!==l&&l,u=e.disabled,b=void 0!==u&&u,j=e.switchOnly,m=void 0!==j&&j,p=e.tooltip,h=void 0===p?"":p,O=e.description,g=void 0===O?"":O,f=e.indicatorLabels,y=void 0===f?[]:f,C=e.containerClass,S=void 0===C?"":C,k=e.classes,w=Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)("div",{className:"".concat(k.switchContainer," ").concat(S),children:[Object(a.jsx)(An,{checked:d,onChange:c,color:"primary",name:s,inputProps:{"aria-label":"primary checkbox"},disabled:b,disableRipple:!0,disableFocusRipple:!0,disableTouchRipple:!0,value:r}),2===y.length&&Object(a.jsx)("span",{className:k.indicatorLabel,children:d?y[0]:y[1]})]})});return m?w:Object(a.jsxs)("div",{className:k.divContainer,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:k.wrapperContainer,children:[""!==n&&Object(a.jsxs)(Xt.a,{htmlFor:o,className:k.inputLabel,children:[Object(a.jsx)("span",{children:n}),""!==h&&Object(a.jsx)("div",{className:k.tooltipContainer,children:Object(a.jsx)(en.a,{title:h,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:k.tooltip})})})})]}),w]}),""!==g&&Object(a.jsx)(x.a,{item:!0,xs:10,children:Object(a.jsx)(v.a,{component:"p",className:k.fieldDescription,children:g})})]})})),Mn=Object(s.b)((function(e){return{addBucketModalOpen:e.buckets.open,bucketName:e.buckets.addBucketName,versioningEnabled:e.buckets.addBucketVersioningEnabled,lockingEnabled:e.buckets.addBucketLockingEnabled,quotaEnabled:e.buckets.addBucketQuotaEnabled,quotaType:e.buckets.addBucketQuotaType,quotaSize:e.buckets.addBucketQuotaSize,quotaUnit:e.buckets.addBucketQuotaUnit,retentionEnabled:e.buckets.addBucketRetentionEnabled,retentionMode:e.buckets.addBucketRetentionMode,retentionUnit:e.buckets.addBucketRetentionUnit,retentionValidity:e.buckets.addBucketRetentionValidity}}),{addBucketName:function(e){return{type:pt,name:e}},addBucketVersioned:function(e){return{type:ht,versioned:e}},enableObjectLocking:function(e){return{type:Ot,locking:e}},addBucketQuota:function(e){return{type:gt,quota:e}},addBucketQuotaType:function(e){return{type:ft,quotaType:e}},addBucketQuotaSize:function(e){return{type:xt,quotaSize:e}},addBucketQuotaUnit:function(e){return{type:vt,quotaUnit:e}},addBucketRetention:function(e){return{type:Ct,retention:e}},addBucketRetentionMode:function(e){return{type:St,retentionMode:e}},addBucketRetentionUnit:function(e){return{type:kt,retentionUnit:e}},addBucketRetentionValidity:function(e){return{type:wt,retentionValidity:e}},setModalError:G})(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},multiContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start"},quotaSizeContainer:{flexGrow:1},sizeFactorContainer:{flexGrow:0,maxWidth:80,marginLeft:8,alignSelf:"flex-start"}},ke))}))((function(e){var t=e.classes,n=e.open,r=e.closeModalAndRefresh,o=e.addBucketName,s=e.addBucketVersioned,l=e.enableObjectLocking,d=e.addBucketQuota,u=e.addBucketQuotaType,j=e.addBucketQuotaSize,m=e.addBucketQuotaUnit,p=e.addBucketRetention,h=e.addBucketRetentionMode,O=e.addBucketRetentionUnit,f=e.addBucketRetentionValidity,C=e.setModalError,S=e.bucketName,k=e.versioningEnabled,w=e.lockingEnabled,N=e.quotaEnabled,T=e.quotaType,E=e.quotaSize,_=e.quotaUnit,A=e.retentionEnabled,I=e.retentionMode,M=e.retentionUnit,L=e.retentionValidity,D=Object(c.useState)(!1),B=Object(b.a)(D,2),F=B[0],R=B[1],P=Object(c.useState)(!1),z=Object(b.a)(P,2),K=z[0],U=z[1],W=Object(c.useState)(!1),q=Object(b.a)(W,2),V=q[0],G=q[1],H=Object(En.a)(S,1e3),Y=Object(b.a)(H,1)[0];Object(c.useEffect)((function(){o(Y)}),[Y,o]);var Q=function(){o(""),s(!1),l(!1),d(!1),u("hard"),j("1"),m("TiB"),p(!1),h("compliance"),O("days"),f(1)};return Object(c.useEffect)((function(){var e=!1;""!==S.trim()&&(e=!0),N&&e&&(""!==E.trim()&&0!==parseInt(E)||(e=!1)),k&&A||(p(!1),h("compliance"),O("days"),f(1)),A?(l(!0),G(!0)):G(!1),A&&(Number.isNaN(L)||L<1)&&(e=!1),U(e)}),[S,A,w,T,E,_,N,A,p,h,O,f,L]),Object(a.jsx)(jn,{title:"Create Bucket",modalOpen:n,onClose:function(){r(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){if(e.preventDefault(),!F){R(!0);var t={name:S,versioning:k,locking:w};if(N){var n=oe(E,_,!1);t.quota={enabled:!0,quota_type:T,amount:parseInt(n)}}A&&(t.retention={mode:I,unit:M,validity:L}),me.invoke("POST","/api/v1/buckets",t).then((function(e){R(!1),r(!0)})).catch((function(e){R(!1),C(e)})),Q()}}(e)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"bucket-name",name:"bucket-name",onChange:function(e){o(e.target.value)},label:"Bucket Name",value:S})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(v.a,{component:"h6",variant:"h6",children:"Features"}),Object(a.jsx)("hr",{})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"versioned",id:"versioned",name:"versioned",checked:k,onChange:function(e){s(e.target.checked)},description:"Allows to keep multiple versions of the same object under the same key.",label:"Versioning",indicatorLabels:["On","Off"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"locking",id:"locking",name:"locking",disabled:V,checked:w,onChange:function(e){l(e.target.checked)},label:"Object Locking",description:"Required to support retention and legal hold. Can only be enabled at bucket creation.",indicatorLabels:["On","Off"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"bucket_quota",id:"bucket_quota",name:"bucket_quota",checked:N,onChange:function(e){d(e.target.checked)},label:"Quota",description:"Limit the amount of data in the bucket.",indicatorLabels:["On","Off"]})}),N&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:T,id:"quota_type",name:"quota_type",label:"Quota Type",onChange:function(e){u(e.target.value)},selectorOptions:[{value:"hard",label:"Hard"},{value:"fifo",label:"FIFO"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)("div",{className:t.multiContainer,children:[Object(a.jsx)("div",{className:t.quotaSizeContainer,children:Object(a.jsx)(hn,{type:"number",id:"quota_size",name:"quota_size",onChange:function(e){j(e.target.value)},label:"Quota",value:E,required:!0,min:"1"})}),Object(a.jsx)("div",{className:t.sizeFactorContainer,children:Object(a.jsx)(yn,{label:"\xa0",id:"quota_unit",name:"quota_unit",value:_,onChange:function(e){m(e.target.value)},options:te.map((function(e){return{label:e,value:e}}))})})]})})]}),k&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"bucket_retention",id:"bucket_retention",name:"bucket_retention",checked:A,onChange:function(e){p(e.target.checked)},label:"Retention",description:"Impose rules to prevent object deletion for a period of time.",indicatorLabels:["On","Off"]})}),A&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:I,id:"retention_mode",name:"retention_mode",label:"Retention Mode",onChange:function(e){h(e.target.value)},selectorOptions:[{value:"compliance",label:"Compliance"},{value:"governance",label:"Governance"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:M,id:"retention_unit",name:"retention_unit",label:"Retention Unit",onChange:function(e){O(e.target.value)},selectorOptions:[{value:"days",label:"Days"},{value:"years",label:"Years"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",id:"retention_validity",name:"retention_validity",onChange:function(e){f(e.target.valueAsNumber)},label:"Retention Validity",value:String(L),required:!0,min:"1"})})]})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:Q,children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:F||!K,children:"Save"})]}),F&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Ln=n(630),Dn=n(631),Bn={setErrorSnackMessage:q},Fn=Object(s.b)(null,Bn)((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedBucket,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Bucket"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete bucket ",Object(a.jsx)("b",{children:i}),"? ",Object(a.jsx)("br",{}),"A bucket can only be deleted if it's empty."]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){l||(d(!0),me.invoke("DELETE","/api/v1/buckets/".concat(i),{name:i}).then((function(e){d(!1),t(!0)})).catch((function(e){d(!1),r(e)})))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),Rn=Object(N.a)((function(e){return Object(k.a)({headerContainer:{position:"absolute",width:"100%",height:77,display:"flex",backgroundColor:"#fff",borderBottom:"#E3E3E3 1px solid",left:0},label:{display:"flex",justifyContent:"flex-start",alignItems:"center"},labelStyle:{color:"#000",fontSize:18,fontWeight:700,marginLeft:55,marginTop:8}})}))((function(e){var t=e.classes,n=e.label;return Object(a.jsx)(x.a,{container:!0,className:t.headerContainer,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.label,children:Object(a.jsx)(v.a,{variant:"h4",className:t.labelStyle,children:n})})})})),Pn=Object(s.b)((function(e){return{addBucketModalOpen:e.buckets.open}}),{addBucketOpen:function(e){return{type:mt,open:e}},addBucketReset:function(){return{type:yt}},setErrorSnackMessage:q})(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.addBucketOpen,r=e.addBucketModalOpen,o=e.addBucketReset,s=e.setErrorSnackMessage,l=Object(c.useState)([]),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!0),p=Object(b.a)(m,2),h=p[0],O=p[1],v=Object(c.useState)(!1),y=Object(b.a)(v,2),C=y[0],S=y[1],k=Object(c.useState)(""),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(""),_=Object(b.a)(E,2),A=_[0],I=_[1];Object(c.useEffect)((function(){if(h){O(!0),me.invoke("GET","/api/v1/buckets").then((function(e){O(!1),j(e.buckets||[])})).catch((function(e){O(!1),s(e)}))}}),[h,s]);var M=[{type:"view",to:"/buckets",sendOnlyId:!0},{type:"delete",onClick:function(e){S(!0),T(e)},sendOnlyId:!0}],L=u.filter((function(e){return""===A||e.name.indexOf(A)>=0}));return Object(a.jsxs)(i.a.Fragment,{children:[r&&Object(a.jsx)(Mn,{open:r,closeModalAndRefresh:function(e){n(!1),o(),e&&O(!0)}}),C&&Object(a.jsx)(Fn,{deleteOpen:C,selectedBucket:N,closeDeleteModalAndRefresh:function(e){!function(e){S(!1),e&&O(!0)}(e)}}),Object(a.jsx)(Rn,{label:"Buckets"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Buckets",className:t.searchField,id:"search-resource",label:"",onChange:function(e){I(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){n(!0)},children:"Create Bucket"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:M,columns:[{label:"Name",elementKey:"name"},{label:"Creation Date",elementKey:"creation_date",renderFunction:function(e){return Object(a.jsx)(Je.a,{children:e})}},{label:"Size",elementKey:"size",renderFunction:ce,width:60,contentTextAlign:"right"}],isLoading:h,records:L,entityName:"Buckets",idField:"name"})})]})})]})}))),zn=n(348),Kn=n(654),Un=n(638),Wn=Object(s.b)(null,{setModalErrorSnackMessage:G}),qn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))(Wn((function(e){var t=e.classes,n=e.open,i=e.bucketName,r=e.actualPolicy,o=e.closeModalAndRefresh,s=e.setModalErrorSnackMessage,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(""),p=Object(b.a)(m,2),h=p[0],O=p[1];return Object(c.useEffect)((function(){O(r)}),[O,r]),Object(a.jsx)(jn,{title:"Change Access Policy",modalOpen:n,onClose:function(){o()},children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),u||(j(!0),me.invoke("PUT","/api/v1/buckets/".concat(i,"/set-policy"),{access:h}).then((function(e){j(!1),o()})).catch((function(e){j(!1),s(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.formScrollable,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{value:h,label:"Access Policy",id:"select-access-policy",name:"select-access-policy",onChange:function(e){O(e.target.value)},options:[{value:"PRIVATE",label:"Private"},{value:"PUBLIC",label:"Public"}]})})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",fullWidth:!0,disabled:u,children:"Set"})}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Vn=Object(s.b)(null,{setModalErrorSnackMessage:G}),Gn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))(Vn((function(e){var t=e.classes,n=e.open,i=e.bucketName,r=e.closeModalAndRefresh,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)("compliance"),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)("days"),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)(1),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(!1),E=Object(b.a)(T,2),_=E[0],A=E[1];return Object(c.useEffect)((function(){Number.isNaN(w)||w<1?A(!1):A(!0)}),[w]),Object(a.jsx)(jn,{title:"Set Retention Configuration",modalOpen:n,onClose:function(){r()},children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||(u(!0),me.invoke("PUT","/api/v1/buckets/".concat(i,"/retention"),{mode:p,unit:v,validity:w}).then((function(){u(!1),r()})).catch((function(e){u(!1),o(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:p,id:"retention_mode",name:"retention_mode",label:"Retention Mode",onChange:function(e){h(e.target.value)},selectorOptions:[{value:"compliance",label:"Compliance"},{value:"governance",label:"Governance"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:v,id:"retention_unit",name:"retention_unit",label:"Retention Unit",onChange:function(e){C(e.target.value)},selectorOptions:[{value:"days",label:"Days"},{value:"years",label:"Years"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",id:"retention_validity",name:"retention_validity",onChange:function(e){N(e.target.valueAsNumber)},label:"Retention Validity",value:String(w),required:!0,min:"1"})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",fullWidth:!0,disabled:d||!_,children:"Set"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Hn=n(634),Yn=n(635),Qn=n(636),Zn=n(637),Jn=n(633),$n=Object(s.b)(null,{setModalErrorSnackMessage:G}),Xn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},buttonContainer:{textAlign:"right"}},ke))}))($n((function(e){var t=e.classes,n=e.open,i=e.selectedBucket,r=e.closeModalAndRefresh,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)([]),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)([]),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useCallback)((function(){u(!0),me.invoke("GET","/api/v1/admin/arns").then((function(e){var t=[];null!==e.arns&&(t=e.arns),u(!1),D(t)})).catch((function(e){u(!1),o(e)}))}),[o]);Object(c.useEffect)((function(){B()}),[B]);var F=function(e,t){var n=_.indexOf(t),a=[];-1===n?a=a.concat(_,t):0===n?a=a.concat(_.slice(1)):n===_.length-1?a=a.concat(_.slice(0,-1)):n>0&&(a=a.concat(_.slice(0,n),_.slice(n+1))),A(a)},R=L.map((function(e){return{label:e,value:e}}));return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){r()},title:"Subscribe To Event",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||(u(!0),me.invoke("POST","/api/v1/buckets/".concat(i,"/events"),{configuration:{arn:w,events:_,prefix:p,suffix:v},ignoreExisting:!0}).then((function(){u(!1),r()})).catch((function(e){u(!1),o(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{onChange:function(e){N(e.target.value)},id:"select-access-policy",name:"select-access-policy",label:"ARN",value:w,options:R})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(Jn.a,{size:"medium",children:[Object(a.jsx)(Hn.a,{className:t.minTableHeader,children:Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{children:"Select"}),Object(a.jsx)(Qn.a,{children:"Event"})]})}),Object(a.jsx)(Zn.a,{children:[{label:"PUT - Object Uploaded",value:"put"},{label:"GET - Object accessed",value:"get"},{label:"DELETE - Object Deleted",value:"delete"}].map((function(e){return Object(a.jsxs)(Yn.a,{onClick:function(t){return F(0,e.value)},children:[Object(a.jsx)(Qn.a,{padding:"checkbox",children:Object(a.jsx)(It.a,{value:e.value,color:"primary",inputProps:{"aria-label":"secondary checkbox"},onChange:function(t){return F(0,e.value)},checked:_.includes(e.value)})}),Object(a.jsx)(Qn.a,{className:t.wrapCell,children:e.label})]},"group-".concat(e.value))}))})]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"prefix-input",name:"prefix-input",label:"Prefix",value:p,onChange:function(e){h(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"suffix-input",name:"suffix-input",label:"Suffix",value:v,onChange:function(e){C(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d,children:"Save"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),ea=Object(s.b)(null,{setErrorSnackMessage:q})((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedBucket,r=e.bucketEvent,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Event"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsx)(Ln.a,{id:"alert-dialog-description",children:"Are you sure you want to delete the this event?"})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){!function(){if(!d&&null!=r){u(!0);var e=Z()(r,"events",[]),n=Z()(r,"prefix",""),a=Z()(r,"suffix","");me.invoke("DELETE","/api/v1/buckets/".concat(i,"/events/").concat(r.arn),{events:e,prefix:n,suffix:a}).then((function(e){u(!1),t(!0)})).catch((function(e){u(!1),o(e)}))}}()},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),ta=Object(s.b)(null,{setModalErrorSnackMessage:G}),na=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},buttonContainer:{textAlign:"right"}},ke))}))(ta((function(e){var t=e.open,n=e.closeModalAndRefresh,i=e.classes,r=e.bucketName,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1];return Object(a.jsx)(jn,{modalOpen:t,onClose:function(){n()},title:"Set Bucket Replication",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),u(!0),function(){var e={accessKey:p,secretKey:v,sourceBucket:r,targetURL:w,targetBucket:_,region:L};me.invoke("POST","/api/v1/remote-buckets",e).then((function(){me.invoke("GET","/api/v1/remote-buckets").then((function(e){var t=Z()(e,"buckets",[]).find((function(e){return e.sourceBucket===r}));if(t&&t.remoteARN){var a=t.remoteARN,c={destination_bucket:_,arn:a};me.invoke("POST","/api/v1/buckets/".concat(r,"/replication"),c).then((function(){u(!1),n()})).catch((function(e){u(!1),o(e)}))}})).catch((function(e){o(e)}))})).catch((function(e){u(!1),o(e)}))}()},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:i.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"accessKey",name:"accessKey",onChange:function(e){h(e.target.value)},label:"Access Key",value:p})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"secretKey",name:"secretKey",onChange:function(e){C(e.target.value)},label:"Secret Key",value:v})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"targetURL",name:"targetURL",onChange:function(e){N(e.target.value)},placeholder:"https://play.min.io:9000",label:"Target URL",value:w})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"targetBucket",name:"targetBucket",onChange:function(e){A(e.target.value)},label:"Target Bucket",value:_})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"region",name:"region",onChange:function(e){D(e.target.value)},label:"Region",value:L})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:i.buttonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d,children:"Save"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),aa=Object(s.b)(null,{setModalErrorSnackMessage:G}),ca=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},buttonContainer:{textAlign:"right"}},ke))}))(aa((function(e){var t=e.classes,n=e.open,i=e.selectedBucket,r=e.closeModalAndRefresh,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)("sse-s3"),f=Object(b.a)(O,2),v=f[0],C=f[1];return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){r()},title:"Enable Bucket Encryption",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||me.invoke("POST","/api/v1/buckets/".concat(i,"/encryption/enable"),{encType:v,kmsKeyID:p}).then((function(){u(!1),r()})).catch((function(e){u(!1),o(e)}))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{onChange:function(e){C(e.target.value)},id:"select-encryption-type",name:"select-encryption-type",label:"Encryption Type",value:v,options:[{label:"SSE-S3",value:"sse-s3"},{label:"SSE-KMS",value:"sse-kms"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),"sse-kms"===v&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"kms-key-id",name:"kms-key-id",label:"KMS Key ID",value:p,onChange:function(e){h(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d,children:"Save"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),ia=Object(s.b)(null,{setErrorSnackMessage:q})((function(e){var t=e.closeVersioningModalAndRefresh,n=e.modalOpen,i=e.selectedBucket,r=e.versioningCurrentState,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Edit Versioning"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to"," ",Object(a.jsx)("strong",{children:r?"disable":"enable"})," ","versioning for this bucket?",r&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("strong",{children:"File versions won't be automatically deleted"})]})]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){d||(u(!0),me.invoke("PUT","/api/v1/buckets/".concat(i,"/versioning"),{versioning:!r}).then((function(){u(!1),t(!0)})).catch((function(e){u(!1),o(e)})))},color:"secondary",autoFocus:!0,children:r?"Disable":"Enable"})]})]})})),ra=function(){return Object(a.jsxs)($e.a,{viewBox:"0 0 16.172 17.187",children:[Object(a.jsx)("defs",{children:Object(a.jsxs)("linearGradient",{id:"a",y1:"0.5",x2:"1",y2:"0.5",gradientUnits:"objectBoundingBox",children:[Object(a.jsx)("stop",{offset:"0.044",stopColor:"#362585"}),Object(a.jsx)("stop",{offset:"0.301",stopColor:"#281b6f"}),Object(a.jsx)("stop",{offset:"1",stopColor:"#1e1560"})]})}),Object(a.jsx)("path",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.5px"},d:"M-4778.1,2239.582v6.425h6.425",transform:"translate(4787.594 -2239.582)"}),Object(a.jsx)("path",{fill:"#707070",d:"M-4784.238,2247.532v-.581c0-.027.009-.054.012-.081.039-.313.055-.632.121-.939a6.744,6.744,0,0,1,3.064-4.441,6.514,6.514,0,0,1,3.293-1.032,6.923,6.923,0,0,1,2.667.423,6.793,6.793,0,0,1,4.119,4.333,6.053,6.053,0,0,1,.279,1.337c.006.083.014.164.021.247v.86c-.011.131-.018.261-.032.392a6.494,6.494,0,0,1-.626,2.147,6.807,6.807,0,0,1-4.044,3.528,6.052,6.052,0,0,1-1.663.3,6.576,6.576,0,0,1-2.565-.325,6.73,6.73,0,0,1-3.947-3.451,6.627,6.627,0,0,1-.658-2.288C-4784.212,2247.816-4784.225,2247.674-4784.238,2247.532Zm13.025-.306c-.024-.309-.021-.661-.082-1a6.206,6.206,0,0,0-1.658-3.293,6.153,6.153,0,0,0-4.1-1.9,5.984,5.984,0,0,0-2.476.355,6.188,6.188,0,0,0-4.134,5.708,6.453,6.453,0,0,0,.228,1.881,6.127,6.127,0,0,0,1.984,3.052,6.046,6.046,0,0,0,3.806,1.445,6.043,6.043,0,0,0,1.235-.065,6.249,6.249,0,0,0,3.783-2.2,6.2,6.2,0,0,0,1.352-3.048C-4771.228,2247.863-4771.233,2247.563-4771.212,2247.226Z",transform:"translate(4786.834 -2240.452)"}),Object(a.jsx)("ellipse",{style:{opacity:.1,fill:"url(#a)"},cx:"6.151",cy:"6.151",rx:"6.151",ry:"6.151",transform:"translate(0 4.886)"})]})};function oa(e){var t=e.children,n=e.value,c=e.index,r=Object(zn.a)(e,["children","value","index"]);return Object(a.jsx)("div",Object(j.a)(Object(j.a)({role:"tabpanel",hidden:n!==c,id:"simple-tabpanel-".concat(c),"aria-labelledby":"simple-tab-".concat(c),style:{marginTop:"5px"}},r),{},{children:n===c&&Object(a.jsx)(i.a.Fragment,{children:t})}))}function sa(e){return{id:"simple-tab-".concat(e),"aria-controls":"simple-tabpanel-".concat(e)}}var la=Object(s.b)(null,{setErrorSnackMessage:q}),da=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},actionsTray:{textAlign:"right","& button":{marginLeft:10}},searchField:{background:"#FFFFFF",padding:12,borderRadius:5,boxShadow:"0px 3px 6px #00000012"},noRecords:{lineHeight:"24px",textAlign:"center",padding:"20px"},gridWrapper:{width:320},gridContainer:{display:"grid",gridTemplateColumns:"auto auto",gridGap:8,justifyContent:"flex-start",alignItems:"center","& div:not(.MuiCircularProgress-root)":{display:"flex",alignItems:"center"},"& div:nth-child(odd)":{justifyContent:"flex-end",fontWeight:700},"& div:nth-child(2n)":{minWidth:150}},masterActions:{width:"25%",minWidth:"120px","& div":{margin:"5px 0px"}},paperContainer:{padding:15,paddingLeft:23},headerContainer:{display:"flex",justifyContent:"space-between"},capitalizeFirst:{textTransform:"capitalize"},doubleElement:{display:"flex",justifyContent:"space-between"},encCheckbox:{margin:0,padding:0},tabPan:{marginTop:"5px"},fixedHeight:{height:165,minWidth:247,padding:"25px 28px","& svg":{maxHeight:18}},elementTitle:{fontWeight:500,color:"#777777",fontSize:14,marginTop:-9},consumptionValue:{color:"#000000",fontSize:"60px",fontWeight:"bold"}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(la((function(e){var t=e.classes,n=e.match,r=e.setErrorSnackMessage,o=Object(c.useState)(null),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)([]),m=Object(b.a)(u,2),p=m[0],h=m[1],O=Object(c.useState)([]),f=Object(b.a)(O,2),y=f[0],k=f[1],w=Object(c.useState)(!0),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(!0),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(!0),D=Object(b.a)(L,2),B=D[0],F=D[1],R=Object(c.useState)(!0),P=Object(b.a)(R,2),z=P[0],K=P[1],U=Object(c.useState)(!0),W=Object(b.a)(U,2),q=W[0],V=W[1],G=Object(c.useState)(!0),H=Object(b.a)(G,2),Y=H[0],Q=H[1],J=Object(c.useState)(!0),$=Object(b.a)(J,2),X=$[0],ee=$[1],te=Object(c.useState)(!1),ne=Object(b.a)(te,2),ae=ne[0],ie=ne[1],re=Object(c.useState)(0),oe=Object(b.a)(re,2),se=oe[0],le=oe[1],de=Object(c.useState)(!1),ue=Object(b.a)(de,2),be=ue[0],je=ue[1],pe=Object(c.useState)(!1),he=Object(b.a)(pe,2),Oe=he[0],ge=he[1],fe=Object(c.useState)(!1),xe=Object(b.a)(fe,2),ve=xe[0],ye=xe[1],Ce=Object(c.useState)(null),Se=Object(b.a)(Ce,2),ke=Se[0],we=Se[1],Ne=Object(c.useState)("0"),Te=Object(b.a)(Ne,2),Ee=Te[0],_e=Te[1],Ae=Object(c.useState)(!1),Ie=Object(b.a)(Ae,2),Me=Ie[0],Le=Ie[1],De=Object(c.useState)(!1),Be=Object(b.a)(De,2),Fe=Be[0],Re=Be[1],Pe=Object(c.useState)(!1),ze=Object(b.a)(Pe,2),Ke=ze[0],Ue=ze[1],We=Object(c.useState)(!1),qe=Object(b.a)(We,2),Ve=qe[0],Ge=qe[1],He=Object(c.useState)(!1),Ye=Object(b.a)(He,2),Qe=Ye[0],Ze=Ye[1],Je=Object(c.useState)(!1),$e=Object(b.a)(Je,2),Xe=$e[0],tt=$e[1],nt=n.params.bucketName;Object(c.useEffect)((function(){I&&me.invoke("GET","/api/v1/buckets/".concat(nt,"/events")).then((function(e){var t=Z()(e,"events",[]);M(!1),h(t||[])})).catch((function(e){M(!1),r(e)}))}),[I,r,nt]),Object(c.useEffect)((function(){B&&me.invoke("GET","/api/v1/buckets/".concat(nt,"/versioning")).then((function(e){Re(e.is_versioned),F(!1)})).catch((function(e){r(e),F(!1)}))}),[B,r,nt]),Object(c.useEffect)((function(){B&&me.invoke("GET","/api/v1/buckets/".concat(nt,"/object-locking")).then((function(e){Ue(e.object_locking_enabled),K(!1)})).catch((function(e){r(e),K(!1)}))}),[z,r,nt]),Object(c.useEffect)((function(){q&&me.invoke("GET","/api/v1/buckets/".concat(nt,"/replication")).then((function(e){var t=e.rules?e.rules:[];k(t),V(!1)})).catch((function(e){r(e),V(!1)}))}),[q,r,nt]),Object(c.useEffect)((function(){Y&&me.invoke("GET","/api/v1/buckets").then((function(e){var t=Z()(e,"buckets",[]).find((function(e){return e.name===nt})),n=Z()(t,"size","0");Q(!1),_e(n)})).catch((function(e){Q(!1),r(e)}))}),[Y,r,nt]),Object(c.useEffect)((function(){T&&me.invoke("GET","/api/v1/buckets/".concat(nt)).then((function(e){E(!1),d(e)})).catch((function(e){E(!1),r(e)}))}),[T,r,nt]),Object(c.useEffect)((function(){X&&me.invoke("GET","/api/v1/buckets/".concat(nt,"/encryption/info")).then((function(e){e.algorithm&&Ge(!0),ee(!1)})).catch((function(e){console.error(e),ee(!1)}))}),[X,nt]);var at=function(){E(!0),Q(!0),V(!0),F(!0),M(!0),ee(!0)},ct="n/a";null!==l&&(ct=l.access);var it=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Le(e)},rt=[{type:"delete",onClick:function(e){ye(!0),we(e)}}];return Object(a.jsxs)(i.a.Fragment,{children:[be&&Object(a.jsx)(Xn,{open:be,selectedBucket:nt,closeModalAndRefresh:function(){je(!1),at()}}),Oe&&Object(a.jsx)(ca,{open:Oe,selectedBucket:nt,closeModalAndRefresh:function(){ge(!1),at()}}),ae&&Object(a.jsx)(qn,{bucketName:nt,open:ae,actualPolicy:ct,closeModalAndRefresh:function(){ie(!1),at()}}),Qe&&Object(a.jsx)(Gn,{bucketName:nt,open:Qe,closeModalAndRefresh:function(){Ze(!1),at()}}),Me&&Object(a.jsx)(na,{closeModalAndRefresh:function(){it(!1),at()},open:Me,bucketName:nt}),ve&&Object(a.jsx)(ea,{deleteOpen:ve,selectedBucket:nt,bucketEvent:ke,closeDeleteModalAndRefresh:function(e){ye(!1),e&&at()}}),Xe&&Object(a.jsx)(ia,{closeVersioningModalAndRefresh:function(e){tt(!1),e&&at()},modalOpen:Xe,selectedBucket:nt,versioningCurrentState:Fe}),Object(a.jsx)(Rn,{label:"Bucket > ".concat(n.params.bucketName)}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(x.a,{container:!0,spacing:2,children:[Object(a.jsx)(x.a,{item:!0,children:Object(a.jsxs)(S.a,{className:t.fixedHeight,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(ra,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(v.a,{className:t.elementTitle,children:"Reported Usage"})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:ce(Ee)})]})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(S.a,{className:t.paperContainer,children:Object(a.jsxs)("div",{className:t.gridContainer,children:[Object(a.jsx)("div",{children:"Access Policy:"}),Object(a.jsxs)("div",{className:t.capitalizeFirst,children:[T?Object(a.jsx)(C.a,{color:"primary",size:16,variant:"indeterminate"}):ct.toLowerCase(),Object(a.jsx)(_t.a,{color:"primary","aria-label":"access",size:"small",className:t.propertiesIcon,onClick:function(){tt(!0)},children:Object(a.jsx)(Wt,{active:!0})})]}),Object(a.jsx)("div",{children:"Replication:"}),Object(a.jsx)("div",{className:t.doubleElement,children:Object(a.jsx)("span",{children:y.length?"Yes":"No"})}),!Ke&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("div",{children:"Object Locking:"}),Object(a.jsx)("div",{children:"No"})]}),Object(a.jsx)("div",{children:"Encryption:"}),Object(a.jsx)("div",{children:Object(a.jsx)(It.a,{color:"primary",className:t.encCheckbox,inputProps:{"aria-label":"secondary checkbox"},onChange:function(e){return function(e){e.target.checked?ge(!0):me.invoke("POST","/api/v1/buckets/".concat(nt,"/encryption/disable")).then((function(){Ge(!1)})).catch((function(e){r(e)}))}(e)},checked:Ve})})]})})}),Ke&&Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(S.a,{className:t.paperContainer,children:Object(a.jsxs)("div",{className:t.gridContainer,children:[Object(a.jsx)("div",{children:"Object Locking"}),Object(a.jsx)("div",{}),Object(a.jsx)("div",{children:"Versioning:"}),Object(a.jsx)("div",{children:B?Object(a.jsx)(C.a,{color:"primary",size:16,variant:"indeterminate"}):Object(a.jsxs)(i.a.Fragment,{children:[Fe&&!B?"Yes":"No","\xa0",Object(a.jsx)(_t.a,{color:"primary","aria-label":"retention",size:"small",className:t.propertiesIcon,onClick:function(){ie(!0)},children:Object(a.jsx)(Wt,{active:!0})})]})}),Object(a.jsx)("div",{children:"Retention:"}),Object(a.jsx)("div",{children:B?Object(a.jsx)(C.a,{color:"primary",size:16,variant:"indeterminate"}):Object(a.jsxs)(i.a.Fragment,{children:["\xa0",Object(a.jsx)(_t.a,{color:"primary","aria-label":"retention",size:"small",className:t.propertiesIcon,onClick:function(){Ze(!0)},children:Object(a.jsx)(Wt,{active:!0})})]})})]})})})]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsxs)(Kn.a,{value:se,onChange:function(e,t){le(t)},indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",children:[Object(a.jsx)(Un.a,Object(j.a)({label:"Events"},sa(0))),Object(a.jsx)(Un.a,Object(j.a)({label:"Replication"},sa(1)))]})}),Object(a.jsxs)(x.a,{item:!0,xs:6,className:t.actionsTray,children:[0===se&&Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),size:"medium",onClick:function(){je(!0)},children:"Subscribe to Event"}),1===se&&Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),size:"medium",onClick:function(){it(!0)},children:"Add Replication Rule"})]})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(oa,{index:0,value:se,children:Object(a.jsx)(on,{itemActions:rt,columns:[{label:"SQS",elementKey:"arn"},{label:"Events",elementKey:"events",renderFunction:function(e){return Object(a.jsx)(i.a.Fragment,{children:e.join(", ")})}},{label:"Prefix",elementKey:"prefix"},{label:"Suffix",elementKey:"suffix"}],isLoading:I,records:p,entityName:"Events",idField:"id"})}),Object(a.jsx)(oa,{index:1,value:se,children:Object(a.jsx)(on,{itemActions:rt,columns:[{label:"ID",elementKey:"id"},{label:"Priority",elementKey:"priority"},{label:"Destination",elementKey:"destination",renderFunction:function(e){return Object(a.jsx)(i.a.Fragment,{children:e.bucket.replace("arn:aws:s3:::","")})}},{label:"Delete Replication",elementKey:"delete_marker_replication",renderFunction:function(e){return Object(a.jsx)(i.a.Fragment,{children:e.status})}},{label:"Status",elementKey:"status"}],isLoading:I,records:y,entityName:"Replication Rules",idField:"id"})})]})]})})]})}))),ua=Object(s.b)((function(e){return{open:e.system.sidebarOpen}}),{setMenuOpen:z}),ba=Object(l.g)(ua((function(){return Object(a.jsx)(l.c,{history:u,children:Object(a.jsxs)(l.d,{children:[Object(a.jsx)(l.b,{path:"/buckets/:bucketName",component:da}),Object(a.jsx)(l.b,{path:"/",component:Pn}),Object(a.jsx)(l.b,{component:Ge})]})})}))),ja=n(309);n(437);n(438);var ma,pa=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Se))}))((function(e){var t=e.value,n=e.label,c=void 0===n?"":n,r=e.tooltip,o=void 0===r?"":r,s=e.classes,l=e.onChange,d=void 0===l?function(){}:l,u=e.onBeforeChange,b=e.readOnly,j=void 0!==b&&b;return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(Xt.a,{className:s.inputLabel,children:[Object(a.jsx)("span",{children:c}),""!==o&&Object(a.jsx)("div",{className:s.tooltipContainer,children:Object(a.jsx)(en.a,{title:o,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:s.tooltip})})})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ja.Controlled,{value:t,options:{mode:"javascript",lineNumbers:!0,readOnly:j},onBeforeChange:u,onChange:d})})]})})),ha={setModalErrorSnackMessage:G},Oa=Object(s.b)(null,ha),ga=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({jsonPolicyEditor:{minHeight:400,width:"100%"},buttonContainer:{textAlign:"right"}},ke),Se))}))(Oa((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.policyEdit,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),f=Object(b.a)(O,2),v=f[0],C=f[1];Object(c.useEffect)((function(){r&&(h(r.name),C(r?JSON.stringify(JSON.parse(r.policy),null,4):""))}),[r]);var S=""!==p.trim();return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){i(!1)},title:"".concat(r?"Info":"Create"," Policy"),children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||(u(!0),me.invoke("POST","/api/v1/policies",{name:p,policy:v}).then((function(e){u(!1),i(!0)})).catch((function(e){u(!1),o(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"policy-name",name:"policy-name",label:"Policy Name",placeholder:"Enter Policy Name",onChange:function(e){h(e.target.value)},value:p,disabled:!!r})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(pa,{label:"".concat(r?"Edit":"Write"," Policy"),value:v,onBeforeChange:function(e,t,n){C(n)}})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[!r&&Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){h(""),C("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d||!S,children:"Save"})]}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),fa={setErrorSnackMessage:q},xa=Object(s.b)(null,fa)((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedPolicy,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Policy"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete policy ",Object(a.jsx)("b",{children:i}),"?."]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){l||(d(!0),me.invoke("DELETE","/api/v1/policy?name=".concat(i)).then((function(e){d(!1),t(!0)})).catch((function(e){d(!1),r(e)})))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),va={setErrorSnackMessage:q},ya=Object(s.b)(null,va),Ca=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(ya((function(e){var t=e.classes,n=e.setErrorSnackMessage,r=Object(c.useState)([]),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(!1),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],v=h[1],y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)(""),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(""),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(null),D=Object(b.a)(L,2),B=D[0],F=D[1];Object(c.useEffect)((function(){R()}),[]),Object(c.useEffect)((function(){j&&me.invoke("GET","/api/v1/policies").then((function(e){var t=Z()(e,"policies",[]);t.sort((function(e,t){return e.name>t.name?1:e.name365){var i=n/365;return"".concat(i," year").concat(1===Math.floor(i)?"":"s")}if(n>30){var r=Math.floor(n/30),o=n-30*r;return"".concat(r," month").concat(1===Math.floor(r)?"":"s"," ").concat(o>0?"".concat(o," day").concat(o>1?"s":""):"")}if(n>=7&&n<=30){var s=Math.floor(n/7);return"".concat(Math.floor(s)," week").concat(1===s?"":"s")}return n>=1&&n<=6?"".concat(n," day").concat(n>1?"s":""):"".concat(a>=1?"".concat(a," hour").concat(a>1?"s":""):""," ").concat(c>=1&&0===a?"".concat(c," minute").concat(c>1?"s":""):""," ").concat(t>=1&&0===c&&0===a?"".concat(t," second").concat(t>1?"s":""):"")}},{title:"Total Online disks",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-1"},{title:"Total Offline disks",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-2"},{title:"Total Data",data:[],dataOuter:[{name:"outer",value:100}],widgetConfiguration:{outerChart:{colorList:["#9c9c9c"],innerRadius:51,outerRadius:54,startAngle:-15,endAngle:195},innerChart:{colorList:Ea,innerRadius:35,outerRadius:50,startAngle:-15,endAngle:195}},type:ma.pieChart,layoutIdentifier:"panel-3",innerLabel:"N/A",labelDisplayFunction:ce},{title:"Data Growth",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-4",yAxisFormatter:ce,xAxisFormatter:ue},{title:"Object size distribution",data:[],widgetConfiguration:[{dataKey:"a",color:Ea[0],background:{fill:"rgba(0,0,0,0.1)"}}],customStructure:[{originTag:"LESS_THAN_1024_B",displayTag:"Less than 1024B"},{originTag:"BETWEEN_1024_B_AND_1_MB",displayTag:"Between 1024B and 1MB"},{originTag:"BETWEEN_1_MB_AND_10_MB",displayTag:"Between 1MB and 10MB"},{originTag:"BETWEEN_10_MB_AND_64_MB",displayTag:"Between 10MB and 64MB"},{originTag:"BETWEEN_64_MB_AND_128_MB",displayTag:"Between 64MB and 128MB"},{originTag:"BETWEEN_128_MB_AND_512_MB",displayTag:"Between 128MB and 512MB"},{originTag:"GREATER_THAN_512_MB",displayTag:"Greater than 512MB"}],type:ma.barChart,layoutIdentifier:"panel-5"},{title:"Total Online Servers",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-6"},{title:"Total Offline Servers",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-7"},{title:"Total S3 Traffic Inbound",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-8",color:"#22B573",fillColor:"#A6E8C4",labelDisplayFunction:ce},{title:"Total S3 Traffic Outbound",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-9",color:"#22B573",fillColor:"#A6E8C4",labelDisplayFunction:ce},{title:"Number of Buckets",data:[],innerLabel:"N/A",type:ma.singleRep,color:"#0071BC",fillColor:"#ADD5E0",layoutIdentifier:"panel-10"},{title:"Number of Objects",data:[],innerLabel:"N/A",type:ma.singleRep,color:"#0071BC",fillColor:"#ADD5E0",layoutIdentifier:"panel-11"},{title:"S3 API Request & Error Rate",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-12",disableYAxis:!0,xAxisFormatter:ue},{title:"Total Open FDs",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-13",color:"#F7655E",fillColor:"#F4CECE"},{title:"Total Goroutines",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-14",color:"#F7655E",fillColor:"#F4CECE"},{title:"S3 API Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-15",disableYAxis:!0,xAxisFormatter:ue},{title:"Total S3 API Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-16",yAxisFormatter:ce,xAxisFormatter:ue},{title:"Active S3 Requests",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-17",xAxisFormatter:ue},{title:"Internode Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-18",yAxisFormatter:ce,xAxisFormatter:ue},{title:"Online Disks",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-19",disableYAxis:!0,xAxisFormatter:ue},{title:"Disk Usage",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-20",yAxisFormatter:ce,xAxisFormatter:ue}],Aa=function(e,t){if(0===e.length)return["","0"];switch(t){case"mean":var n=e.reduce((function(e,t){return e+parseFloat(t[1])}),0);return["",Math.floor(n/e.length).toString()];default:var a=e.sort((function(e,t){return e[0]-t[0]}));return a[a.length-1]}},Ia=function(e){return _a.map((function(t){var n=e.find((function(e){return e.title===t.title}));if(!n)return t;var a=n.type;switch(t.type){case ma.singleValue:if("stat"===a||"singlestat"===a){var c=Z()(n,"targets[0].result[0].values",[]);null===c&&(c=[]);var i=Z()(n,"options.reduceOptions.calcs[0]","lastNotNull"),r=Aa(c,i),o=t.labelDisplayFunction?t.labelDisplayFunction(r[1]):r[1];return Object(j.a)(Object(j.a)({},t),{},{data:o})}break;case ma.pieChart:if("gauge"===a){var s=Z()(n,"targets[0].result",[]);null===s&&(s=[]);var l=Z()(n,"options.reduceOptions.calcs[0]","lastNotNull"),d=s.length>0?s[0].values:[],u=Aa(d,l),b=s.map((function(e){var t=Z()(e,"values",[]),n=Object.keys(e.metric),a=t.sort((function(e,t){return e[0]-t[0]})),c=e.metric[n[0]],i=a[a.length-1];return{name:c,value:parseInt(i)}})),m=t.labelDisplayFunction?t.labelDisplayFunction(u[1]):u[1];return Object(j.a)(Object(j.a)({},t),{},{data:b,innerLabel:m})}break;case ma.linearGraph:if("graph"===a){var p=Z()(n,"targets",[]);null===p&&(p=[]);var h=[],O=[];p.forEach((function(e,t){var n=Z()(e,"result",[]),a=e.legendFormat;null===n&&(n=[]),n.forEach((function(e){var n=function(e,t){var n=Object.keys(e),a=new RegExp("{{(".concat(n.join("|"),")}}"),"g");return t.replace(a,(function(t){var n=t.replace(/({{|}})/g,"");return e[n]})).replace(/{{(.*?)}}/g,"")}(e.metric,a),c="key_".concat(t).concat(n);h.push({dataKey:c,keyLabel:n,lineColor:"",fillColor:""});var i=Z()(e,"values",[]);null===i&&(i=[]),i.forEach((function(e){var t=O.findIndex((function(t){return t.name===e[0]}));if(-1===t){var n={name:e[0]};n[c]=e[1],O.push(n)}else O[t][c]=e[1]}))}))}));var g=h.sort((function(e,t){return e.keyLabelt.keyLabel?1:0})).map((function(e,t){return Object(j.a)(Object(j.a)({},e),{},{lineColor:Ea[t]||je(e.keyLabel),fillColor:Ea[t]||je(e.keyLabel)})})),f=O.sort((function(e,t){return e.name-t.name}));return Object(j.a)(Object(j.a)({},t),{},{widgetConfiguration:g,data:f})}break;case ma.barChart:if("bargauge"===a){var x=Z()(n,"targets[0].result",[]);null===x&&(x=[]);var v=function(e,t){return e[0]-t[0]},y=[];return y=t.customStructure?t.customStructure.map((function(e){var t=x.find((function(t){var n=Object.keys(t.metric);return t.metric[n[0]]===e.originTag})),n=Z()(t,"values",[]).sort(v),a=n[n.length-1]||["","0"];return{name:e.displayTag,a:parseInt(a[1])}})):x.map((function(e){var t=Object.keys(e.metric),n=e.metric[t[0]],a=Z()(e,"values",[]).sort(v),c=a[a.length-1]||["","0"];return{name:n,a:parseInt(c[1])}})),Object(j.a)(Object(j.a)({},t),{},{data:y})}break;case ma.singleRep:if("stat"===a){var C=Z()(n,"targets[0].result[0].values",[]);null===C&&(C=[]);var S=Z()(n,"options.reduceOptions.calcs[0]","lastNotNull"),k=Aa(C,S),w=C.sort((function(e,t){return e[0]-t[0]})),N=[];1===w.length&&N.push({value:0}),w.forEach((function(e){N.push({value:parseInt(e[1])})}));var T=t.labelDisplayFunction?t.labelDisplayFunction(k[1]):k[1];return Object(j.a)(Object(j.a)({},t),{},{data:N,innerLabel:T})}}return t}))},Ma=function(e){localStorage.setItem(Na,btoa(JSON.stringify(e)))},La=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},Re),{},{contentContainer:Object(j.a)(Object(j.a)({},Re.contentContainer),{},{fontWeight:700,color:"#072045",fontSize:18,textAlign:"center"})}))}))((function(e){var t=e.title,n=e.data,c=e.classes;return Object(a.jsxs)("div",{className:c.singleValueContainer,children:[Object(a.jsx)("div",{className:c.titleContainer,children:t}),Object(a.jsx)("div",{className:c.contentContainer,children:n})]})})),Da=n(657),Ba=n(639),Fa=n(643),Ra=n(193),Pa=n(194),za=n(320),Ka=n(201),Ua=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Pe))}))((function(e){var t=e.active,n=e.payload,c=e.label,i=e.linearConfiguration,r=e.yAxisFormatter,o=e.classes;return t?Object(a.jsxs)("div",{className:o.customTooltip,children:[Object(a.jsx)("div",{className:o.timeStampTitle,children:ue(c,!0)}),n&&n.map((function(e,t){return Object(a.jsxs)("div",{className:o.labelContainer,children:[Object(a.jsx)("div",{className:o.labelColor,style:{backgroundColor:i[t].lineColor}}),Object(a.jsx)("div",{className:o.itemValue,children:Object(a.jsxs)("span",{className:o.valueContainer,children:[i[t].keyLabel,":"," ",r(e.value)]})})]},"lbPl-".concat(t,"-").concat(i[t].keyLabel))}))]}):null})),Wa=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},Re),{},{containerElements:{display:"flex",flexDirection:"column",height:"calc(100% - 18px)"},chartCont:{position:"relative",flexGrow:1,minHeight:"65%",height:1},legendChart:{display:"flex",flexWrap:"wrap",flex:"0 1 auto",maxHeight:"35%",margin:0,overflowY:"auto",position:"relative",textAlign:"center"}}))}))((function(e){var t=e.classes,n=e.title,c=e.linearConfiguration,i=e.data,r=e.hideYAxis,o=void 0!==r&&r,s=e.yAxisFormatter,l=void 0===s?function(e){return e}:s,d=e.xAxisFormatter,u=void 0===d?function(e){return e}:d,b=e.panelWidth,j=void 0===b?0:b,m=5;return 0!==j&&(m=j>400?5:j>350?10:j>300?15:j>250?20:30),Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsxs)("div",{className:t.containerElements,children:[Object(a.jsx)("div",{className:t.chartCont,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(Ba.a,{data:i,margin:{top:5,right:20,left:o?20:5,bottom:0},children:[Object(a.jsx)(Fa.a,{strokeDasharray:"3 3",strokeWidth:1,strokeOpacity:.5}),Object(a.jsx)(Ra.a,{dataKey:"name",tickFormatter:function(e){return u(e)},interval:m,tick:{fontSize:"70%"},tickCount:10}),Object(a.jsx)(Pa.a,{domain:[0,function(e){return 4*e}],hide:o,tickFormatter:function(e){return l(e)},tick:{fontSize:"70%"}}),c.map((function(e,t){return Object(a.jsx)(za.a,{type:"monotone",dataKey:e.dataKey,stroke:e.lineColor,fill:e.fillColor,fillOpacity:.3},"area-".concat(e.dataKey,"-").concat(t.toString()))})),Object(a.jsx)(Ka.a,{content:Object(a.jsx)(Ua,{linearConfiguration:c,yAxisFormatter:l}),wrapperStyle:{zIndex:5e3}})]})})}),Object(a.jsx)("div",{className:t.legendChart,children:c.map((function(e,n){return Object(a.jsxs)("div",{className:t.singleLegendContainer,children:[Object(a.jsx)("div",{className:t.colorContainer,style:{backgroundColor:e.lineColor}}),Object(a.jsx)("div",{className:t.legendLabel,children:e.keyLabel})]},"legend-".concat(e.keyLabel,"-").concat(n.toString()))}))})]})]})})),qa=n(644),Va=n(347),Ga=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Pe))}))((function(e){var t=e.active,n=e.payload,c=e.label,i=e.barChartConfiguration,r=e.classes;return t?Object(a.jsxs)("div",{className:r.customTooltip,children:[Object(a.jsx)("div",{className:r.timeStampTitle,children:c}),n&&n.map((function(e,t){return Object(a.jsxs)("div",{className:r.labelContainer,children:[Object(a.jsx)("div",{className:r.labelColor,style:{backgroundColor:i[t].color}}),Object(a.jsx)("div",{className:r.itemValue,children:Object(a.jsx)("span",{className:r.valueContainer,children:e.value})})]},"pltiem-".concat(t,"-").concat(c))}))]}):null})),Ha=function(e){var t=e.x,n=e.y,c=e.payload;return Object(a.jsx)("text",{width:50,fontSize:"63%",textAnchor:"end",fill:"#333",transform:"translate(".concat(t,",").concat(n,")"),dy:3,children:c.value})},Ya=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Re))}))((function(e){var t=e.classes,n=e.title,c=e.barChartConfiguration,i=e.data;return Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsx)("div",{className:t.contentContainer,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(qa.a,{data:i,layout:"vertical",barCategoryGap:1,children:[Object(a.jsx)(Ra.a,{type:"number",hide:!0}),Object(a.jsx)(Pa.a,{dataKey:"name",type:"category",interval:0,tick:Object(a.jsx)(Ha,{}),tickLine:!1,axisLine:!1,width:150}),c.map((function(e){return Object(a.jsx)(Va.a,{dataKey:e.dataKey,fill:e.color,background:e.background},"bar-".concat(e.dataKey))})),Object(a.jsx)(Ka.a,{cursor:{fill:"rgba(255, 255, 255, 0.3)"},content:Object(a.jsx)(Ga,{barChartConfiguration:c})})]})})})]})})),Qa=n(659),Za=n(322),Ja=n(195),$a=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Re))}))((function(e){var t=e.classes,n=e.title,c=e.pieChartConfiguration,i=e.dataInner,r=e.dataOuter,o=e.middleLabel,s=void 0===o?"":o,l=Z()(c,"innerChart.colorList",[]),d=Z()(c,"outerChart.colorList",[]);return Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsx)("div",{className:t.contentContainer,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(Qa.a,{margin:{top:5,bottom:5},children:[r&&Object(a.jsx)(Za.a,{data:r,cx:"50%",cy:"50%",dataKey:"value",innerRadius:Z()(c,"outerChart.innerRadius",0),outerRadius:Z()(c,"outerChart.outerRadius","80%"),startAngle:Z()(c,"outerChart.startAngle",0),endAngle:Z()(c,"outerChart.endAngle",360),fill:"#201763",children:r.map((function(e,t){return Object(a.jsx)(Ja.a,{fill:"undefined"==typeof d[t]?"#393939":d[t]},"cellOuter-".concat(t))}))}),i&&Object(a.jsx)(Za.a,{data:i,dataKey:"value",cx:"50%",cy:"50%",innerRadius:Z()(c,"innerChart.innerRadius",0),outerRadius:Z()(c,"innerChart.outerRadius","80%"),startAngle:Z()(c,"innerChart.startAngle",0),endAngle:Z()(c,"innerChart.endAngle",360),fill:"#201763",children:i.map((function(e,t){return Object(a.jsx)(Ja.a,{fill:"undefined"==typeof l[t]?"#393939":l[t]},"cell-".concat(t))}))}),s&&Object(a.jsx)("text",{x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle",fontWeight:600,fontSize:14,children:s})]})})})]})})),Xa=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Re))}))((function(e){var t=e.classes,n=e.title,c=e.data,i=e.color,r=e.fillColor,o=e.label;return Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsx)("div",{className:t.contentContainer,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(Ba.a,{data:c,children:[Object(a.jsx)(Pa.a,{domain:[0,function(e){return 2*e}],hide:!0}),Object(a.jsx)(za.a,{type:"monotone",dataKey:"value",stroke:i,fill:r,fillOpacity:1}),Object(a.jsx)("text",{x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle",fontWeight:600,fontSize:18,fill:i,children:o})]})})})]})})),ec=n(326),tc=n(58),nc=n(651),ac=n(327),cc=n.n(ac),ic=Object(N.a)((function(e){return Object(k.a)({dateSelectorOverride:{height:40,border:"#EAEDEE 1px solid",marginLeft:15,backgroundColor:"#fff",padding:"0 16px",borderRadius:5,"&.MuiInput-underline:hover:not(.Mui-disabled):before":{borderBottom:0},"&:hover":{borderColor:"#000","&:before, &:after":{borderColor:"transparent",borderBottom:0}},"&:before, &:after":{borderColor:"transparent",borderBottom:0},"& input":{fontSize:12,fontWeight:600,color:"#393939"}},parentDateOverride:{flexGrow:1}})}))((function(e){var t=e.value,n=e.onChange,c=e.classes;return Object(a.jsx)(tc.a,{utils:ec.a,children:Object(a.jsx)(nc.a,{value:t,onChange:n,InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(cc.a,{})}),className:c.dateSelectorOverride},label:"",ampm:!1,variant:"inline",className:c.parentDateOverride,format:"MMMM Do YYYY, h:mm a"})})})),rc=Object(s.b)(null,{displayErrorMessage:q}),oc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({widgetsContainer:{height:"calc(100vh - 250px)",paddingBottom:235}},Ae),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(rc((function(e){var t=e.classes,n=e.displayErrorMessage,i=Object(c.useState)(null),r=Object(b.a)(i,2),o=r[0],s=r[1],l=Object(c.useState)(null),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!0),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(_a),v=Object(b.a)(f,2),y=v[0],C=v[1],S=function(){var e=localStorage.getItem(Na);if(!e)return Ta;var t=JSON.parse(atob(e));return 0===t.length||t.length>0&&!t[0].minW?Ta:t}(),k=Object(c.useCallback)((function(e){var t=e/8+5,n=function(e,n){switch(e.type){case ma.singleValue:return Object(a.jsx)(La,{title:e.title,data:e.data});case ma.pieChart:return Object(a.jsx)($a,{title:e.title,dataInner:e.data,dataOuter:e.dataOuter||null,pieChartConfiguration:e.widgetConfiguration,middleLabel:e.innerLabel});case ma.linearGraph:return Object(a.jsx)(Wa,{title:e.title,data:e.data,linearConfiguration:e.widgetConfiguration,hideYAxis:e.disableYAxis,xAxisFormatter:e.xAxisFormatter,yAxisFormatter:e.yAxisFormatter,panelWidth:t*S[n].w});case ma.barChart:return Object(a.jsx)(Ya,{title:e.title,data:e.data,barChartConfiguration:e.widgetConfiguration});case ma.singleRep:var c=e.fillColor?e.fillColor:e.color;return Object(a.jsx)(Xa,{title:e.title,data:e.data,label:e.innerLabel,color:e.color,fillColor:c});default:return null}};return y.map((function(e,t){return Object(a.jsx)("div",{children:n(e,t)},e.layoutIdentifier)}))}),[y,S]),w=Object(c.useCallback)((function(){var e=15;if(null!==o&&null!==u){var t=(u.unix()-o.unix())/60;e=t<1?15:t}me.invoke("GET","/api/v1/admin/info?step=".concat(e,"&").concat(null!==o?"&start=".concat(o.unix()):"").concat(null!==o&&null!==u?"&":"").concat(null!==u?"end=".concat(u.unix()):"")).then((function(e){if(e.widgets){var t=Ia(e.widgets);C(t)}else n("Widget information could not be retrieved at this time. Please try again");O(!1)})).catch((function(e){n(e),O(!1)}))}),[o,u,n]);return Object(c.useEffect)((function(){h&&w()}),[h,w]),Object(a.jsxs)(x.a,{container:!0,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(t.actionsTray," ").concat(t.timeContainers),children:[Object(a.jsx)("span",{className:t.label,children:"Start Time"}),Object(a.jsx)(ic,{value:o,onChange:s}),Object(a.jsx)("span",{className:t.label,children:"End Time"}),Object(a.jsx)(ic,{value:u,onChange:j}),Object(a.jsx)(g.a,{type:"button",variant:"contained",color:"primary",onClick:function(){O(!0)},children:"Get Information"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.widgetsContainer,children:Object(a.jsx)(Mt.a,{style:{width:"100%",height:"auto",paddingBottom:45},children:function(e){var t=e.width,n=e.height,c=n<600?600:n;c>380&&(c=480);var i=t>1920?1920:t;return Object(a.jsx)(ka.a,{width:i,cols:8,containerPadding:[10,10],onLayoutChange:Ma,layout:S,rowHeight:c/6,style:{margin:"0 auto",width:i},children:k(t)})}})})]})}))),sc=function(){return Object(a.jsxs)($e.a,{viewBox:"0 0 15.834 17.375",children:[Object(a.jsx)("defs",{children:Object(a.jsxs)("linearGradient",{id:"a",y1:"0.5",x2:"1",y2:"0.5",gradientUnits:"objectBoundingBox",children:[Object(a.jsx)("stop",{offset:"0.044",stopColor:"#362585"}),Object(a.jsx)("stop",{offset:"0.301",stopColor:"#281b6f"}),Object(a.jsx)("stop",{offset:"1",stopColor:"#1e1560"})]})}),Object(a.jsxs)("g",{transform:"translate(0 0.375)",children:[Object(a.jsx)("circle",{style:{opacity:.1,fill:"url(#a)"},cx:"6.625",cy:"6.625",r:"6.625",transform:"translate(0 3.75)"}),Object(a.jsxs)("g",{transform:"translate(3.092)",children:[Object(a.jsx)("ellipse",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.75px"},cx:"6.183",cy:"1.244",rx:"6.183",ry:"1.244",transform:"translate(0)"}),Object(a.jsx)("path",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.75px"},d:"M-3722.174,1225.225l-1.687,10.292a.858.858,0,0,1-.578.669,12.182,12.182,0,0,1-3.918.647,12.187,12.187,0,0,1-3.894-.639.878.878,0,0,1-.6-.678q-.843-5.145-1.687-10.291",transform:"translate(3734.541 -1223.981)"})]})]})]})},lc=function(){return Object(a.jsxs)($e.a,{viewBox:"0 0 18.344 17.009",children:[Object(a.jsx)("defs",{children:Object(a.jsxs)("linearGradient",{id:"a",y1:"0.5",x2:"1",y2:"0.5",gradientUnits:"objectBoundingBox",children:[Object(a.jsx)("stop",{offset:"0.044",stopColor:"#362585"}),Object(a.jsx)("stop",{offset:"0.301",stopColor:"#281b6f"}),Object(a.jsx)("stop",{offset:"1",stopColor:"#1e1560"})]})}),Object(a.jsxs)("g",{transform:"translate(0 0.25)",children:[Object(a.jsx)("ellipse",{style:{opacity:.1,fill:"url(#a)"},cx:"7.462",cy:"7.462",rx:"7.462",ry:"7.462",transform:"translate(0 1.835)"}),Object(a.jsx)("rect",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.5px"},width:"9.323",height:"9.323",transform:"translate(4.083)"}),Object(a.jsx)("rect",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.5px"},width:"8.223",height:"8.223",transform:"translate(9.871 5.307)"})]})]})},dc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})),{},{paper:{padding:e.spacing(2),display:"flex",overflow:"auto",flexDirection:"column",border:"#eaedee 1px solid",borderRadius:5,boxShadow:"none"},fixedHeight:{height:165,minWidth:247,marginRight:20,padding:"25px 28px","& svg":{maxHeight:18}},consumptionValue:{color:"#000000",fontSize:"60px",fontWeight:"bold"},icon:{marginRight:10,color:"#777777"},notationContainer:{display:"flex"},dashboardBG:{width:390,height:255,zIndex:500,position:"absolute",backgroundSize:"fill",backgroundImage:"url(/images/BG_IllustrationDarker.svg)",backgroundPosition:"right bottom",right:0,bottom:0,backgroundRepeat:"no-repeat"},dashboardContainer:{zIndex:600,position:"absolute"},elementTitle:{fontWeight:500,color:"#777777",fontSize:14,marginTop:-9},smallUnit:{fontSize:20}}))}))((function(e){var t=e.classes,n=e.usage,i=Object(fe.a)(t.paper,t.fixedHeight),r=function(e){return void 0===e?0:e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")};return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("div",{className:t.dashboardBG}),Object(a.jsx)(x.a,{container:!0,className:t.dashboardContainer,children:Object(a.jsx)(x.a,{container:!0,spacing:3,className:t.container,children:Object(a.jsxs)(x.a,{item:!0,className:t.notationContainer,children:[Object(a.jsxs)(S.a,{className:i,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(sc,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(v.a,{className:t.elementTitle,children:"All buckets"})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:n?r(n.buckets):0})]}),Object(a.jsxs)(S.a,{className:i,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(ra,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(v.a,{className:t.elementTitle,children:"Usage"})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:n?function(e){if(void 0===e)return"0";var n=ce(e).split(" ");return 2!==n.length?n.join(" "):Object(a.jsxs)(c.Fragment,{children:[n[0],Object(a.jsx)("span",{className:t.smallUnit,children:n[1]})]})}(n.usage+""):0})]}),Object(a.jsxs)(S.a,{className:i,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(lc,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsxs)(v.a,{className:t.elementTitle,children:[" ","Total Objects"]})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:n?r(n.objects):0})]})]})})})]})})),uc=Object(s.b)(null,{displayErrorMessage:q}),bc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(uc((function(e){var t=e.classes,n=e.displayErrorMessage,i=Object(c.useState)(!0),r=Object(b.a)(i,2),o=r[0],s=r[1],l=Object(c.useState)(null),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useCallback)((function(){me.invoke("GET","/api/v1/admin/info").then((function(e){j(e),s(!1)})).catch((function(e){n(e),s(!1)}))}),[j,s,n]);Object(c.useEffect)((function(){o&&m()}),[o,m]);var p=Z()(u,"widgets",null);return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(Rn,{label:"Dashboard"}),Object(a.jsx)(x.a,{container:!0,children:o?Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container,children:Object(a.jsx)(y.a,{})}):Object(a.jsx)(c.Fragment,{children:null!==p?Object(a.jsx)(oc,{}):Object(a.jsx)(dc,{usage:u})})})]})}))),jc=n(570),mc=n(646),pc=n(328),hc=n.n(pc),Oc=n(645),gc=n(647),fc=n(616),xc=n(648),vc=n.p+"static/media/minio_console_logo.0837460e.svg",yc=n.p+"static/media/minio_operator_logo.1312b7c9.svg",Cc=[{label:"",group:"common",collapsible:!1},{label:"User",group:"User",collapsible:!0},{label:"Admin",group:"Admin",collapsible:!0},{label:"Tools",group:"Tools",collapsible:!0},{label:"Operator",group:"Operator",collapsible:!1},{label:"",group:"License",collapsible:!1}],Sc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 11",children:[Object(a.jsx)("path",{fill:"#fff",d:"M11 11H0V2h11v9zM2 8v1h7V8zm0-3v1h5V5z"}),Object(a.jsxs)("g",{fill:"#07274a",stroke:"#fdfdfd",strokeWidth:"0.5",transform:"translate(7)",children:[Object(a.jsx)("circle",{cx:"3",cy:"3",r:"3",stroke:"none"}),Object(a.jsx)("circle",{cx:"3",cy:"3",r:"2.75",fill:"none"})]}),Object(a.jsx)("path",{fill:"none",stroke:"#fff",strokeWidth:"0.5",d:"M8.73 2.794l.954.953 1.471-1.471"})]})})},kc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12.122 10.571",children:Object(a.jsxs)("g",{transform:"translate(0 0.5)",children:[Object(a.jsx)("path",{style:{fill:"none",stroke:"rgba(255,255,255,0.8)"},d:"M4816.27,3755.205v-2.939h8.539v9.571h-8.539v-2.932",transform:"translate(-4813.187 -3752.266)"}),Object(a.jsx)("path",{style:{fill:"none",stroke:"rgba(255,255,255,0.8)"},d:"M4813.187,3757.052h8.081",transform:"translate(-4813.187 -3752.266)"}),Object(a.jsx)("path",{style:{fill:"none",stroke:"rgba(255,255,255,0.8)"},d:"M4806.5,3756.511l2.265,2.063-2.265,2.063",transform:"translate(-4800.808 -3753.863)"})]})})})},wc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(-518 -361)",children:[Object(a.jsx)("path",{d:"M-126,0V10h10V0Zm1.5,8.5V2.95h7V8.5Z",transform:"translate(644 361)"}),Object(a.jsx)("rect",{width:"2",height:"1",transform:"translate(520.272 364.772)"})]})})})},Nc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10.014 9.993",children:[Object(a.jsx)("path",{className:"a",d:"M9.162,5.971h0L8.192,5,9.346,3.846a2.257,2.257,0,0,0,0-3.192,2.311,2.311,0,0,0-3.192,0L5,1.808,4.029.837,3.846.654a2.311,2.311,0,0,0-3.192,0,2.257,2.257,0,0,0,0,3.192l.184.183h0L1.808,5,.654,6.154A2.257,2.257,0,0,0,3.846,9.346L5,8.192l.971.971.183.183A2.257,2.257,0,0,0,9.346,6.154Zm-2.29-4.6a1.27,1.27,0,0,1,1.757,0,1.242,1.242,0,0,1,0,1.757L7.475,4.283,5.717,2.525Zm-5.5,1.757A1.243,1.243,0,0,1,3.129,1.371l.183.183L1.555,3.312Zm1.757,5.5a1.27,1.27,0,0,1-1.757,0,1.242,1.242,0,0,1,0-1.757L2.525,5.717,4.283,7.475Zm2.843-.9-.254-.253L2.525,4.283l-.253-.254L4.029,2.272l.254.253L7.475,5.717l.253.254Zm2.657.9a1.271,1.271,0,0,1-1.757,0l-.183-.183L8.446,6.688l.183.183h0a1.241,1.241,0,0,1,0,1.757Z",transform:"translate(0.007 -0.014)"}),Object(a.jsx)("circle",{cx:"0.5",cy:"0.5",r:"0.5",transform:"translate(4.507 4.486)"}),Object(a.jsx)("circle",{cx:"0.5",cy:"0.5",r:"0.5",transform:"translate(3.507 3.486)"}),Object(a.jsx)("circle",{cx:"0.5",cy:"0.5",r:"0.5",transform:"translate(5.507 5.486)"})]})})},Tc=n(329),Ec=n.n(Tc),_c=Object(s.b)((function(e){return{open:e.system.loggedIn,operatorMode:e.system.operatorMode}}),{userLoggedIn:P}),Ac=_c(Object(N.a)((function(e){return Object(k.a)({logo:{paddingTop:25,marginBottom:30,paddingLeft:45,"& img":{width:120}},menuList:{"& .active":{borderTopLeftRadius:2,borderBottomLeftRadius:2,color:"#fff",backgroundColor:"rgba(255, 255, 255, .18)","& .MuiSvgIcon-root":{color:"white"},"& .MuiTypography-root":{color:"#fff",fontWeight:700}},"& .MuiSvgIcon-root":{fontSize:16,color:"rgba(255, 255, 255, 0.8)",maxWidth:14},"& .MuiListItemIcon-root":{minWidth:25},"& .MuiTypography-root":{fontSize:12,color:"rgba(255, 255, 255, 0.8)"},"& .MuiListItem-gutters":{paddingRight:0,fontWeight:300},"& .MuiListItem-root":{padding:"2px 0 2px 16px",marginBottom:8,marginLeft:30,width:"calc(100% - 30px)"},"& .MuiCollapse-container .MuiCollapse-wrapper .MuiCollapse-wrapperInner .MuiDivider-root":{backgroundColor:"rgba(112,112,112,0.5)",marginBottom:12,height:1}},extraMargin:{"&.MuiListItem-gutters":{marginLeft:5}},groupTitle:{color:"#fff",fontSize:10,textTransform:"uppercase",fontWeight:700,marginBottom:3,cursor:"pointer",userSelect:"none",display:"flex",justifyContent:"space-between"},subTitleMenu:{fontWeight:700,marginLeft:10,"&.MuiTypography-root":{fontSize:13,color:"#fff"}},selectorArrow:{marginRight:20,marginTop:1,display:"inline-block",width:0,height:0,borderStyle:"solid",borderWidth:"4px 4px 0 4px",borderColor:"rgba(255, 255, 255, .29) transparent transparent transparent",transform:"rotateZ(0deg)",transitionDuration:"0.2s"},selectorArrowOpen:{transform:"rotateZ(180deg)"}})}))((function(e){var t=e.userLoggedIn,n=e.classes,r=e.pages,o=e.operatorMode,s=Object(c.useState)(function(){var e=[];return Cc.forEach((function(t){t.collapsible&&(e[t.group]=!0)})),e}()),l=Object(b.a)(s,2),d=l[0],m=l[1],p=[{group:"common",type:"item",component:Zt.b,to:"/dashboard",name:"Dashboard",icon:Object(a.jsx)(nt,{})},{group:"User",type:"item",component:Zt.b,to:"/object-browser",name:"Object Browser",icon:Object(a.jsx)(hc.a,{})},{group:"User",type:"item",component:Zt.b,to:"/account",name:"Account",icon:Object(a.jsx)(it,{})},{group:"Admin",type:"item",component:Zt.b,to:"/buckets",name:"Buckets",icon:Object(a.jsx)(at,{})},{group:"Admin",type:"item",component:Zt.b,to:"/users",name:"Users",icon:Object(a.jsx)(ct,{})},{group:"Admin",type:"item",component:Zt.b,to:"/groups",name:"Groups",icon:Object(a.jsx)(rt,{})},{group:"Admin",type:"item",component:Zt.b,to:"/policies",name:"IAM Policies",icon:Object(a.jsx)(ot,{})},{group:"Tools",type:"item",component:Zt.b,to:"/logs",name:"Logs",icon:Object(a.jsx)(wc,{})},{group:"Tools",type:"item",component:Zt.b,to:"/watch",name:"Watch",icon:Object(a.jsx)(jt,{})},{group:"Tools",type:"item",component:Zt.b,to:"/trace",name:"Trace",icon:Object(a.jsx)(st,{})},{group:"Tools",type:"item",component:Zt.b,to:"/heal",name:"Heal",icon:Object(a.jsx)(Nc,{})},{group:"Tools",type:"item",component:Zt.b,to:"/health-info",name:"Diagnostic",icon:Object(a.jsx)(Ec.a,{})},{group:"Admin",type:"item",component:Zt.b,to:"/settings",name:"Settings",icon:Object(a.jsx)(lt,{})},{group:"Operator",type:"item",component:Zt.b,to:"/tenants",name:"Tenants",icon:Object(a.jsx)(dt,{})},{group:"Operator",type:"item",component:Zt.b,to:"/mirroring",name:"Mirroring",icon:Object(a.jsx)(ut,{})},{group:"Operator",type:"item",component:Zt.b,to:"/warp",name:"Warp",icon:Object(a.jsx)(bt,{})}],h=r.reduce((function(e,t,n){return e[t]=!0,e}),{});h.hasOwnProperty("/tenants")?p.push({group:"Operator",type:"item",component:Zt.b,to:"/license",name:"License",icon:Object(a.jsx)(Sc,{})}):p.push({group:"License",type:"item",component:Zt.b,to:"/license",name:"License",icon:Object(a.jsx)(Sc,{})});var O=p.filter((function(e){return h[e.to]||e.forceDisplay||"item"!==e.type}));return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("div",{className:n.logo,children:Object(a.jsx)("img",{src:o?yc:vc,alt:"logo"})}),Object(a.jsxs)(fc.a,{className:n.menuList,children:[Cc.map((function(e,t){var c=(O||[]).filter((function(t){return t.group===e.group}));return 0===c.filter((function(e){return"title"!==e.type})).length?null:Object(a.jsxs)(i.a.Fragment,{children:[""!==e.label&&Object(a.jsxs)(jc.a,{className:n.groupTitle,onClick:function(){e.collapsible&&function(e){var t=Object(j.a)({},d);t[e]=!t[e],m(t)}(e.group)},children:[Object(a.jsx)("span",{children:e.label}),e.collapsible&&Object(a.jsx)("span",{className:"".concat(n.selectorArrow," ").concat(d[e.group]?n.selectorArrowOpen:"")})]}),Object(a.jsxs)(Oc.a,{in:!e.collapsible||d[e.group],timeout:"auto",unmountOnExit:!0,children:[c.map((function(e){switch(e.type){case"item":return Object(a.jsxs)(jc.a,{button:!0,component:e.component,to:e.to,className:e.extraMargin?n.extraMargin:null,children:[e.icon&&Object(a.jsx)(mc.a,{children:e.icon}),e.name&&Object(a.jsx)(gc.a,{primary:e.name})]},e.to);case"title":return Object(a.jsx)(jc.a,{component:e.component,className:n.subTitleMenu,children:e.name},e.name);default:return null}})),Object(a.jsx)(xc.a,{})]},"menuGroup-".concat(e.group))]},"menuElem-".concat(t.toString()))})),Object(a.jsxs)(jc.a,{button:!0,onClick:function(){var e=function(){ie(),t(!1),localStorage.setItem("userLoggedIn",""),u.push("/login")};me.invoke("POST","/api/v1/logout").then((function(){e()})).catch((function(t){console.log(t),e()}))},children:[Object(a.jsx)(mc.a,{children:Object(a.jsx)(kc,{})}),Object(a.jsx)(gc.a,{primary:"Logout"})]})]})]})}))),Ic={setModalErrorSnackMessage:G},Mc=Object(s.b)(null,Ic),Lc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({jsonPolicyEditor:{minHeight:400,width:"100%"},buttonContainer:{textAlign:"right"},infoDetails:{color:"#393939",fontSize:12,fontStyle:"italic"}},ke))}))(Mc((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.setModalErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1];Object(c.useEffect)((function(){l&&me.invoke("POST","/api/v1/service-accounts",{policy:m}).then((function(e){d(!1),i(e)})).catch((function(e){d(!1),r(e)}))}),[l,d,r,m,i]);return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){i(null)},title:"Create Service Account",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault(),d(!0)}(e)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)("div",{className:t.infoDetails,children:"Service Accounts inherit the policy explicitly attached to the parent user and the policy attached to each group in which the parent user has membership. You can specify an optional JSON-formatted policy below to restrict the Service Account access to a subset of actions and resources explicitly allowed for the parent user. You cannot modify the Service Account optional policy after saving."}),Object(a.jsx)(pa,{value:m,onBeforeChange:function(e,t,n){p(n)}})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){p("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:l,children:"Create"})]}),l&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Dc={setErrorSnackMessage:q},Bc=Object(s.b)(null,Dc),Fc=Object(N.a)((function(e){return Object(k.a)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}})}))(Bc((function(e){var t=e.classes,n=e.closeDeleteModalAndRefresh,i=e.deleteOpen,r=e.selectedServiceAccount,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];Object(c.useEffect)((function(){d&&me.invoke("DELETE","/api/v1/service-accounts/".concat(r)).then((function(){u(!1),n(!0)})).catch((function(e){u(!1),o(e)}))}),[d,n,r,o]);return Object(a.jsxs)(sn.a,{open:i,onClose:function(){n(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete ServiceAccount"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete service account"," ",Object(a.jsx)("b",{className:t.wrapText,children:r}),"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){n(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){null!=r&&u(!0)},color:"secondary",autoFocus:!0,children:"Delete"})]})]})}))),Rc=Object(N.a)((function(e){return Object(k.a)({warningBlock:{color:"red"},buttonContainer:{textAlign:"right"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,c=e.open,r=e.closeModal,o=e.entity;if(!n)return null;var s=Z()(n,"console",null);return Object(a.jsx)(jn,{modalOpen:c,onClose:function(){r()},title:"New ".concat(o," Created"),children:Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:["A new ",o," has been created with the following details:",s&&Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("strong",{children:"Console Credentials"}),Object(a.jsxs)("ul",{children:[Object(a.jsxs)("li",{children:[Object(a.jsx)("b",{children:"Access Key:"})," ",s.accessKey]}),Object(a.jsxs)("li",{children:[Object(a.jsx)("b",{children:"Secret Key:"})," ",s.secretKey]})]})]})}),Object(a.jsx)(v.a,{component:"p",variant:"body1",className:t.warningBlock,children:"Write these down, as this is the only time the secret will be displayed."})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)(g.a,{onClick:function(){var e={};s&&(e={console:{access_key:s.accessKey,secret_key:s.secretKey}}),function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}("credentials.json",JSON.stringify(Object(j.a)({},e)))},color:"primary",children:"Download"}),Object(a.jsx)(g.a,{onClick:function(){r()},color:"secondary",autoFocus:!0,children:"Done"})]})]})})})})),Pc=function(e,t){return e.accessKey>t.accessKey?1:e.accessKeyt.name?1:e.namet?1:e0&&m.length>0&&f.length>0),children:"Save"})}),k&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})}):null}))),Gc=Object(s.b)(null,{displayErrorMessage:q}),Hc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"480px",minWidth:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},imageIcon:{height:"100%"},iconRoot:{textAlign:"center"}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(Gc((function(e){var t=e.classes,n=e.displayErrorMessage,r=e.changePassword,o=Object(c.useState)([]),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(!1),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(""),O=Object(b.a)(h,2),y=O[0],C=O[1],S=Object(c.useState)(!1),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(!1),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(null),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(!1),F=Object(b.a)(B,2),R=F[0],P=F[1],z=Object(c.useState)(null),K=Object(b.a)(z,2),U=K[0],W=K[1],q=Object(c.useState)(!1),V=Object(b.a)(q,2),G=V[0],H=V[1];Object(c.useEffect)((function(){Y()}),[]),Object(c.useEffect)((function(){m&&me.invoke("GET","/api/v1/service-accounts").then((function(e){var t=e.sort(Kc);p(!1),d(t)})).catch((function(e){n(e),p(!1)}))}),[m,p,d,n]);var Y=function(){p(!0)},Q=[{type:"delete",onClick:function(e){D(e),A(!0)}}],Z=l.filter((function(e){return e.toLowerCase().includes(y.toLowerCase())}));return Object(a.jsxs)(i.a.Fragment,{children:[w&&Object(a.jsx)(Lc,{open:w,closeModalAndRefresh:function(e){!function(e){if(N(!1),Y(),null!==e){var t={console:{accessKey:"".concat(e.accessKey),secretKey:"".concat(e.secretKey)}};W(t),P(!0)}}(e)}}),_&&Object(a.jsx)(Fc,{deleteOpen:_,selectedServiceAccount:L,closeDeleteModalAndRefresh:function(e){!function(e){A(!1),e&&Y()}(e)}}),R&&Object(a.jsx)(Rc,{newServiceAccount:U,open:R,closeModal:function(){P(!1),W(null)},entity:"Service Account"}),Object(a.jsx)(Rn,{label:"Account"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[r&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"h5",component:"h5",children:"Settings"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(Vc,{open:G,closeModal:function(){return H(!1)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(Wc.a,{}),onClick:function(){return H(!0)},children:"Change Password"})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsx)(xc.a,{}),Object(a.jsx)("br",{})]})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"h5",component:"h5",children:"Service Accounts"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Service Accounts",className:t.searchField,id:"search-resource",label:"",InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){C(e.target.value)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){N(!0),D(null)},children:"Create service account"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{isLoading:m,records:Z,entityName:"Service Accounts",idField:"",columns:[{label:"Service Account",elementKey:""}],itemActions:Q})})]})})]})}))),Yc=n(331),Qc=n.n(Yc),Zc={setModalErrorSnackMessage:G},Jc=Object(s.b)(null,Zc),$c=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#000",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#000"}}}},Ae),De))}))(Jc((function(e){var t=e.classes,n=e.selectedGroups,r=e.setSelectedGroups,o=e.setModalErrorSnackMessage,s=Object(c.useState)([]),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!1),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),g=Object(b.a)(O,2),v=g[0],C=g[1],k=Object(c.useCallback)((function(){me.invoke("GET","/api/v1/groups").then((function(e){var t=Z()(e,"groups",[]);t||(t=[]),u(t.sort(Kc)),h(!1)})).catch((function(e){o(e),h(!1)}))}),[o]);Object(c.useEffect)((function(){h(!0)}),[]),Object(c.useEffect)((function(){p&&k()}),[p,k]);var w=n||[],N=d.filter((function(e){return e.includes(v)}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:t.paper,children:[p&&Object(a.jsx)(y.a,{}),null!=d&&d.length>0?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)("span",{className:t.actionsTitle,children:"Assign Groups"}),Object(a.jsx)(f.a,{placeholder:"Filter by Group",className:t.filterField,id:"search-resource",label:"",InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){C(e.target.value)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.tableBlock,children:Object(a.jsx)(on,{columns:[{label:"Group",elementKey:""}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(w);return a?c.push(n):c=c.filter((function(e){return e!==n})),r(c),c},selectedItems:w,isLoading:p,records:N,entityName:"Groups",idField:"",customPaperHeight:t.multiSelectTable})})]}):Object(a.jsx)("div",{className:t.noFound,children:"No Groups Available"})]})})})}))),Xc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Me))}))((function(e){var t=e.classes,n=e.label,i=void 0===n?"":n,r=e.content,o=e.multiLine,s=void 0!==o&&o;return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(x.a,{className:t.prefinedContainer,children:[""!==i&&Object(a.jsx)(x.a,{item:!0,xs:12,className:t.predefinedTitle,children:i}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.predefinedList,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:s?t.innerContentMultiline:t.innerContent,children:r})})]})})})),ei={setModalErrorSnackMessage:G},ti=Object(s.b)(null,ei),ni=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"}},ke))}))(ti((function(e){var t=e.classes,n=e.closeModalAndRefresh,r=e.selectedUser,o=e.open,s=e.setModalErrorSnackMessage,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(""),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(""),v=Object(b.a)(f,2),C=v[0],S=v[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)([]),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)([]),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useCallback)((function(){if(!r)return null;me.invoke("GET","/api/v1/users/".concat(r.accessKey)).then((function(e){j(!1),O(e.accessKey),I(e.memberOf||[]),B(e.memberOf||[]),T("enabled"===e.status)})).catch((function(e){j(!1),s(e)}))}),[r,s]);Object(c.useEffect)((function(){null==r?(O(""),S(""),I([])):F()}),[r,F]);var R=""!==h.trim()&&(""!==C.trim()&&null===r||null!==r);return Object(a.jsxs)(jn,{onClose:function(){n()},modalOpen:o,title:null!==r?"Edit User":"Create User",children:[null!==r&&Object(a.jsx)("div",{className:t.floatingEnabled,children:Object(a.jsx)(In,{indicatorLabels:["Enabled","Disabled"],checked:N,value:"user_enabled",id:"user-status",name:"user-status",onChange:function(e){T(e.target.checked)},switchOnly:!0})}),Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),u||(j(!0),null!==r?me.invoke("PUT","/api/v1/users/".concat(r.accessKey),{status:N?"enabled":"disabled",groups:A}).then((function(e){j(!1),n()})).catch((function(e){j(!1),s(e)})):me.invoke("POST","/api/v1/users",{accessKey:h,secretKey:C,groups:A}).then((function(e){j(!1),n()})).catch((function(e){j(!1),s(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(hn,{id:"accesskey-input",name:"accesskey-input",label:"Access Key",value:h,onChange:function(e){O(e.target.value)},disabled:null!==r}),null!==r?Object(a.jsx)(Xc,{label:"Current Groups",content:D.join(", ")}):Object(a.jsx)(hn,{id:"standard-multiline-static",name:"standard-multiline-static",label:"Secret Key",type:"password",value:C,onChange:function(e){S(e.target.value)},autoComplete:"current-password"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)($c,{selectedGroups:A,setSelectedGroups:function(e){I(e)}})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){null===r?(O(""),S(""),I([])):I([])},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:u||!R,children:"Save"})]}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})]})}))),ai={setErrorSnackMessage:q},ci=Object(s.b)(null,ai),ii=ci((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedUser,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1];return null===i?Object(a.jsx)("div",{}):Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete User"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete user ",Object(a.jsx)("b",{children:i.accessKey}),"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){l||null!=i&&(d(!0),me.invoke("DELETE","/api/v1/users/".concat(i.accessKey),{id:i.id}).then((function(e){d(!1),t(!0)})).catch((function(e){d(!1),r(e)})))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),ri={setModalErrorSnackMessage:G},oi=Object(s.b)(null,ri),si=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"}},ke))}))(oi((function(e){var t=e.open,n=e.checkedUsers,r=e.closeModalAndRefresh,o=e.classes,s=e.setModalErrorSnackMessage,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)([]),v=Object(b.a)(f,2),C=v[0],S=v[1];Object(c.useEffect)((function(){u&&(C.length>0?me.invoke("PUT","/api/v1/users-groups-bulk",{groups:C,users:n}).then((function(){j(!1),O(!0)})).catch((function(e){j(!1),s(e)})):(j(!1),s("You need to select at least one group to assign")))}),[u,j,r,C,n,s]);return Object(a.jsx)(jn,{modalOpen:t,onClose:function(){r(h)},title:h?"The selected users were added to the following groups.":"Add Users to Group",children:h?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(Xc,{label:"Groups",content:C.join(", ")}),Object(a.jsx)(Xc,{label:"Users",content:n.join(", ")})]}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{})]}):Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),j(!0)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.formScrollable,children:[Object(a.jsx)(Xc,{label:"Selected Users",content:n.join(", ")}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)($c,{selectedGroups:C,setSelectedGroups:S})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:o.clearButton,onClick:function(){S([])},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:u||C.length<1,children:"Save"})]}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),li=Object(s.b)(null,{setModalErrorSnackMessage:G}),di=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#000",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#000"}}}},Ae),De))}))(li((function(e){var t=e.classes,n=e.selectedPolicy,r=void 0===n?[]:n,o=e.setSelectedPolicy,s=e.setModalErrorSnackMessage,l=Object(c.useState)([]),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],g=Object(c.useState)(""),v=Object(b.a)(g,2),C=v[0],k=v[1],w=Object(c.useCallback)((function(){O(!0),me.invoke("GET","/api/v1/policies?limit=1000").then((function(e){var t=null===e.policies?[]:e.policies;O(!1),j(t.sort(zc))})).catch((function(e){O(!1),s(e)}))}),[s]);Object(c.useEffect)((function(){O(!0)}),[]),Object(c.useEffect)((function(){h&&w()}),[h,w]);var N=u.filter((function(e){return e.name.includes(C)}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:t.paper,children:[h&&Object(a.jsx)(y.a,{}),u.length>0?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)("span",{className:t.actionsTitle,children:"Assign Policies"}),Object(a.jsx)(f.a,{placeholder:"Filter by Policy",className:t.filterField,id:"search-resource",label:"",InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){k(e.target.value)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.tableBlock,children:Object(a.jsx)(on,{columns:[{label:"Policy",elementKey:"name"}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(r);a?c.push(n):c=c.filter((function(e){return e!==n})),c=c.filter((function(e){return""!==e})),o(c)},selectedItems:r,isLoading:h,records:N,entityName:"Policies",idField:"name",customPaperHeight:t.multiSelectTable})})]}):Object(a.jsx)("div",{className:t.noFound,children:"No Policies Available"})]})})})}))),ui={setModalErrorSnackMessage:G},bi=Object(s.b)(null,ui),ji=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},ke),{},{buttonContainer:{textAlign:"right"}}))}))(bi((function(e){var t=e.classes,n=e.closeModalAndRefresh,i=e.selectedUser,r=e.selectedGroup,o=e.setModalErrorSnackMessage,s=e.open,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)([]),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)([]),v=Object(b.a)(f,2),C=v[0],S=v[1];Object(c.useEffect)((function(){if(s){if(null!==r)return void(r&&me.invoke("GET","/api/v1/groups/".concat(r)).then((function(e){var t=Z()(e,"policy","");O(t.split(",")),S(t.split(","))})).catch((function(e){o(e),j(!1)})));var e=Z()(i,"policy","");O(e.split(",")),S(e.split(","))}}),[s,r,i]);var k=Z()(i,"accessKey","");return Object(a.jsxs)(jn,{onClose:function(){n()},modalOpen:s,title:"Set Policies",children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Xc,{label:"Selected ".concat(null!==r?"Group":"User"),content:null!==r?r:k})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Xc,{label:"Current Policy",content:h.join(", ")})}),Object(a.jsx)(di,{selectedPolicy:C,setSelectedPolicy:S}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){S(h)},children:"Clear"}),Object(a.jsx)(g.a,{type:"button",variant:"contained",color:"primary",disabled:u,onClick:function(){var e="user",t=null;null!==r?(e="group",t=r):null!==i&&(t=i.accessKey),j(!0),me.invoke("PUT","/api/v1/set-policy/".concat(C),{entityName:t,entityType:e}).then((function(){j(!1),n()})).catch((function(e){j(!1),o(e)}))},children:"Save"})]}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})}))),mi={setErrorSnackMessage:q},pi=Object(s.b)(null,mi),hi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(pi((function(e){var t=e.classes,n=e.setErrorSnackMessage,r=Object(c.useState)([]),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(!1),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],v=h[1],y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)(null),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(!1),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(""),D=Object(b.a)(L,2),B=D[0],F=D[1],R=Object(c.useState)([]),P=Object(b.a)(R,2),z=P[0],K=P[1],U=Object(c.useState)(!1),W=Object(b.a)(U,2),q=W[0],V=W[1],G=Object(c.useCallback)((function(){m(!0),me.invoke("GET","/api/v1/users").then((function(e){var t=null===e.users?[]:e.users;m(!1),l(t.sort(Pc))})).catch((function(e){m(!1),n(e)}))}),[m,l,n]);Object(c.useEffect)((function(){G()}),[G]);var H=s.filter((function(e){return e.accessKey.includes(B)})),Y=atob(localStorage.getItem("userLoggedIn")||""),Q=[{type:"view",onClick:function(e){v(!0),E(e)}},{type:"description",onClick:function(e){V(!0),E(e)}},{type:"delete",onClick:function(e){k(!0),E(e)},hideButtonFunction:function(e){return e===Y}}];return Object(a.jsxs)(i.a.Fragment,{children:[O&&Object(a.jsx)(ni,{open:O,selectedUser:T,closeModalAndRefresh:function(){v(!1),G()}}),q&&Object(a.jsx)(ji,{open:q,selectedUser:T,selectedGroup:null,closeModalAndRefresh:function(){V(!1),G()}}),S&&Object(a.jsx)(ii,{deleteOpen:S,selectedUser:T,closeDeleteModalAndRefresh:function(e){!function(e){k(!1),e&&G()}(e)}}),I&&Object(a.jsx)(si,{open:I,checkedUsers:z,closeModalAndRefresh:function(e){!function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];M(!1),e&&K([])}(e)}}),Object(a.jsx)(Rn,{label:"Users"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Users",className:t.searchField,id:"search-resource",label:"",InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){F(e.target.value)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(Qc.a,{}),disabled:z.length<=0,onClick:function(){z.length>0&&M(!0)},children:"Add to Group"}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){v(!0),E(null)},children:"Create User"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:Q,columns:[{label:"Access Key",elementKey:"accessKey"}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(z);return a?c.push(n):c=c.filter((function(e){return e!==n})),K(c),c},selectedItems:z,isLoading:j,records:H,entityName:"Users",idField:"accessKey"})})]})})]})}))),Oi={setModalErrorSnackMessage:G},gi=Object(s.b)(null,Oi),fi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#000",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#000"}}}},Ae),De))}))(gi((function(e){var t=e.classes,n=e.selectedUsers,r=e.setSelectedUsers,o=e.editMode,s=void 0!==o&&o,l=e.setModalErrorSnackMessage,d=Object(c.useState)([]),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],g=h[1],v=Object(c.useState)(""),C=Object(b.a)(v,2),k=C[0],w=C[1],N=Object(c.useCallback)((function(){me.invoke("GET","/api/v1/users").then((function(e){var t=Z()(e,"users",[]);t||(t=[]),m(t.sort(Pc)),g(!1)})).catch((function(e){l(e),g(!1)}))}),[l]);Object(c.useEffect)((function(){g(!0)}),[]),Object(c.useEffect)((function(){O&&N()}),[O,N]);var T=n||[],E=j.filter((function(e){return e.accessKey.includes(k)}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:t.paper,children:[O&&Object(a.jsx)(y.a,{}),null!=j&&j.length>0?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)("span",{className:t.actionsTitle,children:s?"Edit Members":"Assign Users"}),Object(a.jsx)(f.a,{placeholder:"Filter Users",className:t.filterField,id:"search-resource",label:"",InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){w(e.target.value)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.tableBlock,children:Object(a.jsx)(on,{columns:[{label:"Access Key",elementKey:"accessKey"}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(T);return a?c.push(n):c=c.filter((function(e){return e!==n})),r(c),c},selectedItems:T,isLoading:O,records:E,entityName:"Users",idField:"accessKey",customPaperHeight:t.multiSelectTable})})]}):Object(a.jsx)("div",{className:t.noFound,children:"No Users Available"})]})})})}))),xi={setModalErrorSnackMessage:G},vi=Object(s.b)(null,xi),yi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"}},ke))}))(vi((function(e){var t=e.open,n=e.selectedGroup,r=e.closeModalAndRefresh,o=e.classes,s=e.setModalErrorSnackMessage,l=Object(c.useState)(""),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(!1),v=Object(b.a)(f,2),C=v[0],S=v[1],k=Object(c.useState)([]),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1];Object(c.useEffect)((function(){null!==n?I(!0):(j(""),T([]))}),[n]),Object(c.useEffect)((function(){B(""!==u.trim())}),[u,N]),Object(c.useEffect)((function(){if(C){null!==n?me.invoke("PUT","/api/v1/groups/".concat(u),{group:u,members:N,status:h?"enabled":"disabled"}).then((function(e){S(!1),r()})).catch((function(e){S(!1),s(e)})):me.invoke("POST","/api/v1/groups",{group:u,members:N}).then((function(e){S(!1),r()})).catch((function(e){S(!1),s(e)}))}}),[C,u,N,h,n,r,s]),Object(c.useEffect)((function(){if(n&&A){me.invoke("GET","/api/v1/groups/".concat(n)).then((function(e){O("enabled"===e.status),j(e.name),T(e.members)})).catch((function(e){s(e),I(!1)}))}}),[A,n,s]);return Object(a.jsxs)(jn,{modalOpen:t,onClose:r,title:null!==n?"Edit Group":"Create Group",children:[null!==n&&Object(a.jsx)("div",{className:o.floatingEnabled,children:Object(a.jsx)(In,{indicatorLabels:["Enabled","Disabled"],checked:h,value:"group_enabled",id:"group-status",name:"group-status",onChange:function(e){O(e.target.checked)},switchOnly:!0})}),Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),S(!0)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.formScrollable,children:[null===n?Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"group-name",name:"group-name",label:"Group Name",value:u,onChange:function(e){j(e.target.value)}})})}):Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(Xc,{label:"Group Name",content:n})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(fi,{selectedUsers:N,setSelectedUsers:T,editMode:null!==n})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:o.clearButton,onClick:function(){null===n&&j(""),T([])},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:C||!D,children:"Save"})]}),C&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})]})}))),Ci={setErrorSnackMessage:q},Si=Object(s.b)(null,Ci),ki=Si((function(e){var t=e.selectedGroup,n=e.deleteOpen,r=e.closeDeleteModalAndRefresh,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];Object(c.useEffect)((function(){if(d){t&&me.invoke("DELETE","/api/v1/groups/".concat(t)).then((function(){u(!1),r(!0)})).catch((function(e){u(!1),o(e)}))}}),[d,t,r,o]);var j=function(){r(!1)};return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(sn.a,{open:n,onClose:j,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete User"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete group ",Object(a.jsx)("b",{children:t}),"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:j,color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){u(!0)},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})})),wi={setErrorSnackMessage:q},Ni=Object(s.b)(null,wi),Ti=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(Ni((function(e){var t=e.classes,n=e.setErrorSnackMessage,r=Object(c.useState)(!1),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(null),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],v=h[1],y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)([]),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(""),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(!1),D=Object(b.a)(L,2),B=D[0],F=D[1];Object(c.useEffect)((function(){k(!0)}),[]),Object(c.useEffect)((function(){k(!0)}),[]),Object(c.useEffect)((function(){if(S){me.invoke("GET","/api/v1/groups").then((function(e){var t=[];null!==e.groups&&(t=e.groups.sort(Kc)),E(t),k(!1)})).catch((function(e){n(e),k(!1)}))}}),[S,n]);var R=T.filter((function(e){return e.includes(I)})),P=[{type:"view",onClick:function(e){l(!0),m(e)}},{type:"description",onClick:function(e){F(!0),m(e)}},{type:"delete",onClick:function(e){v(!0),m(e)}}];return Object(a.jsxs)(i.a.Fragment,{children:[s&&Object(a.jsx)(yi,{open:s,selectedGroup:j,closeModalAndRefresh:function(){l(!1),k(!0)}}),O&&Object(a.jsx)(ki,{deleteOpen:O,selectedGroup:j,closeDeleteModalAndRefresh:function(e){v(!1),e&&k(!0)}}),F&&Object(a.jsx)(ji,{open:B,selectedGroup:j,selectedUser:null,closeModalAndRefresh:function(){F(!1)}}),Object(a.jsx)(Rn,{label:"Groups"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Groups",className:t.searchField,id:"search-resource",label:"",InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){M(e.target.value)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){m(null),l(!0)},children:"Create Group"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:P,columns:[{label:"Name",elementKey:""}],isLoading:S,records:R,entityName:"Groups",idField:""})})]})})]})}))),Ei="notify_postgres",_i="notify_mysql",Ai="notify_kafka",Ii="notify_amqp",Mi="notify_mqtt",Li="notify_redis",Di="notify_nats",Bi="notify_elasticsearch",Fi="notify_webhooks",Ri="notify_nsq",Pi=[{configuration_id:"region",configuration_label:"Edit Region Configuration"},{configuration_id:"cache",configuration_label:"Edit Cache Configuration"},{configuration_id:"compression",configuration_label:"Edit Compression Configuration"},{configuration_id:"etcd",configuration_label:"Edit Etcd Configuration"},{configuration_id:"identity_openid",configuration_label:"Edit Identity Openid Configuration"},{configuration_id:"identity_ldap",configuration_label:"Edit Identity LDAP Configuration"},{configuration_id:"logger_webhook",configuration_label:"Edit Logger Webhook Configuration"},{configuration_id:"audit_webhook",configuration_label:"Edit Audit Webhook Configuration"}],zi={region:[{name:"name",required:!0,label:"Server Location",tooltip:'Name of the location of the server e.g. "us-west-rack2"',type:"string",placeholder:"e.g. us-west-rack-2"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",placeholder:"Enter Comment"}],cache:[{name:"drives",required:!0,label:"Drives",tooltip:'Mountpoints e.g. "/optane1" or "/optane2", you can write one per field',type:"csv",placeholder:"Enter Mount Point"},{name:"expiry",required:!1,label:"Expiry",tooltip:'Cache expiry duration in days e.g. "90"',type:"number",placeholder:"Enter Number of Days"},{name:"quota",required:!1,label:"Quota",tooltip:'Limit cache drive usage in percentage e.g. "90"',type:"number",placeholder:"Enter in %"},{name:"exclude",required:!1,label:"Exclude",tooltip:'Wildcard exclusion patterns e.g. "bucket/*.tmp" or "*.exe", you can write one per field',type:"csv",placeholder:"Enter Wildcard Exclusion Patterns"},{name:"after",required:!1,label:"After",tooltip:"Minimum number of access before caching an object",type:"number",placeholder:"Enter Number of Attempts"},{name:"watermark_low",required:!1,label:"Watermark Low",tooltip:"Watermark Low",type:"number",placeholder:"Enter Watermark Low"},{name:"watermark_high",required:!1,label:"Watermark High",tooltip:"Watermark High",type:"number",placeholder:"Enter Watermark High"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",multiline:!0,placeholder:"Enter Comment"}],compression:[{name:"extensions",required:!1,label:"Extensions",tooltip:'Extensions to compress e.g. ".txt",".log" or ".csv", you can write one per field',type:"csv",placeholder:"Enter an Extension",withBorder:!0},{name:"mime_types",required:!1,label:"Mime Types",tooltip:'Mime types e.g. "text/*","application/json" or "application/xml", you can write one per field',type:"csv",placeholder:"Enter a Mime Type",withBorder:!0}],etcd:[{name:"endpoints",required:!0,label:"Endpoints",tooltip:'List of etcd endpoints e.g. "http://localhost:2379", you can write one per field',type:"csv",placeholder:"Enter Endpoint"},{name:"path_prefix",required:!1,label:"Path Prefix",tooltip:'namespace prefix to isolate tenants e.g. "customer1/"',type:"string",placeholder:"Enter Path Prefix"},{name:"coredns_path",required:!1,label:"Coredns Path",tooltip:'Shared bucket DNS records, default is "/skydns"',type:"string",placeholder:"Enter Coredns Path"},{name:"client_cert",required:!1,label:"Client Cert",tooltip:"Client cert for mTLS authentication",type:"string",placeholder:"Enter Client Cert"},{name:"client_cert_key",required:!1,label:"Client Cert Key",tooltip:"Client cert key for mTLS authentication",type:"string",placeholder:"Enter Client Cert Key"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",multiline:!0,placeholder:"Enter Comment"}],identity_openid:[{name:"config_url",required:!1,label:"Config URL",tooltip:"Config URL for Client ID configuration",type:"string",placeholder:"Enter Config URL"},{name:"client_id",required:!1,label:"Client ID",type:"string",placeholder:"Enter Client ID"},{name:"claim_name",required:!1,label:"Claim Name",tooltip:"Claim Name",type:"string",placeholder:"Enter Claim Name"},{name:"claim_prefix",required:!1,label:"Claim Prefix",tooltip:"Claim Prefix",type:"string",placeholder:"Enter Claim Prefix"}],identity_ldap:[{name:"server_addr",required:!0,label:"Server Addr",tooltip:'AD/LDAP server address e.g. "myldapserver.com:636"',type:"string",placeholder:"Enter Server Address"},{name:"username_format",required:!0,label:"Username Format",tooltip:'List of username bind DNs e.g. "uid=%s","cn=accounts","dc=myldapserver" or "dc=com", you can write one per field',type:"csv",placeholder:"Enter Username Format"},{name:"username_search_filter",required:!0,label:"Username Search Filter",tooltip:'User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"',type:"string",placeholder:"Enter Username Search Filter"},{name:"group_search_filter",required:!0,label:"Group Search Filter",tooltip:'Search filter for groups e.g. "(&(objectclass=groupOfNames)(memberUid=%s))"',type:"string",placeholder:"Enter Group Search Filter"},{name:"username_search_base_dn",required:!1,label:"Username Search Base DN",tooltip:"List of username search DNs, you can write one per field",type:"csv",placeholder:"Enter Username Search Base DN"},{name:"group_name_attribute",required:!1,label:"Group Name Attribute",tooltip:'Search attribute for group name e.g. "cn"',type:"string",placeholder:"Enter Group Name Attribute"},{name:"sts_expiry",required:!1,label:"STS Expiry",tooltip:'temporary credentials validity duration in s,m,h,d. Default is "1h"',type:"string",placeholder:"Enter STS Expiry"},{name:"tls_skip_verify",required:!1,label:"TLS Skip Verify",tooltip:'Trust server TLS without verification, defaults to "off" (verify)',type:"on|off"},{name:"server_insecure",required:!1,label:"Server Insecure",tooltip:'Allow plain text connection to AD/LDAP server, defaults to "off"',type:"on|off"},{name:"comment",required:!1,label:"Comment",tooltip:"Optionally add a comment to this setting",type:"comment",placeholder:"Enter Comment"}],logger_webhook:[{name:"endpoint",required:!0,label:"Endpoint",type:"string",placeholder:"Enter Endpoint"},{name:"auth_token",required:!0,label:"Auth Token",type:"string",placeholder:"Enter Auth Token"}],audit_webhook:[{name:"endpoint",required:!0,label:"Endpoint",type:"string",placeholder:"Enter Endpoint"},{name:"auth_token",required:!0,label:"Auth Token",type:"string",placeholder:"Enter Auth Token"}]},Ki=[{name:"queue-dir",label:"Queue Directory",required:!0,tooltip:"staging dir for undelivered messages e.g. '/home/events'",type:"string",placeholder:"Enter Queue Directory"},{name:"queue-limit",label:"Queue Limit",required:!1,tooltip:"maximum limit for undelivered messages, defaults to '10000'",type:"number",placeholder:"Enter Queue Limit"},{name:"comment",label:"Comment",required:!1,type:"comment",placeholder:"Enter Comment"}],Ui=(wa={},Object(ge.a)(wa,Ai,[{name:"brokers",label:"Brokers",required:!0,tooltip:"Comma separated list of Kafka broker addresses",type:"string",placeholder:"Enter Brokers"},{name:"topic",label:"Topic",tooltip:"Kafka topic used for bucket notifications",type:"string",placeholder:"Enter Topic"},{name:"sasl_username",label:"SASL Username",tooltip:"Username for SASL/PLAIN or SASL/SCRAM authentication",type:"string",placeholder:"Enter SASL Username"},{name:"sasl_password",label:"SASL Password",tooltip:"Password for SASL/PLAIN or SASL/SCRAM authentication",type:"string",placeholder:"Enter SASL Password"},{name:"sasl_mechanism",label:"SASL Mechanism",tooltip:"SASL authentication mechanism, default 'PLAIN'",type:"string"},{name:"tls_client_auth",label:"TLS Client Auth",tooltip:"Client Auth determines the Kafka server's policy for TLS client auth",type:"string",placeholder:"Enter TLS Client Auth"},{name:"sasl",label:"SASL",tooltip:"Set to 'on' to enable SASL authentication",type:"on|off"},{name:"tls",label:"TLS",tooltip:"Set to 'on' to enable TLS",type:"on|off"},{name:"tls_skip_verify",label:"TLS skip verify",tooltip:'Trust server TLS without verification, defaults to "on" (verify)',type:"on|off"},{name:"client_tls_cert",label:"client TLS cert",tooltip:"Path to client certificate for mTLS auth",type:"path",placeholder:"Enter TLS Client Cert"},{name:"client_tls_key",label:"client TLS key",tooltip:"Path to client key for mTLS auth",type:"path",placeholder:"Enter TLS Client Key"},{name:"version",label:"Version",tooltip:"Specify the version of the Kafka cluster e.g '2.2.0'",type:"string",placeholder:"Enter Kafka Version"}].concat(Ki)),Object(ge.a)(wa,Ii,[{name:"url",required:!0,label:"URL",tooltip:"AMQP server endpoint e.g. `amqp://myuser:mypassword@localhost:5672`",type:"url"},{name:"exchange",label:"Exchange",tooltip:"Name of the AMQP exchange",type:"string",placeholder:"Enter Exchange"},{name:"exchange_type",label:"Exchange Type",tooltip:"AMQP exchange type",type:"string",placeholder:"Enter Exchange Type"},{name:"routing_key",label:"Routing Key",tooltip:"Routing key for publishing",type:"string",placeholder:"Enter Routing Key"},{name:"mandatory",label:"Mandatory",tooltip:"Quietly ignore undelivered messages when set to 'off', default is 'on'",type:"on|off"},{name:"durable",label:"Durable",tooltip:"Persist queue across broker restarts when set to 'on', default is 'off'",type:"on|off"},{name:"no_wait",label:"No Wait",tooltip:"Non-blocking message delivery when set to 'on', default is 'off'",type:"on|off"},{name:"internal",label:"Internal",tooltip:"Set to 'on' for exchange to be not used directly by publishers, but only when bound to other exchanges",type:"on|off"},{name:"auto_deleted",label:"Auto Deleted",tooltip:"Auto delete queue when set to 'on', when there are no consumers",type:"on|off"},{name:"delivery_mode",label:"Delivery Mode",tooltip:"Set to '1' for non-persistent or '2' for persistent queue",type:"number",placeholder:"Enter Delivery Mode"}].concat(Ki)),Object(ge.a)(wa,Li,[{name:"address",required:!0,label:"Address",tooltip:"Redis server's address. For example: `localhost:6379`",type:"address",placeholder:"Enter Address"},{name:"key",required:!0,label:"Key",tooltip:"Redis key to store/update events, key is auto-created",type:"string",placeholder:"Enter Key"},{name:"password",label:"Password",tooltip:"Redis server password",type:"string",placeholder:"Enter Password"}].concat(Ki)),Object(ge.a)(wa,Mi,[{name:"broker",required:!0,label:"Broker",tooltip:"MQTT server endpoint e.g. `tcp://localhost:1883`",type:"uri",placeholder:"Enter Brokers"},{name:"topic",required:!0,label:"Topic",tooltip:"name of the MQTT topic to publish",type:"string",placeholder:"Enter Topic"},{name:"username",label:"Username",tooltip:"MQTT username",type:"string",placeholder:"Enter Username"},{name:"password",label:"Password",tooltip:"MQTT password",type:"string",placeholder:"Enter Password"},{name:"qos",label:"QOS",tooltip:"Set the quality of service priority, defaults to '0'",type:"number",placeholder:"Enter QOS"},{name:"keep_alive_interval",label:"Keep Alive Interval",tooltip:"Keep-alive interval for MQTT connections in s,m,h,d",type:"duration",placeholder:"Enter Keep Alive Internal"},{name:"reconnect_interval",label:"Reconnect Interval",tooltip:"Reconnect interval for MQTT connections in s,m,h,d",type:"duration",placeholder:"Enter Reconnect Interval"}].concat(Ki)),Object(ge.a)(wa,Di,[{name:"address",required:!0,label:"Address",tooltip:"NATS server address e.g. '0.0.0.0:4222'",type:"address",placeholder:"Enter Address"},{name:"subject",required:!0,label:"Subject",tooltip:"NATS subscription subject",type:"string",placeholder:"Enter NATS Subject"},{name:"username",label:"Username",tooltip:"NATS username",type:"string",placeholder:"Enter NATS Username"},{name:"password",label:"Password",tooltip:"NATS password",type:"string",placeholder:"Enter NATS password"},{name:"token",label:"Token",tooltip:"NATS token",type:"string",placeholder:"Enter NATS token"},{name:"tls",label:"TLS",tooltip:"Set to 'on' to enable TLS",type:"on|off"},{name:"tls_skip_verify",label:"TLS Skip Verify",tooltip:'Trust server TLS without verification, defaults to "on" (verify)',type:"on|off"},{name:"ping_interval",label:"Ping Interval",tooltip:"Client ping commands interval in s,m,h,d. Disabled by default",type:"duration",placeholder:"Enter Ping Interval"},{name:"streaming",label:"Streaming",tooltip:"Set to 'on', to use streaming NATS server",type:"on|off"},{name:"streaming_async",label:"Streaming async",tooltip:"Set to 'on', to enable asynchronous publish",type:"on|off"},{name:"streaming_max_pub_acks_in_flight",label:"Streaming max publish ACKS in flight",tooltip:"Number of messages to publish without waiting for ACKs",type:"number",placeholder:"Enter Streaming in flight value"},{name:"streaming_cluster_id",label:"Streaming Cluster ID",tooltip:"Unique ID for NATS streaming cluster",type:"string",placeholder:"Enter Streaming Cluster ID"},{name:"cert_authority",label:"Cert Authority",tooltip:"Path to certificate chain of the target NATS server",type:"string",placeholder:"Enter Cert Authority"},{name:"client_cert",label:"Client Cert",tooltip:"Client cert for NATS mTLS auth",type:"string",placeholder:"Enter Client Cert"},{name:"client_key",label:"Client Key",tooltip:"Client cert key for NATS mTLS auth",type:"string",placeholder:"Enter Client Key"}].concat(Ki)),Object(ge.a)(wa,Bi,[{name:"url",required:!0,label:"URL",tooltip:"Elasticsearch server's address, with optional authentication info",type:"url",placeholder:"Enter URL"},{name:"index",required:!0,label:"Index",tooltip:"Elasticsearch index to store/update events, index is auto-created",type:"string",placeholder:"Enter Index"},{name:"format",required:!0,label:"Format",tooltip:"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'",type:"enum",placeholder:"Enter Format"}].concat(Ki)),Object(ge.a)(wa,Fi,[{name:"endpoint",required:!0,label:"Endpoint",tooltip:"webhook server endpoint e.g. http://localhost:8080/minio/events",type:"url",placeholder:"Enter Endpoint"},{name:"auth_token",label:"Auth Token",tooltip:"opaque string or JWT authorization token",type:"string",placeholder:"Enter auth_token"}].concat(Ki)),Object(ge.a)(wa,Ri,[{name:"nsqd_address",required:!0,label:"NSQD Address",tooltip:"NSQ server address e.g. '127.0.0.1:4150'",type:"address",placeholder:"Enter nsqd_address"},{name:"topic",required:!0,label:"Topic",tooltip:"NSQ topic",type:"string",placeholder:"Enter Topic"},{name:"tls",label:"TLS",tooltip:"set to 'on' to enable TLS",type:"on|off"},{name:"tls_skip_verify",label:"TLS Skip Verify",tooltip:'trust server TLS without verification, defaults to "on" (verify)',type:"on|off"}].concat(Ki)),wa),Wi=function(e){return e.filter((function(e){return""!==e.value}))},qi=n(102),Vi=n.n(qi),Gi=function(){return Object(a.jsx)($e.a,{viewBox:"0 0 12 12",children:Object(a.jsx)("path",{fill:"#081c42",className:"a",d:"M-13160.269,1885.114h-3.235v-4.381h-4.382V1877.5h4.382v-4.381h3.235v4.381h4.383v3.238h-4.383v4.38Z",transform:"translate(13167.886 -1873.114)"})})},Hi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{inputWithBorder:{border:"1px solid #EAEAEA",padding:15,height:150,overflowY:"auto",position:"relative",marginTop:15},labelContainer:{display:"flex"}}))}))((function(e){var t=e.elements,n=e.name,r=e.label,o=e.tooltip,s=void 0===o?"":o,l=e.commonPlaceholder,d=void 0===l?"":l,u=e.onChange,j=e.withBorder,m=void 0!==j&&j,p=e.classes,h=Object(c.useState)([""]),O=Object(b.a)(h,2),g=O[0],f=O[1],v=Object(c.createRef)();Object(c.useEffect)((function(){if(1===g.length&&""===g[0]&&t&&""!==t){var e=t.split(",");e.push(""),f(e)}}),[t,g]),Object(c.useEffect)((function(){if(g.length>1){var e=v.current;e&&e.scrollIntoView(!1)}}),[g,v]);var y=Object(c.useRef)(!0);Object(c.useLayoutEffect)((function(){y.current?y.current=!1:S()}),[g]);var C=function(e){e.persist();var t=Object(Nt.a)(g);t[Z()(e.target,"dataset.index",0)]=e.target.value,f(t)},S=Vi()((function(){var e=g.filter((function(e){return""!==e.trim()})).join(",");u(e)}),500),k=g.map((function(e,t){return Object(a.jsx)(hn,{id:"".concat(n,"-").concat(t.toString()),label:"",name:"".concat(n,"-").concat(t.toString()),value:g[t],onChange:C,index:t,placeholder:d,overlayIcon:t===g.length-1?Object(a.jsx)(Gi,{}):null,overlayAction:function(){!function(e){if(""!==e[e.length-1].trim()){var t=Object(Nt.a)(e);t.push(""),f(t)}}(g)}},"csv-".concat(n,"-").concat(t.toString()))}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:p.fieldContainer,children:[Object(a.jsxs)(Xt.a,{className:p.inputLabel,children:[Object(a.jsx)("span",{children:r}),""!==s&&Object(a.jsx)("div",{className:p.tooltipContainer,children:Object(a.jsx)(en.a,{title:s,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:p.tooltip})})})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(m?p.inputWithBorder:""),children:[k,Object(a.jsx)("div",{ref:v})]})]})})})),Yi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{inputLabel:Object(j.a)(Object(j.a)({},Se.inputLabel),{},{marginBottom:16,fontSize:14}),textBoxContainer:{flexGrow:1,position:"relative"},errorState:{color:"#b53b4b",fontSize:14,position:"absolute",top:7,right:7},cssOutlinedInput:{borderColor:"#9C9C9C",padding:16},rootContainer:{"& .MuiOutlinedInput-inputMultiline":Object(j.a)(Object(j.a)({},Se.inputLabel),{},{fontSize:13,minHeight:150})}}))}))((function(e){var t=e.label,n=e.onChange,c=e.value,r=e.id,o=e.name,s=e.disabled,l=void 0!==s&&s,d=e.tooltip,u=void 0===d?"":d,b=e.index,j=void 0===b?0:b,m=e.error,p=void 0===m?"":m,h=e.required,O=void 0!==h&&h,g=e.placeholder,v=void 0===g?"":g,y=e.classes,C={"data-index":j};return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(y.fieldContainer," ").concat(""!==p?y.errorInField:""),children:[""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:r,className:y.inputLabel,children:[Object(a.jsxs)("span",{children:[t,O?"*":""]}),""!==u&&Object(a.jsx)("div",{className:y.tooltipContainer,children:Object(a.jsx)(en.a,{title:u,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:y.tooltip})})})})]}),Object(a.jsx)("div",{className:y.textBoxContainer,children:Object(a.jsx)(f.a,{id:r,name:o,fullWidth:!0,value:c,disabled:l,onChange:n,multiline:!0,inputProps:C,error:""!==p,helperText:p,placeholder:v,InputLabelProps:{shrink:!0},InputProps:{classes:{notchedOutline:y.cssOutlinedInput,root:y.rootContainer}},variant:"outlined"})})]})})})),Qi=function(e,t,n){var a="on|off"===t?"false":"";if(n.length>0){var c=n.find((function(t){return t.key===e}));c&&(a=c.value)}return a},Zi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))((function(e){var t=e.onChange,n=e.fields,i=e.defaultVals,r=(e.classes,Object(c.useState)([])),o=Object(b.a)(r,2),s=o[0],l=o[1],d=n||[],u=i||[];Object(c.useEffect)((function(){var e=[];n.forEach((function(t){var n={key:t.name,value:Qi(t.name,t.type,u)};e.push(n)})),l(e)}),[n,i]),Object(c.useEffect)((function(){t(s)}),[s]);var j=function(e,t,n){var a=Object(Nt.a)(s);a[n]={key:e,value:t},l(a)},m=function(e,t){switch(e.type){case"on|off":var n=s[t]?s[t].value:"false";return Object(a.jsx)(In,{indicatorLabels:["On","Off"],onChange:function(n){var a=n.target.checked?"true":"false";j(e.name,a,t)},id:e.name,name:e.name,label:e.label,value:"switch_on",tooltip:e.tooltip,checked:"true"===n});case"csv":return Object(a.jsx)(Hi,{elements:s[t]?s[t].value:"",label:e.label,name:e.name,onChange:function(n){return j(e.name,n,t)},tooltip:e.tooltip,commonPlaceholder:e.placeholder,withBorder:!!e.withBorder});case"comment":return Object(a.jsx)(Yi,{id:e.name,name:e.name,label:e.label,tooltip:e.tooltip,value:s[t]?s[t].value:"",onChange:function(n){return j(e.name,n.target.value,t)},placeholder:e.placeholder});default:return Object(a.jsx)(hn,{id:e.name,name:e.name,label:e.label,tooltip:e.tooltip,value:s[t]?s[t].value:"",onChange:function(n){return j(e.name,n.target.value,t)},multiline:!!e.multiline,placeholder:e.placeholder})}};return Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{xs:12,item:!0,children:d.map((function(e,t){return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:m(e,t)})},e.name)}))})})})),Ji={serverNeedsRestart:K,setErrorSnackMessage:q},$i=Object(s.b)(null,Ji),Xi=$i(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),Be),{},{strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"},logoButton:{height:"80px"},customTitle:Object(j.a)(Object(j.a)({},Be.customTitle),{},{marginTop:0})}))}))((function(e){var t=e.closeModalAndRefresh,n=e.serverNeedsRestart,i=e.selectedConfiguration,r=e.setErrorSnackMessage,o=e.classes,s=Object(c.useState)([]),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!1),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(!0),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)([]),k=Object(b.a)(S,2),w=k[0],N=k[1];Object(c.useEffect)((function(){var e=Z()(i,"configuration_id",!1);e&&me.invoke("GET","/api/v1/configs/".concat(e)).then((function(e){var t=Z()(e,"key_values",[]);N(t)})).catch((function(e){C(!1),r(e)})),C(!1)}),[i,r]),Object(c.useEffect)((function(){if(p){var e={key_values:Wi(d)};me.invoke("PUT","/api/v1/configs/".concat(i.configuration_id),e).then((function(){h(!1),n(!0),t()})).catch((function(e){h(!1),r(e)}))}}),[p,n,i,d,t,r]);var T=Object(c.useCallback)((function(e){u(e)}),[u]);return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:o.customTitle,children:i.configuration_label}),Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)("form",{noValidate:!0,onSubmit:function(e){e.preventDefault(),h(!0)},children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.settingsFormContainer,children:[v&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})}),Object(a.jsx)(Zi,{fields:zi[i.configuration_id],onChange:T,defaultVals:w})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:o.settingsButtonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:p,children:"Save"})})]})})]})}))),er=Object(N.a)((function(){return Object(k.a)({masterContainer:{overflowX:"hidden",overflowY:"auto"},sliderContainer:{width:"auto",transitionDuration:"0.3s",position:"relative"},slide:{float:"left"}})}))((function(e){var t=e.classes,n=e.slideOptions,i=e.currentSlide;return Object(a.jsx)(Mt.a,{children:function(e){var r=e.width,o=e.height,s=i*r,l=r*n.length;return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)("div",{className:t.masterContainer,style:{width:r,height:o},children:Object(a.jsx)("div",{className:t.sliderContainer,style:{left:"-".concat(s,"px"),width:"".concat(l,"px")},children:n.map((function(e,n){return Object(a.jsx)("div",{className:t.slide,style:{width:r},children:e},"slide-panel-".concat(n.toString()))}))})})})}})})),tr=function(){return Object(a.jsx)($e.a,{viewBox:"0 0 10.847 6.572",children:Object(a.jsxs)("g",{transform:"translate(-84.793 -81.193)",children:[Object(a.jsx)("line",{x2:"9.64",transform:"translate(85.5 84.5)",fill:"none",stroke:"#000",strokeLinecap:"round",strokeWidth:"1"}),Object(a.jsx)("line",{y1:"2.558",x2:"2.645",transform:"translate(85.5 81.9)",fill:"none",stroke:"#000",strokeLinecap:"round",strokeWidth:"1"}),Object(a.jsx)("line",{x2:"2.645",y2:"2.558",transform:"translate(85.5 84.5)",fill:"none",stroke:"#000",strokeLinecap:"round",strokeWidth:"1"})]})})},nr={configuration_id:"",configuration_label:""},ar=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},iconText:{lineHeight:"24px"},customConfigurationPage:{height:"calc(100vh - 324px)",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}},Ie),Ae),Be),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(nr),i=Object(b.a)(n,2),r=i[0],o=i[1],s=Object(c.useState)(0),l=Object(b.a)(s,2),d=l[0],j=l[1],m=[{type:"edit",onClick:function(e){var t=Z()(e,"url","");""!==t?u.push(t):(j(1),o(e))}}];return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("div",{className:t.settingsOptionsContainer,children:Object(a.jsx)(er,{slideOptions:[Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.customTitle,children:"Configuration Types"}),Object(a.jsx)(on,{itemActions:m,columns:[{label:"Configuration",elementKey:"configuration_id"}],isLoading:!1,records:Pi,entityName:"Configurations",idField:"configuration_id",customPaperHeight:t.customConfigurationPage,noBackground:!0})]}),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.backContainer,children:Object(a.jsxs)("button",{onClick:function(){j(0),o(nr)},className:t.backButton,children:[Object(a.jsx)(tr,{}),"Back To Configurations"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:1===d?Object(a.jsx)(Xi,{closeModalAndRefresh:function(){j(0)},selectedConfiguration:r}):null})]})],currentSlide:d})})})})})})})),cr=n(198),ir=n(332),rr=n.n(ir),or=[{actionTrigger:Ei,targetTitle:"Postgres SQL",logo:"/postgres.png"},{actionTrigger:Ai,targetTitle:"Kafka",logo:"/kafka.png"},{actionTrigger:Ii,targetTitle:"AMQP",logo:"/amqp.png"},{actionTrigger:Mi,targetTitle:"MQTT",logo:"/mqtt.png"},{actionTrigger:Li,targetTitle:"Redis",logo:"/redis.png"},{actionTrigger:Di,targetTitle:"NATS",logo:"/nats.png"},{actionTrigger:_i,targetTitle:"Mysql",logo:"/mysql.png"},{actionTrigger:Bi,targetTitle:"Elastic Search",logo:"/elasticsearch.png"},{actionTrigger:Fi,targetTitle:"Webhook",logo:""},{actionTrigger:Ri,targetTitle:"NSQ",logo:""}],sr=n(48),lr=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))((function(e){var t=e.onChange,n=e.classes,r=Object(c.useState)(!1),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(""),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(""),h=Object(b.a)(p,2),O=h[0],g=h[1],f=Object(c.useState)(""),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(" "),F=Object(b.a)(B,2),R=F[0],P=F[1],z=Object(c.useState)(""),K=Object(b.a)(z,2),U=K[0],W=K[1],q=Object(c.useState)("namespace"),V=Object(b.a)(q,2),G=V[0],H=V[1],Y=Object(c.useState)(""),Q=Object(b.a)(Y,2),Z=Q[0],J=Q[1],$=Object(c.useState)(""),X=Object(b.a)($,2),ee=X[0],te=X[1],ne=Object(c.useState)(""),ae=Object(b.a)(ne,2),ce=ae[0],ie=ae[1],re=Object(c.useCallback)((function(){var e="";return""!==O&&(e="".concat(e," host=").concat(O)),""!==y&&(e="".concat(e," dbname=").concat(y)),""!==_&&(e="".concat(e," user=").concat(_)),""!==L&&(e="".concat(e," password=").concat(L)),""!==w&&(e="".concat(e," port=").concat(w))," "!==R&&(e="".concat(e," sslmode=").concat(R)),(e="".concat(e," ")).trim()}),[O,y,_,L,w,R]);return Object(c.useEffect)((function(){""!==j&&t([{key:"connection_string",value:j},{key:"table",value:U},{key:"format",value:G},{key:"queue_dir",value:Z},{key:"queue_limit",value:ee},{key:"comment",value:ce}])}),[j,U,G,Z,ee,ce,t]),Object(c.useEffect)((function(){var e=re();m(e)}),[_,y,L,w,R,O,m,re]),Object(c.useEffect)((function(){if(s){var e=re();m(e)}else{var t=function(e,t){var n,a=[],c=Object(sr.a)(t);try{for(c.s();!(n=c.n()).done;){var i=n.value,r=e.indexOf(i+"=");-1!==r&&a.push(r)}}catch(h){c.e(h)}finally{c.f()}a.sort((function(e,t){return e-t}));for(var o=new Map,s=new Array(a.length),l=0;l=0})),_=function(){T(""),S(C-1)};return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("div",{className:t.settingsOptionsContainer,children:Object(a.jsx)(er,{slideOptions:[Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.customTitle,children:"Lambda Notification Targets"}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.lambdaContainer,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Filter",className:t.searchField,id:"search-resource",label:"",onChange:function(e){j(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){S(1)},children:"Add Notification Target"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:[],columns:[{label:"Status",elementKey:"status",renderFunction:function(e){return Object(a.jsxs)("div",{style:{display:"flex",alignItems:"center"},children:[Object(a.jsx)(rr.a,{style:"Offline"===e?{color:cr.a[500]}:{}}),e]})},width:150},{label:"Service",elementKey:"service_name"}],isLoading:h,records:E,entityName:"Notification Endpoints",idField:"service_name",customPaperHeight:t.customConfigurationPage,noBackground:!0})})]})]}),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.backContainer,children:Object(a.jsxs)("button",{onClick:_,className:t.backButton,children:[Object(a.jsx)(tr,{}),"Back To Lambda Notifications"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(pr,{setService:function(e){T(e),S(2)}})})]}),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.backContainer,children:Object(a.jsxs)("button",{onClick:_,className:t.backButton,children:[Object(a.jsx)(tr,{}),"Back To Supported Services"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(br,{service:N,saveAndRefresh:function(){O(!0),S(0),T("")}})})]})],currentSlide:C})})})})})})}))),fr=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({headerLabel:{fontSize:22,fontWeight:600,color:"#000",marginTop:4}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(0),i=Object(b.a)(n,2),r=i[0],o=i[1];return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(Rn,{label:"Settings"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.headerLabel,children:"All Settings"}),Object(a.jsxs)(Kn.a,{value:r,indicatorColor:"primary",textColor:"primary",onChange:function(e,t){o(t)},"aria-label":"tenant-tabs",children:[Object(a.jsx)(Un.a,{label:"Configurations"}),Object(a.jsx)(Un.a,{label:"Lambda Notifications"})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[0===r&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ar,{})}),1===r&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(gr,{})})]})]})})]})})),xr=n(196),vr=n.n(xr),yr={logger:{main:"logger",title:"Logger Webhook Configuration",modalTitle:"Logger Webhook",apiURL:"",configuration:{configuration_id:"logger_webhook",configuration_label:"Logger Webhook"}},audit:{main:"audit",title:"Audit Webhook Configuration",modalTitle:"Audit Webhook",apiURL:"",configuration:{configuration_id:"audit_webhook",configuration_label:"Audit Webhook"}}},Cr=Object(N.a)((function(e){return Object(k.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},actionsTray:{textAlign:"right","& button":{marginLeft:10}},searchField:{background:"#FFFFFF",padding:12,borderRadius:5,boxShadow:"0px 3px 6px #00000012"},iconText:{lineHeight:"24px"}})}))((function(e){var t=e.match,n=e.classes,r=Object(c.useState)(!1),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(""),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],y=h[1],C=Z()(t,"path","").split("/"),S=Z()(yr,C[2],!1);if(!S)return null;var k=[].filter((function(e){return e.name.toLocaleLowerCase().includes(j.toLocaleLowerCase())}));return Object(a.jsxs)(i.a.Fragment,{children:[s&&Object(a.jsx)(Xi,{closeModalAndRefresh:function(){y(!0),l(!1)},selectedConfiguration:S.configuration}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"h6",children:S.title})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:n.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Filter",className:n.searchField,id:"search-resource",label:"",onChange:function(e){m(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(vr.a,{}),onClick:function(){l(!0)},children:"Add Webhook Configuration"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:[{type:"edit",onClick:function(){}}],columns:[{label:"Name",elementKey:"name"}],isLoading:O,records:k,entityName:"Webhook Configurations",idField:"name"})})]})]})})),Sr=Object(s.b)(null,{setErrorSnackMessage:q})((function(e){var t=e.deleteOpen,n=e.selectedTenant,i=e.closeDeleteModalAndRefresh,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1];Object(c.useEffect)((function(){l&&me.invoke("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.name)).then((function(){d(!1),i(!0)})).catch((function(e){d(!1),r(e)}))}),[l]);return Object(a.jsxs)(sn.a,{open:t,onClose:function(){i(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Tenant"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["To continue please type ",Object(a.jsx)("b",{children:n.name})," in the box.",Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"retype-tenant",name:"retype-tenant",onChange:function(e){p(e.target.value)},label:"",value:m})})]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){i(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){m===n.name?d(!0):r("Tenant name is not correct")},color:"secondary",autoFocus:!0,disabled:""===m,children:"Delete"})]})]})})),kr=Object(N.a)((function(e){return Object(k.a)({wizardStepContainer:{display:"flex",flexDirection:"column"},wizardComponent:{overflowY:"auto",marginBottom:10,height:"calc(100vh - 435px)"},buttonsContainer:{display:"flex",flexDirection:"row",justifyContent:"flex-end",padding:"10px 0",borderTop:"#EAEAEA 1px solid","& button":{marginLeft:10}}})}))((function(e){var t=e.classes,n=e.page,c=e.pageChange;return Object(a.jsxs)("div",{className:t.wizardStepContainer,children:[Object(a.jsx)("div",{className:t.wizardComponent,children:n.componentRender}),Object(a.jsx)("div",{className:t.buttonsContainer,children:n.buttons.map((function(e){return Object(a.jsx)(g.a,{variant:"contained",color:"primary",size:"small",onClick:function(){!function(e){switch(e.type){case"next":c("++");break;case"back":c("--");break;case"to":c(e.toPage||0)}e.action&&e.action()}(e)},disabled:!e.enabled,children:e.label},"button-".concat(n.label,"-").concat(e.label))}))})]})})),wr=Object(N.a)((function(e){return Object(k.a)({wizardMain:{display:"flex",width:"100%",height:"100%",flexGrow:1},wizFromContainer:{height:"calc(100vh - 365px)",minHeight:450,padding:"0 30px"},wizardSteps:{minWidth:180,marginRight:10,borderRight:"#eaeaea 1px solid",display:"flex",flexGrow:1,flexDirection:"column",height:"100%","& ul":{padding:"0 15px 0 40px",marginTop:"0px","& li":{listStyle:"lower-roman",marginBottom:12}}},buttonList:{backgroundColor:"transparent",border:"none",cursor:"pointer","&:not(:disabled):hover":{textDecoration:"underline"},"&:selected, &:active, &:focus, &:focus:active":{border:"none",outline:0,boxShadow:"none"}},paddedContentGrid:{padding:"0 10px"},stepsLabel:{fontSize:20,color:"#393939",fontWeight:600,margin:"15px 12px"}})}))((function(e){var t=e.classes,n=e.wizardSteps,i=Object(c.useState)(0),r=Object(b.a)(i,2),o=r[0],s=r[1],l=function(e){var t=n.length-1;if("++"===e){var a=o+1;a>t&&(a=t),s(a)}if("--"===e){var c=o-1;c<0&&(c=0),s(c)}if("number"===typeof e){var i=e;e<0&&(i=0),e>t&&(i=t),s(i)}};return 0===n.length?null:Object(a.jsxs)(x.a,{container:!0,className:t.wizFromContainer,children:[Object(a.jsx)(x.a,{item:!0,xs:12,sm:3,md:3,lg:3,xl:2,children:Object(a.jsxs)("div",{className:t.wizardSteps,children:[Object(a.jsx)("span",{className:t.stepsLabel,children:"Steps"}),Object(a.jsx)("ul",{children:n.map((function(e,n){return Object(a.jsx)("li",{children:Object(a.jsx)("button",{onClick:function(){return l(n)},disabled:n>o,className:t.buttonList,children:e.label})},"wizard-".concat(n.toString()))}))})]})}),Object(a.jsx)(x.a,{item:!0,xs:12,sm:9,md:9,lg:9,xl:10,className:t.paddedContentGrid,children:Object(a.jsx)(kr,{page:n[o],pageChange:l})})]})})),Nr=function(e,t){return{podAntiAffinity:{requiredDuringSchedulingIgnoredDuringExecution:[{labelSelector:{matchExpressions:[{key:"v1.min.io/tenant",operator:"In",values:[e]},{key:"v1.min.io/pool",operator:"In",values:[t]}]},topologyKey:"kubernetes.io/hostname"}]}}},Tr="ADD_TENANT/SET_CURRENT_PAGE",Er="ADD_TENANT/SET_ADVANCED_MODE",_r="ADD_TENANT/UPDATE_FIELD",Ar="ADD_TENANT/SET_PAGE_VALID",Ir="ADD_TENANT/RESET_FORM",Mr="ADD_TENANT/SET_STORAGE_CLASSES_LIST",Lr="ADD_TENANT/ADD_MINIO_KEYPAIR",Dr="ADD_TENANT/ADD_FILE_MINIO_KEYPAIR",Br="ADD_TENANT/DELETE_MINIO_KEYPAIR",Fr="ADD_TENANT/ADD_CA_KEYPAIR",Rr="ADD_TENANT/ADD_FILE_TO_CA_KEYPAIR",Pr="ADD_TENANT/DELETE_CA_KEYPAIR",zr="ADD_TENANT/ADD_CONSOLE_CERT",Kr="ADD_TENANT/ENCRYPTION_SERVER_CERT",Ur="ADD_TENANT/ENCRYPTION_CLIENT_CERT",Wr="ADD_TENANT/ENCRYPTION_VAULT_CERT",qr="ADD_TENANT/ENCRYPTION_VAULT_CA",Vr="ADD_TENANT/ENCRYPTION_GEMALTO_CA",Gr=function(e,t,n){return{type:_r,pageName:e,field:t,value:n}},Hr=function(e,t){return{type:Ar,pageName:e,valid:t}},Yr=function(e,t,n){return{type:zr,key:e,fileName:t,value:n}},Qr=function(e){var t={};return e.forEach((function(e){if(e.required&&""===e.value.trim())t[e.fieldKey]="Field cannot be empty";else if(e.customValidation&&e.customValidationMessage)t[e.fieldKey]=e.customValidationMessage;else if(e.pattern&&e.customPatternMessage){var n=new RegExp(e.pattern,"g");e.value.match(n)||(t[e.fieldKey]=e.customPatternMessage)}else;})),t},Zr=function(e,t){var n=Object(j.a)({},e);return delete n[t],n},Jr=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,tenantName:e.tenants.createTenant.fields.nameTenant.tenantName,namespace:e.tenants.createTenant.fields.nameTenant.namespace,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,storageClasses:e.tenants.createTenant.storageClasses}}),{setModalErrorSnackMessage:G,setAdvancedMode:function(e){return{type:Er,state:e}},updateAddField:Gr,setStorageClassesList:function(e){return{type:Mr,storageClasses:e}},setLimitSize:function(e){return{type:"ADD_TENANT/SET_LIMIT_SIZE",limitSize:e}},isPageValid:Hr}),$r=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(Jr((function(e){var t=e.classes,n=e.storageClasses,r=e.advancedMode,o=e.tenantName,s=e.namespace,l=e.selectedStorageClass,d=e.setAdvancedMode,u=e.updateAddField,j=e.setStorageClassesList,m=e.setLimitSize,p=e.isPageValid,h=Object(c.useState)({}),O=Object(b.a)(h,2),g=O[0],f=O[1],v=Object(c.useCallback)((function(e,t){u("nameTenant",e,t)}),[u]),y=Object(c.useCallback)((function(){v("selectedStorageClass",""),j([]),me.invoke("GET","/api/v1/namespaces/".concat(s,"/resourcequotas/").concat(s,"-storagequota")).then((function(e){var t=Z()(e,"elements",[]);m(function(e){var t=Z()(e,"elements",[]),n={};return t.forEach((function(e){var t=e.name.split(".storageclass.storage.k8s.io/requests.storage")[0],a=Z()(e,"hard",0),c=Z()(e,"used",0);n[t]=a-c})),n}(e));var n=t.map((function(e){var t=Z()(e,"name","").split(".storageclass.storage.k8s.io/requests.storage")[0];return{label:t,value:t}}));j(n),n.length>0&&v("selectedStorageClass",n[0].value)})).catch((function(e){console.error(e)}))}),[s,m,j,v]),C=Object(c.useMemo)((function(){return Vi()(y,500)}),[y]);Object(c.useEffect)((function(){if(""!==s)return C(),C.cancel}),[C,s]),Object(c.useEffect)((function(){var e=Qr([{fieldKey:"tenant-name",required:!0,pattern:/^[a-z0-9-]{3,63}$/,customPatternMessage:"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3",value:o},{fieldKey:"namespace",required:!0,value:s,customValidation:n.length<1,customValidationMessage:"Please enter a valid namespace"}]),t=!("tenant-name"in e)&&!("namespace"in e)&&n.length>0;p("nameTenant",t),f(e)}),[n,s,o,p]);var S=function(e){f(Zr(g,e))};return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Name Tenant"}),Object(a.jsx)("span",{className:t.descriptionText,children:"How would you like to name this new tenant?"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"tenant-name",name:"tenant-name",onChange:function(e){v("tenantName",e.target.value),S("tenant-name")},label:"Name",value:o,required:!0,error:g["tenant-name"]||""})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"namespace",name:"namespace",onChange:function(e){v("namespace",e.target.value),S("namespace")},label:"Namespace",value:s,error:g.namespace||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{id:"storage_class",name:"storage_class",onChange:function(e){v("selectedStorageClass",e.target.value)},label:"Storage Class",value:l,options:n,disabled:n.length<1})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsxs)("span",{className:t.descriptionText,children:["Check 'Advanced Mode' for additional configuration options, such as configuring an Identity Provider, Encryption at rest, and customized TLS/SSL Certificates.",Object(a.jsx)("br",{}),"Leave 'Advanced Mode' unchecked to use the secure default settings for the tenant."]}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(In,{value:"adv_mode",id:"adv_mode",name:"adv_mode",checked:r,onChange:function(e){var t=e.target.checked;d(t)},label:"Advanced Mode"})]})]})}))),Xr=Object(s.b)((function(e){return{customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,consoleImage:e.tenants.createTenant.fields.configure.consoleImage,customDockerhub:e.tenants.createTenant.fields.configure.customDockerhub,imageRegistry:e.tenants.createTenant.fields.configure.imageRegistry,imageRegistryUsername:e.tenants.createTenant.fields.configure.imageRegistryUsername,imageRegistryPassword:e.tenants.createTenant.fields.configure.imageRegistryPassword,exposeMinIO:e.tenants.createTenant.fields.configure.exposeMinIO,exposeConsole:e.tenants.createTenant.fields.configure.exposeConsole}}),{updateAddField:Gr,isPageValid:Hr}),eo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(Xr((function(e){var t=e.classes,n=e.customImage,i=e.imageName,r=e.consoleImage,o=e.customDockerhub,s=e.imageRegistry,l=e.imageRegistryUsername,d=e.imageRegistryPassword,u=e.exposeMinIO,j=e.exposeConsole,m=e.updateAddField,p=e.isPageValid,h=Object(c.useState)({}),O=Object(b.a)(h,2),g=O[0],f=O[1],v=Object(c.useCallback)((function(e,t){m("configure",e,t)}),[m]);Object(c.useEffect)((function(){var e=[];n&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"image",required:!0,value:i,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"consoleImage",required:!0,value:r,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/console:VERSION'"}]),o&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"registry",required:!0,value:s},{fieldKey:"registryUsername",required:!0,value:l},{fieldKey:"registryPassword",required:!0,value:d}])));var t=Qr(e);p("configure",0===Object.keys(t).length),f(t)}),[n,i,r,o,s,l,d,p]);var y=function(e){f(Zr(g,e))};return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Configure"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Basic configurations for tenant management"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"custom_image",id:"custom_image",name:"custom_image",checked:n,onChange:function(e){var t=e.target.checked;v("customImage",t)},label:"Use custom image"})}),n&&Object(a.jsxs)(c.Fragment,{children:["Please enter the MinIO image from dockerhub to use",Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"image",name:"image",onChange:function(e){v("imageName",e.target.value),y("image")},label:"MinIO's Image",value:i,error:g.image||"",placeholder:"E.g. minio/minio:RELEASE.2020-05-08T02-40-49Z",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"consoleImage",name:"consoleImage",onChange:function(e){v("consoleImage",e.target.value),y("consoleImage")},label:"Console's Image",value:r,error:g.consoleImage||"",placeholder:"E.g. minio/console:v0.3.13",required:!0})})]}),n&&Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:o,onChange:function(e){var t=e.target.checked;v("customDockerhub",t)},label:"Set/Update Image Registry"})})}),o&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"registry",name:"registry",onChange:function(e){v("imageRegistry",e.target.value)},label:"Endpoint",value:s,error:g.registry||"",placeholder:"E.g. https://index.docker.io/v1/",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"registryUsername",name:"registryUsername",onChange:function(e){v("imageRegistryUsername",e.target.value)},label:"Username",value:l,error:g.registryUsername||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"registryPassword",name:"registryPassword",onChange:function(e){v("imageRegistryPassword",e.target.value)},label:"Password",value:d,error:g.registryPassword||"",required:!0})})]}),Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Expose Services"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Whether the tenant's services should request an external IP."})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:u,onChange:function(e){var t=e.target.checked;v("exposeMinIO",t)},label:"Expose MiniO Service"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"expose_console",id:"expose_console",name:"expose_console",checked:j,onChange:function(e){var t=e.target.checked;v("exposeConsole",t)},label:"Expose Console Service"})})]})}))),to=Object(s.b)((function(e){return{idpSelection:e.tenants.createTenant.fields.identityProvider.idpSelection,openIDURL:e.tenants.createTenant.fields.identityProvider.openIDURL,openIDClientID:e.tenants.createTenant.fields.identityProvider.openIDClientID,openIDSecretID:e.tenants.createTenant.fields.identityProvider.openIDSecretID,ADURL:e.tenants.createTenant.fields.identityProvider.ADURL,ADSkipTLS:e.tenants.createTenant.fields.identityProvider.ADSkipTLS,ADServerInsecure:e.tenants.createTenant.fields.identityProvider.ADServerInsecure,ADUserNameFilter:e.tenants.createTenant.fields.identityProvider.ADUserNameFilter,ADGroupBaseDN:e.tenants.createTenant.fields.identityProvider.ADGroupBaseDN,ADGroupSearchFilter:e.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,ADNameAttribute:e.tenants.createTenant.fields.identityProvider.ADNameAttribute}}),{updateAddField:Gr,isPageValid:Hr}),no=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(to((function(e){var t=e.classes,n=e.idpSelection,i=e.openIDURL,r=e.openIDClientID,o=e.openIDSecretID,s=e.ADURL,l=e.ADSkipTLS,d=e.ADServerInsecure,u=e.ADUserNameFilter,j=e.ADGroupBaseDN,m=e.ADGroupSearchFilter,p=e.ADNameAttribute,h=e.updateAddField,O=e.isPageValid,g=Object(c.useState)({}),f=Object(b.a)(g,2),y=f[0],C=f[1],S=Object(c.useCallback)((function(e,t){h("identityProvider",e,t)}),[h]),k=function(e){C(Zr(y,e))};return Object(c.useEffect)((function(){var e=[];if("Built-in"===n)return O("identityProvider",!0),void C({});"OpenID"===n&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"openID_URL",required:!0,value:i},{fieldKey:"openID_clientID",required:!0,value:r},{fieldKey:"openID_secretID",required:!0,value:o}])),"AD"===n&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"AD_URL",required:!0,value:s},{fieldKey:"ad_userNameFilter",required:!0,value:u},{fieldKey:"ad_groupBaseDN",required:!0,value:j},{fieldKey:"ad_groupSearchFilter",required:!0,value:m},{fieldKey:"ad_nameAttribute",required:!0,value:p}]));var t=Qr(e);O("identityProvider",0===Object.keys(t).length),C(t)}),[n,i,r,o,s,u,j,m,p,O]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Identity Provider"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Access to the tenant can be controlled via an external Identity Manager."})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(Tn,{currentSelection:n,id:"idp-options",name:"idp-options",label:"Protocol",onChange:function(e){S("idpSelection",e.target.value)},selectorOptions:[{label:"Built-in",value:"Built-in"},{label:"OpenID",value:"OpenID"},{label:"Active Directory",value:"AD"}]}),"MinIO supports both OpenID and Active Directory"]}),"OpenID"===n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"openID_URL",name:"openID_URL",onChange:function(e){S("openIDURL",e.target.value),k("openID_URL")},label:"URL",value:i,error:y.openID_URL||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"openID_clientID",name:"openID_clientID",onChange:function(e){S("openIDClientID",e.target.value),k("openID_clientID")},label:"Client ID",value:r,error:y.openID_clientID||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"openID_secretID",name:"openID_secretID",onChange:function(e){S("openIDSecretID",e.target.value),k("openID_secretID")},label:"Secret ID",value:o,error:y.openID_secretID||"",required:!0})})]}),"AD"===n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"AD_URL",name:"AD_URL",onChange:function(e){S("ADURL",e.target.value),k("AD_URL")},label:"URL",value:s,error:y.AD_URL||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:l,onChange:function(e){var t=e.target.checked;S("ADSkipTLS",t)},label:"Skip TLS Verification"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:d,onChange:function(e){var t=e.target.checked;S("ADServerInsecure",t)},label:"Server Insecure"})}),d?Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(v.a,{className:t.error,variant:"caption",display:"block",gutterBottom:!0,children:"Warning: All traffic with Active Directory will be unencrypted"}),Object(a.jsx)("br",{})]}):null,Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_userNameFilter",name:"ad_userNameFilter",onChange:function(e){S("ADUserNameFilter",e.target.value),k("ad_userNameFilter")},label:"User Search Filter",value:u,error:y.ad_userNameFilter||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_groupBaseDN",name:"ad_groupBaseDN",onChange:function(e){S("ADGroupBaseDN",e.target.value),k("ad_groupBaseDN")},label:"Group Search Base DN",value:j,error:y.ad_groupBaseDN||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:function(e){S("ADGroupSearchFilter",e.target.value),k("ad_groupSearchFilter")},label:"Group Search Filter",value:m,error:y.ad_groupSearchFilter||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_nameAttribute",name:"ad_nameAttribute",onChange:function(e){S("ADNameAttribute",e.target.value),k("ad_nameAttribute")},label:"Group Name Attribute",value:p,error:y.ad_nameAttribute||"",required:!0})})]})]})}))),ao=n(334),co=n.n(ao),io=n(333),ro=n.n(io),oo=Object(N.a)((function(e){return Object(k.a)({errorBlock:{color:e.palette.error.main}})}))((function(e){var t=e.classes,n=e.errorMessage,c=e.withBreak,r=void 0===c||c;return Object(a.jsxs)(i.a.Fragment,{children:[r&&Object(a.jsx)("br",{}),Object(a.jsx)(v.a,{component:"p",variant:"body1",className:t.errorBlock,children:n})]})})),so=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{textBoxContainer:{flexGrow:1,position:"relative",flexDirection:"column"},errorState:{color:"#b53b4b",fontSize:14,position:"absolute",top:7,right:7},errorText:{margin:"0",fontSize:"0.75rem",marginTop:3,textAlign:"left",fontFamily:"Lato,sans-serif",fontWeight:400,lineHeight:"1.66",color:"#dc1f2e"},valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileReselect:{display:"flex",alignItems:"center"},fieldBottom:{borderBottom:"#9c9c9c 1px solid"},fileInputField:{margin:"13px 0"}}))}))((function(e){var t=e.label,n=e.classes,r=e.onChange,o=e.id,s=e.name,l=e.disabled,d=void 0!==l&&l,u=e.tooltip,j=void 0===u?"":u,m=e.required,p=e.error,h=void 0===p?"":p,O=e.accept,g=void 0===O?"":O,f=e.value,v=void 0===f?"":f,y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1];return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(n.fieldBottom," ").concat(n.fieldContainer," ").concat(""!==h?n.errorInField:""),children:[""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:o,className:"".concat(""!==h?n.fieldLabelError:""," ").concat(n.inputLabel),children:[Object(a.jsxs)("span",{children:[t,m?"*":""]}),""!==j&&Object(a.jsx)("div",{className:n.tooltipContainer,children:Object(a.jsx)(en.a,{title:j,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:n.tooltip})})})})]}),S||""===v?Object(a.jsxs)("div",{className:n.textBoxContainer,children:[Object(a.jsx)("input",{type:"file",name:s,onChange:function(e){var t=Z()(e,"target.files[0].name","");!function(e,t){var n=e.target.files[0],a=new FileReader;a.readAsDataURL(n),a.onload=function(){var e=a.result;if(e){var n=e.toString().split("base64,");2===n.length&&t(n[1])}}}(e,(function(e){r(e,t)}))},accept:g,required:m,disabled:d,className:n.fileInputField}),""!==v&&Object(a.jsx)(_t.a,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){k(!1)},disableRipple:!1,disableFocusRipple:!1,children:Object(a.jsx)(ro.a,{})}),""!==h&&Object(a.jsx)(oo,{errorMessage:h})]}):Object(a.jsxs)("div",{className:n.fileReselect,children:[Object(a.jsx)("div",{className:n.valueString,children:v}),Object(a.jsx)(_t.a,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){k(!0)},disableRipple:!1,disableFocusRipple:!1,children:Object(a.jsx)(co.a,{})})]})]})})})),lo=Object(s.b)((function(e){return{enableTLS:e.tenants.createTenant.fields.security.enableTLS,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,caCertificates:e.tenants.createTenant.certificates.caCertificates,consoleCertificate:e.tenants.createTenant.certificates.consoleCertificate}}),{updateAddField:Gr,isPageValid:Hr,addFileToCaCertificates:function(e,t,n,a){return{type:Rr,id:e,key:t,fileName:n,value:a}},deleteCaCertificate:function(e){return{type:Pr,id:e}},addCaCertificate:function(){return{type:Fr}},addKeyPair:function(){return{type:Lr}},addFileToKeyPair:function(e,t,n,a){return{type:Dr,id:e,key:t,fileName:n,value:a}},deleteKeyPair:function(e){return{type:Br,id:e}},addConsoleCertificate:Yr}),uo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(lo((function(e){var t=e.classes,n=e.enableTLS,i=e.enableAutoCert,r=e.enableCustomCerts,o=e.minioCertificates,s=e.caCertificates,l=e.consoleCertificate,d=e.updateAddField,u=e.isPageValid,b=e.addFileToCaCertificates,j=e.deleteCaCertificate,m=e.addCaCertificate,p=e.addKeyPair,h=e.addFileToKeyPair,O=e.deleteKeyPair,f=Object(c.useCallback)((function(e,t){d("security",e,t)}),[d]);return Object(c.useEffect)((function(){u("security",!n||(!!i||!!r))}),[n,i,r,u]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("div",{className:t.headerElement,children:Object(a.jsx)("h3",{className:t.h3Section,children:"Security"})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(In,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:n,onChange:function(e){var t=e.target.checked;f("enableTLS",t)},label:"Enable TLS"}),"Enable TLS for the tenant, this is required for Encryption Configuration",n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(v.a,{variant:"caption",display:"block",gutterBottom:!0,children:"AutoCert: MinIO Operator will generate all TLS certificates automatically"}),Object(a.jsx)(v.a,{variant:"caption",display:"block",gutterBottom:!0,children:"Custom certificates: Allow user to provide your own certificates"}),Object(a.jsx)("br",{})]})]}),n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(In,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:i,onChange:function(e){var t=e.target.checked;f("enableAutoCert",t)},label:"Enable AutoCert"}),Object(a.jsx)(In,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:r,onChange:function(e){var t=e.target.checked;f("enableCustomCerts",t)},label:"Custom Certificates"})]}),r&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"MinIO Certificates"})}),o.map((function(e){return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:5,children:Object(a.jsx)(so,{onChange:function(t,n){h(e.id,"key",n,t)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key})}),Object(a.jsx)(x.a,{item:!0,xs:5,children:Object(a.jsx)(so,{onChange:function(t,n){h(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),Object(a.jsx)(x.a,{item:!0,xs:1,children:Object(a.jsx)(g.a,{onClick:function(){O(e.id)},color:"secondary",children:"Remove"})})]},e.id)})),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{onClick:p,color:"primary",children:"Add More"})})]}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsx)(xc.a,{}),Object(a.jsx)("br",{})]})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"CA Certificates"})}),s.map((function(e){return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:10,children:Object(a.jsx)(so,{onChange:function(t,n){b(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),Object(a.jsx)(x.a,{item:!0,xs:1,children:Object(a.jsx)(g.a,{onClick:function(){j(e.id)},color:"secondary",children:"Remove"})})]},e.id)})),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{onClick:m,color:"primary",children:"Add More"})})]}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsx)(xc.a,{}),Object(a.jsx)("br",{})]})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"Console Certificates"})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){Yr("key",t,e)},accept:".key,.pem",id:"consoleKey",name:"consoleKey",label:"Key",value:l.key})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){Yr("cert",t,e)},accept:".cer,.crt,.cert,.pem",id:"consoleCert",name:"consoleCert",label:"Cert",value:l.cert})})]})]})]})]})}))),bo=Object(s.b)((function(e){return{enableEncryption:e.tenants.createTenant.fields.encryption.enableEncryption,encryptionType:e.tenants.createTenant.fields.encryption.encryptionType,gemaltoEndpoint:e.tenants.createTenant.fields.encryption.gemaltoEndpoint,gemaltoToken:e.tenants.createTenant.fields.encryption.gemaltoToken,gemaltoDomain:e.tenants.createTenant.fields.encryption.gemaltoDomain,gemaltoRetry:e.tenants.createTenant.fields.encryption.gemaltoRetry,awsEndpoint:e.tenants.createTenant.fields.encryption.awsEndpoint,awsRegion:e.tenants.createTenant.fields.encryption.awsRegion,awsKMSKey:e.tenants.createTenant.fields.encryption.awsKMSKey,awsAccessKey:e.tenants.createTenant.fields.encryption.awsAccessKey,awsSecretKey:e.tenants.createTenant.fields.encryption.awsSecretKey,awsToken:e.tenants.createTenant.fields.encryption.awsToken,vaultEndpoint:e.tenants.createTenant.fields.encryption.vaultEndpoint,vaultEngine:e.tenants.createTenant.fields.encryption.vaultEngine,vaultNamespace:e.tenants.createTenant.fields.encryption.vaultNamespace,vaultPrefix:e.tenants.createTenant.fields.encryption.vaultPrefix,vaultAppRoleEngine:e.tenants.createTenant.fields.encryption.vaultAppRoleEngine,vaultId:e.tenants.createTenant.fields.encryption.vaultId,vaultSecret:e.tenants.createTenant.fields.encryption.vaultSecret,vaultRetry:e.tenants.createTenant.fields.encryption.vaultRetry,vaultPing:e.tenants.createTenant.fields.encryption.vaultPing,gcpProjectID:e.tenants.createTenant.fields.encryption.gcpProjectID,gcpEndpoint:e.tenants.createTenant.fields.encryption.gcpEndpoint,gcpClientEmail:e.tenants.createTenant.fields.encryption.gcpClientEmail,gcpClientID:e.tenants.createTenant.fields.encryption.gcpClientID,gcpPrivateKeyID:e.tenants.createTenant.fields.encryption.gcpPrivateKeyID,gcpPrivateKey:e.tenants.createTenant.fields.encryption.gcpPrivateKey,enableCustomCertsForKES:e.tenants.createTenant.fields.encryption.enableCustomCertsForKES,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableTLS:e.tenants.createTenant.fields.security.enableTLS,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,serverCertificate:e.tenants.createTenant.certificates.serverCertificate,clientCertificate:e.tenants.createTenant.certificates.clientCertificate,vaultCertificate:e.tenants.createTenant.certificates.vaultCertificate,vaultCA:e.tenants.createTenant.certificates.vaultCA,gemaltoCA:e.tenants.createTenant.certificates.gemaltoCA,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts}}),{updateAddField:Gr,isPageValid:Hr,addFileServerCert:function(e,t,n){return{type:Kr,key:e,fileName:t,value:n}},addFileClientCert:function(e,t,n){return{type:Ur,key:e,fileName:t,value:n}},addFileVaultCert:function(e,t,n){return{type:Wr,key:e,fileName:t,value:n}},addFileVaultCa:function(e,t){return{type:qr,fileName:e,value:t}},addFileGemaltoCa:function(e,t){return{type:Vr,fileName:e,value:t}}}),jo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(bo((function(e){var t=e.classes,n=e.updateAddField,i=e.isPageValid,r=e.addFileServerCert,o=e.addFileClientCert,s=e.addFileVaultCert,l=e.addFileVaultCa,d=e.addFileGemaltoCa,u=e.enableEncryption,j=e.enableCustomCerts,m=e.encryptionType,p=e.gemaltoEndpoint,h=e.gemaltoToken,O=e.gemaltoDomain,g=e.gemaltoRetry,f=e.awsEndpoint,y=e.awsRegion,C=e.awsKMSKey,S=e.awsAccessKey,k=e.awsSecretKey,w=e.awsToken,N=e.vaultEndpoint,T=e.vaultEngine,E=e.vaultNamespace,_=e.vaultPrefix,A=e.vaultAppRoleEngine,I=e.vaultId,M=e.vaultSecret,L=e.vaultRetry,D=e.vaultPing,B=e.gcpProjectID,F=e.gcpEndpoint,R=e.gcpClientEmail,P=e.gcpClientID,z=e.gcpPrivateKeyID,K=e.gcpPrivateKey,U=e.enableCustomCertsForKES,W=e.enableAutoCert,q=e.enableTLS,V=e.minioCertificates,G=e.serverCertificate,H=e.clientCertificate,Y=e.vaultCertificate,Q=e.vaultCA,Z=e.gemaltoCA,J=Object(c.useState)({}),$=Object(b.a)(J,2),X=$[0],ee=$[1],te=!1;q&&(W||V&&V.filter((function(e){return e.encoded_key&&e.encoded_cert})).length>0)&&(te=!0);var ne=Object(c.useCallback)((function(e,t){n("encryption",e,t)}),[n]),ae=function(e){ee(Zr(X,e))};return Object(c.useEffect)((function(){var e=[];u&&(j&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"serverKey",required:!W,value:G.encoded_key},{fieldKey:"serverCert",required:!W,value:G.encoded_cert},{fieldKey:"clientKey",required:!W,value:H.encoded_key},{fieldKey:"clientCert",required:!W,value:H.encoded_cert}])),"vault"===m&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"vault_endpoint",required:!0,value:N},{fieldKey:"vault_id",required:!0,value:I},{fieldKey:"vault_secret",required:!0,value:M},{fieldKey:"vault_ping",required:!1,value:D,customValidation:parseInt(D)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:L,customValidation:parseInt(L)<0,customValidationMessage:"Value needs to be 0 or greater"}])),"aws"===m&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"aws_endpoint",required:!0,value:f},{fieldKey:"aws_region",required:!0,value:y},{fieldKey:"aws_accessKey",required:!0,value:S},{fieldKey:"aws_secretKey",required:!0,value:k}])),"gemalto"===m&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"gemalto_endpoint",required:!0,value:p},{fieldKey:"gemalto_token",required:!0,value:h},{fieldKey:"gemalto_domain",required:!0,value:O},{fieldKey:"gemalto_retry",required:!1,value:g,customValidation:parseInt(g)<0,customValidationMessage:"Value needs to be 0 or greater"}])));var t=Qr(e);i("encryption",0===Object.keys(t).length),ee(t)}),[u,m,N,T,I,M,D,L,f,y,k,S,p,h,O,g,B,i,W,j,G.encoded_key,G.encoded_cert,H.encoded_key,H.encoded_cert]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Encryption"}),Object(a.jsx)("span",{className:t.descriptionText,children:"How would you like to encrypt the information at rest."})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"enableEncryption",id:"enableEncryption",name:"enableEncryption",checked:u,onChange:function(e){var t=e.target.checked;ne("enableEncryption",t)},label:"Enable Server Side Encryption",disabled:!te})}),u&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:m,id:"encryptionType",name:"encryptionType",label:"Encryption Options",onChange:function(e){ne("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"}]})}),"vault"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:U||!W,onChange:function(e){var t=e.target.checked;ne("enableCustomCertsForKES",t)},label:"Custom Certificates",disabled:!W})}),(U||!W)&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"Encryption Service Certificates"})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){r("key",t,e),ae("serverKey")},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:X.serverKey||"",value:G.key,required:!W})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){r("cert",t,e),ae("serverCert")},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:X.serverCert||"",value:G.cert,required:!W})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"Mutual TLS authentication"})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){o("key",t,e),ae("clientKey")},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:X.clientKey||"",value:H.key,required:!W})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){o("cert",t,e),ae("clientCert")},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:X.clientCert||"",value:H.cert,required:!W})})]})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_endpoint",name:"vault_endpoint",onChange:function(e){ne("vaultEndpoint",e.target.value),ae("vault_endpoint")},label:"Endpoint",value:N,error:X.vault_endpoint||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_engine",name:"vault_engine",onChange:function(e){ne("vaultEngine",e.target.value),ae("vault_engine")},label:"Engine",value:T})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_namespace",name:"vault_namespace",onChange:function(e){ne("vaultNamespace",e.target.value)},label:"Namespace",value:E})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_prefix",name:"vault_prefix",onChange:function(e){ne("vaultPrefix",e.target.value)},label:"Prefix",value:_})}),Object(a.jsx)("h5",{children:"App Role"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:function(e){ne("vaultAppRoleEngine",e.target.value)},label:"Engine",value:A})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_id",name:"vault_id",onChange:function(e){ne("vaultId",e.target.value),ae("vault_id")},label:"AppRole ID",value:I,error:X.vault_id||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_secret",name:"vault_secret",onChange:function(e){ne("vaultSecret",e.target.value),ae("vault_secret")},label:"AppRole Secret",value:M,error:X.vault_secret||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:function(e){ne("vaultRetry",e.target.value),ae("vault_retry")},label:"Retry (Seconds)",value:L,error:X.vault_retry||""})}),Object(a.jsx)("h5",{children:"Mutual TLS authentication (optional)"}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){s("key",t,e),ae("vault_key")},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:Y.key})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){s("cert",t,e),ae("vault_cert")},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:Y.cert})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(so,{onChange:function(e,t){l(t,e),ae("vault_ca")},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:Q.cert})}),Object(a.jsx)("h5",{children:"Status"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:function(e){ne("vaultPing",e.target.value),ae("vault_ping")},label:"Ping (Seconds)",value:D,error:X.vault_ping||""})})]}),"gcp"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_project_id",name:"gcp_project_id",onChange:function(e){ne("gcpProjectID",e.target.value)},label:"Project ID",value:B})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:function(e){ne("gcpEndpoint",e.target.value)},label:"Endpoint",value:F})}),Object(a.jsx)("h5",{children:"Credentials"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_client_email",name:"gcp_client_email",onChange:function(e){ne("gcpClientEmail",e.target.value)},label:"Client Email",value:R})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_client_id",name:"gcp_client_id",onChange:function(e){ne("gcpClientID",e.target.value)},label:"Client ID",value:P})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:function(e){ne("gcpPrivateKeyID",e.target.value)},label:"Private Key ID",value:z})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_private_key",name:"gcp_private_key",onChange:function(e){ne("gcpPrivateKey",e.target.value)},label:"Private Key",value:K})})]}),"aws"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_endpoint",name:"aws_endpoint",onChange:function(e){ne("awsEndpoint",e.target.value),ae("aws_endpoint")},label:"Endpoint",value:f,error:X.aws_endpoint||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_region",name:"aws_region",onChange:function(e){ne("awsRegion",e.target.value),ae("aws_region")},label:"Region",value:y,error:X.aws_region||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:function(e){ne("awsKMSKey",e.target.value)},label:"KMS Key",value:C})}),Object(a.jsx)("h5",{children:"Credentials"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_accessKey",name:"aws_accessKey",onChange:function(e){ne("awsAccessKey",e.target.value),ae("aws_accessKey")},label:"Access Key",value:S,error:X.aws_accessKey||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_secretKey",name:"aws_secretKey",onChange:function(e){ne("awsSecretKey",e.target.value),ae("aws_secretKey")},label:"Secret Key",value:k,error:X.aws_secretKey||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_token",name:"aws_token",onChange:function(e){ne("awsToken",e.target.value)},label:"Token",value:w})})]}),"gemalto"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:function(e){ne("gemaltoEndpoint",e.target.value),ae("gemalto_endpoint")},label:"Endpoint",value:p,error:X.gemalto_endpoint||"",required:!0})}),Object(a.jsx)("h5",{children:"Credentials"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gemalto_token",name:"gemalto_token",onChange:function(e){ne("gemaltoToken",e.target.value),ae("gemalto_token")},label:"Token",value:h,error:X.gemalto_token||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gemalto_domain",name:"gemalto_domain",onChange:function(e){ne("gemaltoDomain",e.target.value),ae("gemalto_domain")},label:"Domain",value:O,error:X.gemalto_domain||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:function(e){ne("gemaltoRetry",e.target.value),ae("gemalto_retry")},label:"Retry (seconds)",value:g,error:X.gemalto_retry||""})}),Object(a.jsx)("h5",{children:"Custom CA Root certificate verification"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(so,{onChange:function(e,t){d(t,e),ae("gemalto_ca")},accept:".cer,.crt,.cert,.pem",id:"gemalto_ca",name:"gemalto_ca",label:"CA",value:Z.cert})})]})]})]})}))),mo=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor,drivesPerServer:e.tenants.createTenant.fields.tenantSize.drivesPerServer,nodes:e.tenants.createTenant.fields.tenantSize.nodes,memoryNode:e.tenants.createTenant.fields.tenantSize.memoryNode,ecParity:e.tenants.createTenant.fields.tenantSize.ecParity,ecParityChoices:e.tenants.createTenant.fields.tenantSize.ecParityChoices,cleanECChoices:e.tenants.createTenant.fields.tenantSize.cleanECChoices,maxAllocableMemo:e.tenants.createTenant.fields.tenantSize.maxAllocableMemo,memorySize:e.tenants.createTenant.fields.tenantSize.memorySize,distribution:e.tenants.createTenant.fields.tenantSize.distribution,ecParityCalc:e.tenants.createTenant.fields.tenantSize.ecParityCalc,limitSize:e.tenants.createTenant.fields.tenantSize.limitSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{updateAddField:Gr,isPageValid:Hr}),po=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(mo((function(e){var t=e.classes,n=e.updateAddField,i=e.isPageValid,r=e.advancedMode,o=e.volumeSize,s=e.sizeFactor,l=e.drivesPerServer,d=e.nodes,u=e.memoryNode,j=e.ecParity,m=e.ecParityChoices,p=e.cleanECChoices,h=e.maxAllocableMemo,O=e.memorySize,g=e.distribution,f=e.ecParityCalc,v=e.limitSize,y=e.selectedStorageClass,C=Object(c.useState)({}),S=Object(b.a)(C,2),k=S[0],w=S[1],N=f.storageFactors.find((function(e){return e.erasureCode===j})),T=Object(c.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]),E=function(e){w(Zr(k,e))},_=Object(c.useCallback)((function(){var e=parseInt(u)||0,t=h||0,n=s,a=function(e,t,n){var a=oe(e.toString(10),"Gi",!0),c=parseInt(a,10);if(0===n)return{error:"There is no memory available for the selected number of nodes",request:0,limit:0};if(nn)return{error:"The requested memory is greater than the max available memory for the selected number of nodes",request:0,limit:0};var i=parseInt(t,10),r=c;return i>=parseInt(oe("1","Pi",!0),10)?r=Math.max(c,parseInt(oe("64","Gi",!0),10)):i>=parseInt(oe("100","Ti"),10)?r=Math.max(c,parseInt(oe("32","Gi",!0),10)):i>=parseInt(oe("10","Ti"),10)?r=Math.max(c,parseInt(oe("16","Gi",!0),10)):i>=parseInt(oe("1","Ti"),10)&&(r=Math.max(c,parseInt(oe("8","Gi",!0),10))),{error:"",request:c,limit:r}}(e,oe((o||0).toString(10),n),t);T("memorySize",a)}),[h,u,s,T,o]);Object(c.useEffect)((function(){_()}),[u,_]),Object(c.useEffect)((function(){_()}),[h,_]),Object(c.useEffect)((function(){if(m.length>0&&""===g.error){var e=function(e,t,n,a){if(e.length<1)return{error:1,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]};var c=t*n,i=e[0],r=2*parseInt(i.split(":")[1],10),o=e.map((function(e){var n=parseInt(e.split(":")[1],10),a=r/(r-n),i=Math.floor(c/a),o=t-Math.floor(t/a);return{erasureCode:e,storageFactor:a,maxCapacity:i.toString(10),maxFailureTolerations:o}})),s=i,l=e.find((function(e){return"EC:4"===e}));return t>=8&&a>16&&l&&(s="EC:4"),{error:0,storageFactors:o,maxEC:i,rawCapacity:c.toString(10),erasureCodeSet:r,defaultEC:s}}(p,g.persistentVolumes,g.pvSize,g.nodes);T("ecParityCalc",e),T("ecParity",e.defaultEC)}}),[m.length,g,p,T]),Object(c.useEffect)((function(){A(),I(),function(e){""===e||isNaN(parseInt(e))||me.invoke("GET","/api/v1/cluster/max-allocatable-memory?num_nodes=".concat(e)).then((function(e){var t=e.max_memory?e.max_memory:0;T("maxAllocableMemo",t)})).catch((function(e){T("maxAllocableMemo",0),console.error(e)}))}(d)}),[d,o,s,l]);var A=function(){var e=o,t=s,n=oe("12","Ti",!0),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,c=oe(e.value,e.unit,!0);return parseInt(c,10)v[y],customValidationMessage:"Volume size must be greater than 1Gi and less than ".concat(ce(v[y],!0))},{fieldKey:"memory_per_node",required:!0,value:u,customValidation:parseInt(u)<2,customValidationMessage:"Memory size must be greater than 2Gi"},{fieldKey:"drivesps",required:!0,value:l,customValidation:parseInt(l)<1,customValidationMessage:"There must be at least one drive"}]);i("tenantSize",!("nodes"in t)&&!("volume_size"in t)&&!("memory_per_node"in t)&&!("drivesps"in t)&&""===g.error&&0===f.error&&""===O.error),w(t)}),[d,o,s,u,g,l,f,O,v,y]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Tenant Size"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Please select the desired capacity"})]}),Object(a.jsx)("span",{className:t.error,children:g.error}),Object(a.jsx)("span",{className:t.error,children:O.error}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"nodes",name:"nodes",type:"number",onChange:function(e){T("nodes",e.target.value),E("nodes")},label:"Number of Servers",value:d,min:"4",required:!0,error:k.nodes||""})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"drivesps",name:"drivesps",type:"number",onChange:function(e){T("drivesPerServer",e.target.value),E("drivesps")},label:"Number of Drives per Server",value:l,min:"1",required:!0,error:k.drivesps||""})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)("div",{className:t.multiContainer,children:[Object(a.jsx)("div",{children:Object(a.jsx)(hn,{type:"number",id:"volume_size",name:"volume_size",onChange:function(e){T("volumeSize",e.target.value),E("volume_size")},label:"Total Size",value:o,required:!0,error:k.volume_size||"",min:"0"})}),Object(a.jsx)("div",{className:t.sizeFactorContainer,children:Object(a.jsx)(yn,{label:"Unit",id:"size_factor",name:"size_factor",value:s,onChange:function(e){T("sizeFactor",e.target.value)},options:ne.map((function(e){return{label:e,value:e}}))})})]})}),r&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",id:"memory_per_node",name:"memory_per_node",onChange:function(e){T("memoryNode",e.target.value),E("memory_per_node")},label:"Memory per Node [Gi]",value:u,required:!0,error:k.memory_per_node||"",min:"2"})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(yn,{id:"ec_parity",name:"ec_parity",onChange:function(e){T("ecParity",e.target.value)},label:"Erasure Code Parity",value:j,options:m}),Object(a.jsx)("span",{className:t.descriptionText,children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]})]}),Object(a.jsx)("h4",{children:"Resource Allocation"}),Object(a.jsx)(Jn.a,{className:t.table,"aria-label":"simple table",children:Object(a.jsxs)(Zn.a,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Number of Servers"}),Object(a.jsx)(Qn.a,{align:"right",children:parseInt(d)>0?d:"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Drives per Server"}),Object(a.jsx)(Qn.a,{align:"right",children:g?g.disks:"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Drive Capacity"}),Object(a.jsx)(Qn.a,{align:"right",children:g?ce(g.pvSize):"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Total Number of Volumes"}),Object(a.jsx)(Qn.a,{align:"right",children:g?g.persistentVolumes:"-"})]}),!r&&Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Memory per Node"}),Object(a.jsxs)(Qn.a,{align:"right",children:[u," Gi"]})]})]})}),0===f.error&&N&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("h4",{children:"Erasure Code Configuration"}),Object(a.jsx)(Jn.a,{className:t.table,"aria-label":"simple table",children:Object(a.jsxs)(Zn.a,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"EC Parity"}),Object(a.jsx)(Qn.a,{align:"right",children:""!==j?j:"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Raw Capacity"}),Object(a.jsx)(Qn.a,{align:"right",children:ce(f.rawCapacity)})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Usable Capacity"}),Object(a.jsx)(Qn.a,{align:"right",children:ce(N.maxCapacity)})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Number of server failures to tolerate"}),Object(a.jsx)(Qn.a,{align:"right",children:g?Math.floor(N.maxFailureTolerations/g.disks):"-"})]})]})})]})]})}))),ho=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,enableTLS:e.tenants.createTenant.fields.security.enableTLS,tenantName:e.tenants.createTenant.fields.nameTenant.tenantName,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,consoleImage:e.tenants.createTenant.fields.configure.consoleImage,namespace:e.tenants.createTenant.fields.nameTenant.namespace,volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor}}),{}),Oo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(ho((function(e){var t=e.classes,n=e.tenantName,i=e.customImage,r=e.imageName,o=e.consoleImage,s=e.namespace,l=e.selectedStorageClass,d=e.volumeSize,u=e.sizeFactor,b=e.advancedMode,j=e.enableTLS;return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Review"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Review the details of the new tenant"})]}),Object(a.jsx)(Jn.a,{size:"small",children:Object(a.jsxs)(Zn.a,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Tenant Name"}),Object(a.jsx)(Qn.a,{children:n})]}),i&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"MinIO Image"}),Object(a.jsx)(Qn.a,{children:r})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Console Image"}),Object(a.jsx)(Qn.a,{children:o})]})]}),""!==s&&Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Namespace"}),Object(a.jsx)(Qn.a,{children:s})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Storage Class"}),Object(a.jsx)(Qn.a,{children:l})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Total Size"}),Object(a.jsxs)(Qn.a,{children:[d," ",u]})]}),b&&Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Enable TLS"}),Object(a.jsx)(Qn.a,{children:j?"Enabled":"Disabled"})]})})]})})]})}))),go=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,namespace:e.tenants.createTenant.fields.nameTenant.namespace,validPages:e.tenants.createTenant.validPages,fields:e.tenants.createTenant.fields,certificates:e.tenants.createTenant.certificates}}),{setModalErrorSnackMessage:G,updateAddField:Gr}),fo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke),Be))}))(go((function(e){var t=e.classes,n=e.advancedMode,i=e.fields,r=e.certificates,o=e.namespace,s=e.validPages,l=e.setModalErrorSnackMessage,d=e.closeAndRefresh,u=Object(c.useState)(!1),m=Object(b.a)(u,2),p=m[0],h=m[1],O=Object(c.useState)(null),g=Object(b.a)(O,2),f=g[0],v=g[1],C=Object(c.useState)(!1),S=Object(b.a)(C,2),k=S[0],w=S[1];Object(c.useEffect)((function(){var e=i.nameTenant.tenantName,t=i.nameTenant.selectedStorageClass,n=i.configure.imageName,a=i.configure.consoleImage,c=i.configure.customDockerhub,s=i.configure.imageRegistry,d=i.configure.imageRegistryUsername,u=i.configure.imageRegistryPassword,b=i.configure.exposeMinIO,m=i.configure.exposeConsole,p=i.identityProvider.idpSelection,O=i.identityProvider.openIDURL,g=i.identityProvider.openIDClientID,f=i.identityProvider.openIDSecretID,x=i.identityProvider.ADURL,y=i.identityProvider.ADSkipTLS,C=i.identityProvider.ADServerInsecure,S=i.identityProvider.ADUserNameFilter,N=i.identityProvider.ADGroupBaseDN,T=i.identityProvider.ADGroupSearchFilter,E=i.identityProvider.ADNameAttribute,_=r.minioCertificates,A=r.caCertificates,I=r.consoleCertificate,M=r.serverCertificate,L=r.clientCertificate,D=r.vaultCertificate,B=r.vaultCA,F=r.gemaltoCA,R=i.encryption.enableEncryption,P=i.encryption.encryptionType,z=i.encryption.gemaltoEndpoint,K=i.encryption.gemaltoToken,U=i.encryption.gemaltoDomain,W=i.encryption.gemaltoRetry,q=i.encryption.awsEndpoint,V=i.encryption.awsRegion,G=i.encryption.awsKMSKey,H=i.encryption.awsAccessKey,Y=i.encryption.awsSecretKey,Q=i.encryption.awsToken,Z=i.encryption.vaultEndpoint,J=i.encryption.vaultEngine,$=i.encryption.vaultNamespace,X=i.encryption.vaultPrefix,ee=i.encryption.vaultAppRoleEngine,te=i.encryption.vaultId,ne=i.encryption.vaultSecret,ae=i.encryption.vaultRetry,ce=i.encryption.vaultPing,ie=i.encryption.gcpProjectID,re=i.encryption.gcpEndpoint,oe=i.encryption.gcpClientEmail,se=i.encryption.gcpClientID,le=i.encryption.gcpPrivateKeyID,ue=i.encryption.gcpPrivateKey,be=i.security.enableAutoCert,je=i.security.enableTLS,pe=i.tenantSize.ecParity,he=i.tenantSize.distribution,Oe=i.tenantSize.memorySize;if(k){var ge=de([]),fe=Nr(e,ge),xe=pe.split(":")[1],ve={name:e,namespace:o,access_key:"",secret_key:"",enable_tls:je&&be,enable_console:!0,enable_prometheus:!0,service_name:"",image:n,console_image:a,expose_minio:b,expose_console:m,pools:[{name:ge,servers:he.nodes,volumes_per_server:he.disks,volume_configuration:{size:he.pvSize,storage_class_name:t},resources:{requests:{memory:Oe.request},limits:{memory:Oe.limit}},affinity:fe}],erasureCodingParity:parseInt(xe,10)};c&&(ve=Object(j.a)(Object(j.a)({},ve),{},{image_registry:{registry:s,username:d,password:u}}));var ye=null,Ce=null,Se=null;if(A.length>0&&(Se={ca_certificates:A.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}),je&&_.length>0&&(ye={minio:_.map((function(e){return{crt:e.encoded_cert,key:e.encoded_key}})).filter((function(e){return e.crt&&e.key}))}),je&&""!==I.encoded_cert&&""!==I.encoded_key&&(Ce={console:{crt:I.encoded_cert,key:I.encoded_key}}),(ye||Ce||Se)&&(ve=Object(j.a)(Object(j.a)({},ve),{},{tls:Object(j.a)(Object(j.a)(Object(j.a)({},ye),Ce),Se)})),R){var ke={};switch(P){case"gemalto":var we={};""!==F.encoded_cert&&(we={ca:F.encoded_cert}),ke={gemalto:{keysecure:{endpoint:z,credentials:{token:K,domain:U,retry:parseInt(W)},tls:Object(j.a)({},we)}}};break;case"aws":ke={aws:{secretsmanager:{endpoint:q,region:V,kmskey:G,credentials:{accesskey:H,secretkey:Y,token:Q}}}};break;case"gcp":ke={gcp:{secretmanager:{project_id:ie,endpoint:re,credentials:{client_email:oe,client_id:se,private_key_id:le,private_key:ue}}}};break;case"vault":var Ne=null,Te=null;""!==D.encoded_key&&""!==D.encoded_cert&&(Ne={key:D.encoded_key,crt:D.encoded_cert}),""!==B.encoded_cert&&(Te={ca:B.encoded_cert});var Ee=null;(Ne||B)&&(Ee={tls:Object(j.a)(Object(j.a)({},Ne),Te)}),ke={vault:Object(j.a)(Object(j.a)({endpoint:Z,engine:J,namespace:$,prefix:X,approle:{engine:ee,id:te,secret:ne,retry:parseInt(ae)}},Ee),{},{status:{ping:parseInt(ce)}})}}var _e={},Ae={};""!==L.encoded_key&&""!==L.encoded_cert&&(Ae={client:{key:L.encoded_key,crt:L.encoded_cert}}),""!==M.encoded_key&&""!==M.encoded_cert&&(_e={server:{key:M.encoded_key,crt:M.encoded_cert}}),ve=Object(j.a)(Object(j.a)({},ve),{},{encryption:Object(j.a)(Object(j.a)(Object(j.a)({},Ae),_e),ke)})}if("Built-in"!==p){var Ie={};switch(p){case"OpenID":Ie={oidc:{url:O,client_id:g,secret_id:f}};break;case"AD":Ie={active_directory:{url:x,skip_tls_verification:y,server_insecure:C,username_format:"",user_search_filter:S,group_search_base_dn:N,group_search_filter:T,group_name_attribute:E}}}ve=Object(j.a)(Object(j.a)({},ve),{},{idp:Object(j.a)({},Ie)})}me.invoke("POST","/api/v1/tenants",ve).then((function(e){var t={console:{accessKey:e.console.access_key,secretKey:e.console.secret_key}};w(!1),h(!0),v(t)})).catch((function(e){w(!1),l(e)}))}}),[k]);var N={label:"Cancel",type:"other",enabled:!0,action:function(){d(!1)}},T=[{label:"Name Tenant",componentRender:Object(a.jsx)($r,{}),buttons:[N,{label:"Next",type:"next",enabled:s.includes("nameTenant")}]},{label:"Configure",advancedOnly:!0,componentRender:Object(a.jsx)(eo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("configure")}]},{label:"Identity Provider",advancedOnly:!0,componentRender:Object(a.jsx)(no,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("identityProvider")}]},{label:"Security",advancedOnly:!0,componentRender:Object(a.jsx)(uo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("security")}]},{label:"Encryption",advancedOnly:!0,componentRender:Object(a.jsx)(jo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("encryption")}]},{label:"Tenant Size",componentRender:Object(a.jsx)(po,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("tenantSize")}]},{label:"Preview Configuration",componentRender:Object(a.jsx)(Oo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Create",type:"submit",enabled:!k,action:function(){w(!0)}}]}],E=T;n||(E=T.filter((function(e){return!e.advancedOnly})));return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.customTitle,children:"Create New Tenant"}),k&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})}),p&&Object(a.jsx)(Rc,{newServiceAccount:f,open:p,closeModal:function(){d(!0)},entity:"Tenant"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(wr,{wizardSteps:E})})})]})}))),xo=n(335),vo=n.n(xo),yo=Object(s.b)(null,{setErrorSnackMessage:q,resetAddTenantForm:function(){return{type:Ir}}}),Co=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Ae),Ie),Be),{},{seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},actionsTray:Object(j.a)(Object(j.a)({},Ae.actionsTray),{},{padding:"0 38px"}),tenantsContainer:{padding:"15px 0"},customConfigurationPage:{height:"calc(100vh - 440px)",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}}))}))(yo((function(e){var t=e.classes,n=e.setErrorSnackMessage,i=e.resetAddTenantForm,r=Object(c.useState)(0),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(!1),j=Object(b.a)(d,2),m=j[0],p=j[1],h=Object(c.useState)(null),O=Object(b.a)(h,2),v=O[0],y=O[1],C=Object(c.useState)(!1),S=Object(b.a)(C,2),k=S[0],w=S[1],N=Object(c.useState)(""),T=Object(b.a)(N,2),E=T[0],_=T[1],A=Object(c.useState)([]),I=Object(b.a)(A,2),M=I[0],L=I[1],D=Object(c.useState)(!1),B=Object(b.a)(D,2),F=B[0],R=B[1],P=Object(c.useState)(null),z=Object(b.a)(P,2),K=z[0],U=z[1],W=[{type:"view",onClick:function(e){u.push("/namespaces/".concat(e.namespace,"/tenants/").concat(e.name))}},{type:"delete",onClick:function(e){y(e),p(!0)}}],q=M.filter((function(e){return""===E||e.name.indexOf(E)>=0}));Object(c.useEffect)((function(){if(k){me.invoke("GET","/api/v1/tenants").then((function(e){if(null!==e){var t=[];null!==e.tenants&&(t=e.tenants);for(var n=0;n ".concat(n.params.tenantName)}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:9,className:t.containerHeader,children:Object(a.jsx)(S.a,{className:t.paperContainer,children:Object(a.jsxs)("div",{className:t.infoGrid,children:[Object(a.jsx)("div",{children:"Capacity:"}),Object(a.jsx)("div",{children:ce(m.toString(10))}),Object(a.jsx)("div",{children:"Minio:"}),Object(a.jsxs)("div",{children:[J?J.image:""," ",Object(a.jsx)("button",{className:t.updateButton,onClick:function(){he(!0)},children:Object(a.jsx)(Wt,{active:!1})})]}),Object(a.jsx)("div",{children:"Clusters:"}),Object(a.jsx)("div",{children:f}),Object(a.jsx)("div",{children:"Console:"}),Object(a.jsx)("div",{children:J?J.console_image:""}),Object(a.jsx)("div",{children:"Instances:"}),Object(a.jsx)("div",{children:_}),Object(a.jsx)("div",{children:"Volumes:"}),Object(a.jsx)("div",{children:L}),(null===J||void 0===J?void 0:J.endpoints)&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("div",{children:"Endpoint:"}),Object(a.jsx)("div",{children:Object(a.jsx)("a",{href:null===J||void 0===J?void 0:J.endpoints.minio,target:"_blank",rel:"noopener noreferrer",children:null===J||void 0===J?void 0:J.endpoints.minio})}),Object(a.jsx)("div",{children:"Console:"}),Object(a.jsx)("div",{children:Object(a.jsx)("a",{href:null===J||void 0===J?void 0:J.endpoints.console,target:"_blank",rel:"noopener noreferrer",children:null===J||void 0===J?void 0:J.endpoints.console})})]})]})})}),Object(a.jsx)(x.a,{item:!0,xs:3,children:Object(a.jsx)(To,{currValue:de,maxValue:J?J.total_size:0,label:"Storage",renderFunction:ce,error:re,loading:te})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsxs)(Kn.a,{value:l,indicatorColor:"primary",textColor:"primary",onChange:function(e,t){d(t)},"aria-label":"tenant-tabs",children:[Object(a.jsx)(Un.a,{label:"Clusters"}),Object(a.jsx)(Un.a,{label:"License"})]})}),Object(a.jsx)(x.a,{item:!0,xs:6,className:t.actionsTray,children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){P(!0)},children:"Expand Tenant"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[0===l&&Object(a.jsx)(on,{itemActions:[{type:"delete",onClick:function(e){console.log(e)},sendOnlyId:!0}],columns:[{label:"Name",elementKey:"name"},{label:"Capacity",elementKey:"capacity"},{label:"# of Instances",elementKey:"servers"},{label:"# of Drives",elementKey:"volumes"}],isLoading:!1,records:w,entityName:"Servers",idField:"name"}),1===l&&Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(S.a,{className:J&&J.subnet_license?t.licenseContainer:"",children:J&&J.subnet_license?Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.licenseInfo,children:[Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"License"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:"Commercial License"}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Organization"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:J.subnet_license.organization}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Registered Capacity"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:ce((1099511627776*J.subnet_license.storage_capacity).toString(10))}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Expiry Date"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:Object(a.jsx)(Je.a,{format:"YYYY-MM-DD",children:J.subnet_license.expires_at})})]}),Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Subscription Plan"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:J.subnet_license.plan}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Requester"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:J.subnet_license.email})]}),Object(a.jsx)("img",{className:t.verifiedIcon,src:"/verified.svg"})]})}):!Ce&&Object(a.jsxs)(x.a,{className:t.paperContainer,children:[!fe&&Object(a.jsx)(Zt.a,{to:"/license",onClick:function(e){e.stopPropagation()},className:t.noUnderLine,children:Object(a.jsx)(g.a,{className:t.licenseButton,variant:"contained",color:"primary",children:"Activate Product"})}),fe&&J&&Object(a.jsx)(g.a,{disabled:Ne,className:t.licenseButton,variant:"contained",color:"primary",onClick:function(){return function(e,t){Ne||(Te(!0),me.invoke("POST","/api/v1/subscription/namespaces/".concat(e,"/tenants/").concat(t,"/activate"),{}).then((function(){Te(!1),Ae()})).catch((function(e){Te(!1),r(e)})))}(J.namespace,J.name)},children:"Attach License"})]})})})})})]})]})]})}))),Mo="OBJECT_BROWSER/ADD_ROUTE",Lo="OBJECT_BROWSER/RESET_ROUTES_LIST",Do="OBJECT_BROWSER/REMOVE_ROUTE_LEVEL",Bo="OBJECT_BROWSER/SET_ALL_ROUTES",Fo="OBJECT_BROWSER/CREATE_FOLDER",Ro="OBJECT_BROWSER/SET_LAST_AS_FILE",Po="OBJECT_BROWSER/DOWNLOAD_FILE_LOADER",zo="OBJECT_BROWSER/DOWNLOADED_FILE",Ko=function(e,t,n){return{type:Mo,route:e,label:t,routeType:n}},Uo=function(e){return{type:Do,toRoute:e}},Wo=function(e){return{type:Bo,currentRoute:e}},qo=function(e){return{type:Po,path:e}},Vo=function(e){return{type:zo,path:e}},Go={removeRouteLevel:Uo},Ho=Object(s.b)((function(e){var t=e.objectBrowser;return{objectsList:Z()(t,"routesList",[])}}),Go)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Le))}))((function(e){var t=e.classes,n=e.objectsList,c=e.removeRouteLevel,r=n.map((function(e,t){return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Zt.a,{to:e.route,onClick:function(){c(e.route)},children:e.label}),t0?n.slice(-1)[0].label:""})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.breadcrumbs,children:r})]})}))),Yo={addRoute:Ko,resetRoutesList:function(e){return{type:Lo,reset:e}},displayErrorMessage:q},Qo=Object(s.b)(null,Yo),Zo=Object(l.g)(Qo(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},usedSpaceCol:{width:150,textAlign:"right"},subTitleLabel:{alignItems:"center",display:"flex"},bucketName:{display:"flex",alignItems:"center"},iconBucket:{backgroundImage:"url(/images/ob_bucket_clear.svg)",backgroundRepeat:"no-repeat",backgroundPosition:"center center",width:16,height:40,marginRight:10},"@global":{".rowLine:hover .iconBucketElm":{backgroundImage:"url(/images/ob_bucket_filled.svg)"}},browsePaper:{height:"calc(100vh - 280px)"}},Ae),Ie),Le))}))((function(e){var t=e.classes,n=e.match,r=e.addRoute,o=e.resetRoutesList,s=e.displayErrorMessage,l=Object(c.useState)(!0),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)([]),p=Object(b.a)(m,2),h=p[0],O=p[1],v=Object(c.useState)(!1),y=Object(b.a)(v,2),C=y[0],S=y[1],k=Object(c.useState)(""),w=Object(b.a)(k,2),N=w[0],T=w[1];Object(c.useEffect)((function(){o(!0)}),[n,o]),Object(c.useEffect)((function(){u&&me.invoke("GET","/api/v1/buckets").then((function(e){j(!1),O(e.buckets||[])})).catch((function(e){j(!1),s(e)}))}),[u,s]);var E=h.filter((function(e){return""===N||e.name.indexOf(N)>=0}));return Object(a.jsxs)(i.a.Fragment,{children:[C&&Object(a.jsx)(Mn,{open:C,closeModalAndRefresh:function(e){S(!1),e&&j(!0)}}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.obTitleSection,children:[Object(a.jsx)("div",{children:Object(a.jsx)(Ho,{})}),Object(a.jsx)("div",{children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){S(!0)},children:"Create Bucket"})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:Object(a.jsx)(f.a,{placeholder:"Search Buckets",className:t.searchField,id:"search-resource",label:"",onChange:function(e){T(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:[{type:"view",sendOnlyId:!0,onClick:function(e){var t=Z()(n,"url","/object-browser"),a="".concat(t,"/").concat(e);r(a,e,"path")}}],columns:[{label:"Name",elementKey:"name",renderFunction:function(e){return Object(a.jsxs)("div",{className:t.bucketName,children:[Object(a.jsx)("div",{className:"".concat(t.iconBucket," iconBucketElm")}),Object(a.jsx)("span",{children:e})]})}},{label:"Used Space",elementKey:"size",renderFunction:ce,globalClass:t.usedSpaceCol,rowClass:t.usedSpaceCol,width:100,contentTextAlign:"right",headerTextAlign:"right"}],isLoading:u,records:E,entityName:"Buckets",idField:"name",customPaperHeight:t.browsePaper})})]})]})})))),Jo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({watchList:{background:"white",maxHeight:"400",overflow:"auto","& ul":{margin:"4",padding:"0"},"& ul li":{listStyle:"none",margin:"0",padding:"0",borderBottom:"1px solid #dedede"}},actionsTray:{textAlign:"right","& button":{marginLeft:10}},inputField:{background:"#FFFFFF",padding:12,borderRadius:5,marginLeft:10,boxShadow:"0px 3px 6px #00000012"},fieldContainer:{background:"#FFFFFF",padding:0,borderRadius:5,marginLeft:10,textAlign:"left",minWidth:"206",boxShadow:"0px 3px 6px #00000012"},lastElementWPadding:{paddingRight:"78"}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.match,n=e.classes,c=Z()(t,"url","");return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"Object Browser"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:n.container,children:"/object-browser"===c&&Object(a.jsx)(Zo,{})})})]})})),$o={setErrorSnackMessage:q},Xo=Object(s.b)(null,$o)((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedBucket,r=e.selectedObject,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete: ",Object(a.jsx)("b",{children:r}),"?"," "]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){!function(){if(!d){var e=!1;r.endsWith("/")&&(e=!0),u(!0),me.invoke("DELETE","/api/v1/buckets/".concat(i,"/objects?path=").concat(r,"&recursive=").concat(e)).then((function(){u(!1),t(!0)})).catch((function(e){u(!1),o(e)}))}}()},color:"secondary",disabled:d,children:"Delete"})]})]})})),es=n(610),ts={createFolder:function(e){return{type:Fo,newRoute:e}}},ns=Object(s.b)(null,ts)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},pathLabel:{marginTop:0,marginBottom:32}},ke))}))((function(e){var t=e.modalOpen,n=e.folderName,r=e.onClose,o=e.createFolder,s=e.classes,l=Object(c.useState)(""),d=Object(b.a)(l,2),u=d[0],j=d[1],m=n.split("/").slice(2).join("/");return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(jn,{modalOpen:t,title:"Add Folder",onClose:r,children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)("h3",{className:s.pathLabel,children:["Current Path: ",m,"/"]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{value:u,label:"Folder Path",id:"folderPath",name:"folderPath",placeholder:"Enter Folder Path",onChange:function(e){j(e.target.value)}})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:s.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:s.clearButton,onClick:function(){j("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:""===u.trim(),onClick:function(){o(u),r()},children:"Save"})]})]})})})}))),as=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 12.996",children:Object(a.jsxs)("g",{transform:"translate(-63.686 -70.783)",children:[Object(a.jsx)("path",{className:"a",d:"M74.736,79.879v1.95h-9.1v-1.95h-1.95v3.9h13v-3.9Z"}),Object(a.jsx)("path",{className:"a",d:"M69.211,80.533h1.95V73.861h1.525l-2.5-3.078-2.5,3.078h1.525Z"})]})})})},cs=n(336),is=function(e,t,n,a,c){var i=document.createElement("a");document.body.appendChild(i);var r=new XMLHttpRequest,o=t.split("/"),s=o[o.length-1],l="/api/v1/buckets/".concat(e,"/objects/download?prefix=").concat(t);Object(cs.isNullOrUndefined)(n)||"null"===n||(l=l.concat("&version_id=".concat(n))),r.open("GET",l,!0),r.responseType="blob",r.onload=function(r){if(200===this.status){var o=new Blob([this.response],{type:"octet/stream"}),l=window.URL.createObjectURL(o);i.href=l,i.download=s,i.click(),window.URL.revokeObjectURL(l),i.remove(),a&&a("".concat(e,"/").concat(t).concat(c?"-".concat(n):""))}},r.send()},rs={backgroundRepeat:"no-repeat",backgroundPosition:"center center",width:16,minWidth:16,height:40,marginRight:10};var os=Object(a.jsx)(v.a,{component:"h3",children:"Loading..."}),ss={addRoute:Ko,setAllRoutes:Wo,setLastAsFile:function(){return{type:Ro}},setLoadingProgress:function(e){return{type:M,loadingProgress:e}},setSnackBarMessage:W,setErrorSnackMessage:q,fileIsBeingPrepared:qo,fileDownloadStarted:Vo},ls=Object(s.b)((function(e){var t=e.objectBrowser;return{routesList:Z()(t,"routesList",[]),downloadingFiles:Z()(t,"downloadingFiles",[])}}),ss),ds=Object(l.g)(ls(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},fileName:{display:"flex",alignItems:"center"},fileNameText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},iconFolder:Object(j.a)({backgroundImage:"url(/images/ob_folder_clear.svg)"},rs),iconFile:Object(j.a)({backgroundImage:"url(/images/ob_file_clear.svg)"},rs),buttonsContainer:{"& .MuiButtonBase-root":{marginLeft:10}},browsePaper:{height:"calc(100vh - 280px)"},"@global":{".rowLine:hover .iconFileElm":{backgroundImage:"url(/images/ob_file_filled.svg)"},".rowLine:hover .iconFolderElm":{backgroundImage:"url(/images/ob_folder_filled.svg)"}}},Ae),Ie),Le),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.match,r=e.addRoute,o=e.setAllRoutes,s=e.routesList,l=e.downloadingFiles,d=e.setLastAsFile,u=e.setLoadingProgress,j=e.setSnackBarMessage,m=e.setErrorSnackMessage,p=e.fileIsBeingPrepared,h=e.fileDownloadStarted,O=Object(c.useState)([]),y=Object(b.a)(O,2),C=y[0],S=y[1],k=Object(c.useState)(!0),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)(""),R=Object(b.a)(F,2),P=R[0],z=R[1],K=Object(c.useState)(""),U=Object(b.a)(K,2),W=U[0],q=U[1],V=Object(c.useState)(""),G=Object(b.a)(V,2),H=G[0],Y=G[1],Q=Object(c.useState)(null),J=Object(b.a)(Q,2),$=(J[0],J[1]),X=Object(c.useState)(0),ee=Object(b.a)(X,2),te=ee[0],ne=ee[1],ae=Object(c.useState)(os),ie=Object(b.a)(ae,2),re=ie[0],oe=ie[1];!function(e,t){var n=Object(c.useRef)(null);Object(c.useEffect)((function(){n.current=e}),[e]),Object(c.useEffect)((function(){if(null!==t){var e=setInterval((function(){void 0!==n&&n.current&&n.current()}),t);return function(){return clearInterval(e)}}}),[t])}((function(){N&&function(){var e=Date.now()-te;e/1e3>=6?oe(Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(v.a,{component:"h3",children:["This operation is taking longer than expected... (",Math.ceil(e/1e3),"s)"]})})):e/1e3>=3&&oe(Object(a.jsx)(v.a,{component:"h3",children:"This operation is taking longer than expected..."}))}()}),1e3),Object(c.useEffect)((function(){var e=n.params.bucket,t=n.params[0];if(N){var a="";t&&(a="?prefix=".concat(t,"/"));var c=Date.now()+0;ne(c),oe(os);var i=me.invoke("GET","/api/v1/buckets/".concat(e,"/objects").concat(a)).then((function(t){q(e);var c=t.objects||[],i=[],r=[];c.forEach((function(e){e.name.endsWith("/")?i.push(e):r.push(e)}));var o=[].concat(i,r);S(o),t.objects||""===a?T(!1):function(){var e=n.params.bucket,t=n.params[0];me.invoke("GET","/api/v1/buckets/".concat(e,"/objects?prefix=").concat(t)).then((function(e){null!==e.objects?d():T(!1)})).catch((function(e){T(!1),m(e)}))}()})).catch((function(e){T(!1),m(e)}));$(i)}}),[N,n,d,m]),Object(c.useEffect)((function(){var e=Z()(n,"url","/object-browser");e!==s[s.length-1].route&&o(e)}),[n,s,o]),Object(c.useEffect)((function(){T(!0)}),[s,T]);var se=function(e){h(e)},le=function(e){var t=s[s.length-1].route.split("/").filter((function(e){return""!==e.trim()})),n="";t.length>2&&(n="".concat(t.slice(2).join("/"),"/")),function(e,t,n){if(null!==e&&void 0!==e&&null!==e.target&&void 0!==e.target){e.preventDefault();var a=e.target.files,c="/api/v1/buckets/".concat(t,"/objects/upload");""!==n&&(c="".concat(c,"?prefix=").concat(n));var i=new XMLHttpRequest,r=a.length>1,o="An error occurred while uploading the file".concat(r?"s":"","."),s="Object".concat(r?"s":""," uploaded successfully.");i.open("POST",c,!0),i.withCredentials=!1,i.onload=function(e){401!==i.status&&403!==i.status&&400!==i.status&&500!==i.status||j(o),200===i.status&&j(s)},i.upload.addEventListener("error",(function(e){j(o)})),i.upload.addEventListener("progress",(function(e){u(Math.floor(100*e.loaded/e.total))})),i.onerror=function(){j(o)},i.onloadend=function(){T(!0),u(100)};var l,d=new FormData,b=Object(sr.a)(a);try{for(b.s();!(l=b.n()).done;){var m=l.value,p=m.name,h=new Blob([m]);d.append(p,h)}}catch(O){b.e(O)}finally{b.f()}i.send(d),e.target.value=null}}(e,W,n)},de=[{type:"view",onClick:function(e){var t=Z()(n,"url","/object-browser");if(e.endsWith("/")){var a=e.substr(0,e.length-1).split("/"),c=a.length-1,i="".concat(t,"/").concat(a[c]);r(i,a[c],"path")}else{var o=e.split("/"),s=o[o.length-1],l="".concat(t,"/").concat(s);r(l,s,"file")}},sendOnlyId:!0},{type:"download",onClick:function(e){p("".concat(W,"/").concat(e.name)),e.size>104857600&&j("Download process started, it may take a few moments to complete"),is(W,e.name,e.version_id,se)},showLoaderFunction:function(e){return l.includes("".concat(n.params.bucket,"/").concat(e))}},{type:"delete",onClick:function(e){I(!0),z(e)},sendOnlyId:!0}],ue=C.filter((function(e){return""===H||e.name.indexOf(H)>=0}));return Object(a.jsxs)(i.a.Fragment,{children:[A&&Object(a.jsx)(Xo,{deleteOpen:A,selectedBucket:W,selectedObject:P,closeDeleteModalAndRefresh:function(e){I(!1),e&&(j("Object '".concat(P,"' deleted successfully.")),T(!0))}}),D&&Object(a.jsx)(ns,{modalOpen:D,folderName:s[s.length-1].route,onClose:function(){B(!1)}}),Object(a.jsx)(Rn,{label:"Object Browser"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.obTitleSection,children:[Object(a.jsx)("div",{children:Object(a.jsx)(Ho,{})}),Object(a.jsxs)("div",{className:t.buttonsContainer,children:[Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),component:"label",onClick:function(){B(!0)},children:"Create Folder"}),Object(a.jsxs)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(as,{}),component:"label",children:["File",Object(a.jsx)(es.a,{type:"file",inputProps:{multiple:!0},onChange:function(e){return le(e)},id:"file-input",style:{display:"none"}})]})]})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:Object(a.jsx)(f.a,{placeholder:"Search Objects",className:t.searchField,id:"search-resource",label:"",onChange:function(e){Y(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:de,columns:[{label:"Name",elementKey:"name",renderFunction:function(e){var n=e,c="".concat(t.iconFile," iconFileElm");e.endsWith("/")&&(c="".concat(t.iconFolder," iconFolderElm"),n=e.substr(0,e.length-1));var i=n.split("/");return Object(a.jsxs)("div",{className:t.fileName,children:[Object(a.jsx)("div",{className:c}),Object(a.jsx)("span",{className:t.fileNameText,children:i[i.length-1]})]})}},{label:"Last Modified",elementKey:"last_modified",renderFunction:function(e){return e.name.endsWith("/")?"":Object(a.jsx)(Je.a,{children:e.last_modified})},renderFullObject:!0},{label:"Size",elementKey:"size",renderFunction:function(e){return e.name.endsWith("/")?"":ce(String(e.size))},renderFullObject:!0,width:60,contentTextAlign:"right"}],isLoading:N,loadingMessage:re,entityName:"Objects",idField:"name",records:ue,customPaperHeight:t.browsePaper})})]})})]})})))),us=n(669),bs=n(338),js=n.n(bs),ms=n(337),ps=n.n(ms),hs=[{value:"01",label:"January"},{value:"02",label:"February"},{value:"03",label:"March"},{value:"04",label:"April"},{value:"05",label:"May"},{value:"06",label:"June"},{value:"07",label:"July"},{value:"08",label:"August"},{value:"09",label:"September"},{value:"10",label:"October"},{value:"11",label:"November"},{value:"12",label:"December"}],Os=Array.from(Array(31),(function(e,t){return t+1})),gs=(new Date).getFullYear(),fs=Array.from(Array(25),(function(e,t){return t+gs})),xs=Object(N.a)((function(e){return Object(k.a)({root:{"& .MuiSelect-icon":{color:"#000","&.Mui-disabled":{color:"#9c9c9c"}}},input:{borderBottom:0,fontSize:12}})}))(On.a),vs=Object(c.forwardRef)((function(e,t){var n=e.classes,i=e.id,r=e.label,o=e.disableOptions,s=void 0!==o&&o,l=e.addSwitch,d=void 0!==l&&l,u=e.tooltip,j=void 0===u?"":u,m=e.borderBottom,p=void 0!==m&&m,h=e.onDateChange,O=e.value,g=void 0===O?"":O;Object(c.useImperativeHandle)(t,(function(){return{resetDate:B}}));var f=Object(c.useState)(!1),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1];Object(c.useEffect)((function(){if(""!==g){var e=g.split("-");D(e[0]),N(e[1]),A("".concat(parseInt(e[2])))}}),[g]),Object(c.useEffect)((function(){var e=function(e,t,n){var a=Date.parse("".concat(e,"-").concat(t,"-").concat(n));if(isNaN(a))return[!1,""];var c=parseInt(t),i=parseInt(n),r=c<10?"0".concat(c):c,o=i<10?"0".concat(i):i,s=new Date(a).toISOString().split("T")[0],l="".concat(e,"-").concat(r,"-").concat(o);return[s===l,l]}(L,w,_),t=Object(b.a)(e,2),n=t[0],a=t[1];h(a,n)}),[w,_,L,h]);var B=function(){N(""),A(""),D("")},F=function(){return s||!!d&&!y};return Object(a.jsxs)(x.a,{item:!0,xs:12,className:Object(fe.a)(n.fieldContainer,Object(ge.a)({},n.fieldContainerBorder,p)),children:[Object(a.jsx)("div",{className:n.labelContainer,children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(Xt.a,{htmlFor:i,className:n.inputLabel,children:[Object(a.jsx)("span",{children:r}),""!==j&&Object(a.jsx)("div",{className:n.tooltipContainer,children:Object(a.jsx)(en.a,{title:j,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:n.tooltip})})})})]}),d&&Object(a.jsx)(In,{indicatorLabels:["Specific Date","Default (7 Days)"],checked:y,value:"date_enabled",id:"date-status",name:"date-status",onChange:function(e){C(e.target.checked),e.target.checked||h("",!0)},switchOnly:!0})]})}),Object(a.jsxs)("div",{children:[Object(a.jsx)(gn.a,{disabled:F(),className:n.dateInput,children:Object(a.jsxs)(fn.a,{id:"".concat(i,"-month"),name:"".concat(i,"-month"),value:w,displayEmpty:!0,onChange:function(e){N(e.target.value)},input:Object(a.jsx)(xs,{}),children:[Object(a.jsx)(xn.a,{value:"",disabled:!0,children:""}),hs.map((function(e){return Object(a.jsx)(xn.a,{value:e.value,children:e.label},"select-".concat(i,"-monthOP-").concat(e.label))}))]})}),Object(a.jsx)(gn.a,{disabled:F(),className:n.dateInput,children:Object(a.jsxs)(fn.a,{id:"".concat(i,"-day"),name:"".concat(i,"-day"),value:_,displayEmpty:!0,onChange:function(e){A(e.target.value)},input:Object(a.jsx)(xs,{}),children:[Object(a.jsx)(xn.a,{value:"",disabled:!0,children:""}),Os.map((function(e){return Object(a.jsx)(xn.a,{value:e,children:e},"select-".concat(i,"-dayOP-").concat(e))}))]})}),Object(a.jsx)(gn.a,{disabled:F(),className:n.dateInput,children:Object(a.jsxs)(fn.a,{id:"".concat(i,"-year"),name:"".concat(i,"-year"),value:L,displayEmpty:!0,onChange:function(e){D(e.target.value)},input:Object(a.jsx)(xs,{}),children:[Object(a.jsx)(xn.a,{value:"",disabled:!0,children:""}),fs.map((function(e){return Object(a.jsx)(xn.a,{value:e,children:e},"select-".concat(i,"-yearOP-").concat(e))}))]})})]})]})})),ys=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({dateInput:{"&:not(:last-child)":{marginRight:22}}},Se),we),{},{labelContainer:{flex:1},fieldContainer:Object(j.a)(Object(j.a)({},Se.fieldContainer),{},{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:10,marginTop:11,marginBottom:6}),fieldContainerBorder:{borderBottom:"#9c9c9c 1px solid",marginBottom:20}}))}))(vs),Cs=Object(s.b)(null,{setModalSnackMessage:V,setModalErrorSnackMessage:G}),Ss=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({copyButtonContainer:{paddingLeft:16},modalContent:{paddingBottom:53}},ke))}))(Cs((function(e){var t=e.classes,n=e.open,r=e.closeModalAndRefresh,o=e.bucketName,s=e.dataObject,l=e.setModalSnackMessage,d=e.setModalErrorSnackMessage,u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(!1),O=Object(b.a)(h,2),f=O[0],v=O[1],y=Object(c.useState)(""),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)(!0),N=Object(b.a)(w,2),T=N[0],E=N[1];return Object(c.useEffect)((function(){if(T){v(!0),p("");var e=new Date("".concat(S,"T23:59:59")),t=new Date,n=e.getTime()-t.getTime();return n<0?(d("Selected date must be greater than current time."),p(""),void v(!1)):n>6048e5?(d("You can share a file only for less than 7 days."),p(""),void v(!1)):void me.invoke("GET","/api/v1/buckets/".concat(o,"/objects/share?prefix=").concat(s.name,"&version_id=").concat(s.version_id).concat(""!==S?"&expires=".concat(n,"ms"):"")).then((function(e){p(e),v(!1)})).catch((function(e){d(e),p(""),v(!1)}))}}),[s,S,o,T,p,d]),Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(jn,{title:"Share File",modalOpen:n,onClose:function(){r()},children:Object(a.jsxs)(x.a,{container:!0,className:t.modalContent,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.dateContainer,children:Object(a.jsx)(ys,{id:"date",label:"Active until",borderBottom:!1,addSwitch:!0,onDateChange:function(e,t){E(t),k(t?e:"")}})}),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:10,children:Object(a.jsx)(Xc,{content:m})}),Object(a.jsx)(x.a,{item:!0,xs:2,className:t.copyButtonContainer,children:Object(a.jsx)(ps.a,{text:m,children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(Xe,{}),onClick:function(){l("Share URL Copied to clipboard")},disabled:""===m||f,children:"Copy"})})})]})]})})})}))),ks=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 13",children:[Object(a.jsx)("path",{d:"M11.05 8.617v2.429h-9.1v-9.1h2.429v-1.95H0v13h13V8.617z",className:"a"}),Object(a.jsx)("path",{d:"M3.854 9.256h1.95a4.945 4.945 0 013.6-4.74v1.3l.6-.487 2.474-2.012L9.4.817v1.7a6.9 6.9 0 00-5.546 6.739z",className:"a"})]})})},ws=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 12.996",children:[Object(a.jsx)("path",{d:"M11.05 9.096v1.95h-9.1v-1.95H0v3.9h13v-3.9z"}),Object(a.jsx)("path",{d:"M6.5 9.75L9 6.672H7.475V0h-1.95v6.672H4z"})]})})},Ns={setModalErrorSnackMessage:G},Ts=Object(s.b)(null,Ns),Es=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({objectName:{fontSize:18,fontWeight:700,marginBottom:40},buttonContainer:{textAlign:"right"}},ke))}))(Ts((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.objectName,o=e.objectInfo,s=e.bucketName,l=e.setModalErrorSnackMessage,d=Object(c.useState)(!0),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(""),h=Object(b.a)(p,2),O=h[0],f=h[1],v=Object(c.useState)(""),y=Object(b.a)(v,2),C=y[0],S=y[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1];Object(c.useEffect)((function(){if(o.retention_mode&&(f(o.retention_mode.toLowerCase()),B(!0)),o.retention_until_date){var e=new Date(o.retention_until_date);if("Invalid Date"!==e.toString()){var t=e.getFullYear(),n=(c=e.getMonth()+1)<10?"0".concat(c):"".concat(c),a=e.getDate();isNaN(a)||"NaN"===n||isNaN(t)||S("".concat(t,"-").concat(n,"-").concat(a))}B(!0)}var c}),[o]);var F=Object(c.useRef)(null),R=function(){m(!1),f(""),F.current&&F.current.resetDate()},P=D&&("governance"===O||""===O);return Object(a.jsxs)(jn,{title:"Set Retention Policy",modalOpen:n,onClose:function(){R(),i(!1)},children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.objectName,children:r}),Object(a.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault()}(e)},children:[P&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"status",id:"status",name:"status",checked:j,onChange:function(e){m(!j)},label:"Status",indicatorLabels:["Enabled","Disabled"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:O,id:"type",name:"type",label:"Type",disableOptions:!j||D&&""!==O,onChange:function(e){f(e.target.value)},selectorOptions:[{label:"Governance",value:"governance"},{label:"Compliance",value:"compliance"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ys,{id:"date",label:"Date",disableOptions:!(j&&("governance"===O||"compliance"===O)),ref:F,value:C,borderBottom:!0,onDateChange:function(e,t){T(t),t&&S(e)}})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:R,children:"Reset"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:j&&""===O||j&&!N||A,onClick:function(){I(!0);var e=o.name,t=o.version_id,n=j||"governance"!==O?"".concat(C,"T23:59:59Z"):"";j||"governance"!==O?function(e,t,n){me.invoke("PUT","/api/v1/buckets/".concat(s,"/objects/retention?prefix=").concat(e,"&version_id=").concat(t),{expires:n,mode:O}).then((function(e){I(!1),i(!0)})).catch((function(e){l(e),I(!1)}))}(e,t,n):function(e,t){me.invoke("DELETE","/api/v1/buckets/".concat(s,"/objects/retention?prefix=").concat(e,"&version_id=").concat(t)).then((function(){I(!1),i(!0)})).catch((function(e){l(e),I(!1)}))}(e,t)},children:"Save"})]})]})]})}))),_s={setModalErrorSnackMessage:G},As=Object(s.b)(null,_s),Is=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},pathLabel:{marginTop:0,marginBottom:32}},ke))}))(As((function(e){var t=e.modalOpen,n=e.currentTags,r=e.selectedObject,o=e.onCloseAndUpdate,s=e.bucketName,l=e.versionId,d=e.setModalErrorSnackMessage,u=e.classes,m=Object(c.useState)(""),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(""),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)(!1),k=Object(b.a)(S,2),w=k[0],N=k[1];return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(jn,{modalOpen:t,title:"Add New Tag",onClose:function(){o(!1)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)("h3",{className:u.pathLabel,children:["Selected Object: ",r]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{value:h,label:"New Tag Key",id:"newTagKey",name:"newTagKey",placeholder:"Enter New Tag Key",onChange:function(e){O(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{value:y,label:"New Tag Label",id:"newTagLabel",name:"newTagLabel",placeholder:"Enter New Tag Label",onChange:function(e){C(e.target.value)}})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:u.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:u.clearButton,onClick:function(){C(""),O("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:""===y.trim()||""===h.trim()||w,onClick:function(){N(!0);var e={};e[h]=y;var t=Object(j.a)(Object(j.a)({},n),e);me.invoke("PUT","/api/v1/buckets/".concat(s,"/objects/tags?prefix=").concat(r,"&version_id=").concat(l),{tags:t}).then((function(e){N(!1),o(!0)})).catch((function(e){d(e),N(!1)}))},children:"Save"})]})]})})})}))),Ms={setErrorSnackMessage:q},Ls=Object(s.b)(null,Ms),Ds=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},pathLabel:{marginTop:0,marginBottom:32}},ke))}))(Ls((function(e){var t=e.deleteOpen,n=e.currentTags,i=e.selectedObject,r=e.selectedTag,o=e.onCloseAndUpdate,s=e.bucketName,l=e.versionId,d=e.setErrorSnackMessage,u=e.classes,m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(b.a)(r,2),x=f[0],v=f[1];return Object(a.jsxs)(sn.a,{open:t,onClose:function(){o(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Tag"}),Object(a.jsxs)(dn.a,{children:[h&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete the tag"," ",Object(a.jsxs)("b",{className:u.wrapText,children:[x," : ",v]})," ","from ",i,"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){o(!1)},color:"primary",disabled:h,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){O(!0);var e=Object(j.a)({},n);delete e[x],me.invoke("PUT","/api/v1/buckets/".concat(s,"/objects/tags?prefix=").concat(i,"&version_id=").concat(l),{tags:e}).then((function(e){O(!1),o(!0)})).catch((function(e){d(e),O(!1)}))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})}))),Bs={setModalErrorSnackMessage:G},Fs=Object(s.b)(null,Bs),Rs=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({objectName:{fontSize:18,fontWeight:700,marginBottom:40},buttonContainer:{textAlign:"right"}},ke))}))(Fs((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.objectName,o=e.bucketName,s=e.actualInfo,l=e.setModalErrorSnackMessage,d=Object(c.useState)(!1),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],f=h[1],v=s.version_id;Object(c.useEffect)((function(){var e=Z()(s,"legal_hold_status","OFF");m("ON"===e)}),[s]);var y=function(){m(!1)};return Object(a.jsxs)(jn,{title:"Set Legal Hold",modalOpen:n,onClose:function(){y(),i(!1)},children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.objectName,children:r}),Object(a.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault(),f(!0),me.invoke("PUT","/api/v1/buckets/".concat(o,"/objects/legalhold?prefix=").concat(r,"&version_id=").concat(v),{status:j?"enabled":"disabled"}).then((function(){f(!1),i(!0)})).catch((function(e){l(e),f(!1)}))}(e)},children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"legalhold",id:"legalhold",name:"legalhold",checked:j,onChange:function(e){m(!j)},label:"Legal Hold Status",indicatorLabels:["Enabled","Disabled"],tooltip:"To enable this feature you need to enable versioning on the bucket before creation"})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:y,children:"Reset"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:O,children:"Save"})]})]})]})}))),Ps={is_latest:!0,last_modified:"",legal_hold_status:"",name:"",retention_mode:"",retention_until_date:"",size:"0",tags:{},version_id:null},zs={removeRouteLevel:Uo,setErrorSnackMessage:q,fileIsBeingPrepared:qo,fileDownloadStarted:Vo,setSnackBarMessage:W},Ks=Object(s.b)((function(e){var t=e.objectBrowser;return{downloadingFiles:Z()(t,"downloadingFiles",[])}}),zs)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({objectNameContainer:{marginBottom:8},objectPathContainer:{marginBottom:26,fontSize:10},objectPathLink:{"&:visited":{color:"#000"}},objectName:{fontSize:24},propertiesContainer:{display:"flex",flexDirection:"row",marginBottom:15},propertiesItem:{display:"flex",flexDirection:"row",marginRight:21},propertiesItemBold:{fontWeight:700},propertiesValue:{marginLeft:8,textTransform:"capitalize"},propertiesIcon:{marginLeft:5},actionsIconContainer:{marginLeft:12},actionsIcon:{height:16,width:16,"& .MuiSvgIcon-root":{height:16}},tagsContainer:{display:"flex",flexDirection:"row",alignItems:"center",marginBottom:15},tagText:{marginRight:13},tag:{marginRight:6,fontSize:10,fontWeight:700,"&.MuiChip-sizeSmall":{height:18},"& .MuiSvgIcon-root":{height:10,width:10}},search:{marginBottom:8,"&.MuiFormControl-root":{marginRight:0}},"@global":{".progressDetails":{paddingTop:3,display:"inline-block",position:"relative",width:18,height:18},".progressDetails > .MuiCircularProgress-root":{position:"absolute",left:0,top:3}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.routesList,r=e.downloadingFiles,o=e.removeRouteLevel,s=e.setErrorSnackMessage,l=e.setSnackBarMessage,d=e.fileIsBeingPrepared,j=e.fileDownloadStarted,m=Object(c.useState)(!0),p=Object(b.a)(m,2),h=p[0],O=p[1],g=Object(c.useState)(!1),v=Object(b.a)(g,2),y=v[0],S=v[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)(["",""]),R=Object(b.a)(F,2),P=R[0],z=R[1],K=Object(c.useState)(!1),U=Object(b.a)(K,2),W=U[0],q=U[1],V=Object(c.useState)(Ps),G=Object(b.a)(V,2),H=G[0],Y=G[1],Q=Object(c.useState)([]),J=Object(b.a)(Q,2),$=J[0],X=J[1],ee=Object(c.useState)(""),te=Object(b.a)(ee,2),ne=te[0],ae=te[1],ce=Object(c.useState)(!1),ie=Object(b.a)(ce,2),re=ie[0],oe=ie[1],se=n[n.length-1].route.split("/"),le=se[se.length-1],de=se[2],ue=se.slice(3).join("/");Object(c.useEffect)((function(){h&&me.invoke("GET","/api/v1/buckets/".concat(de,"/objects?prefix=").concat(ue,"&with_versions=true")).then((function(e){var t=Z()(e,"objects",[]);Y(t.find((function(e){return e.is_latest}))||Ps),X(t.filter((function(e){return!e.is_latest}))),O(!1)})).catch((function(e){s(e),O(!1)}))}),[h,de,ue,s]);var be=[];H.tags&&(be=Object.keys(H.tags));var je=function(){S(!0)},pe=function(e){j(e)},he=function(e,t){d("".concat(de,"/").concat(e.name).concat(t?"-".concat(e.version_id):"")),e.size&&parseInt(e.size)>104857600&&l("Download process started, it may take a few moments to complete"),is(de,ue,e.version_id,pe,t)},Oe=[{type:"share",onClick:je,sendOnlyId:!0},{type:"download",onClick:function(e){he(e,!0)},showLoaderFunction:function(e){return r.includes("".concat(de,"/").concat(le,"-").concat(e))}}],ge=$.filter((function(e){return!!e.version_id&&e.version_id.includes(ne)}));return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"Object Browser"}),y&&Object(a.jsx)(Ss,{open:y,closeModalAndRefresh:function(){S(!1)},bucketName:de,dataObject:H}),N&&Object(a.jsx)(Es,{open:N,closeModalAndRefresh:function(e){T(!1),e&&O(!0)},objectName:le,objectInfo:H,bucketName:de}),re&&Object(a.jsx)(Xo,{deleteOpen:re,selectedBucket:de,selectedObject:ue,closeDeleteModalAndRefresh:function(e){if(oe(!1),e){var t=se.slice(0,-1).join("/");o(t),u.push(t)}}}),A&&Object(a.jsx)(Is,{modalOpen:A,currentTags:H.tags,selectedObject:ue,versionId:H.version_id,bucketName:de,onCloseAndUpdate:function(e){I(!1),e&&O(!0)}}),D&&Object(a.jsx)(Ds,{deleteOpen:D,currentTags:H.tags,selectedObject:ue,versionId:H.version_id,bucketName:de,onCloseAndUpdate:function(e){B(!1),e&&O(!0)},selectedTag:P}),W&&Object(a.jsx)(Rs,{open:W,closeModalAndRefresh:function(e){q(!1),e&&O(!0)},objectName:ue,bucketName:de,actualInfo:H}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.obTitleSection,children:Object(a.jsx)("div",{children:Object(a.jsx)(Ho,{})})}),Object(a.jsx)("br",{}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.propertiesContainer,children:[H.version_id&&"null"!==H.version_id&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)("div",{className:t.propertiesItem,children:[Object(a.jsxs)("div",{children:[Object(a.jsx)("span",{className:t.propertiesItemBold,children:"Legal Hold:"}),Object(a.jsx)("span",{className:t.propertiesValue,children:H.legal_hold_status?H.legal_hold_status.toLowerCase():"Off"})]}),Object(a.jsx)("div",{children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"legal-hold",size:"small",className:t.propertiesIcon,onClick:function(){q(!0)},children:Object(a.jsx)(Wt,{active:!0})})})]}),Object(a.jsxs)("div",{className:t.propertiesItem,children:[Object(a.jsxs)("div",{children:[Object(a.jsx)("span",{className:t.propertiesItemBold,children:"Retention:"}),Object(a.jsx)("span",{className:t.propertiesValue,children:H.retention_mode?H.retention_mode.toLowerCase():"Undefined"})]}),Object(a.jsx)("div",{children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"retention",size:"small",className:t.propertiesIcon,onClick:function(){T(!0)},children:Object(a.jsx)(Wt,{active:!0})})})]})]}),Object(a.jsxs)("div",{className:t.propertiesItem,children:[Object(a.jsx)("div",{className:t.propertiesItemBold,children:"File Actions:"}),Object(a.jsx)("div",{className:t.actionsIconContainer,children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"share",size:"small",className:t.actionsIcon,onClick:function(){je()},children:Object(a.jsx)(ks,{})})}),Object(a.jsx)("div",{className:t.actionsIconContainer,children:r.includes("".concat(de,"/").concat(H.name))?Object(a.jsx)("div",{className:"progressDetails",children:Object(a.jsx)(C.a,{color:"primary",size:17,variant:"indeterminate"})}):Object(a.jsx)(_t.a,{color:"primary","aria-label":"download",size:"small",className:t.actionsIcon,onClick:function(){he(H)},children:Object(a.jsx)(ws,{})})}),Object(a.jsx)("div",{className:t.actionsIconContainer,children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"delete",size:"small",className:t.actionsIcon,onClick:function(){oe(!0)},children:Object(a.jsx)(tt,{})})})]})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.tagsContainer,children:[Object(a.jsx)("div",{className:t.tagText,children:"Tags:"}),be&&be.map((function(e,n){var c=Z()(H,"tags.".concat(e),"");return""!==c?Object(a.jsx)(us.a,{className:t.tag,size:"small",label:"".concat(e," : ").concat(c),color:"primary",deleteIcon:Object(a.jsx)(js.a,{}),onDelete:function(){!function(e,t){z([e,t]),B(!0)}(e,c)}},"chip-".concat(n)):null})),Object(a.jsx)(us.a,{className:t.tag,icon:Object(a.jsx)(vr.a,{}),clickable:!0,size:"small",label:"Add tag",color:"primary",variant:"outlined",onClick:function(){I(!0)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:H.version_id&&"null"!==H.version_id&&Object(a.jsx)(f.a,{placeholder:"Search ".concat(le),className:Object(fe.a)(t.search,t.searchField),id:"search-resource",label:"",onChange:function(e){ae(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:H.version_id&&"null"!==H.version_id&&Object(a.jsx)(on,{itemActions:Oe,columns:[{label:"Version ID",elementKey:"version_id"},{label:"Last Modified",elementKey:"last_modified",renderFunction:function(e){return Object(a.jsx)(Je.a,{children:e})}}],isLoading:!1,entityName:"Versions",idField:"version_id",records:ge})})]})})]})}))),Us={setAllRoutes:Wo},Ws=Object(s.b)((function(e){var t=e.objectBrowser;return{routesList:Z()(t,"routesList",[])}}),Us),qs=Object(l.g)(Ws((function(e){var t=e.routesList,n=e.match,i=e.setAllRoutes,r=t[t.length-1];return Object(c.useEffect)((function(){var e=Z()(n,"url","/object-browser");e!==t[t.length-1].route&&i(e)}),[n,t,i]),"path"===r.type?Object(a.jsx)(ds,{}):Object(a.jsx)(Ks,{routesList:t})}))),Vs=n(200),Gs=n.n(Vs),Hs=[{id:0,title:"Community",price:"Open Source",capacityMin:""},{id:1,title:"Standard",price:"$10/TB/month",capacityMax:"Up to 10PB. No additional charges for capacity over 10PB",capacityMin:""},{id:2,title:"Enterprise",price:"$20/TB/month",capacityMax:"Up to 5PB. No additional charges for capacity over 5PB",capacityMin:""}],Ys=[{id:0,field:"License",community:"GNU AGPL v3",communityDetail:"",standard:"Commercial License",standardDetail:"",enterprise:"Commercial License",enterpriseDetail:""},{id:1,field:"Software Release",community:"Update to latest",standard:"1 Year Long Term Support",enterprise:"5 Years Long Term Support"},{id:2,field:"SLA",community:"No SLA",standard:"<24 hours",enterprise:"<1 hour"},{id:3,field:"Support",community:"Community:",communityDetail:"Public Slack Channel + Github Issues",standard:"24x7 L4 direct engineering",standardDetail:"Support via SUBNET",enterprise:"24x7 L4 direct engineering",enterpriseDetail:"Support via SUBNET"},{id:4,field:"Security Updates & Critical Bugs",community:"Self Update",standard:"Guided Update",enterprise:"Guided Update"},{id:5,field:"Panic Button",community:"N/A",standard:"1 per year",enterprise:"Unlimited"},{id:6,field:"Annual Architecture Review",community:"N/A",standard:"Yes",enterprise:"Yes"},{id:7,field:"Annual Performance Review",community:"N/A",standard:"Yes",enterprise:"Yes"},{id:8,field:"Indemnification",community:"N/A",standard:"N/A",enterprise:"Yes"},{id:9,field:"Security + Policy Review",community:"N/A",standard:"N/A",enterprise:"Yes"}],Qs=[{id:0,text:"Join Slack",text2:"",link:"https://slack.min.io",plan:"community"},{id:1,text:"Subscribe",text2:"Upgrade",link:"https://subnet.min.io/subscription",plan:"standard"},{id:2,text:"Subscribe",text2:"Upgrade",link:"https://subnet.min.io/subscription",plan:"enterprise"}],Zs=n(339),Js=n.n(Zs),$s=n(340),Xs=n.n($s),el={setModalErrorSnackMessage:G},tl=Object(s.b)(null,el),nl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({errorBlock:{color:"red"},subnetLicenseKey:{padding:"10px 10px 10px 0px",borderRight:"1px solid rgba(0, 0, 0, 0.12)",opacity:.5,"&:hover":{opacity:1}},subnetLoginForm:{padding:"10px 0px 10px 10px",opacity:.5,"&:hover":{opacity:1}},licenseKeyField:{},pageTitle:{marginBottom:20},button:{textTransform:"none",fontSize:15,fontWeight:700,background:"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box",color:"#fff"},buttonSignup:{textTransform:"none",fontSize:15,fontWeight:700,marginLeft:15}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(tl((function(e){var t=e.classes,n=e.open,i=e.closeModal,r=e.setModalErrorSnackMessage,o=Object(c.useState)(""),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(""),O=Object(b.a)(h,2),C=O[0],S=O[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=function(){if(!N){T(!0);var e={license:l,email:C,password:m};me.invoke("POST","/api/v1/subscription/validate",e).then((function(){T(!1),d(""),p(""),S(""),i()})).catch((function(e){T(!1),d(""),p(""),S(""),r(e)}))}};return n?Object(a.jsxs)(jn,{title:"",modalOpen:n,onClose:function(){d(""),p(""),S(""),i()},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsxs)(x.a,{container:!0,alignItems:"center",item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{component:"h2",variant:"h6",className:t.pageTitle,children:"Activate SUBNET License"})}),Object(a.jsxs)(x.a,{item:!0,className:t.subnetLicenseKey,xs:6,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"caption",display:"block",gutterBottom:!0,children:"Enter your license key here"})}),Object(a.jsx)(f.a,{id:"license-key",placeholder:"",multiline:!0,rows:3,value:l,onChange:function(e){return d(e.target.value)},fullWidth:!0,className:t.licenseKeyField,variant:"outlined"}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",onClick:function(){return E()},disabled:N||0===l.trim().length,children:"Activate"})]}),Object(a.jsx)(x.a,{item:!0,className:t.subnetLoginForm,xs:6,children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{overlayIcon:Object(a.jsx)(Js.a,{}),id:"subnet-email",name:"subnet-email",onChange:function(e){S(e.target.value)},placeholder:"email",label:"",type:"text",value:C})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{overlayIcon:Object(a.jsx)(Xs.a,{}),id:"subnet-password",name:"subnet-password",onChange:function(e){p(e.target.value)},placeholder:"password",label:"",type:"password",value:m})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(g.a,{className:t.button,color:"primary",onClick:function(){return E()},disabled:N||0===C.trim().length||0===m.trim().length,variant:"contained",children:"Activate"}),Object(a.jsx)(g.a,{className:t.buttonSignup,color:"primary",target:"_blank",rel:"noopener noreferrer",href:"#",onClick:function(e){e.preventDefault(),window.open("https://min.io/pricing","_blank")},variant:"outlined",children:"Sign Up"})]})]})})]}),N&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]}):null}))),al=Object(s.b)((function(e){return{operatorMode:e.system.operatorMode}}),null)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({pageTitle:{fontSize:18,marginBottom:20},paper:{padding:"20px 52px 20px 28px"},licenseContainer:{position:"relative",padding:"20px 52px 0px 28px",background:"#032F51",boxShadow:"0px 3px 7px #00000014","& h2":{color:"#FFF",marginBottom:67},"& a":{textDecoration:"none"},"& h3":{color:"#FFFFFF",marginBottom:"30px",fontWeight:"bold"},"& h6":{color:"#FFFFFF !important"}},tableContainer:{marginLeft:28},detailsContainer:{textAlign:"center",paddingBottom:12,borderRadius:"3px 3px 0 0",marginLeft:8,maxWidth:"calc(25% - 8px)"},detailsContainerBorder:{border:"1px solid #e2e2e2",borderBottom:0,borderRadius:"4px 4px 0px 0px"},detailsContainerBorderHighlighted:{border:"1px solid #B5B5B5",borderBottom:0},detailsTitle:{fontSize:19,fontWeight:700,marginBottom:26,paddingTop:18},activePlanHeader:{fontWeight:700,background:"#D5DDE5",borderRadius:"3px 3px 0px 0px",color:"#121212",padding:8,borderTop:"1px solid #D5DDE5",marginTop:-2},planHeader:{background:"#FFFFFF",borderRadius:"3px 3px 0px 0px",padding:8,borderTop:"1px solid #D5DDE5"},detailsPrice:{fontSize:13,fontWeight:700,marginBottom:8},detailsCapacityMax:{minHeight:28,fontSize:10,fontWeight:700,marginBottom:12,padding:"0% 15%"},detailsCapacityMin:{fontSize:10},itemContainer:{height:36},itemContainerDetail:{height:48},item:{height:"100%",borderLeft:"1px solid #e2e2e2",borderRight:"1px solid #e2e2e2",textAlign:"center",fontSize:10,fontWeight:700,display:"flex",alignItems:"center",alignContent:"center",marginLeft:8,maxWidth:"calc(25% - 8px)",borderTop:"1px solid #e5e5e5"},itemFirst:{borderLeft:0,borderRight:0},itemHighlighted:{borderLeft:"1px solid #B5B5B5",borderRight:"1px solid #B5B5B5"},field:{textAlign:"left",fontWeight:400,fontSize:12},checkIcon:{height:12,color:"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box"},buttonContainer:{paddingTop:8,paddingBottom:24,height:"100%",display:"flex",justifyContent:"center",borderRadius:"0 0 3px 3px",border:"1px solid #e2e2e2",borderTop:0,marginLeft:8,maxWidth:"calc(25% - 8px)"},buttonContainerBlank:{border:0},buttonContainerHighlighted:{border:"1px solid #B5B5B5",borderTop:0},button:{textTransform:"none",fontSize:15,fontWeight:700},licenseButton:{float:"right",marginTop:25,marginRight:25},openSourcePolicy:{color:"#1C5A8D",fontWeight:"bold"},activateLink:{color:"#1C5A8D",fontWeight:"bold",clear:"both",background:"none",border:"none",textDecoration:"underline",cursor:"pointer"},subnetRefreshLicenseLink:{color:"#1C5A8D",fontWeight:"bold",clear:"both",background:"none",border:"none",textDecoration:"underline",cursor:"pointer",fontSize:13},fullWidth:{width:"100%",height:"100%"},midWidth:{width:"70%",float:"left",height:"100%"},smallWidth:{width:"30%",float:"right",height:"100%",borderRadius:"0px 3px 0px 0px !important"},licenseInfo:{color:"#FFFFFF",position:"relative"},licenseInfoTitle:{textTransform:"none",color:"#BFBFBF",fontSize:11},licenseInfoValue:{textTransform:"none",fontSize:14,fontWeight:"bold"},licenseDescription:{background:"#032F51",padding:"30px 30px",borderTop:"1px solid #e2e5e4",borderLeft:"1px solid #e2e5e4",borderRight:"1px solid #e2e5e4",bottom:0,left:"5%",right:"5%",position:"absolute"},currentPlanBG:{background:"#022A4A 0% 0% no-repeat padding-box",color:"#FFFFFF",borderTop:"1px solid #52687d"},currentPlanButton:{background:"#FFFFFF",color:"#022A4A","&:hover":{background:"#FFFFFF"}},planItemsPadding:{padding:"23px 33px"},subnetSubTitle:{fontSize:12},verifiedIcon:{width:96,position:"absolute",right:0,bottom:29},loadingLoginStrategy:{textAlign:"center"}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.operatorMode,r=function(){E(!0),me.invoke("GET","/api/v1/subscription/info").then((function(e){e&&("STANDARD"===e.plan?k(1):"ENTERPRISE"===e.plan?k(2):k(1),p(e)),E(!1)})).catch((function(e){E(!1)}))},o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(0),O=Object(b.a)(h,2),f=O[0],k=O[1],w=Object(c.useState)(!0),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(!1),A=Object(b.a)(_,2),I=A[0],M=A[1];return Object(c.useEffect)((function(){r()}),[]),T?Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})}):Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"License"}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(S.a,{className:"".concat(t.licenseContainer," ").concat(t.midWidth),children:m?Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.licenseInfo,children:[Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"License"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:"Commercial License"}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Organization"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:m.organization}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Registered Capacity"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:ce((1099511627776*m.storage_capacity).toString(10))}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Expiry Date"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:Object(a.jsx)(Je.a,{format:"YYYY-MM-DD",children:m.expires_at})})]}),Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Subscription Plan"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:m.plan}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Requester"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:m.email})]}),Object(a.jsx)("img",{className:t.verifiedIcon,src:"/verified.svg"})]})}):Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("img",{src:"/agpl.svg",height:40,alt:"agpl"}),Object(a.jsx)(v.a,{component:"h2",variant:"h6",children:"GNU Affero General Public License"}),Object(a.jsx)("a",{href:"https://www.gnu.org/licenses/agpl-3.0.html",target:"_blank",rel:"nofollow noopener noreferrer",children:Object(a.jsxs)("div",{className:t.licenseDescription,children:[Object(a.jsx)(v.a,{component:"h3",children:"Version 3"}),Object(a.jsx)(v.a,{component:"h6",children:"The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the Community in the case of network server software."})]})})]})}),Object(a.jsx)(S.a,{className:"".concat(t.paper," ").concat(t.smallWidth),children:m?Object(a.jsxs)(i.a.Fragment,{children:[" ",Object(a.jsx)(v.a,{component:"h2",variant:"h6",className:t.pageTitle,children:"Login to MinIO SUBNET !"}),Object(a.jsx)(v.a,{component:"h6",className:t.subnetSubTitle,children:"It combines a commercial license with a support experience unlike any other."}),Object(a.jsx)("br",{}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",className:t.button,target:"_blank",rel:"noopener noreferrer",href:"https://subnet.min.io/support/?ref=op",children:"Login to SUBNET"}),n&&Object(a.jsxs)(i.a.Fragment,{children:[" ",Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("button",{className:t.subnetRefreshLicenseLink,onClick:function(e){e.preventDefault(),M(!0),me.invoke("POST","/api/v1/subscription/refresh",{}).then((function(e){e&&("STANDARD"===e.plan?k(1):"ENTERPRISE"===e.plan?k(2):k(1),p(e)),M(!1)})).catch((function(e){M(!1)}))},children:"Refresh Licence"}),I&&Object(a.jsx)(C.a,{size:16,className:t.loadingLoginStrategy})]})]}):Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h2",variant:"h6",className:t.pageTitle,children:"Choosing between GNU AGPL v3 and Commercial License"}),Object(a.jsx)(v.a,{component:"h6",children:"If you are building proprietary applications, you may want to choose the commercial license included as part of the Standard and Enterprise subscription plans. Applications must otherwise comply with all the GNU AGPLv3 License & Trademark obligations. Follow the links below to learn more about the compliance policy."}),Object(a.jsx)("br",{}),Object(a.jsx)("a",{href:"https://min.io/compliance?ref=op",className:t.openSourcePolicy,target:"_blank",rel:"nofollow noopener noreferrer",children:"Open Source Policy Compliance"}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("a",{href:"https://min.io/logo?ref=op",className:t.openSourcePolicy,target:"_blank",rel:"nofollow noopener noreferrer",children:"Trademark Policy"})]})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:Object(fe.a)(t.planItemsPadding),children:Object(a.jsx)(S.a,{className:t.paper,style:{borderRadius:"0px 0px 3px 3px"},children:Object(a.jsxs)(x.a,{container:!0,children:[n?Object(a.jsx)(nl,{open:l,closeModal:function(){return d(!1),void r()}}):null,Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,className:t.tableContainer,children:[Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:3,className:t.detailsContainer}),Hs.map((function(e){var n=!m&&"Community"===e.title||m&&m.plan.toLowerCase()===e.title.toLowerCase();return Object(a.jsxs)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.detailsContainer,t.detailsContainerBorder,Object(ge.a)({},t.detailsContainerBorderHighlighted,"Community"!==e.title),n?t.currentPlanBG:""),children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:n?t.activePlanHeader:t.planHeader,children:n?"Current Plan":"\xa0"}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.detailsTitle,children:e.title}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.detailsPrice,children:e.price}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.detailsCapacityMax,children:e.capacityMax||""})]},e.id)}))]}),Ys.map((function(e){return Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,className:Object(fe.a)(t.itemContainer,e.communityDetail&&t.itemContainerDetail),children:[Object(a.jsx)(x.a,{item:!0,xs:3,className:Object(fe.a)(t.item,t.field,t.itemFirst),children:e.field}),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.item,0===f?t.currentPlanBG:""),children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:"N/A"===e.community?"":"Yes"===e.community?Object(a.jsx)(Gs.a,{className:t.checkIcon}):e.community}),void 0!==e.communityDetail&&Object(a.jsx)(x.a,{item:!0,xs:12,children:e.communityDetail})]}),Object(a.jsx)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.item,t.itemHighlighted,1===f?t.currentPlanBG:""),children:Object(a.jsx)(x.a,{item:!0,xs:12,children:"N/A"===e.standard?"":"Yes"===e.standard?Object(a.jsx)(Gs.a,{className:t.checkIcon}):e.standard})}),Object(a.jsx)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.item,t.itemHighlighted,2===f?t.currentPlanBG:""),children:Object(a.jsx)(x.a,{item:!0,xs:12,children:"N/A"===e.enterprise?"":"Yes"===e.enterprise?Object(a.jsx)(Gs.a,{className:t.checkIcon}):e.enterprise})})]},e.id)})),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:3,className:Object(fe.a)(t.buttonContainer,t.buttonContainerBlank)}),Qs.map((function(e,c){return Object(a.jsxs)(x.a,{container:!0,item:!0,xs:3,style:{textAlign:"center"},className:Object(fe.a)(t.buttonContainer,f===c?t.currentPlanBG:"",Object(ge.a)({},t.buttonContainerHighlighted,"Subscribe"===e.text)),children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",className:Object(fe.a)(t.button,f===c?t.currentPlanButton:""),target:"_blank",rel:"noopener noreferrer",href:"#",disabled:m&&m.plan.toLowerCase()===e.plan.toLowerCase(),onClick:function(t){t.preventDefault(),window.open(e.link,"_blank")},children:f!==c&&c>0?e.text2:e.text})}),n&&"Subscribe"===e.text&&!(m&&m.plan.toLowerCase()===e.plan.toLowerCase())&&Object(a.jsx)(x.a,{item:!0,xs:12,style:{marginTop:"10px"},children:Object(a.jsx)("button",{className:t.activateLink,onClick:function(e){e.preventDefault(),d(!0)},children:"Activate"})})]},e.id)}))]})]})]})})})]})]})})}))),cl=n(89),il="TRACE_MESSAGE_RECEIVED",rl="TRACE_RESET_MESSAGES";var ol=function(e){var t="ws";return"https:"===e&&(t="wss"),t},sl=n(110),ll=n.n(sl),dl=Object(s.b)((function(e){return{messages:e.trace.messages}}),{traceMessageReceived:function(e){return{type:il,message:e}},traceResetMessages:function(){return{type:rl}}})(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({logList:{background:"white",height:"400px",overflow:"auto","& ul":{margin:"4px",padding:"0px"},"& ul li":{listStyle:"none",margin:"0px",padding:"0px",borderBottom:"1px solid #dedede"}},sizeItem:{width:150},timeItem:{width:100}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.traceMessageReceived,r=e.traceResetMessages,o=e.messages;return Object(c.useEffect)((function(){r();var e=new URL(window.location.toString()),t=e.port,a=ol(e.protocol),c=new cl.w3cwebsocket("".concat(a,"://").concat(e.hostname,":").concat(t,"/ws/trace")),i=null;if(null!==c)return c.onopen=function(){console.log("WebSocket Client Connected"),c.send("ok"),i=setInterval((function(){c.send("ok")}),1e4)},c.onmessage=function(e){var t=JSON.parse(e.data.toString());t.ptime=ll()(t.time,"YYYY-MM-DD HH:mm:s.SSSS +0000 UTC").toDate(),t.key=Math.random(),n(t)},c.onclose=function(){clearInterval(i),console.log("connection closed by server")},function(){c.close(1e3),clearInterval(i),console.log("closing websockets")}}),[n,r]),Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"Trace"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container,children:Object(a.jsx)(on,{itemActions:[],columns:[{label:"Time",elementKey:"ptime",renderFunction:function(e){var t=new Date(e);return re(t)},globalClass:t.timeItem},{label:"Name",elementKey:"api"},{label:"Status",elementKey:"",renderFunction:function(e){return"".concat(e.statusCode," ").concat(e.statusMsg)},renderFullObject:!0},{label:"Location",elementKey:"configuration_id",renderFunction:function(e){return"".concat(e.host," ").concat(e.client)},renderFullObject:!0},{label:"Load Time",elementKey:"callStats.duration",globalClass:t.timeItem},{label:"Upload",elementKey:"callStats.rx",renderFunction:ce,globalClass:t.sizeItem},{label:"Download",elementKey:"callStats.tx",renderFunction:ce,globalClass:t.sizeItem}],isLoading:!1,records:o,entityName:"Traces",idField:"api",customEmptyMessage:"There are no traced Elements yet",autoScrollToBottom:!0})})})]})}))),ul="LOG_MESSAGE_RECEIVED",bl="LOG_RESET_MESSAGES";var jl=Object(s.b)((function(e){return{messages:e.logs.messages}}),{logMessageReceived:function(e){return{type:ul,message:e}},logResetMessages:function(){return{type:bl}}}),ml=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({logList:{background:"#fff",minHeight:400,height:"calc(100vh - 304px)",overflow:"auto",fontSize:13,padding:"25px 45px 0",border:"1px solid #EAEDEE",borderRadius:4},tab:{paddingLeft:25},logerror:{color:"#A52A2A"},logerror_tab:{color:"#A52A2A",paddingLeft:25},ansidefault:{color:"#000"},highlight:{"& span":{backgroundColor:"#082F5238"}}},Ae),Ie),Fe))}))(jl((function(e){var t=e.classes,n=e.logMessageReceived,i=e.logResetMessages,r=e.messages,o=Object(c.useState)(""),s=Object(b.a)(o,2),l=s[0],d=s[1];Object(c.useEffect)((function(){i();var e=new URL(window.location.toString()),t=e.port,a=ol(e.protocol),c=new cl.w3cwebsocket("".concat(a,"://").concat(e.hostname,":").concat(t,"/ws/console")),r=null;if(null!==c)return c.onopen=function(){console.log("WebSocket Client Connected"),c.send("ok"),r=setInterval((function(){c.send("ok")}),1e4)},c.onmessage=function(e){var t=JSON.parse(e.data.toString());t.time=ll()(t.time,"HH:mm:s UTC MM/DD/YYYY").toDate(),t.key=Math.random(),n(t)},c.onclose=function(){clearInterval(r),console.log("connection closed by server")},function(){c.close(1e3),clearInterval(r),console.log("closing websockets")}}),[n,i]);var u=function(e){var n=e.ConsoleMsg,c=(n=n.replace(/([^\x20-\x7F])/g,"")).replace(/((\[[0-9;]+m))/g,""),i=""!==l&&n.toLowerCase().includes(l.toLowerCase());return c.startsWith(" ")?Object(a.jsx)("div",{className:"".concat(i?t.highlight:""),children:Object(a.jsx)("span",{className:t.tab,children:c})},e.key):null!==e.error&&void 0!==e.error?function(e){var n=[];if(null!==e.error&&void 0!==e.error){if(e.api&&e.api.name){var c="API: ".concat(e.api.name),i=""!==l&&c.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsxs)("div",{className:"".concat(i?t.highlight:""),children:[Object(a.jsx)("br",{}),Object(a.jsx)("span",{className:t.logerror,children:c})]},"api-".concat(e.key)))}if(e.time){var r="Time: ".concat(re(e.time)),o=""!==l&&r.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(o?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:r})},"time-".concat(e.key)))}if(e.deploymentid){var s="DeploymentID: ".concat(e.deploymentid),d=""!==l&&s.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(d?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:s})},"deploytmentid-".concat(e.key)))}if(e.requestID){var u="RequestID: ".concat(e.requestID),b=""!==l&&u.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(b?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:u})},"requestid-".concat(e.key)))}if(e.remotehost){var j="RemoteHost: ".concat(e.remotehost),m=""!==l&&j.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(m?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:j})},"remotehost-".concat(e.key)))}if(e.host){var p="Host: ".concat(e.host),h=""!==l&&p.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(h?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:p})},"host-".concat(e.key)))}if(e.userAgent){var O="UserAgent: ".concat(e.userAgent),g=""!==l&&O.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(g?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:O})},"useragent-".concat(e.key)))}if(e.error.message){var f="Error: ".concat(e.error.message),x=""!==l&&f.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(x?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:f})},"message-".concat(e.key)))}if(e.error.source)for(var v in e.error.source){var y=e.error.source[v],C=""!==l&&y.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(C?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror_tab,children:y})},"source-".concat(e.key,"-").concat(v)))}}return n}(e):Object(a.jsx)("div",{className:"".concat(i?t.highlight:""),children:Object(a.jsx)("span",{className:t.ansidefault,children:c})},e.key)},j=r.map((function(e){return u(e)}));return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.logsSubContainer,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:Object(a.jsx)(f.a,{placeholder:"Highlight Line",className:t.searchField,id:"search-resource",label:"",onChange:function(e){d(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("div",{className:t.logList,children:j})})]})})}))),pl=n(649),hl=Object(N.a)((function(e){return Object(k.a)({searchField:Object(j.a)(Object(j.a)({},Ie.searchField),{},{height:30,padding:0,"& input":{padding:"0 12px",height:28,fontSize:12,fontWeight:600,color:"#393939"},"&.isDisabled":{"&:hover":{borderColor:"#EAEDEE"}},"& input.Mui-disabled":{backgroundColor:"#EAEAEA"}}),labelStyle:{color:"#393939",fontSize:12,marginBottom:4},buttonKit:{display:"flex",alignItems:"center"},toggleButton:{marginRight:10},fieldContainer:{flexGrow:1,margin:"0 15px"}})}))((function(e){var t=e.classes,n=e.label,i=e.onChange,r=e.value,o=e.placeholder,s=void 0===o?"":o,l=e.id,d=e.name;return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)("div",{className:t.fieldContainer,children:[Object(a.jsx)("div",{className:t.labelStyle,children:n}),Object(a.jsx)("div",{className:t.buttonKit,children:Object(a.jsx)(f.a,{placeholder:s,id:l,name:d,label:"",onChange:function(e){i(e.target.value)},InputProps:{disableUnderline:!0},className:t.searchField,value:r})})]})})})),Ol={setErrorSnackMessage:q},gl=Object(s.b)(null,Ol),fl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({inputBar:{flexGrow:1,marginLeft:15},advancedLabel:{display:"flex",alignItems:"center",color:"#091C42",border:0,backgroundColor:"transparent",cursor:"pointer","&:focus, &:active":{outline:"none"}},advancedLabelContainer:{marginTop:10},getInformationContainer:{textAlign:"right"},orderButton:{width:93},recordsLabel:{alignSelf:"center",marginLeft:15},blockCollapsed:{height:0,overflowY:"hidden",transitionDuration:"0.3s"},filterOpen:{height:200,marginBottom:12},endLineAction:{marginBottom:15},filtersContainer:{display:"flex",justifyContent:"space-between",marginBottom:12},innerContainer:{backgroundColor:"#fff",border:"#EAEDEE 1px solid",borderRadius:3,padding:10,marginBottom:15},noticeLabel:{marginLeft:15,marginBottom:15,fontSize:12,color:"#9C9C9C"},tableFOpen:{height:"calc(100vh - 561px)"},tableFClosed:{height:"calc(100vh - 349px)"},"@global":{".overrideMargin":{marginLeft:0}}},Ie),Ae),Fe),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(gl((function(e){var t=e.classes,n=e.setErrorSnackMessage,i=Object(c.useState)(!0),r=Object(b.a)(i,2),o=r[0],s=r[1],l=Object(c.useState)(null),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(null),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(!1),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)([]),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(""),F=Object(b.a)(B,2),R=F[0],P=F[1],z=Object(c.useState)(""),K=Object(b.a)(z,2),U=K[0],W=K[1],q=Object(c.useState)(""),V=Object(b.a)(q,2),G=V[0],H=V[1],Y=Object(c.useState)(""),Q=Object(b.a)(Y,2),J=Q[0],$=Q[1],X=Object(c.useState)("DESC"),ee=Object(b.a)(X,2),te=ee[0],ne=ee[1],ae=Object(c.useState)(["time","api_name","bucket","object","remote_host","request_id","user_agent","response_status"]),ie=Object(b.a)(ae,2),re=ie[0],oe=ie[1],se=Object(c.useState)(0),le=Object(b.a)(se,2),de=le[0],ue=le[1],je=Object(c.useState)(!1),pe=Object(b.a)(je,2),he=pe[0],Oe=pe[1],ge=null,fe=Object(c.useCallback)((function(){if(!he){Oe(!0);var e="".concat(""!==_?"&fp=bucket:".concat(_):"").concat(""!==U?"&fp=object:".concat(U):"").concat(""!==L?"&fp=api_name:".concat(L):"").concat(""!==G?"&fp=request_id:".concat(G):"").concat(""!==R?"&fp=user_agent:".concat(R):"").concat(""!==J?"&fp=response_status:".concat(J):"");(e=e.trim()).endsWith(",")&&(e=e.slice(0,-1)),me.invoke("GET","/api/v1/logs/search?q=reqinfo".concat(""!==e?"".concat(e):"","&pageSize=100&pageNo=").concat(de,"&order=").concat("DESC"===te?"timeDesc":"timeAsc").concat(null!==u?"&timeStart=".concat(u.toISOString()):"").concat(null!==h?"&timeEnd=".concat(h.toISOString()):"")).then((function(e){var t=e.results||[],n=[].concat(Object(Nt.a)(w),Object(Nt.a)(t));s(!1),Oe(!1),N(n),ue(de+1),null!==ge&&ge()})).catch((function(e){s(!1),Oe(!1),n(e)}))}}),[_,U,L,G,R,J,de,te,u,h,he,w,ge,n]);Object(c.useEffect)((function(){o&&(N([]),fe())}),[o,te,fe]);return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.logsSubContainer,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(t.actionsTray," ").concat(t.timeContainers),children:[Object(a.jsx)("span",{className:t.label,children:"Start Time"}),Object(a.jsx)(ic,{value:u,onChange:j}),Object(a.jsx)("span",{className:t.label,children:"End Time"}),Object(a.jsx)(ic,{value:h,onChange:O})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:"".concat(t.advancedLabelContainer),children:Object(a.jsx)("div",{className:"".concat(t.blockCollapsed," ").concat(y?t.filterOpen:""),children:Object(a.jsxs)("div",{className:t.innerContainer,children:[Object(a.jsxs)("div",{className:t.noticeLabel,children:["Enable your preferred options to get filtered records.",Object(a.jsx)("br",{}),"You can use '*' to match any character, '.' to signify a single character or '\\' to scape an special character (E.g. mybucket-*)"]}),Object(a.jsxs)("div",{className:t.filtersContainer,children:[Object(a.jsx)(hl,{onChange:A,value:_,label:"Bucket",id:"bucket",name:"bucket"}),Object(a.jsx)(hl,{onChange:D,value:L,label:"API Name",id:"api_name",name:"api_name"}),Object(a.jsx)(hl,{onChange:P,value:R,label:"User Agent",id:"user_agent",name:"user_agent"})]}),Object(a.jsxs)("div",{className:t.filtersContainer,children:[Object(a.jsx)(hl,{onChange:W,value:U,label:"Object",id:"object",name:"object"}),Object(a.jsx)(hl,{onChange:H,value:G,label:"Request ID",id:"request_id",name:"request_id"}),Object(a.jsx)(hl,{onChange:$,value:J,label:"Response Status",id:"response_status",name:"response_status"})]})]})})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(t.actionsTray," ").concat(t.endLineAction),children:[Object(a.jsx)("div",{children:Object(a.jsxs)("button",{type:"button",className:"".concat(t.advancedLabel," overrideMargin"),onClick:function(){C(!y)},children:["Advanced Filters"," ",y?Object(a.jsx)(pl.a,{}):Object(a.jsx)(Ft.a,{})]})}),Object(a.jsx)(g.a,{type:"button",variant:"contained",color:"primary",onClick:function(){ue(0),s(!0)},children:"Get Information"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{columns:[{label:"Timestamp",elementKey:"time",enableSort:!0},{label:"API Name",elementKey:"api_name"},{label:"Bucket",elementKey:"bucket"},{label:"Object",elementKey:"object"},{label:"Remote Host",elementKey:"remote_host"},{label:"Request ID",elementKey:"request_id"},{label:"User Agent",elementKey:"user_agent"},{label:"Response Status",elementKey:"response_status",renderFunction:function(e){return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)("span",{children:[e.response_status_code," (",e.response_status,")"]})})},renderFullObject:!0},{label:"Request Content Length",elementKey:"request_content_length",renderFunction:ce},{label:"Response Content Length",elementKey:"response_content_length",renderFunction:ce},{label:"Time to Response NS",elementKey:"time_to_response_ns",renderFunction:be,contentTextAlign:"right"}],isLoading:o,records:w,entityName:"Logs",customEmptyMessage:"There is no information with this criteria",idField:"request_id",columnsSelector:!0,columnsShown:re,onColumnChange:function(e,t){var n=Object(Nt.a)(re);t?n.includes(e)||n.push(e):n=re.filter((function(t){return t!==e})),oe(n)},customPaperHeight:y?t.tableFOpen:t.tableFClosed,sortConfig:{currentSort:"time",currentDirection:te,triggerSort:function(e){var t=Z()(e,"sortDirection","DESC");ne(t),ue(0),s(!0)}},infiniteScrollConfig:{recordsCount:1e6,loadMoreRecords:function(e){return fe(),new Promise((function(e){ge=e}))}},textSelectable:!0})})]})})}))),xl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({headerLabel:{fontSize:22,fontWeight:600,color:"#000",marginTop:4}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(0),i=Object(b.a)(n,2),r=i[0],o=i[1],s=Object(c.useState)(!0),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!1),m=Object(b.a)(j,2),p=m[0],h=m[1];return Object(c.useEffect)((function(){me.invoke("GET","/api/v1/logs/search?q=reqinfo&pageSize=10&pageNo=0").then((function(){h(!0),u(!1)})).catch((function(e){u(!1),console.info("Log Search API not available.")}))}),[d]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(Rn,{label:"Logs"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container,children:d?Object(a.jsx)(y.a,{}):Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.headerLabel,children:"All Logs"}),Object(a.jsxs)(Kn.a,{value:r,onChange:function(e,t){o(t)},indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",children:[Object(a.jsx)(Un.a,{label:"Error Logs"}),p&&Object(a.jsx)(Un.a,{label:"Logs Search"})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[0===r&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ml,{})}),1===r&&p&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(fl,{})})]})]})})})]})})),vl=n(341),yl=Object(N.a)((function(e){return Object(k.a)({root:{width:450,lineHeight:"50px",marginRight:15,"label + &":{marginTop:e.spacing(3)},"& .MuiSelect-select:focus":{backgroundColor:"transparent"}},input:{height:50,fontSize:13,lineHeight:"50px",width:450}})}))(On.a),Cl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({watchList:{background:"white",maxHeight:"400",overflow:"auto","& ul":{margin:"4",padding:"0"},"& ul li":{listStyle:"none",margin:"0",padding:"0",borderBottom:"1px solid #dedede"}},graphContainer:{backgroundColor:"#fff",border:"#EAEDEE 1px solid",borderRadius:3,padding:"19px 38px"},scanInfo:{marginTop:20,display:"flex",flexDirection:"row",justifyContent:"space-between"},scanData:{fontSize:13},inlineCheckboxes:{display:"flex",justifyContent:"flex-start"}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(!1),r=Object(b.a)(n,2),o=r[0],s=r[1],l=Object(c.useState)(""),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)([]),p=Object(b.a)(m,2),h=p[0],O=p[1],v=Object(c.useState)(""),y=Object(b.a)(v,2),C=y[0],S=y[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)({beforeHeal:[0,0,0,0],afterHeal:[0,0,0,0],objectsHealed:0,objectsScanned:0,healDuration:0,sizeScanned:""}),R=Object(b.a)(F,2),P=R[0],z=R[1];Object(c.useEffect)((function(){me.invoke("GET","/api/v1/buckets").then((function(e){var t=[];null!==e.buckets&&(t=e.buckets),O(t)})).catch((function(e){console.log(e)}))}),[]),Object(c.useEffect)((function(){!0===A&&B(!1)}),[A]),Object(c.useEffect)((function(){!0===D&&I(!1)}),[D]);var K=function(e){return[e.Green,e.Yellow,e.Red,e.Grey]};Object(c.useEffect)((function(){if(o){var e={Green:0,Yellow:0,Red:0,Grey:0},t={Green:0,Yellow:0,Red:0,Grey:0},n=new URL(window.location.toString()),a=n.port,c=ol(n.protocol),i=new cl.w3cwebsocket("".concat(c,"://").concat(n.hostname,":").concat(a,"/ws/heal/").concat(u,"?prefix=").concat(C,"&recursive=").concat(N,"&force-start=").concat(A,"&force-stop=").concat(D));if(null!==i)return i.onopen=function(){console.log("WebSocket Client Connected"),i.send("ok")},i.onmessage=function(n){for(var a=JSON.parse(n.data.toString()),c=0,i=Object.entries(a.healthAfterCols);c0?Object(a.jsx)(l.a,{to:S[0].path}):null]})})})]})]}):null})}))),Bl=function(e){var t=e.location;return Object(c.useEffect)((function(){var e=(t.search.match(/code=([^&]+)/)||[])[1],n=(t.search.match(/state=([^&]+)/)||[])[1];me.invoke("POST","/api/v1/login/oauth2/auth",{code:e,state:n}).then((function(e){e&&e.sessionId&&($.a.setItem("token",e.sessionId),window.location.href="/")})).catch((function(e){window.location.href="/login"}))}),[]),null},Fl=n(342),Rl="SESSION_RESPONSE";var Pl=Object(s.b)((function(e){return{loggedIn:e.system.loggedIn}}),{userLoggedIn:P,consoleOperatorMode:function(e){return{type:E,operatorMode:e}},saveSessionResponse:function(e){return{type:Rl,message:e}}})((function(e){var t=e.Component,n=e.loggedIn,i=e.userLoggedIn,r=e.consoleOperatorMode,o=e.saveSessionResponse,s=Object(c.useState)(!0),d=Object(b.a)(s,2),u=d[0],j=d[1];return Object(c.useEffect)((function(){me.invoke("GET","/api/v1/session").then((function(e){o(e),i(!0),j(!1),e.operator&&(r(!0),document.title="MinIO Operator")})).catch((function(){return j(!1)}))}),[o,r,i]),u?null:n?Object(a.jsx)(t,{}):Object(a.jsx)(l.a,{to:{pathname:"/login"}})})),zl=Object(Fl.hot)((function(){return Object(a.jsx)(l.c,{history:u,children:Object(a.jsxs)(l.d,{children:[Object(a.jsx)(l.b,{exact:!0,path:"/oauth_callback",component:Bl}),Object(a.jsx)(l.b,{exact:!0,path:"/login",component:Oe}),Object(a.jsx)(Pl,{Component:Dl})]})})})),Kl=n(126),Ul=n(343),Wl={loggedIn:!1,operatorMode:!1,session:"",userName:"",sidebarOpen:!0,serverNeedsRestart:!1,serverIsLoading:!1,loadingProgress:100,snackBar:{message:"",type:"message"},modalSnackBar:{message:"",type:"message"},serverDiagnosticStatus:""};var ql={messages:[]};var Vl={messages:[]};var Gl={message:{}};var Hl={messages:[]};var Yl={session:{operator:!1,status:"",pages:[]}};var Ql={open:!1,addBucketName:"",addBucketVersioningEnabled:!1,addBucketLockingEnabled:!1,addBucketQuotaEnabled:!1,addBucketQuotaType:"hard",addBucketQuotaSize:"1",addBucketQuotaUnit:"TiB",addBucketRetentionEnabled:!1,addBucketRetentionMode:"compliance",addBucketRetentionUnit:"days",addBucketRetentionValidity:1};var Zl=[{route:"/object-browser",label:"All Buckets",type:"path"}],Jl={routesList:Zl,downloadingFiles:[]};var $l=n(344),Xl=n.n($l),ed={createTenant:{page:0,validPages:[],advancedModeOn:!1,storageClasses:[],limitSize:{},fields:{nameTenant:{tenantName:"",namespace:"",selectedStorageClass:""},configure:{customImage:!1,imageName:"",consoleImage:"",customDockerhub:!1,imageRegistry:"",imageRegistryUsername:"",imageRegistryPassword:"",exposeMinIO:!0,exposeConsole:!0},identityProvider:{idpSelection:"Built-in",openIDURL:"",openIDClientID:"",openIDSecretID:"",ADURL:"",ADSkipTLS:!1,ADServerInsecure:!1,ADUserNameFilter:"",ADGroupBaseDN:"",ADGroupSearchFilter:"",ADNameAttribute:""},security:{enableAutoCert:!0,enableCustomCerts:!1,enableTLS:!0},encryption:{enableEncryption:!1,encryptionType:"vault",gemaltoEndpoint:"",gemaltoToken:"",gemaltoDomain:"",gemaltoRetry:"0",awsEndpoint:"",awsRegion:"",awsKMSKey:"",awsAccessKey:"",awsSecretKey:"",awsToken:"",vaultEndpoint:"",vaultEngine:"",vaultNamespace:"",vaultPrefix:"",vaultAppRoleEngine:"",vaultId:"",vaultSecret:"",vaultRetry:"0",vaultPing:"0",gcpProjectID:"",gcpEndpoint:"",gcpClientEmail:"",gcpClientID:"",gcpPrivateKeyID:"",gcpPrivateKey:"",enableCustomCertsForKES:!1},tenantSize:{volumeSize:"100",sizeFactor:"Gi",drivesPerServer:"1",nodes:"4",memoryNode:"2",ecParity:"",ecParityChoices:[],cleanECChoices:[],maxAllocableMemo:0,memorySize:{error:"",limit:0,request:0},distribution:{error:"",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0},ecParityCalc:{error:0,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]},limitSize:{}}},certificates:{minioCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],caCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],consoleCertificate:{id:"console_cert_pair",key:"",cert:"",encoded_key:"",encoded_cert:""},serverCertificate:{id:"encryptionServerCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},clientCertificate:{id:"encryptionClientCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCertificate:{id:"encryptionVaultCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCA:{id:"encryptionVaultCA",key:"",cert:"",encoded_key:"",encoded_cert:""},gemaltoCA:{id:"encryptionGemaltoCA",key:"",cert:"",encoded_key:"",encoded_cert:""}}}};var td=Object(Kl.c)({system:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Wl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case T:return Object(j.a)(Object(j.a)({},e),{},{loggedIn:t.logged});case E:return Object(j.a)(Object(j.a)({},e),{},{operatorMode:t.operatorMode});case _:return Object(j.a)(Object(j.a)({},e),{},{sidebarOpen:t.open});case A:return Object(j.a)(Object(j.a)({},e),{},{serverNeedsRestart:t.needsRestart});case I:return Object(j.a)(Object(j.a)({},e),{},{serverIsLoading:t.isLoading});case M:return Object(j.a)(Object(j.a)({},e),{},{loadingProgress:t.loadingProgress});case L:return Object(j.a)(Object(j.a)({},e),{},{snackBar:{message:t.message,type:"message"}});case B:return Object(j.a)(Object(j.a)({},e),{},{snackBar:{message:t.message,type:"error"}});case F:return Object(j.a)(Object(j.a)({},e),{},{modalSnackBar:{message:t.message,type:"message"}});case R:return Object(j.a)(Object(j.a)({},e),{},{modalSnackBar:{message:t.message,type:"error"}});case D:return Object(j.a)(Object(j.a)({},e),{},{serverDiagnosticStatus:t.serverDiagnosticStatus});default:return e}},trace:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ql,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case il:return Object(j.a)(Object(j.a)({},e),{},{messages:[].concat(Object(Nt.a)(e.messages),[t.message])});case rl:return Object(j.a)(Object(j.a)({},e),{},{messages:[]});default:return e}},logs:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Vl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ul:return Object(j.a)(Object(j.a)({},e),{},{messages:[].concat(Object(Nt.a)(e.messages),[t.message])});case bl:return Object(j.a)(Object(j.a)({},e),{},{messages:[]});default:return e}},watch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Hl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Sl:return Object(j.a)(Object(j.a)({},e),{},{messages:[].concat(Object(Nt.a)(e.messages),[t.message])});case kl:return Object(j.a)(Object(j.a)({},e),{},{messages:[]});default:return e}},console:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Yl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Rl:return Object(j.a)(Object(j.a)({},e),{},{session:t.message});default:return e}},buckets:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ql,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case mt:return Object(j.a)(Object(j.a)({},e),{},{open:t.open});case pt:return Object(j.a)(Object(j.a)({},e),{},{addBucketName:t.name});case ht:return Object(j.a)(Object(j.a)({},e),{},{addBucketVersioningEnabled:t.versioned});case Ot:return Object(j.a)(Object(j.a)({},e),{},{addBucketLockingEnabled:t.locking});case gt:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaEnabled:t.quota});case ft:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaType:t.quotaType});case xt:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaSize:t.quotaSize});case vt:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaUnit:t.quotaUnit});case Ct:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionEnabled:t.retention});case St:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionMode:t.retentionMode});case kt:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionUnit:t.retentionUnit});case wt:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionValidity:t.retentionValidity});case yt:return Object(j.a)(Object(j.a)({},e),{},{addBucketName:"",addBucketVersioningEnabled:!1,addBucketLockingEnabled:!1,addBucketQuotaEnabled:!1,addBucketQuotaType:"hard",addBucketQuotaSize:"1",addBucketQuotaUnit:"TiB",addBucketRetentionEnabled:!1,addBucketRetentionMode:"compliance",addBucketRetentionUnit:"days",addBucketRetentionValidity:1});default:return e}},objectBrowser:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Jl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Mo:var n=[].concat(Object(Nt.a)(e.routesList),[{route:t.route,label:t.label,type:t.routeType}]);return u.push(t.route),Object(j.a)(Object(j.a)({},e),{},{routesList:n});case Lo:return Object(j.a)(Object(j.a)({},e),{},{routesList:[].concat(Zl)});case Do:var a=e.routesList.findIndex((function(e){return e.route===t.toRoute}))+1,c=e.routesList.slice(0,a);return Object(j.a)(Object(j.a)({},e),{},{routesList:c});case Bo:var i=t.currentRoute.split("/"),r=[],o=Zl[0].route;i.forEach((function(e){""!==e&&"object-browser"!==e&&(o="".concat(o,"/").concat(e),r.push({route:o,label:e,type:"path"}))}));var s=[].concat(Zl,r);return Object(j.a)(Object(j.a)({},e),{},{routesList:s});case Fo:var l=Object(Nt.a)(e.routesList),d=e.routesList[e.routesList.length-1].route,b=t.newRoute.split("/");return b.forEach((function(e){var t=e.trim();if(""!==t){var n={route:d="".concat(d,"/").concat(t),label:t,type:"path"};l.push(n)}})),u.push(d),Object(j.a)(Object(j.a)({},e),{},{routesList:l});case Ro:var m=e.routesList,p=m.slice(-1)[0];"path"===p.type&&(p.type="file");var h=[].concat(Object(Nt.a)(m.slice(0,-1)),[p]);return Object(j.a)(Object(j.a)({},e),{},{routesList:h});case Po:var O=Object(Nt.a)(e.downloadingFiles);return O.push(t.path),Object(j.a)(Object(j.a)({},e),{},{downloadingFiles:Object(Nt.a)(O)});case zo:var g=e.downloadingFiles.filter((function(e){return e!==t.path}));return Object(j.a)(Object(j.a)({},e),{},{downloadingFiles:Object(Nt.a)(g)});default:return e}},healthInfo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Gl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Tl:return Object(j.a)(Object(j.a)({},e),{},{message:t.message});case El:return Object(j.a)(Object(j.a)({},e),{},{message:{}});default:return e}},tenants:function(){var e,t,n,a,c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ed,i=arguments.length>1?arguments[1]:void 0,r=Object(j.a)({},c);switch(i.type){case Tr:return r.createTenant.page=i.page,Object(j.a)({},r);case Er:return r.createTenant.advancedModeOn=i.state,Object(j.a)({},r);case _r:if(Xl()(r.createTenant.fields,"".concat(i.pageName,".").concat(i.field))){var o=Z()(r.createTenant.fields,"".concat(i.pageName),{}),s={};s[i.field]=i.value;var l=Object(j.a)(Object(j.a)({},o),s);return r.createTenant.fields[i.pageName]=Object(j.a)({},l),Object(j.a)({},r)}return c;case Ar:var d=c.createTenant.validPages;if(i.valid)d.includes(i.pageName)||(d.push(i.pageName),r.createTenant.validPages=Object(Nt.a)(d));else{var u=d.filter((function(e){return e!==i.pageName}));r.createTenant.validPages=Object(Nt.a)(u)}return Object(j.a)({},r);case Mr:var b=Object(j.a)(Object(j.a)({},c),{},{createTenant:Object(j.a)(Object(j.a)({},c.createTenant),{},{storageClasses:i.storageClasses})});return Object(j.a)({},b);case Lr:var m=[].concat(Object(Nt.a)(c.createTenant.certificates.minioCertificates),[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]);return r.createTenant.certificates.minioCertificates=Object(Nt.a)(m),Object(j.a)({},r);case Dr:var p=c.createTenant.certificates.minioCertificates,h=p.map((function(e){var t;return e.id===i.id?Object(j.a)(Object(j.a)({},e),{},(t={},Object(ge.a)(t,i.key,i.fileName),Object(ge.a)(t,"encoded_".concat(i.key),i.value),t)):e}));return r.createTenant.certificates.minioCertificates=Object(Nt.a)(h),Object(j.a)({},r);case Br:var O=c.createTenant.certificates.minioCertificates;if(O.length>1){var g=O.filter((function(e){return e.id!==i.id}));return r.createTenant.certificates.minioCertificates=Object(Nt.a)(g),Object(j.a)({},r)}return Object(j.a)({},c);case Fr:var f=[].concat(Object(Nt.a)(c.createTenant.certificates.caCertificates),[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]);return r.createTenant.certificates.caCertificates=Object(Nt.a)(f),Object(j.a)({},r);case Rr:var x=c.createTenant.certificates.caCertificates,v=x.map((function(e){var t;return e.id===i.id?Object(j.a)(Object(j.a)({},e),{},(t={},Object(ge.a)(t,i.key,i.fileName),Object(ge.a)(t,"encoded_".concat(i.key),i.value),t)):e}));return r.createTenant.certificates.caCertificates=Object(Nt.a)(v),Object(j.a)({},r);case Pr:var y=c.createTenant.certificates.minioCertificates;if(y.length>1){var C=y.filter((function(e){return e.id!==i.id}));return r.createTenant.certificates.caCertificates=Object(Nt.a)(C),Object(j.a)({},r)}return Object(j.a)({},c);case zr:var S=c.createTenant.certificates.consoleCertificate;return r.createTenant.certificates.consoleCertificate=Object(j.a)(Object(j.a)({},S),{},(e={},Object(ge.a)(e,i.key,i.fileName),Object(ge.a)(e,"encoded_".concat(i.key),i.value),e)),Object(j.a)({},r);case Kr:var k=c.createTenant.certificates.serverCertificate;return r.createTenant.certificates.serverCertificate=Object(j.a)(Object(j.a)({},k),{},(t={},Object(ge.a)(t,i.key,i.fileName),Object(ge.a)(t,"encoded_".concat(i.key),i.value),t)),Object(j.a)({},r);case Ur:var w=c.createTenant.certificates.clientCertificate;return r.createTenant.certificates.clientCertificate=Object(j.a)(Object(j.a)({},w),{},(n={},Object(ge.a)(n,i.key,i.fileName),Object(ge.a)(n,"encoded_".concat(i.key),i.value),n)),Object(j.a)({},r);case Wr:var N=c.createTenant.certificates.vaultCertificate;return r.createTenant.certificates.vaultCertificate=Object(j.a)(Object(j.a)({},N),{},(a={},Object(ge.a)(a,i.key,i.fileName),Object(ge.a)(a,"encoded_".concat(i.key),i.value),a)),Object(j.a)({},r);case qr:var T=c.createTenant.certificates.vaultCA;return r.createTenant.certificates.vaultCA=Object(j.a)(Object(j.a)({},T),{},{cert:i.fileName,encoded_cert:i.value}),Object(j.a)({},r);case Vr:var E=c.createTenant.certificates.gemaltoCA;return r.createTenant.certificates.gemaltoCA=Object(j.a)(Object(j.a)({},E),{},{cert:i.fileName,encoded_cert:i.value}),Object(j.a)({},r);case Ir:return Object(j.a)(Object(j.a)({},c),{},{createTenant:{page:0,validPages:[],advancedModeOn:!1,storageClasses:[],limitSize:{},fields:{nameTenant:{tenantName:"",namespace:"",selectedStorageClass:""},configure:{customImage:!1,imageName:"",consoleImage:"",customDockerhub:!1,imageRegistry:"",imageRegistryUsername:"",imageRegistryPassword:"",exposeMinIO:!0,exposeConsole:!0},identityProvider:{idpSelection:"Built-in",openIDURL:"",openIDClientID:"",openIDSecretID:"",ADURL:"",ADSkipTLS:!1,ADServerInsecure:!1,ADUserNameFilter:"",ADGroupBaseDN:"",ADGroupSearchFilter:"",ADNameAttribute:""},security:{enableAutoCert:!0,enableCustomCerts:!1,enableTLS:!0},encryption:{enableEncryption:!1,encryptionType:"vault",gemaltoEndpoint:"",gemaltoToken:"",gemaltoDomain:"",gemaltoRetry:"0",awsEndpoint:"",awsRegion:"",awsKMSKey:"",awsAccessKey:"",awsSecretKey:"",awsToken:"",vaultEndpoint:"",vaultEngine:"",vaultNamespace:"",vaultPrefix:"",vaultAppRoleEngine:"",vaultId:"",vaultSecret:"",vaultRetry:"0",vaultPing:"0",gcpProjectID:"",gcpEndpoint:"",gcpClientEmail:"",gcpClientID:"",gcpPrivateKeyID:"",gcpPrivateKey:"",enableCustomCertsForKES:!1},tenantSize:{volumeSize:"100",sizeFactor:"Gi",drivesPerServer:"1",nodes:"4",memoryNode:"2",ecParity:"",ecParityChoices:[],cleanECChoices:[],maxAllocableMemo:0,memorySize:{error:"",limit:0,request:0},distribution:{error:"",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0},ecParityCalc:{error:0,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]},limitSize:{}}},certificates:{minioCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],caCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],consoleCertificate:{id:"console_cert_pair",key:"",cert:"",encoded_key:"",encoded_cert:""},serverCertificate:{id:"encryptionServerCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},clientCertificate:{id:"encryptionClientCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCertificate:{id:"encryptionVaultCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCA:{id:"encryptionVaultCA",key:"",cert:"",encoded_key:"",encoded_cert:""},gemaltoCA:{id:"encryptionGemaltoCA",key:"",cert:"",encoded_key:"",encoded_cert:""}}}});default:return c}}}),nd=window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||Kl.d;Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));var ad=n(650),cd=(n(561),n(562),n(563),n(564),n(345)),id=Object(cd.a)({palette:{primary:{light:"#073052",main:"#081C42",dark:"#05122B",contrastText:"#fff"},secondary:{light:"#ff7961",main:"#f44336",dark:"#ba000d",contrastText:"#000"},error:{light:"#e03a48",main:"#dc1f2e",contrastText:"#ffffff"},grey:{100:"#f0f0f0",200:"#e6e6e6",300:"#cccccc",400:"#999999",500:"#8c8c8c",600:"#737373",700:"#666666",800:"#4d4d4d",900:"#333333"},background:{default:"#F4F4F4"}},typography:{fontFamily:["Lato","sans-serif"].join(","),h1:{fontWeight:"bold",color:"#081C42"},h2:{fontWeight:"bold",color:"#081C42"},h3:{fontWeight:"bold",color:"#081C42"},h4:{fontWeight:"bold",color:"#081C42"},h5:{fontWeight:"bold",color:"#081C42"},h6:{fontWeight:"bold",color:"#000000"}},overrides:{MuiButton:{root:{borderRadius:3,color:"white",height:40,padding:"0 20px",fontSize:14,fontWeight:600,boxShadow:"none","& .MuiSvgIcon-root":{maxHeight:18},"&.MuiButton-contained.Mui-disabled":{backgroundColor:"#EAEDEE",fontWeight:600,color:"#767676"},"& .MuiButton-iconSizeMedium > *:first-child":{fontSize:12}}}}}),rd=Object(N.a)({"@global":{".MuiButton-contained":{fontSize:"14px",textTransform:"capitalize",padding:"16px 25px 16px 25px",borderRadius:3},".MuiButton-sizeSmall":{padding:"4px 10px",fontSize:"0.8125rem"},".MuiTableCell-head":{borderRadius:"3px 3px 0px 0px",fontSize:13},".MuiPaper-root":{borderRadius:3},".MuiDrawer-paperAnchorDockedLeft":{borderRight:0},".MuiDrawer-root":{"& .MuiPaper-root":{borderRadius:0}}}})((function(){return null}));o.a.render(Object(a.jsxs)(s.a,{store:Object(Kl.e)(td,nd(Object(Kl.a)(Ul.a))),children:[Object(a.jsx)(rd,{}),Object(a.jsx)(ad.a,{theme:id,children:Object(a.jsx)(zl,{})})]}),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()}))}},[[565,1,2]]]); -//# sourceMappingURL=main.1ecd68ff.chunk.js.map \ No newline at end of file +(this["webpackJsonpportal-ui"]=this["webpackJsonpportal-ui"]||[]).push([[0],{437:function(e,t,n){},564:function(e,t,n){},565:function(e,t,n){"use strict";n.r(t);var a=n(0),c=n(1),i=n.n(c),r=n(27),o=n.n(r),s=n(10),l=n(50),d=n(70),u=Object(d.a)(),b=n(3),j=n(2),m=n(178),p=n.n(m),h=n(303),O=n.n(h),g=n(618),f=n(665),x=n(617),v=n(106),y=n(619),C=n(620),S=n(352),k=n(667),w=n(608),N=n(12),T="USER_LOGGED",E="OPERATOR_MODE",_="MENU_OPEN",A="SERVER_NEEDS_RESTART",I="SERVER_IS_LOADING",M="SET_LOADING_PROGRESS",L="SET_SNACK_BAR_MESSAGE",D="SET_SERVER_DIAG_STAT",B="SET_ERROR_SNACK_MESSAGE",F="SET_SNACK_MODAL_MESSAGE",R="SET_MODAL_ERROR_MESSAGE";function P(e){return{type:T,logged:e}}function z(e){return{type:_,open:e}}function K(e){return{type:A,needsRestart:e}}var U,W=function(e){return{type:L,message:e}},q=function(e){return{type:B,message:e}},V=function(e){return{type:F,message:e}},G=function(e){return{type:R,message:e}},H=n(298),Y=n(299),Q=n(13),Z=n.n(Q),J=n(179),$=n.n(J),X=1073741824,ee=2147483648,te=["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],ne=["Ki","Mi","Gi","Ti","Pi","Ei"],ae=["B"].concat(ne),ce=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=0,a=parseInt(e,10)||0;a>=1024&&++n;)a/=1024;var c=["B"].concat(ne);return a.toFixed(a<10&&n>0?1:0)+" "+(t?c[n]:te[n])},ie=function(){var e;$.a.removeItem("token"),e="token",document.cookie=e+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;"},re=function(e){var t=e.getHours()<10?"0".concat(e.getHours()):"".concat(e.getHours()),n=e.getMinutes()<10?"0".concat(e.getMinutes()):"".concat(e.getMinutes()),a=e.getSeconds()<10?"0".concat(e.getSeconds()):"".concat(e.getSeconds());return"".concat(t,":").concat(n,":").concat(a,":").concat(e.getMilliseconds())},oe=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=parseFloat(e),c=n?ae:te,i=c.findIndex((function(e){return e===t}));if(-1===i)return"0";var r=Math.pow(1024,i),o=a*r;return o.toString(10)},se=function(e,t,n,a){var c=parseInt(e,10);return le(t,c,274877906944,n,a)},le=function(e,t,n,a){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(a))return{error:"Some provided data is invalid, please try again.",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0};var i=0,r=0,o=0;if(0===c&&(o=(r=t/(i=Math.floor(Math.min(t/Math.max(4,e),n))))/e),c&&(r=(o=c)*e,i=Math.floor(t/r)),o%1>0){r=(o=Math.ceil(o))*e;var s=(i=Math.floor(t/r))*o*e;if(s>a)return{error:"We were not able to allocate this server.",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0}}return i1&&void 0!==arguments[1]&&arguments[1],n=new Date(1e3*parseInt(e));return t?"".concat(n.getFullYear(),"-").concat(String(n.getMonth()+1).padStart(2,"0"),"-").concat(String(n.getDay()).padStart(2,"0")," ").concat(n.getHours(),":").concat(String(n.getMinutes()).padStart(2,"0"),":").concat(String(n.getSeconds()).padStart(2,"0")):"".concat(n.getHours(),":").concat(String(n.getMinutes()).padStart(2,"0"))},be=function(e){var t=1e-9*e,n=Math.round(1e4*(t+Number.EPSILON))/1e4;return"".concat(n," s")},je=function(e){var t=(100*e.split("").reduce((function(e,t){return e+t.charCodeAt(0)+((e<<5)-e)}),0)&16777215).toString(16).toUpperCase();return"#".concat(t.padStart(6,"0"))},me=new(function(){function e(){Object(H.a)(this,e)}return Object(Y.a)(e,[{key:"invoke",value:function(e,t,n){var a=this;return p()(e,t).send(n).then((function(e){return e.body})).catch((function(e){return 401===e.status?(ie(),void(window.location.href="/login")):a.onError(e)}))}},{key:"onError",value:function(e){if(e.status){var t=Z()(e.response,"body.message",e.status.toString()),n=t.charAt(0).toUpperCase()+t.slice(1);return Promise.reject(n)}ie(),window.location.href="/login"}}]),e}());!function(e){e.unknown="unknown",e.form="form",e.redirect="redirect",e.serviceAccount="service-account"}(U||(U={}));var pe=Object(w.a)((function(e){return Object(k.a)({disabled:{"&.MuiInput-underline::before":{borderColor:"#eaeaea",borderBottomStyle:"solid"}}})}));function he(e){var t=pe();return Object(a.jsx)(f.a,Object(j.a)({InputProps:{classes:t}},e))}var Oe=Object(s.b)((function(e){return{loggedIn:e.loggedIn}}),{userLoggedIn:P})(Object(N.a)((function(e){return Object(k.a)({"@global":{body:{backgroundColor:"#FAFAFA"}},paper:{borderRadius:8,display:"flex",flexDirection:"column",alignItems:"center",width:800,height:424,margin:"auto",position:"absolute",top:"50%",left:"50%",marginLeft:-400,marginTop:-212,"&.MuiPaper-root":{borderRadius:8}},avatar:{margin:e.spacing(1),backgroundColor:e.palette.secondary.main},form:{width:"100%"},submit:{margin:"30px 0px 16px",height:40,boxShadow:"none",padding:"16px 30px"},errorBlock:{backgroundColor:"#C72C48",width:800,height:64,display:"flex",justifyContent:"center",alignItems:"center",position:"absolute",left:"50%",top:"50%",marginLeft:-400,marginTop:-290,color:"#fff",fontWeight:700,fontSize:14,borderRadius:8,padding:10,boxSizing:"border-box"},mainContainer:{position:"relative",height:424},theOcean:{borderTopLeftRadius:8,borderBottomLeftRadius:8,background:"transparent linear-gradient(to bottom, #073052 0%,#05122b 100%); 0% 0% no-repeat padding-box;"},oceanBg:{backgroundImage:"url(/images/BG_Illustration.svg)",backgroundRepeat:"no-repeat",backgroundPosition:"bottom left",height:"100%",width:324},theLogin:{padding:"40px 45px 20px 45px"},loadingLoginStrategy:{textAlign:"center"},headerTitle:{marginBottom:10},submitContainer:{textAlign:"right"},disclaimer:{fontSize:12,marginTop:30},jwtInput:{marginTop:45},linearPredef:{height:10},errorIconStyle:{marginRight:3}})}))((function(e){var t=e.classes,n=e.userLoggedIn,r=Object(c.useState)(""),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(""),j=Object(b.a)(d,2),m=j[0],h=j[1],f=Object(c.useState)(""),k=Object(b.a)(f,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)({loginStrategy:U.unknown,redirect:""}),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(!1),F=Object(b.a)(B,2),R=F[0],P=F[1],z={form:"/api/v1/login","service-account":"/api/v1/login/operator"},K={form:{accessKey:s,secretKey:w},"service-account":{jwt:m}},W=function(e){e.preventDefault(),P(!0),p.a.post(z[L.loginStrategy]||"/api/v1/login").send(K[L.loginStrategy]).then((function(e){var t=e.body;if(t.error)throw P(!1),t.error})).then((function(){n(!0),L.loginStrategy===U.form&&localStorage.setItem("userLoggedIn",btoa(s)),u.push("/")})).catch((function(e){P(!1),A(e.message)}))};Object(c.useEffect)((function(){me.invoke("GET","/api/v1/login").then((function(e){D(e),A(""),"redirect"===e.loginStrategy&&e.redirect})).catch((function(e){A(e)}))}),[]);var q=null;switch(L.loginStrategy){case U.form:q=Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h1",variant:"h6",className:t.headerTitle,children:"Console Login"}),Object(a.jsxs)("form",{className:t.form,noValidate:!0,onSubmit:W,children:[Object(a.jsxs)(x.a,{container:!0,spacing:2,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(he,{fullWidth:!0,id:"accessKey",value:s,onChange:function(e){return l(e.target.value)},label:"Enter Access Key",name:"accessKey",autoComplete:"username",disabled:R})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(he,{fullWidth:!0,value:w,onChange:function(e){return N(e.target.value)},name:"secretKey",label:"Enter Secret Key",type:"password",id:"secretKey",autoComplete:"current-password",disabled:R})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.submitContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",className:t.submit,disabled:""===w||""===s||R,children:"Login"})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.linearPredef,children:R&&Object(a.jsx)(y.a,{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.disclaimer,children:[Object(a.jsx)("strong",{children:"Don't have an access key?"}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),"Contact your administrator to have one made"]})]})]});break;case U.redirect:q=Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h1",variant:"h6",className:t.headerTitle,children:"Login"}),Object(a.jsx)(g.a,{component:"a",href:L.redirect.replace("%5BHOSTNAME%5D",window.location.hostname),type:"submit",variant:"contained",color:"primary",className:t.submit,children:"Welcome"})]});break;case U.serviceAccount:q=Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h1",variant:"h6",className:t.headerTitle,children:"Operator Login"}),Object(a.jsxs)("form",{className:t.form,noValidate:!0,onSubmit:W,children:[Object(a.jsx)(x.a,{container:!0,spacing:2,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.jwtInput,children:Object(a.jsx)(he,{required:!0,fullWidth:!0,id:"jwt",value:m,onChange:function(e){return h(e.target.value)},label:"JWT",name:"jwt",autoComplete:"off",disabled:R})})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.submitContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",className:t.submit,disabled:""===m||R,children:"Login"})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.linearPredef,children:R&&Object(a.jsx)(y.a,{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.disclaimer,children:[Object(a.jsx)("strong",{children:"Don't have an access key?"}),Object(a.jsx)("br",{}),"Contact your administrator to have one made"]})]})]});break;default:q=Object(a.jsx)(C.a,{className:t.loadingLoginStrategy})}return Object(a.jsxs)(i.a.Fragment,{children:[""!==_&&Object(a.jsxs)("div",{className:t.errorBlock,children:[Object(a.jsx)(O.a,{fontSize:"small",className:t.errorIconStyle})," ",_]}),Object(a.jsx)(S.a,{className:t.paper,children:Object(a.jsxs)(x.a,{container:!0,className:t.mainContainer,children:[Object(a.jsx)(x.a,{item:!0,xs:7,className:t.theOcean,children:Object(a.jsx)("div",{className:t.oceanBg})}),Object(a.jsx)(x.a,{item:!0,xs:5,className:t.theLogin,children:q})]})})]})}))),ge=n(36),fe=n(5),xe=n(623),ve=n(668),ye=n(622),Ce=n(660),Se={inputLabel:{fontWeight:600,marginRight:10,fontSize:15,color:"#000",textAlign:"left",overflow:"hidden","& span":{display:"flex",alignItems:"center"},display:"flex"},fieldLabelError:{paddingBottom:22},fieldContainer:{marginBottom:20,position:"relative",maxWidth:840,margin:"0px auto"},tooltipContainer:{marginLeft:5,display:"flex",alignItems:"center"}},ke={formScrollable:{maxHeight:"calc(100vh - 300px)",overflowY:"auto",marginBottom:25},formSlider:{marginLeft:0},clearButton:{fontFamily:"Lato, sans-serif",border:"0",backgroundColor:"transparent",color:"#393939",fontWeight:600,fontSize:14,marginRight:10,outline:"0",padding:"16px 25px 16px 25px",cursor:"pointer"},floatingEnabled:{position:"absolute",right:58,zIndex:1e3,marginTop:-38},configureString:{border:"#EAEAEA 1px solid",borderRadius:4,padding:"24px 50px",overflowY:"auto",height:170,maxWidth:840,margin:"0 auto"}},we={tooltip:{fontSize:16}},Ne={width:14,height:14,borderRadius:2},Te={unCheckedIcon:Object(j.a)(Object(j.a)({},Ne),{},{border:"1px solid #c3c3c3"}),checkedIcon:Object(j.a)(Object(j.a)({},Ne),{},{border:"1px solid #081C42",backgroundColor:"#081C42"})},Ee={width:12,height:12,borderRadius:"100%","input:disabled ~ &":{border:"1px solid #9C9C9C"}},_e={radioUnselectedIcon:Object(j.a)(Object(j.a)({},Ee),{},{border:"1px solid #000"}),radioSelectedIcon:Object(j.a)(Object(j.a)({},Ee),{},{border:"1px solid #000",backgroundColor:"#000"})},Ae={label:{color:"#393939",fontWeight:600,fontSize:13,alignSelf:"center",whiteSpace:"nowrap","&:not(:first-of-type)":{marginLeft:10}},timeContainers:{height:40},actionsTray:{display:"flex",justifyContent:"space-between","& button":{flexGrow:0,marginLeft:15}}},Ie={searchField:{flexGrow:1,height:40,background:"#FFFFFF",borderRadius:5,border:"#EAEDEE 1px solid",display:"flex",justifyContent:"center",padding:"0 16px","& input":{fontSize:12,fontWeight:700,color:"#000","&::placeholder":{color:"#393939",opacity:1}},"&:hover":{borderColor:"#000"}}},Me={prefinedContainer:{maxWidth:840,width:"100%",margin:"0 auto"},predefinedTitle:{fontSize:16,fontWeight:600,color:"#000",margin:"10px 0"},predefinedList:{backgroundColor:"#eaeaea",padding:"12px 10px",color:"#393939",fontSize:12,fontWeight:600,minHeight:41},innerContent:{width:"100%",overflowX:"auto",whiteSpace:"nowrap",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},innerContentMultiline:{width:"100%",maxHeight:100,overflowY:"auto",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}},Le={obTitleSection:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:20},sectionTitle:{fontSize:22,color:"#000",fontWeight:600,height:40,lineHeight:"40px"},breadcrumbs:{fontSize:10,color:"#000",marginTop:2,"& a":{textDecoration:"none",color:"#000","&:hover":{textDecoration:"underline"}}}},De={multiSelectTable:{height:200}},Be={customTitle:{fontSize:18,color:"#000",fontWeight:600,padding:"12px 0",borderBottom:"#eaedee 1px solid",marginBottom:10,margin:"15px 38px 27px"},settingsFormContainer:{height:"calc(100vh - 421px)",padding:"15px 38px",overflowY:"auto",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}},settingsButtonContainer:{borderTop:"1px solid #EAEAEA",padding:"15px 38px",textAlign:"right"},settingsOptionsContainer:{height:"calc(100vh - 244px)",backgroundColor:"#fff",border:"#EAEDEE 1px solid",borderRadius:3,marginTop:15},backButton:{cursor:"pointer",fontSize:10,fontWeight:600,color:"#000",backgroundColor:"transparent",border:0,padding:0,display:"flex",alignItems:"center","&:active, &:focus":{outline:0},"& svg":{width:10,marginRight:4}},backContainer:{margin:"20px 38px 0"}},Fe={logsSubContainer:{height:"calc(100vh - 230px)",padding:"15px 0"}},Re={singleValueContainer:{position:"relative",flexGrow:1,width:"100%",height:"100%",border:"#EAEAEA 1px solid",borderRadius:5,backgroundColor:"#fff"},titleContainer:{color:"#393939",fontWeight:600,height:15,textAlign:"center",fontSize:10},contentContainer:{flexGrow:2,justifyContent:"center",alignItems:"center",display:"flex",position:"absolute",width:"100%",height:"calc(100% - 15px)"},contentContainerWithLabel:{height:"calc(100% - 25px)"},legendBlock:{position:"absolute",bottom:5,display:"flex",width:"100%",height:15,flexWrap:"wrap",overflowY:"auto"},singleLegendContainer:{display:"flex",alignItems:"center",padding:"0 10px",maxWidth:"100%"},colorContainer:{width:8,height:8,minWidth:8,borderRadius:"100%",marginRight:5},legendLabel:{fontSize:"80%",color:"#393939",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},Pe={customTooltip:{backgroundColor:"rgba(255, 255, 255, 0.90)",border:"#eaeaea 1px solid",borderRadius:3,padding:"5px 10px",maxHeight:300,overflowY:"auto"},labelContainer:{display:"flex",alignItems:"center"},labelColor:{width:6,height:6,display:"block",borderRadius:"100%",marginRight:5},itemValue:{fontSize:"75%",color:"#393939"},valueContainer:{fontWeight:600},timeStampTitle:{fontSize:"80%",color:"#9c9c9c",textAlign:"center",marginBottom:6}},ze={snackBar:{backgroundColor:"#081F44",fontWeight:400,fontFamily:"Lato, sans-serif",fontSize:14,padding:"0px 20px 0px 20px;",boxShadow:"none","&.MuiPaper-root.MuiSnackbarContent-root":{borderRadius:"0px 0px 5px 5px"},"& div":{textAlign:"center",padding:"6px 30px",width:"100%",overflowX:"hidden",textOverflow:"ellipsis"}},errorSnackBar:{backgroundColor:"#C72C48",color:"#fff"},snackBarExternal:{top:"-17px",position:"absolute",minWidth:"348px",whiteSpace:"nowrap",height:"33px"},snackDiv:{top:"17px",left:"50%",position:"absolute"},snackBarModal:{top:0,position:"absolute",minWidth:"348px",whiteSpace:"nowrap",height:"33px",maxWidth:"calc(100% - 140px)"}},Ke={multiContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start"},sizeFactorContainer:{marginLeft:8,alignSelf:"flex-start"},headerElement:{position:"sticky",top:0,paddingTop:5,marginBottom:10,zIndex:500,backgroundColor:"#fff"},tableTitle:{fontWeight:700,width:"30%"},poolError:{color:"#dc1f2e",fontSize:"0.75rem",paddingLeft:120},error:{color:"#dc1f2e",fontSize:"0.75rem"},h3Section:{marginTop:0},descriptionText:{fontSize:13,color:"#777777"},container:{padding:"77px 0 0 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}},Ue=n(652),We=n(621);function qe(){return Object(a.jsxs)(v.a,{variant:"body2",color:"textSecondary",align:"center",children:["Copyright \xa9 ",Object(a.jsx)(We.a,{color:"inherit",href:"https://material-ui.com/",children:"MinIO"})," ",(new Date).getFullYear(),"."]})}var Ve=Object(w.a)((function(e){return{"@global":{body:{backgroundColor:e.palette.common.white}},paper:{marginTop:e.spacing(8),display:"flex",flexDirection:"column",alignItems:"center"}}})),Ge=function(){var e=Ve();return Object(a.jsxs)(ye.a,{component:"main",children:[Object(a.jsx)(xe.a,{}),Object(a.jsx)("div",{className:e.paper,children:Object(a.jsx)(v.a,{variant:"h1",component:"h1",children:"404 Not Found"})}),Object(a.jsx)(Ue.a,{mt:5,children:Object(a.jsx)(qe,{})})]})},He=n(632),Ye=n(41),Qe=n.n(Ye),Ze=n(88),Je=n.n(Ze),$e=n(351),Xe=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 16 16",children:[Object(a.jsx)("title",{children:"ic_h_copy-new_sl"}),Object(a.jsx)("g",{id:"Layer_2","data-name":"Layer 2",children:Object(a.jsx)("g",{id:"Layer_1-2","data-name":"Layer 1",children:Object(a.jsx)("path",{className:"cls-1",d:"M0,0V16H16V0ZM11.886,9.048H9.048v2.838h-2.1V9.048H4.114v-2.1H6.952V4.114h2.1V6.952h2.838Z"})})})]})})},et=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12 12",children:Object(a.jsxs)("g",{id:"Group_55","data-name":"Group 55",transform:"translate(1002 -2555)",children:[Object(a.jsx)("rect",{id:"Rectangle_29",width:"2",height:"12",transform:"translate(-997 2555)",fill:"#fff"}),Object(a.jsx)("rect",{id:"Rectangle_30",width:"2",height:"12",transform:"translate(-990 2560) rotate(90)",fill:"#fff"})]})})})},tt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10.402 13",children:Object(a.jsx)("path",{d:"M6.761 1V0H3.64v1H.004v1h10.4V1zM.004 2.998l1.672 10h7.052l1.673-10zm3.412 8.243l-.552-6.478h.653l.553 6.472zm3.569 0h-.653l.551-6.472h.654z",className:"a"})})})},nt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(249 720)",children:[Object(a.jsx)("rect",{width:"6",height:"5",transform:"translate(-244 -720) rotate(90)"}),Object(a.jsx)("rect",{width:"4",height:"4",transform:"translate(-243 -720)"}),Object(a.jsx)("rect",{width:"5",height:"4",transform:"translate(-239 -715) rotate(90)"}),Object(a.jsx)("rect",{width:"5",height:"3",transform:"translate(-244 -710) rotate(180)"})]})})})},at=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsx)("path",{d:"M8.392,10H1.608L0,0H10Z"})})})},ct=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 6.131 10",children:Object(a.jsx)("g",{transform:"translate(193 719.787)",children:Object(a.jsxs)("g",{transform:"translate(-193 -719.787)",children:[Object(a.jsx)("path",{d:"M3,0h.131a3,3,0,0,1,3,3V5a0,0,0,0,1,0,0H0A0,0,0,0,1,0,5V3A3,3,0,0,1,3,0Z",transform:"translate(0 5)"}),Object(a.jsx)("ellipse",{cx:"2.065",cy:"2",rx:"2.065",ry:"2",transform:"translate(1 0)"})]})})})})},it=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9.5",children:Object(a.jsxs)("g",{transform:"translate(231 719.516)",children:[Object(a.jsx)("path",{d:"M-125.5,7.984a4.5,4.5,0,0,1,4.5-4.5,4.5,4.5,0,0,1,4.5,4.5Z",transform:"translate(-105 -720)"}),Object(a.jsx)("rect",{width:"10",height:"1",transform:"translate(-231 -711.016)"}),Object(a.jsx)("path",{d:"M-119.5.484h-3v1h1v1h1v-1h1Z",transform:"translate(-105 -720)"})]})})})},rt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9.787",children:Object(a.jsx)("g",{transform:"translate(177 719.787)",children:Object(a.jsxs)("g",{transform:"translate(-105 -720)",children:[Object(a.jsx)("path",{d:"M-65,5a3,3,0,0,0-1.131.224A3.981,3.981,0,0,1-65,8v2h3V8A3,3,0,0,0-65,5Z"}),Object(a.jsx)("path",{d:"M-72,10h6V8a3,3,0,0,0-3-3,3,3,0,0,0-3,3Z"}),Object(a.jsx)("path",{className:"a",d:"M-65,.213a1.993,1.993,0,0,0-1.384.561A2.967,2.967,0,0,1-66,2.213a2.964,2.964,0,0,1-.384,1.439A1.989,1.989,0,0,0-65,4.213a2,2,0,0,0,2-2A2,2,0,0,0-65,.213Z"}),Object(a.jsx)("circle",{cx:"2",cy:"2",r:"2",transform:"translate(-71 0.213)"})]})})})})},ot=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 8.75 10",children:Object(a.jsx)("path",{d:"M-44.625,10l-4.353-2.419L-53.375,10V0h8.75Z",transform:"translate(53.375)"})})})},st=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 9.998 10",children:Object(a.jsx)("g",{transform:"translate(140.999 720)",children:Object(a.jsxs)("g",{transform:"translate(-105 -720)",children:[Object(a.jsx)("rect",{width:"1.114",height:"1.667",transform:"translate(-27.116 8.333)"}),Object(a.jsx)("path",{d:"M-28.184,10H-29.3V8.154l2.182-3.037V3.147H-26V5.476l-2.182,3.037Z"}),Object(a.jsx)("rect",{width:"1.114",height:"2.963",transform:"translate(-31.531)"}),Object(a.jsx)("rect",{width:"1.114",height:"2.132",transform:"translate(-27.115 0)"}),Object(a.jsx)("rect",{width:"1.114",height:"5.389",transform:"translate(-29.298)"}),Object(a.jsx)("path",{d:"M-30.417,10h-1.114V5.722l-2.233-3V0h1.114V2.353l2.233,3Z"}),Object(a.jsx)("path",{d:"M-32.65,10h-1.114V6.185l-2.234-3V0h1.114V2.815l2.234,3Z"}),Object(a.jsx)("rect",{width:"1.114",height:"4.463",transform:"translate(-35.999 5.537)"})]})})})})},lt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:[Object(a.jsx)("rect",{width:"1.433",height:"1"}),Object(a.jsx)("rect",{width:"7.828",height:"1",transform:"translate(2.172)"}),Object(a.jsx)("rect",{width:"1.433",height:"1",transform:"translate(0 6)"}),Object(a.jsx)("rect",{width:"1.433",height:"1",transform:"translate(0 3)"}),Object(a.jsx)("rect",{width:"1.433",height:"1",transform:"translate(0 9)"}),Object(a.jsx)("rect",{width:"1.368",height:"0.569",transform:"translate(6.316 9)"}),Object(a.jsx)("path",{d:"M5.566,9.569v-.31l-.238-.138-.269.155-.65.375L4.034,9V9H2.172v1H5.566Z"}),Object(a.jsx)("path",{d:"M9.966,9l-.375.65-.65-.375-.269-.155-.238.138V10H10V9H9.967Z"}),Object(a.jsx)("path",{d:"M3.625,6.793l.269-.155V6.362l-.269-.155L3.266,6H2.172V7H3.266Z"}),Object(a.jsx)("path",{d:"M8.434,3.431v.31l.238.138.269-.155.649-.375L9.966,4V4H10V3H8.434Z"}),Object(a.jsx)("path",{d:"M4.034,4l.375-.65.65.375.269.155.238-.138V3H2.172V4H4.033Z"}),Object(a.jsx)("path",{d:"M9.356,5.929,10,5.558,9.316,4.373l-.644.372-.988-.571V3.431H6.316v.743l-.988.571-.644-.372L4,5.558l.644.371V7.071L4,7.442l.684,1.185.644-.372.988.571v.743H7.684V8.826l.988-.571.644.372L10,7.442l-.644-.371ZM7,7.278A.778.778,0,1,1,7.778,6.5.779.779,0,0,1,7,7.278Z"})]})})},dt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 9",children:Object(a.jsxs)("g",{transform:"translate(79 438.479)",children:[Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("rect",{x:"-77.9",y:"-434.5",width:"7.8",height:"1"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("rect",{x:"-77.9",y:"-434.5",transform:"matrix(0.4999 -0.8661 0.8661 0.4999 338.8698 -281.1237)",width:"7.8",height:"1"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("rect",{x:"-74.5",y:"-437.9",transform:"matrix(0.866 -0.5001 0.5001 0.866 207.1129 -95.1668)",width:"1",height:"7.8"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-71.8-430.1h-4.5l-2.2-3.9l2.2-3.9h4.5l2.2,3.9L-71.8-430.1z M-75.7-431.1h3.3l1.7-2.9l-1.7-2.9h-3.3 l-1.7,2.9L-75.7-431.1z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-72.3-434c0,0.9-0.7,1.7-1.7,1.7c-0.9,0-1.7-0.7-1.7-1.7c0-0.9,0.7-1.7,1.7-1.7 C-73.1-435.7-72.3-434.9-72.3-434z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-76.8-434c0,0.6-0.5,1.1-1.1,1.1c0,0,0,0,0,0c-0.6,0-1.1-0.5-1.1-1.1c0,0,0,0,0,0c0-0.6,0.5-1.1,1.1-1.1 c0,0,0,0,0,0C-77.3-435.1-76.8-434.6-76.8-434C-76.8-434-76.8-434-76.8-434z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-69-434c0,0.6-0.5,1.1-1.1,1.1c0,0,0,0,0,0c-0.6,0-1.1-0.5-1.1-1.1c0,0,0,0,0,0c0-0.6,0.5-1.1,1.1-1.1 c0,0,0,0,0,0C-69.5-435.1-69-434.6-69-434C-69-434-69-434-69-434z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-75.4-431.6c0.5,0.3,0.7,1,0.4,1.5c-0.3,0.5-1,0.7-1.5,0.4c0,0,0,0,0,0c-0.5-0.3-0.7-1-0.4-1.5 C-76.6-431.7-75.9-431.9-75.4-431.6C-75.4-431.6-75.4-431.6-75.4-431.6z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-71.5-438.3c0.5,0.3,0.7,1,0.4,1.5c-0.3,0.5-1,0.7-1.5,0.4c0,0,0,0,0,0c-0.5-0.3-0.7-1-0.4-1.5 C-72.7-438.5-72-438.6-71.5-438.3C-71.5-438.3-71.5-438.3-71.5-438.3z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-72.6-431.6c0.5-0.3,1.2-0.1,1.5,0.4c0,0,0,0,0,0c0.3,0.5,0.1,1.2-0.4,1.5c-0.5,0.3-1.2,0.1-1.5-0.4 c0,0,0,0,0,0C-73.3-430.6-73.1-431.3-72.6-431.6z"})})}),Object(a.jsx)("g",{children:Object(a.jsx)("g",{children:Object(a.jsx)("path",{d:"M-76.5-438.3c0.5-0.3,1.2-0.1,1.5,0.4c0,0,0,0,0,0c0.3,0.5,0.1,1.2-0.4,1.5c-0.5,0.3-1.2,0.1-1.5-0.4 c0,0,0,0,0,0C-77.2-437.3-77-438-76.5-438.3z"})})})]})})})},ut=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(61 439)",children:[Object(a.jsx)("rect",{width:"1.5",height:"10",transform:"translate(-56.75 -439)"}),Object(a.jsx)("path",{d:"M6.5,10V0h.572L10,10Z",transform:"translate(-61 -439)"}),Object(a.jsx)("path",{d:"M3.5,10V0H2.928L0,10Z",transform:"translate(-61 -439)"})]})})})},bt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(43 439)",children:[Object(a.jsx)("path",{d:"M27.5,10",transform:"translate(-61 -439)"}),Object(a.jsx)("rect",{width:"1.5",height:"2",transform:"translate(-43 -431)"}),Object(a.jsx)("rect",{width:"1.5",height:"6",transform:"translate(-38.75 -435)"}),Object(a.jsx)("rect",{width:"1.5",height:"8",transform:"translate(-36.625 -437)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-40.875 -433)"}),Object(a.jsx)("rect",{width:"1.5",height:"10",transform:"translate(-34.5 -439)"}),Object(a.jsx)("path",{d:"M18.5,10",transform:"translate(-61 -439)"})]})})})},jt=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsx)("g",{transform:"translate(213 720)",children:Object(a.jsxs)("g",{transform:"translate(-105 -720)",children:[Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-108)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-108 6)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-99.5 6)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-99.5)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-98) rotate(90)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-104) rotate(90)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-104 8.5) rotate(90)"}),Object(a.jsx)("rect",{width:"1.5",height:"4",transform:"translate(-98 8.5) rotate(90)"}),Object(a.jsx)("circle",{cx:"2",cy:"2",r:"2",transform:"translate(-105 3)"})]})})})})},mt="ADD_BUCKET_OPEN",pt="ADD_BUCKET_NAME",ht="ADD_BUCKET_VERSIONED",Ot="ADD_BUCKET_LOCKING",gt="ADD_BUCKET_QUOTA",ft="ADD_BUCKET_QUOTA_TYPE",xt="ADD_BUCKET_QUOTA_SIZE",vt="ADD_BUCKET_QUOTA_UNIT",yt="ADD_BUCKET_RESET",Ct="ADD_BUCKET_RETENTION",St="ADD_BUCKET_RETENTION_MODE",kt="ADD_BUCKET_RETENTION_UNIT",wt="ADD_BUCKET_RETENTION_VALIDITY";var Nt=n(25),Tt=n(63),Et=n.n(Tt),_t=n(568),At=n(614),It=n(658),Mt=n(85),Lt=n(308),Dt=n.n(Lt),Bt=n(187),Ft=n.n(Bt),Rt=n(307),Pt=n.n(Rt),zt="#081C42",Kt="#081C42",Ut=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 11.856",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M-54,8l1.764,2.614A7.52,7.52,0,0,0-46,13.928h0a7.52,7.52,0,0,0,6.234-3.314L-38,8l-1.764-2.614A7.52,7.52,0,0,0-46,2.072h0a7.52,7.52,0,0,0-6.234,3.314Zm10.286,0A2.285,2.285,0,0,1-46,10.286,2.285,2.285,0,0,1-48.286,8,2.285,2.285,0,0,1-46,5.714,2.285,2.285,0,0,1-43.714,8Zm1.3,0A3.59,3.59,0,0,1-46,11.59,3.59,3.59,0,0,1-49.59,8,3.59,3.59,0,0,1-46,4.41,3.59,3.59,0,0,1-42.41,8Z",transform:"translate(54 -2.072)"})})},Wt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 13.833 13.833",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M2.934,16H0V13.066L10.607,2.459a1,1,0,0,1,1.414,0l1.52,1.52a1,1,0,0,1,0,1.414Z",transform:"translate(0 -2.167)"})})},qt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 13 13",children:[Object(a.jsx)("path",{fill:n?Kt:zt,d:"M11.05 8.617v2.429h-9.1v-9.1h2.429v-1.95H0v13h13V8.617z",className:"a"}),Object(a.jsx)("path",{fill:n?Kt:zt,d:"M3.854 9.256h1.95a4.945 4.945 0 013.6-4.74v1.3l.6-.487 2.474-2.012L9.4.817v1.7a6.9 6.9 0 00-5.546 6.739z",className:"a"})]})},Vt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 10.402 13",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M6.761 1V0H3.64v1H.004v1h10.4V1zM.004 2.998l1.672 10h7.052l1.673-10zm3.412 8.243l-.552-6.478h.653l.553 6.472zm3.569 0h-.653l.551-6.472h.654z"})})},Gt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 10 11.429",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M-43.375,11.429-48.35,8.664l-5.025,2.764V0h10Z",transform:"translate(53.375)"})})},Ht=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96z"})})},Yt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",children:Object(a.jsx)("path",{fill:n?Kt:zt,d:"M21 3H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3v-3h18v3z"})})},Qt=function(e){var t=e.active,n=void 0!==t&&t;return Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 13 12.996",children:[Object(a.jsx)("path",{fill:n?Kt:zt,d:"M11.05 9.096v1.95h-9.1v-1.95H0v3.9h13v-3.9z"}),Object(a.jsx)("path",{fill:n?Kt:zt,d:"M6.5 9.75L9 6.672H7.475V0h-1.95v6.672H4z"})]})},Zt=n(37),Jt=function(e,t){switch(e){case"view":return Object(a.jsx)(Ut,{active:t});case"edit":return Object(a.jsx)(Wt,{active:t});case"delete":return Object(a.jsx)(Vt,{active:t});case"description":return Object(a.jsx)(Gt,{active:t});case"share":return Object(a.jsx)(qt,{active:t});case"cloud":return Object(a.jsx)(Ht,{active:t});case"console":return Object(a.jsx)(Yt,{active:t});case"download":return Object(a.jsx)(Qt,{active:t})}return null},$t=Object(N.a)((function(){return Object(k.a)({spacing:{margin:"0 8px"}})}))((function(e){var t=e.type,n=e.onClick,c=e.valueToSend,i=e.idField,r=e.selected,o=e.to,s=e.sendOnlyId,l=void 0!==s&&s,d=e.classes,u=l?c[i]:c,b=Object(a.jsx)(_t.a,{"aria-label":t,size:"small",onClick:n?function(e){e.stopPropagation(),n(u)}:function(){return null},className:d.spacing,children:Jt(t,r)});return n?b:Et()(o)?Object(a.jsx)(Zt.a,{to:"".concat(o,"/").concat(u),onClick:function(e){e.stopPropagation()},children:b}):null})),Xt=n(661),en=n(666),tn=function(e){return Object(a.jsxs)($e.a,Object(j.a)(Object(j.a)({},e),{},{viewBox:"0 0 12 12",children:[Object(a.jsx)("path",{d:"M357.14,346a5,5,0,1,1-5,5,5,5,0,0,1,5-5m0-1a6,6,0,1,0,6,6,6,6,0,0,0-6-6Z",transform:"translate(-351.14 -345.03)"}),Object(a.jsx)("path",{d:"M356.21,352.42v-1.86h.52c1.23,0,1.92-.45,1.92-1.29s-.68-1.18-1.89-1.18a8.07,8.07,0,0,0-.93.06l-.1-1.25a9.13,9.13,0,0,1,1.08-.08c2,0,3.19.94,3.19,2.4s-.93,2.24-2.64,2.46l-.05.74Zm1.56,1.8a1,1,0,1,1-1-1A1,1,0,0,1,357.77,354.22Z",transform:"translate(-351.14 -345.03)"})]}))},nn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),Te),{},{fieldContainer:Object(j.a)(Object(j.a)({},Se.fieldContainer),{},{display:"flex",justifyContent:"flex-start",alignItems:"center",margin:"15px 0",marginBottom:0,flexBasis:"initial"})}))}))((function(e){var t=e.label,n=e.onChange,c=e.value,r=e.id,o=e.name,s=e.checked,l=void 0!==s&&s,d=e.disabled,u=void 0!==d&&d,b=e.tooltip,j=void 0===b?"":b,m=e.classes;return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:m.fieldContainer,children:[Object(a.jsx)("div",{children:Object(a.jsx)(It.a,{name:o,id:r,value:c,color:"primary",inputProps:{"aria-label":"secondary checkbox"},checked:l,onChange:n,checkedIcon:Object(a.jsx)("span",{className:m.checkedIcon}),icon:Object(a.jsx)("span",{className:m.unCheckedIcon}),disabled:u})}),""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:r,className:m.inputLabel,children:[Object(a.jsx)("span",{children:t}),""!==j&&Object(a.jsx)("div",{className:m.tooltipContainer,children:Object(a.jsx)(en.a,{title:j,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:m.tooltip})})})})]})]})})})),an="#9c9c9c80",cn={fontWeight:400,fontSize:14,borderColor:an,borderWidth:"0.5px",height:40,transitionDuration:"0.3s",padding:"initial",paddingRight:6,paddingLeft:6},rn=function(e,t,n,i,r,o,s,l,d,u,b){var j=function(e,t,n,a,c,i,r){var o=Object(Nt.a)(e);i&&(o=e.filter((function(e){return r.includes(e.elementKey)})));var s=t;return a&&(s-=45),c&&(s-=n),o.reduce((function(e,t){return t.width?e-t.width:e}),s)/o.filter((function(e){return!e.width})).length}(e,t,n,i,r,l,d);return e.map((function(e,t){if(l&&!d.includes(e.elementKey))return null;var n=!e.enableSort||!e.enableSort;return Object(a.jsx)(Mt.b,{dataKey:e.elementKey,headerClassName:"titleHeader ".concat(e.headerTextAlign?"text-".concat(e.headerTextAlign):""),headerRenderer:function(){return Object(a.jsxs)(c.Fragment,{children:[u===e.elementKey&&Object(a.jsx)(c.Fragment,{children:"ASC"===b?Object(a.jsx)(Pt.a,{}):Object(a.jsx)(Ft.a,{})}),e.label]})},className:e.contentTextAlign?"text-".concat(e.contentTextAlign):"",cellRenderer:function(t){var n=t.rowData,i=!!o&&o.includes(Et()(n)?n:n[s]);return function(e,t,n){var i=Et()(e)?e:Z()(e,t.elementKey,null),r=t.renderFullObject?e:i,o=t.renderFunction?t.renderFunction(r):r;return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)("span",{className:n?"selected":"",children:o})})}(n,e,i)},width:e.width||j,disableSort:n,defaultSortDirection:"ASC"},"col-tb-".concat(t.toString()))}))},on=Object(N.a)((function(){return Object(k.a)(Object(j.a)(Object(j.a)({dialogContainer:{padding:"12px 26px 22px"},paper:{display:"flex",overflow:"auto",flexDirection:"column",padding:"19px 38px",boxShadow:"none",border:"#EAEDEE 1px solid",borderRadius:3,minHeight:200,overflowY:"scroll",position:"relative","&::-webkit-scrollbar":{width:3,height:3}},noBackground:{backgroundColor:"transparent",border:0},defaultPaperHeight:{height:"calc(100vh - 205px)"},allTableSettings:{"& .MuiTableCell-sizeSmall:last-child":{paddingRight:"initial"},"& .MuiTableCell-body.MuiTableCell-sizeSmall:last-child":{paddingRight:6}},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:700,fontSize:14,borderColor:"#39393980",borderWidth:"0.5px",padding:"6px 0 10px"}}},rowUnselected:Object(j.a)(Object(j.a)({},cn),{},{color:"#393939"}),rowSelected:Object(j.a)(Object(j.a)({},cn),{},{color:"#081C42",fontWeight:600}),paginatorContainer:{display:"flex",justifyContent:"flex-end",padding:"5px 38px"},checkBoxHeader:{width:50,textAlign:"left",paddingRight:10,"&.MuiTableCell-paddingCheckbox":{paddingBottom:4,paddingLeft:0}},actionsContainer:{width:150,borderColor:an},paginatorComponent:{borderBottom:0},checkBoxRow:{borderColor:an,padding:"0 10px 0 0"},loadingBox:{paddingTop:"100px",paddingBottom:"100px"},overlayColumnSelection:{position:"absolute",right:0,top:0},popoverContainer:{position:"relative"},popoverContent:{maxHeight:250,overflowY:"auto",padding:"0 10px 10px"},shownColumnsLabel:{color:"#9c9c9c",fontSize:12,padding:10,borderBottom:"#eaeaea 1px solid",width:"100%"},"@global":{".rowLine":{borderBottom:"1px solid ".concat(an),height:40,color:"#393939",fontSize:14,transitionDuration:.3,"&:focus":{outline:"initial"},"&:hover:not(.ReactVirtualized__Table__headerRow)":{userSelect:"none",backgroundColor:"#ececec",fontWeight:600,"&.canClick":{cursor:"pointer"},"&.canSelectText":{userSelect:"text"}},"& .selected":{color:"#081C42",fontWeight:600}},".headerItem":{userSelect:"none",fontWeight:700,fontSize:14,fontStyle:"initial",display:"flex",alignItems:"center",outline:"none"},".ReactVirtualized__Table__headerRow":{fontWeight:700,fontSize:14,borderColor:"#39393980",textTransform:"initial"},".optionsAlignment":{textAlign:"center"},".text-center":{textAlign:"center"},".text-right":{textAlign:"right"},".progress-enabled":{paddingTop:3,display:"inline-block",margin:"0 10px",position:"relative",width:18,height:18},".progress-enabled > .MuiCircularProgress-root":{position:"absolute",left:0,top:3}}},Te),_e))}))((function(e){var t=e.itemActions,n=e.columns,r=e.onSelect,o=e.records,s=e.isLoading,l=e.loadingMessage,d=void 0===l?Object(a.jsx)(v.a,{component:"h3",children:"Loading..."}):l,j=e.entityName,m=e.selectedItems,p=e.idField,h=e.classes,O=e.radioSelection,g=void 0!==O&&O,f=e.customEmptyMessage,k=void 0===f?"":f,w=e.customPaperHeight,N=void 0===w?"":w,T=e.noBackground,E=void 0!==T&&T,_=e.columnsSelector,A=void 0!==_&&_,I=e.textSelectable,M=void 0!==I&&I,L=e.columnsShown,D=void 0===L?[]:L,B=e.onColumnChange,F=void 0===B?function(e,t){}:B,R=e.infiniteScrollConfig,P=e.sortConfig,z=e.autoScrollToBottom,K=void 0!==z&&z,U=Object(c.useState)(!1),W=Object(b.a)(U,2),q=W[0],V=W[1],G=i.a.useState(null),H=Object(b.a)(G,2),Y=H[0],Q=H[1],Z=t?t.find((function(e){return"view"===e.type})):null,J=function(e){V(!q),Q(e.currentTarget)},$=function(){V(!1),Q(null)};return Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:"".concat(h.paper," ").concat(E?h.noBackground:""," ").concat(""!==N?N:h.defaultPaperHeight),children:[s&&Object(a.jsxs)(x.a,{container:!0,className:h.loadingBox,children:[Object(a.jsx)(x.a,{item:!0,xs:12,style:{textAlign:"center"},children:d}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]}),A&&!s&&o.length>0&&Object(a.jsx)("div",{className:h.overlayColumnSelection,children:function(e){return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(_t.a,{"aria-describedby":"columnsSelector",color:"primary",onClick:J,children:Object(a.jsx)(Dt.a,{fontSize:"inherit"})}),Object(a.jsxs)(At.a,{anchorEl:Y,id:"columnsSelector",open:q,anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},onClose:$,className:h.popoverContainer,children:[Object(a.jsx)("div",{className:h.shownColumnsLabel,children:"Shown Columns"}),Object(a.jsx)("div",{className:h.popoverContent,children:e.map((function(e){return Object(a.jsx)(nn,{label:e.label,checked:D.includes(e.elementKey),onChange:function(t){F(e.elementKey,t.target.checked)},id:"chbox-".concat(e.label),name:"chbox-".concat(e.label),value:e.label},"tableColumns-".concat(e.label))}))})]})]})}(n)}),o&&!s&&o.length>0?Object(a.jsx)(Mt.c,{isRowLoaded:function(e){var t=e.index;return!!o[t]},loadMoreRows:R?R.loadMoreRecords:function(){return new Promise((function(){return!0}))},rowCount:R?R.recordsCount:o.length,children:function(e){var i=e.onRowsRendered,s=e.registerChild;return Object(a.jsx)(Mt.a,{children:function(e){var l=e.width,d=e.height,b=function(e,t){var n=45*t;return n<80?80:n>e?e:n}(l,t?t.filter((function(e){return"view"!==e.type})).length:0),O=!(!r||!m),f=!!(t&&t.length>1||t&&1===t.length&&"view"!==t[0].type);return Object(a.jsxs)(Mt.d,{ref:s,disableHeader:!1,headerClassName:"headerItem",headerHeight:40,height:d,noRowsRenderer:function(){return Object(a.jsx)(c.Fragment,{children:""!==k?k:"There are no ".concat(j," yet.")})},overscanRowCount:10,rowHeight:40,width:l,rowCount:o.length,rowGetter:function(e){var t=e.index;return o[t]},onRowClick:function(e){!function(e){if(Z){var t=Z.sendOnlyId?e[p]:e;if(Z.to)return void u.push("".concat(Z.to,"/").concat(t));Z.onClick&&Z.onClick(t)}}(e.rowData)},rowClassName:"rowLine ".concat(Z?"canClick":""," ").concat(!Z&&M?"canSelectText":""),onRowsRendered:i,sort:P?P.triggerSort:void 0,sortBy:P?P.currentSort:void 0,sortDirection:P?P.currentDirection:void 0,scrollToIndex:K?o.length-1:-1,children:[O&&Object(a.jsx)(Mt.b,{headerRenderer:function(){return Object(a.jsx)(c.Fragment,{children:"Select"})},dataKey:p,width:45,cellRenderer:function(e){var t=e.rowData,n=!!m&&m.includes(Et()(t)?t:t[p]);return Object(a.jsx)(It.a,{value:Et()(t)?t:t[p],color:"primary",inputProps:{"aria-label":"secondary checkbox"},checked:n,onChange:r,onClick:function(e){e.stopPropagation()},checkedIcon:Object(a.jsx)("span",{className:g?h.radioSelectedIcon:h.checkedIcon}),icon:Object(a.jsx)("span",{className:g?h.radioUnselectedIcon:h.unCheckedIcon})})}}),rn(n,l,b,O,f,m||[],p,A,D,P?P.currentSort:"",P?P.currentDirection:void 0),f&&Object(a.jsx)(Mt.b,{headerRenderer:function(){return Object(a.jsx)(c.Fragment,{children:"Options"})},dataKey:p,width:b,headerClassName:"optionsAlignment",className:"optionsAlignment",cellRenderer:function(e){var n=e.rowData,c=!!m&&m.includes(Et()(n)?n:n[p]);return function(e,t,n,c){return e.map((function(e,i){if("view"===e.type)return null;var r="string"===typeof t?t:t[c];return e.hideButtonFunction&&e.hideButtonFunction(r)?null:e.showLoaderFunction&&e.showLoaderFunction(r)?Object(a.jsx)("div",{className:"progress-enabled",children:Object(a.jsx)(C.a,{color:"primary",size:18,variant:"indeterminate"},"actions-loader-".concat(e.type,"-").concat(i.toString()))}):Object(a.jsx)($t,{type:e.type,onClick:e.onClick,to:e.to,valueToSend:t,selected:n,idField:c,sendOnlyId:!!e.sendOnlyId},"actions-".concat(e.type,"-").concat(i.toString()))}))}(t||[],n,c,p)}})]})}})}}):Object(a.jsx)(c.Fragment,{children:!s&&Object(a.jsx)("div",{children:""!==k?k:"There are no ".concat(j," yet.")})})]})})})),sn=n(624),ln=n(625),dn=n(626),un={content:'" "',borderLeft:"2px solid #9C9C9C",height:33,width:1,position:"absolute"},bn=Object(s.b)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:V}),jn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({dialogContainer:{padding:"8px 15px 22px"},closeContainer:{textAlign:"right"},closeButton:{width:45,height:45,padding:0,backgroundColor:"initial","&:hover":{backgroundColor:"initial"},"&:active":{backgroundColor:"initial"}},modalCloseIcon:{fontSize:35,color:"#9C9C9C",fontWeight:300,"&:hover":{color:"#9C9C9C"}},closeIcon:{"&::before":Object(j.a)(Object(j.a)({},un),{},{transform:"rotate(45deg)"}),"&::after":Object(j.a)(Object(j.a)({},un),{},{transform:"rotate(-45deg)"}),"&:hover::before, &:hover::after":{borderColor:"#9C9C9C"},width:24,height:24,display:"block",position:"relative"},titleClass:{padding:"0px 50px 12px","& h2":{fontWeight:600,color:"#000",fontSize:22}},modalContent:{padding:"0 50px"},customDialogSize:{width:"100%",maxWidth:765}},ze))}))(bn((function(e){var t=e.onClose,n=e.modalOpen,i=e.title,r=e.children,o=e.classes,s=e.wideLimit,l=void 0===s||s,d=e.modalSnackMessage,u=e.setModalSnackMessage,m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1];Object(c.useEffect)((function(){if(d){if(""===d.message)return void O(!1);O(!0)}}),[d]);var g=l?{classes:{paper:o.customDialogSize}}:{maxWidth:"md",fullWidth:!0};return Object(a.jsx)(sn.a,Object(j.a)(Object(j.a)({open:n,onClose:t,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description"},g),{},{children:Object(a.jsxs)("div",{className:o.dialogContainer,children:[Object(a.jsx)(Ce.a,{open:h,className:o.snackBarModal,onClose:function(){O(!1),u("")},message:d?d.message:"",ContentProps:{className:"".concat(o.snackBar," ").concat(d&&"error"===d.type?o.errorSnackBar:"")},autoHideDuration:d&&"error"===d.type?1e4:5e3}),Object(a.jsx)("div",{className:o.closeContainer,children:Object(a.jsx)(_t.a,{"aria-label":"close",className:o.closeButton,onClick:t,disableRipple:!0,children:Object(a.jsx)("span",{className:o.closeIcon})})}),Object(a.jsx)(ln.a,{id:"alert-dialog-title",className:o.titleClass,children:i}),Object(a.jsx)(dn.a,{className:o.modalContent,children:r})]})}))}))),mn=Object(w.a)((function(e){return Object(k.a)({root:{borderRadius:0,"&::before":{borderColor:"#9c9c9c"}},disabled:{"&.MuiInput-underline::before":{borderColor:"#eaeaea",borderBottomStyle:"solid"}},input:{padding:"15px 30px 10px 5px",color:"#393939",fontSize:13,fontWeight:600,"&:placeholder":{color:"#393939",opacity:1}},error:{color:"#b53b4b"}})}));function pn(e){var t=mn();return Object(a.jsx)(f.a,Object(j.a)({InputProps:{classes:t}},e))}var hn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{textBoxContainer:{flexGrow:1},textBoxWithIcon:{position:"relative",paddingRight:25},errorState:{color:"#b53b4b",fontSize:14,position:"absolute",top:7,right:7},overlayAction:{position:"absolute",right:0,top:15,"& svg":{maxWidth:15,maxHeight:15}}}))}))((function(e){var t=e.label,n=e.onChange,c=e.value,r=e.id,o=e.name,s=e.type,l=void 0===s?"text":s,d=e.autoComplete,u=void 0===d?"off":d,b=e.disabled,j=void 0!==b&&b,m=e.multiline,p=void 0!==m&&m,h=e.tooltip,O=void 0===h?"":h,g=e.index,f=void 0===g?0:g,v=e.error,y=void 0===v?"":v,C=e.required,S=void 0!==C&&C,k=e.placeholder,w=void 0===k?"":k,N=e.min,T=e.max,E=e.overlayIcon,_=void 0===E?null:E,A=e.overlayAction,I=e.classes,M={"data-index":f};return"number"===l&&N&&(M.min=N),"number"===l&&T&&(M.max=T),Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(I.fieldContainer," ").concat(""!==y?I.errorInField:""),children:[""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:r,className:I.inputLabel,children:[Object(a.jsxs)("span",{children:[t,S?"*":""]}),""!==O&&Object(a.jsx)("div",{className:I.tooltipContainer,children:Object(a.jsx)(en.a,{title:O,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:I.tooltip})})})})]}),Object(a.jsx)("div",{className:I.textBoxContainer,children:Object(a.jsx)(pn,{id:r,name:o,fullWidth:!0,value:c,disabled:j,onChange:n,type:l,multiline:p,autoComplete:u,inputProps:M,error:""!==y,helperText:y,placeholder:w,className:I.inputRebase})}),_&&Object(a.jsx)("div",{className:I.overlayAction,children:Object(a.jsx)(_t.a,{onClick:A?function(){A()}:function(){return null},size:"small",disableFocusRipple:!1,disableRipple:!1,disableTouchRipple:!1,children:_})})]})})})),On=n(356),gn=n(613),fn=n(655),xn=n(627),vn=Object(N.a)((function(e){return Object(k.a)({root:{lineHeight:1,"label + &":{marginTop:e.spacing(3)}},input:{position:"relative",color:"#393939",fontSize:13,fontWeight:600,padding:"15px 20px 10px 10px",borderBottom:"1px solid #9c9c9c",display:"flex",alignItems:"center","&:hover":{borderColor:"#393939"},"&:focus":{backgroundColor:"#fff"}}})}))(On.a),yn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},Se),we))}))((function(e){var t=e.classes,n=e.id,c=e.name,r=e.onChange,o=e.options,s=e.label,l=e.tooltip,d=void 0===l?"":l,u=e.value,b=e.disabled,j=void 0!==b&&b;return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.fieldContainer,children:[""!==s&&Object(a.jsxs)(Xt.a,{htmlFor:n,className:t.inputLabel,children:[Object(a.jsx)("span",{children:s}),""!==d&&Object(a.jsx)("div",{className:t.tooltipContainer,children:Object(a.jsx)(en.a,{title:d,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:t.tooltip})})})})]}),Object(a.jsx)(gn.a,{fullWidth:!0,children:Object(a.jsx)(fn.a,{id:n,name:c,value:u,onChange:r,input:Object(a.jsx)(vn,{}),disabled:j,children:o.map((function(e){return Object(a.jsx)(xn.a,{value:e.value,children:e.label},"select-".concat(c,"-").concat(e.label))}))})})]})})})),Cn=n(671),Sn=n(628),kn=n(656),wn=Object(w.a)(Object(j.a)({root:{"&:hover":{backgroundColor:"transparent"}}},_e)),Nn=function(e){var t=wn();return Object(a.jsx)(kn.a,Object(j.a)({className:t.root,disableRipple:!0,color:"default",checkedIcon:Object(a.jsx)("span",{className:t.radioSelectedIcon}),icon:Object(a.jsx)("span",{className:t.radioUnselectedIcon})},e))},Tn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{radioBoxContainer:{},fieldContainer:Object(j.a)(Object(j.a)({},Se.fieldContainer),{},{display:"flex",justifyContent:"space-between",borderBottom:"#9c9c9c 1px solid",paddingBottom:10,marginTop:11}),optionLabel:{"&.Mui-disabled":{"& .MuiFormControlLabel-label":{color:"#9c9c9c"}},"&:last-child":{marginRight:0},"& .MuiFormControlLabel-label":{fontSize:12,color:"#000"}},checkedOption:{"& .MuiFormControlLabel-label":{fontSize:12,color:"#000",fontWeight:700}}}))}))((function(e){var t=e.selectorOptions,n=void 0===t?[]:t,c=e.currentSelection,r=e.label,o=e.id,s=e.name,l=e.onChange,d=e.tooltip,u=void 0===d?"":d,b=e.disableOptions,j=void 0!==b&&b,m=e.classes,p=e.displayInColumn,h=void 0!==p&&p;return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:m.fieldContainer,children:[Object(a.jsxs)(Xt.a,{htmlFor:o,className:m.inputLabel,children:[Object(a.jsx)("span",{children:r}),""!==u&&Object(a.jsx)("div",{className:m.tooltipContainer,children:Object(a.jsx)(en.a,{title:u,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:m.tooltip})})})})]}),Object(a.jsx)("div",{className:m.radioBoxContainer,children:Object(a.jsx)(Cn.a,{"aria-label":o,id:o,name:s,value:c,onChange:l,row:!h,children:n.map((function(e){return Object(a.jsx)(Sn.a,{value:e.value,control:Object(a.jsx)(Nn,{}),label:e.label,disabled:j,className:Object(fe.a)(m.optionLabel,Object(ge.a)({},m.checkedOption,e.value===c))},"rd-".concat(s,"-").concat(e.value))}))})})]})})})),En=n(664),_n=n(629),An=Object(N.a)({root:{alignItems:"flex-start",height:18,padding:"0 12px",display:"flex",position:"relative"},switchBase:{color:"#fff",padding:0,top:"initial","&$checked":{color:"#fff"},"&$checked + $track":{backgroundColor:"#081C42",opacity:1,height:15},"&:hover":{backgroundColor:"#fff"}},checked:{},track:{height:15,backgroundColor:"#9C9C9C",border:"#081C42 1px solid",opacity:1,padding:0,marginTop:1.5,"&$checked":{backgroundColor:"#081C42"}},thumb:{backgroundColor:"#fff",border:"#081C42 1px solid",boxShadow:"none",width:18,height:18,padding:0,marginLeft:10}})(_n.a),In=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#081C42",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#081C42"}}},divContainer:{borderBottom:"#9c9c9c 1px solid",paddingBottom:14,marginBottom:20},wrapperContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",maxWidth:840,margin:"0px auto"},indicatorLabel:{fontSize:12,fontWeight:600,color:"#081C42",margin:"0 8px 0 10px"},switchContainer:{display:"flex"},fieldDescription:{marginTop:4,color:"#999999"}},Ae),Se))}))((function(e){var t=e.label,n=void 0===t?"":t,c=e.onChange,r=e.value,o=e.id,s=e.name,l=e.checked,d=void 0!==l&&l,u=e.disabled,b=void 0!==u&&u,j=e.switchOnly,m=void 0!==j&&j,p=e.tooltip,h=void 0===p?"":p,O=e.description,g=void 0===O?"":O,f=e.indicatorLabels,y=void 0===f?[]:f,C=e.containerClass,S=void 0===C?"":C,k=e.classes,w=Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)("div",{className:"".concat(k.switchContainer," ").concat(S),children:[Object(a.jsx)(An,{checked:d,onChange:c,color:"primary",name:s,inputProps:{"aria-label":"primary checkbox"},disabled:b,disableRipple:!0,disableFocusRipple:!0,disableTouchRipple:!0,value:r}),2===y.length&&Object(a.jsx)("span",{className:k.indicatorLabel,children:d?y[0]:y[1]})]})});return m?w:Object(a.jsxs)("div",{className:k.divContainer,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:k.wrapperContainer,children:[""!==n&&Object(a.jsxs)(Xt.a,{htmlFor:o,className:k.inputLabel,children:[Object(a.jsx)("span",{children:n}),""!==h&&Object(a.jsx)("div",{className:k.tooltipContainer,children:Object(a.jsx)(en.a,{title:h,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:k.tooltip})})})})]}),w]}),""!==g&&Object(a.jsx)(x.a,{item:!0,xs:10,children:Object(a.jsx)(v.a,{component:"p",className:k.fieldDescription,children:g})})]})})),Mn=Object(s.b)((function(e){return{addBucketModalOpen:e.buckets.open,bucketName:e.buckets.addBucketName,versioningEnabled:e.buckets.addBucketVersioningEnabled,lockingEnabled:e.buckets.addBucketLockingEnabled,quotaEnabled:e.buckets.addBucketQuotaEnabled,quotaType:e.buckets.addBucketQuotaType,quotaSize:e.buckets.addBucketQuotaSize,quotaUnit:e.buckets.addBucketQuotaUnit,retentionEnabled:e.buckets.addBucketRetentionEnabled,retentionMode:e.buckets.addBucketRetentionMode,retentionUnit:e.buckets.addBucketRetentionUnit,retentionValidity:e.buckets.addBucketRetentionValidity}}),{addBucketName:function(e){return{type:pt,name:e}},addBucketVersioned:function(e){return{type:ht,versioned:e}},enableObjectLocking:function(e){return{type:Ot,locking:e}},addBucketQuota:function(e){return{type:gt,quota:e}},addBucketQuotaType:function(e){return{type:ft,quotaType:e}},addBucketQuotaSize:function(e){return{type:xt,quotaSize:e}},addBucketQuotaUnit:function(e){return{type:vt,quotaUnit:e}},addBucketRetention:function(e){return{type:Ct,retention:e}},addBucketRetentionMode:function(e){return{type:St,retentionMode:e}},addBucketRetentionUnit:function(e){return{type:kt,retentionUnit:e}},addBucketRetentionValidity:function(e){return{type:wt,retentionValidity:e}},setModalError:G})(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},multiContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start"},quotaSizeContainer:{flexGrow:1},sizeFactorContainer:{flexGrow:0,maxWidth:80,marginLeft:8,alignSelf:"flex-start"}},ke))}))((function(e){var t=e.classes,n=e.open,r=e.closeModalAndRefresh,o=e.addBucketName,s=e.addBucketVersioned,l=e.enableObjectLocking,d=e.addBucketQuota,u=e.addBucketQuotaType,j=e.addBucketQuotaSize,m=e.addBucketQuotaUnit,p=e.addBucketRetention,h=e.addBucketRetentionMode,O=e.addBucketRetentionUnit,f=e.addBucketRetentionValidity,C=e.setModalError,S=e.bucketName,k=e.versioningEnabled,w=e.lockingEnabled,N=e.quotaEnabled,T=e.quotaType,E=e.quotaSize,_=e.quotaUnit,A=e.retentionEnabled,I=e.retentionMode,M=e.retentionUnit,L=e.retentionValidity,D=Object(c.useState)(!1),B=Object(b.a)(D,2),F=B[0],R=B[1],P=Object(c.useState)(!1),z=Object(b.a)(P,2),K=z[0],U=z[1],W=Object(c.useState)(!1),q=Object(b.a)(W,2),V=q[0],G=q[1],H=Object(En.a)(S,1e3),Y=Object(b.a)(H,1)[0];Object(c.useEffect)((function(){o(Y)}),[Y,o]);var Q=function(){o(""),s(!1),l(!1),d(!1),u("hard"),j("1"),m("TiB"),p(!1),h("compliance"),O("days"),f(1)};return Object(c.useEffect)((function(){var e=!1;""!==S.trim()&&(e=!0),N&&e&&(""!==E.trim()&&0!==parseInt(E)||(e=!1)),k&&A||(p(!1),h("compliance"),O("days"),f(1)),A?(l(!0),G(!0)):G(!1),A&&(Number.isNaN(L)||L<1)&&(e=!1),U(e)}),[S,A,w,T,E,_,N,A,p,h,O,f,L]),Object(a.jsx)(jn,{title:"Create Bucket",modalOpen:n,onClose:function(){r(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){if(e.preventDefault(),!F){R(!0);var t={name:S,versioning:k,locking:w};if(N){var n=oe(E,_,!1);t.quota={enabled:!0,quota_type:T,amount:parseInt(n)}}A&&(t.retention={mode:I,unit:M,validity:L}),me.invoke("POST","/api/v1/buckets",t).then((function(e){R(!1),r(!0)})).catch((function(e){R(!1),C(e)})),Q()}}(e)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"bucket-name",name:"bucket-name",onChange:function(e){o(e.target.value)},label:"Bucket Name",value:S})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(v.a,{component:"h6",variant:"h6",children:"Features"}),Object(a.jsx)("hr",{})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"versioned",id:"versioned",name:"versioned",checked:k,onChange:function(e){s(e.target.checked)},description:"Allows to keep multiple versions of the same object under the same key.",label:"Versioning",indicatorLabels:["On","Off"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"locking",id:"locking",name:"locking",disabled:V,checked:w,onChange:function(e){l(e.target.checked)},label:"Object Locking",description:"Required to support retention and legal hold. Can only be enabled at bucket creation.",indicatorLabels:["On","Off"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"bucket_quota",id:"bucket_quota",name:"bucket_quota",checked:N,onChange:function(e){d(e.target.checked)},label:"Quota",description:"Limit the amount of data in the bucket.",indicatorLabels:["On","Off"]})}),N&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:T,id:"quota_type",name:"quota_type",label:"Quota Type",onChange:function(e){u(e.target.value)},selectorOptions:[{value:"hard",label:"Hard"},{value:"fifo",label:"FIFO"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)("div",{className:t.multiContainer,children:[Object(a.jsx)("div",{className:t.quotaSizeContainer,children:Object(a.jsx)(hn,{type:"number",id:"quota_size",name:"quota_size",onChange:function(e){j(e.target.value)},label:"Quota",value:E,required:!0,min:"1"})}),Object(a.jsx)("div",{className:t.sizeFactorContainer,children:Object(a.jsx)(yn,{label:"\xa0",id:"quota_unit",name:"quota_unit",value:_,onChange:function(e){m(e.target.value)},options:te.map((function(e){return{label:e,value:e}}))})})]})})]}),k&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"bucket_retention",id:"bucket_retention",name:"bucket_retention",checked:A,onChange:function(e){p(e.target.checked)},label:"Retention",description:"Impose rules to prevent object deletion for a period of time.",indicatorLabels:["On","Off"]})}),A&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:I,id:"retention_mode",name:"retention_mode",label:"Retention Mode",onChange:function(e){h(e.target.value)},selectorOptions:[{value:"compliance",label:"Compliance"},{value:"governance",label:"Governance"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:M,id:"retention_unit",name:"retention_unit",label:"Retention Unit",onChange:function(e){O(e.target.value)},selectorOptions:[{value:"days",label:"Days"},{value:"years",label:"Years"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",id:"retention_validity",name:"retention_validity",onChange:function(e){f(e.target.valueAsNumber)},label:"Retention Validity",value:String(L),required:!0,min:"1"})})]})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:Q,children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:F||!K,children:"Save"})]}),F&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Ln=n(630),Dn=n(631),Bn={setErrorSnackMessage:q},Fn=Object(s.b)(null,Bn)((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedBucket,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Bucket"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete bucket ",Object(a.jsx)("b",{children:i}),"? ",Object(a.jsx)("br",{}),"A bucket can only be deleted if it's empty."]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){l||(d(!0),me.invoke("DELETE","/api/v1/buckets/".concat(i),{name:i}).then((function(e){d(!1),t(!0)})).catch((function(e){d(!1),r(e)})))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),Rn=Object(N.a)((function(e){return Object(k.a)({headerContainer:{position:"absolute",width:"100%",height:77,display:"flex",backgroundColor:"#fff",borderBottom:"#E3E3E3 1px solid",left:0},label:{display:"flex",justifyContent:"flex-start",alignItems:"center"},labelStyle:{color:"#000",fontSize:18,fontWeight:700,marginLeft:55,marginTop:8}})}))((function(e){var t=e.classes,n=e.label;return Object(a.jsx)(x.a,{container:!0,className:t.headerContainer,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.label,children:Object(a.jsx)(v.a,{variant:"h4",className:t.labelStyle,children:n})})})})),Pn=Object(s.b)((function(e){return{addBucketModalOpen:e.buckets.open}}),{addBucketOpen:function(e){return{type:mt,open:e}},addBucketReset:function(){return{type:yt}},setErrorSnackMessage:q})(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.addBucketOpen,i=e.addBucketModalOpen,r=e.addBucketReset,o=e.setErrorSnackMessage,s=Object(c.useState)([]),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!0),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(!1),v=Object(b.a)(O,2),y=v[0],C=v[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(!0),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(!1),F=Object(b.a)(B,2),R=F[0],P=F[1];Object(c.useEffect)((function(){if(L){me.invoke("POST","/api/v1/has-permission",{actions:[{id:"createBucket",action:"s3:CreateBucket"}]}).then((function(e){if(D(!1),e.permissions){var t=(e.permissions?e.permissions:[]).find((function(e){return"createBucket"==e.id}));t&&t.can?P(!0):P(!1),D(!1)}})).catch((function(e){D(!1),o(e)}))}}),[L,o]),Object(c.useEffect)((function(){if(p){h(!0),me.invoke("GET","/api/v1/buckets").then((function(e){h(!1),u(e.buckets||[])})).catch((function(e){h(!1),o(e)}))}}),[p,o]);var z=[{type:"view",to:"/buckets",sendOnlyId:!0},{type:"delete",onClick:function(e){C(!0),N(e)},sendOnlyId:!0}],K=d.filter((function(e){return""===_||e.name.indexOf(_)>=0}));return Object(a.jsxs)(c.Fragment,{children:[i&&Object(a.jsx)(Mn,{open:i,closeModalAndRefresh:function(e){n(!1),r(),e&&h(!0)}}),y&&Object(a.jsx)(Fn,{deleteOpen:y,selectedBucket:w,closeDeleteModalAndRefresh:function(e){!function(e){C(!1),e&&h(!0)}(e)}}),Object(a.jsx)(Rn,{label:"Buckets"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Buckets",className:t.searchField,id:"search-resource",label:"",onChange:function(e){A(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}}),R&&Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){n(!0)},children:"Create Bucket"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:z,columns:[{label:"Name",elementKey:"name"},{label:"Creation Date",elementKey:"creation_date",renderFunction:function(e){return Object(a.jsx)(Je.a,{children:e})}},{label:"Size",elementKey:"size",renderFunction:ce,width:60,contentTextAlign:"right"}],isLoading:p,records:K,entityName:"Buckets",idField:"name"})})]})})]})}))),zn=n(348),Kn=n(654),Un=n(638),Wn=Object(s.b)(null,{setModalErrorSnackMessage:G}),qn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))(Wn((function(e){var t=e.classes,n=e.open,i=e.bucketName,r=e.actualPolicy,o=e.closeModalAndRefresh,s=e.setModalErrorSnackMessage,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(""),p=Object(b.a)(m,2),h=p[0],O=p[1];return Object(c.useEffect)((function(){O(r)}),[O,r]),Object(a.jsx)(jn,{title:"Change Access Policy",modalOpen:n,onClose:function(){o()},children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),u||(j(!0),me.invoke("PUT","/api/v1/buckets/".concat(i,"/set-policy"),{access:h}).then((function(e){j(!1),o()})).catch((function(e){j(!1),s(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.formScrollable,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{value:h,label:"Access Policy",id:"select-access-policy",name:"select-access-policy",onChange:function(e){O(e.target.value)},options:[{value:"PRIVATE",label:"Private"},{value:"PUBLIC",label:"Public"}]})})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",fullWidth:!0,disabled:u,children:"Set"})}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Vn=Object(s.b)(null,{setModalErrorSnackMessage:G}),Gn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))(Vn((function(e){var t=e.classes,n=e.open,i=e.bucketName,r=e.closeModalAndRefresh,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)("compliance"),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)("days"),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)(1),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(!1),E=Object(b.a)(T,2),_=E[0],A=E[1];return Object(c.useEffect)((function(){Number.isNaN(w)||w<1?A(!1):A(!0)}),[w]),Object(a.jsx)(jn,{title:"Set Retention Configuration",modalOpen:n,onClose:function(){r()},children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||(u(!0),me.invoke("PUT","/api/v1/buckets/".concat(i,"/retention"),{mode:p,unit:v,validity:w}).then((function(){u(!1),r()})).catch((function(e){u(!1),o(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:p,id:"retention_mode",name:"retention_mode",label:"Retention Mode",onChange:function(e){h(e.target.value)},selectorOptions:[{value:"compliance",label:"Compliance"},{value:"governance",label:"Governance"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:v,id:"retention_unit",name:"retention_unit",label:"Retention Unit",onChange:function(e){C(e.target.value)},selectorOptions:[{value:"days",label:"Days"},{value:"years",label:"Years"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",id:"retention_validity",name:"retention_validity",onChange:function(e){N(e.target.valueAsNumber)},label:"Retention Validity",value:String(w),required:!0,min:"1"})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",fullWidth:!0,disabled:d||!_,children:"Set"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Hn=n(634),Yn=n(635),Qn=n(636),Zn=n(637),Jn=n(633),$n=Object(s.b)(null,{setModalErrorSnackMessage:G}),Xn=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},buttonContainer:{textAlign:"right"}},ke))}))($n((function(e){var t=e.classes,n=e.open,i=e.selectedBucket,r=e.closeModalAndRefresh,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)([]),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)([]),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useCallback)((function(){u(!0),me.invoke("GET","/api/v1/admin/arns").then((function(e){var t=[];null!==e.arns&&(t=e.arns),u(!1),D(t)})).catch((function(e){u(!1),o(e)}))}),[o]);Object(c.useEffect)((function(){B()}),[B]);var F=function(e,t){var n=_.indexOf(t),a=[];-1===n?a=a.concat(_,t):0===n?a=a.concat(_.slice(1)):n===_.length-1?a=a.concat(_.slice(0,-1)):n>0&&(a=a.concat(_.slice(0,n),_.slice(n+1))),A(a)},R=L.map((function(e){return{label:e,value:e}}));return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){r()},title:"Subscribe To Event",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||(u(!0),me.invoke("POST","/api/v1/buckets/".concat(i,"/events"),{configuration:{arn:w,events:_,prefix:p,suffix:v},ignoreExisting:!0}).then((function(){u(!1),r()})).catch((function(e){u(!1),o(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{onChange:function(e){N(e.target.value)},id:"select-access-policy",name:"select-access-policy",label:"ARN",value:w,options:R})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(Jn.a,{size:"medium",children:[Object(a.jsx)(Hn.a,{className:t.minTableHeader,children:Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{children:"Select"}),Object(a.jsx)(Qn.a,{children:"Event"})]})}),Object(a.jsx)(Zn.a,{children:[{label:"PUT - Object Uploaded",value:"put"},{label:"GET - Object accessed",value:"get"},{label:"DELETE - Object Deleted",value:"delete"}].map((function(e){return Object(a.jsxs)(Yn.a,{onClick:function(t){return F(0,e.value)},children:[Object(a.jsx)(Qn.a,{padding:"checkbox",children:Object(a.jsx)(It.a,{value:e.value,color:"primary",inputProps:{"aria-label":"secondary checkbox"},onChange:function(t){return F(0,e.value)},checked:_.includes(e.value)})}),Object(a.jsx)(Qn.a,{className:t.wrapCell,children:e.label})]},"group-".concat(e.value))}))})]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"prefix-input",name:"prefix-input",label:"Prefix",value:p,onChange:function(e){h(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"suffix-input",name:"suffix-input",label:"Suffix",value:v,onChange:function(e){C(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d,children:"Save"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),ea=Object(s.b)(null,{setErrorSnackMessage:q})((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedBucket,r=e.bucketEvent,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Event"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsx)(Ln.a,{id:"alert-dialog-description",children:"Are you sure you want to delete the this event?"})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){!function(){if(!d&&null!=r){u(!0);var e=Z()(r,"events",[]),n=Z()(r,"prefix",""),a=Z()(r,"suffix","");me.invoke("DELETE","/api/v1/buckets/".concat(i,"/events/").concat(r.arn),{events:e,prefix:n,suffix:a}).then((function(e){u(!1),t(!0)})).catch((function(e){u(!1),o(e)}))}}()},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),ta=Object(s.b)(null,{setModalErrorSnackMessage:G}),na=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},buttonContainer:{textAlign:"right"}},ke))}))(ta((function(e){var t=e.open,n=e.closeModalAndRefresh,i=e.classes,r=e.bucketName,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1];return Object(a.jsx)(jn,{modalOpen:t,onClose:function(){n()},title:"Set Bucket Replication",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),u(!0),function(){var e={accessKey:p,secretKey:v,sourceBucket:r,targetURL:w,targetBucket:_,region:L};me.invoke("POST","/api/v1/remote-buckets",e).then((function(){me.invoke("GET","/api/v1/remote-buckets").then((function(e){var t=Z()(e,"buckets",[]).find((function(e){return e.sourceBucket===r}));if(t&&t.remoteARN){var a=t.remoteARN,c={destination_bucket:_,arn:a};me.invoke("POST","/api/v1/buckets/".concat(r,"/replication"),c).then((function(){u(!1),n()})).catch((function(e){u(!1),o(e)}))}})).catch((function(e){o(e)}))})).catch((function(e){u(!1),o(e)}))}()},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:i.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"accessKey",name:"accessKey",onChange:function(e){h(e.target.value)},label:"Access Key",value:p})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"secretKey",name:"secretKey",onChange:function(e){C(e.target.value)},label:"Secret Key",value:v})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"targetURL",name:"targetURL",onChange:function(e){N(e.target.value)},placeholder:"https://play.min.io:9000",label:"Target URL",value:w})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"targetBucket",name:"targetBucket",onChange:function(e){A(e.target.value)},label:"Target Bucket",value:_})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"region",name:"region",onChange:function(e){D(e.target.value)},label:"Region",value:L})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:i.buttonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d,children:"Save"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),aa=Object(s.b)(null,{setModalErrorSnackMessage:G}),ca=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},buttonContainer:{textAlign:"right"}},ke))}))(aa((function(e){var t=e.classes,n=e.open,i=e.selectedBucket,r=e.closeModalAndRefresh,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)("sse-s3"),f=Object(b.a)(O,2),v=f[0],C=f[1];return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){r()},title:"Enable Bucket Encryption",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||me.invoke("POST","/api/v1/buckets/".concat(i,"/encryption/enable"),{encType:v,kmsKeyID:p}).then((function(){u(!1),r()})).catch((function(e){u(!1),o(e)}))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{onChange:function(e){C(e.target.value)},id:"select-encryption-type",name:"select-encryption-type",label:"Encryption Type",value:v,options:[{label:"SSE-S3",value:"sse-s3"},{label:"SSE-KMS",value:"sse-kms"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),"sse-kms"===v&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"kms-key-id",name:"kms-key-id",label:"KMS Key ID",value:p,onChange:function(e){h(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d,children:"Save"})}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),ia=Object(s.b)(null,{setErrorSnackMessage:q})((function(e){var t=e.closeVersioningModalAndRefresh,n=e.modalOpen,i=e.selectedBucket,r=e.versioningCurrentState,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Edit Versioning"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to"," ",Object(a.jsx)("strong",{children:r?"disable":"enable"})," ","versioning for this bucket?",r&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("strong",{children:"File versions won't be automatically deleted"})]})]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){d||(u(!0),me.invoke("PUT","/api/v1/buckets/".concat(i,"/versioning"),{versioning:!r}).then((function(){u(!1),t(!0)})).catch((function(e){u(!1),o(e)})))},color:"secondary",autoFocus:!0,children:r?"Disable":"Enable"})]})]})})),ra=function(){return Object(a.jsxs)($e.a,{viewBox:"0 0 16.172 17.187",children:[Object(a.jsx)("defs",{children:Object(a.jsxs)("linearGradient",{id:"a",y1:"0.5",x2:"1",y2:"0.5",gradientUnits:"objectBoundingBox",children:[Object(a.jsx)("stop",{offset:"0.044",stopColor:"#362585"}),Object(a.jsx)("stop",{offset:"0.301",stopColor:"#281b6f"}),Object(a.jsx)("stop",{offset:"1",stopColor:"#1e1560"})]})}),Object(a.jsx)("path",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.5px"},d:"M-4778.1,2239.582v6.425h6.425",transform:"translate(4787.594 -2239.582)"}),Object(a.jsx)("path",{fill:"#707070",d:"M-4784.238,2247.532v-.581c0-.027.009-.054.012-.081.039-.313.055-.632.121-.939a6.744,6.744,0,0,1,3.064-4.441,6.514,6.514,0,0,1,3.293-1.032,6.923,6.923,0,0,1,2.667.423,6.793,6.793,0,0,1,4.119,4.333,6.053,6.053,0,0,1,.279,1.337c.006.083.014.164.021.247v.86c-.011.131-.018.261-.032.392a6.494,6.494,0,0,1-.626,2.147,6.807,6.807,0,0,1-4.044,3.528,6.052,6.052,0,0,1-1.663.3,6.576,6.576,0,0,1-2.565-.325,6.73,6.73,0,0,1-3.947-3.451,6.627,6.627,0,0,1-.658-2.288C-4784.212,2247.816-4784.225,2247.674-4784.238,2247.532Zm13.025-.306c-.024-.309-.021-.661-.082-1a6.206,6.206,0,0,0-1.658-3.293,6.153,6.153,0,0,0-4.1-1.9,5.984,5.984,0,0,0-2.476.355,6.188,6.188,0,0,0-4.134,5.708,6.453,6.453,0,0,0,.228,1.881,6.127,6.127,0,0,0,1.984,3.052,6.046,6.046,0,0,0,3.806,1.445,6.043,6.043,0,0,0,1.235-.065,6.249,6.249,0,0,0,3.783-2.2,6.2,6.2,0,0,0,1.352-3.048C-4771.228,2247.863-4771.233,2247.563-4771.212,2247.226Z",transform:"translate(4786.834 -2240.452)"}),Object(a.jsx)("ellipse",{style:{opacity:.1,fill:"url(#a)"},cx:"6.151",cy:"6.151",rx:"6.151",ry:"6.151",transform:"translate(0 4.886)"})]})};function oa(e){var t=e.children,n=e.value,i=e.index,r=Object(zn.a)(e,["children","value","index"]);return Object(a.jsx)("div",Object(j.a)(Object(j.a)({role:"tabpanel",hidden:n!==i,id:"simple-tabpanel-".concat(i),"aria-labelledby":"simple-tab-".concat(i),style:{marginTop:"5px"}},r),{},{children:n===i&&Object(a.jsx)(c.Fragment,{children:t})}))}function sa(e){return{id:"simple-tab-".concat(e),"aria-controls":"simple-tabpanel-".concat(e)}}var la=Object(s.b)(null,{setErrorSnackMessage:q}),da=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},actionsTray:{textAlign:"right","& button":{marginLeft:10}},searchField:{background:"#FFFFFF",padding:12,borderRadius:5,boxShadow:"0px 3px 6px #00000012"},noRecords:{lineHeight:"24px",textAlign:"center",padding:"20px"},gridWrapper:{width:320},gridContainer:{display:"grid",gridTemplateColumns:"auto auto",gridGap:8,justifyContent:"flex-start",alignItems:"center","& div:not(.MuiCircularProgress-root)":{display:"flex",alignItems:"center"},"& div:nth-child(odd)":{justifyContent:"flex-end",fontWeight:700},"& div:nth-child(2n)":{minWidth:150}},masterActions:{width:"25%",minWidth:"120px","& div":{margin:"5px 0px"}},paperContainer:{padding:15,paddingLeft:23},headerContainer:{display:"flex",justifyContent:"space-between"},capitalizeFirst:{textTransform:"capitalize"},doubleElement:{display:"flex",justifyContent:"space-between"},encCheckbox:{margin:0,padding:0},tabPan:{marginTop:"5px"},fixedHeight:{height:165,minWidth:247,padding:"25px 28px","& svg":{maxHeight:18}},elementTitle:{fontWeight:500,color:"#777777",fontSize:14,marginTop:-9},consumptionValue:{color:"#000000",fontSize:"60px",fontWeight:"bold"}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(la((function(e){var t=e.classes,n=e.match,i=e.setErrorSnackMessage,r=Object(c.useState)(null),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)([]),u=Object(b.a)(d,2),m=u[0],p=u[1],h=Object(c.useState)([]),O=Object(b.a)(h,2),f=O[0],y=O[1],k=Object(c.useState)(!0),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!0),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!0),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)(!0),R=Object(b.a)(F,2),P=R[0],z=R[1],K=Object(c.useState)(!0),U=Object(b.a)(K,2),W=U[0],q=U[1],V=Object(c.useState)(!0),G=Object(b.a)(V,2),H=G[0],Y=G[1],Q=Object(c.useState)(!0),J=Object(b.a)(Q,2),$=J[0],X=J[1],ee=Object(c.useState)(!1),te=Object(b.a)(ee,2),ne=te[0],ae=te[1],ie=Object(c.useState)(0),re=Object(b.a)(ie,2),oe=re[0],se=re[1],le=Object(c.useState)(!1),de=Object(b.a)(le,2),ue=de[0],be=de[1],je=Object(c.useState)(!1),pe=Object(b.a)(je,2),he=pe[0],Oe=pe[1],ge=Object(c.useState)(!1),fe=Object(b.a)(ge,2),xe=fe[0],ve=fe[1],ye=Object(c.useState)(null),Ce=Object(b.a)(ye,2),Se=Ce[0],ke=Ce[1],we=Object(c.useState)("0"),Ne=Object(b.a)(we,2),Te=Ne[0],Ee=Ne[1],_e=Object(c.useState)(!1),Ae=Object(b.a)(_e,2),Ie=Ae[0],Me=Ae[1],Le=Object(c.useState)(!1),De=Object(b.a)(Le,2),Be=De[0],Fe=De[1],Re=Object(c.useState)(!1),Pe=Object(b.a)(Re,2),ze=Pe[0],Ke=Pe[1],Ue=Object(c.useState)(!1),We=Object(b.a)(Ue,2),qe=We[0],Ve=We[1],Ge=Object(c.useState)(!1),He=Object(b.a)(Ge,2),Ye=He[0],Qe=He[1],Ze=Object(c.useState)(!1),Je=Object(b.a)(Ze,2),$e=Je[0],Xe=Je[1],tt=Object(c.useState)(!0),nt=Object(b.a)(tt,2),at=nt[0],ct=nt[1],it=Object(c.useState)(!1),rt=Object(b.a)(it,2),ot=rt[0],st=rt[1],lt=Object(c.useState)(!1),dt=Object(b.a)(lt,2),ut=dt[0],bt=dt[1];Object(c.useEffect)((function(){if(at){me.invoke("POST","/api/v1/has-permission",{actions:[{id:"PutReplicationConfiguration",action:"s3:PutReplicationConfiguration",bucket_name:jt},{id:"GetReplicationConfiguration",action:"s3:GetReplicationConfiguration",bucket_name:jt}]}).then((function(e){if(ct(!1),e.permissions){var t=e.permissions?e.permissions:[],n=t.find((function(e){return"PutReplicationConfiguration"==e.id}));n&&n.can?st(!0):st(!1);var a=t.find((function(e){return"GetReplicationConfiguration"==e.id}));a&&a.can?bt(!0):bt(!1),ct(!1)}})).catch((function(e){ct(!1),i(e)}))}}),[at,i]);var jt=n.params.bucketName;Object(c.useEffect)((function(){A&&me.invoke("GET","/api/v1/buckets/".concat(jt,"/events")).then((function(e){var t=Z()(e,"events",[]);I(!1),p(t||[])})).catch((function(e){I(!1),i(e)}))}),[A,i,jt]),Object(c.useEffect)((function(){D&&me.invoke("GET","/api/v1/buckets/".concat(jt,"/versioning")).then((function(e){Fe(e.is_versioned),B(!1)})).catch((function(e){i(e),B(!1)}))}),[D,i,jt]),Object(c.useEffect)((function(){D&&me.invoke("GET","/api/v1/buckets/".concat(jt,"/object-locking")).then((function(e){Ke(e.object_locking_enabled),z(!1)})).catch((function(e){i(e),z(!1)}))}),[P,i,jt]),Object(c.useEffect)((function(){W&&me.invoke("GET","/api/v1/buckets/".concat(jt,"/replication")).then((function(e){var t=e.rules?e.rules:[];y(t),q(!1)})).catch((function(e){i(e),q(!1)}))}),[W,i,jt]),Object(c.useEffect)((function(){H&&me.invoke("GET","/api/v1/buckets").then((function(e){var t=Z()(e,"buckets",[]).find((function(e){return e.name===jt})),n=Z()(t,"size","0");Y(!1),Ee(n)})).catch((function(e){Y(!1),i(e)}))}),[H,i,jt]),Object(c.useEffect)((function(){N&&me.invoke("GET","/api/v1/buckets/".concat(jt)).then((function(e){T(!1),l(e)})).catch((function(e){T(!1),i(e)}))}),[N,i,jt]),Object(c.useEffect)((function(){$&&me.invoke("GET","/api/v1/buckets/".concat(jt,"/encryption/info")).then((function(e){e.algorithm&&Ve(!0),X(!1)})).catch((function(e){console.error(e),X(!1)}))}),[$,jt]);var mt=function(){T(!0),Y(!0),q(!0),B(!0),I(!0),X(!0)},pt="n/a";null!==s&&(pt=s.access);var ht=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Me(e)},Ot=[{type:"delete",onClick:function(e){ve(!0),ke(e)}}];return Object(a.jsxs)(c.Fragment,{children:[ue&&Object(a.jsx)(Xn,{open:ue,selectedBucket:jt,closeModalAndRefresh:function(){be(!1),mt()}}),he&&Object(a.jsx)(ca,{open:he,selectedBucket:jt,closeModalAndRefresh:function(){Oe(!1),mt()}}),ne&&Object(a.jsx)(qn,{bucketName:jt,open:ne,actualPolicy:pt,closeModalAndRefresh:function(){ae(!1),mt()}}),Ye&&Object(a.jsx)(Gn,{bucketName:jt,open:Ye,closeModalAndRefresh:function(){Qe(!1),mt()}}),Ie&&Object(a.jsx)(na,{closeModalAndRefresh:function(){ht(!1),mt()},open:Ie,bucketName:jt}),xe&&Object(a.jsx)(ea,{deleteOpen:xe,selectedBucket:jt,bucketEvent:Se,closeDeleteModalAndRefresh:function(e){ve(!1),e&&mt()}}),$e&&Object(a.jsx)(ia,{closeVersioningModalAndRefresh:function(e){Xe(!1),e&&mt()},modalOpen:$e,selectedBucket:jt,versioningCurrentState:Be}),Object(a.jsx)(Rn,{label:"Bucket > ".concat(n.params.bucketName)}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(x.a,{container:!0,spacing:2,children:[Object(a.jsx)(x.a,{item:!0,children:Object(a.jsxs)(S.a,{className:t.fixedHeight,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(ra,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(v.a,{className:t.elementTitle,children:"Reported Usage"})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:ce(Te)})]})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(S.a,{className:t.paperContainer,children:Object(a.jsxs)("div",{className:t.gridContainer,children:[Object(a.jsx)("div",{children:"Access Policy:"}),Object(a.jsxs)("div",{className:t.capitalizeFirst,children:[N?Object(a.jsx)(C.a,{color:"primary",size:16,variant:"indeterminate"}):pt.toLowerCase(),Object(a.jsx)(_t.a,{color:"primary","aria-label":"access",size:"small",className:t.propertiesIcon,onClick:function(){Xe(!0)},children:Object(a.jsx)(Wt,{active:!0})})]}),Object(a.jsx)("div",{children:"Replication:"}),Object(a.jsx)("div",{className:t.doubleElement,children:Object(a.jsx)("span",{children:f.length?"Yes":"No"})}),!ze&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("div",{children:"Object Locking:"}),Object(a.jsx)("div",{children:"No"})]}),Object(a.jsx)("div",{children:"Encryption:"}),Object(a.jsx)("div",{children:Object(a.jsx)(It.a,{color:"primary",className:t.encCheckbox,inputProps:{"aria-label":"secondary checkbox"},onChange:function(e){return function(e){e.target.checked?Oe(!0):me.invoke("POST","/api/v1/buckets/".concat(jt,"/encryption/disable")).then((function(){Ve(!1)})).catch((function(e){i(e)}))}(e)},checked:qe})})]})})}),ze&&Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(S.a,{className:t.paperContainer,children:Object(a.jsxs)("div",{className:t.gridContainer,children:[Object(a.jsx)("div",{children:"Object Locking"}),Object(a.jsx)("div",{}),Object(a.jsx)("div",{children:"Versioning:"}),Object(a.jsx)("div",{children:D?Object(a.jsx)(C.a,{color:"primary",size:16,variant:"indeterminate"}):Object(a.jsxs)(c.Fragment,{children:[Be&&!D?"Yes":"No","\xa0",Object(a.jsx)(_t.a,{color:"primary","aria-label":"retention",size:"small",className:t.propertiesIcon,onClick:function(){ae(!0)},children:Object(a.jsx)(Wt,{active:!0})})]})}),Object(a.jsx)("div",{children:"Retention:"}),Object(a.jsx)("div",{children:D?Object(a.jsx)(C.a,{color:"primary",size:16,variant:"indeterminate"}):Object(a.jsxs)(c.Fragment,{children:["\xa0",Object(a.jsx)(_t.a,{color:"primary","aria-label":"retention",size:"small",className:t.propertiesIcon,onClick:function(){Qe(!0)},children:Object(a.jsx)(Wt,{active:!0})})]})})]})})})]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsxs)(Kn.a,{value:oe,onChange:function(e,t){se(t)},indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",children:[Object(a.jsx)(Un.a,Object(j.a)({label:"Events"},sa(0))),ut&&Object(a.jsx)(Un.a,Object(j.a)({label:"Replication"},sa(1)))]})}),Object(a.jsxs)(x.a,{item:!0,xs:6,className:t.actionsTray,children:[0===oe&&Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),size:"medium",onClick:function(){be(!0)},children:"Subscribe to Event"}),1===oe&&Object(a.jsx)(c.Fragment,{children:ot&&Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),size:"medium",onClick:function(){ht(!0)},children:"Add Replication Rule"})})]})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(oa,{index:0,value:oe,children:Object(a.jsx)(on,{itemActions:Ot,columns:[{label:"SQS",elementKey:"arn"},{label:"Events",elementKey:"events",renderFunction:function(e){return Object(a.jsx)(c.Fragment,{children:e.join(", ")})}},{label:"Prefix",elementKey:"prefix"},{label:"Suffix",elementKey:"suffix"}],isLoading:A,records:m,entityName:"Events",idField:"id"})}),ut&&Object(a.jsx)(oa,{index:1,value:oe,children:Object(a.jsx)(on,{itemActions:Ot,columns:[{label:"ID",elementKey:"id"},{label:"Priority",elementKey:"priority"},{label:"Destination",elementKey:"destination",renderFunction:function(e){return Object(a.jsx)(c.Fragment,{children:e.bucket.replace("arn:aws:s3:::","")})}},{label:"Delete Replication",elementKey:"delete_marker_replication",renderFunction:function(e){return Object(a.jsx)(c.Fragment,{children:e.status})}},{label:"Status",elementKey:"status"}],isLoading:A,records:f,entityName:"Replication Rules",idField:"id"})})]})]})})]})}))),ua=Object(s.b)((function(e){return{open:e.system.sidebarOpen}}),{setMenuOpen:z}),ba=Object(l.g)(ua((function(){return Object(a.jsx)(l.c,{history:u,children:Object(a.jsxs)(l.d,{children:[Object(a.jsx)(l.b,{path:"/buckets/:bucketName",component:da}),Object(a.jsx)(l.b,{path:"/",component:Pn}),Object(a.jsx)(l.b,{component:Ge})]})})}))),ja=n(309);n(437);n(438);var ma,pa=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Se))}))((function(e){var t=e.value,n=e.label,c=void 0===n?"":n,r=e.tooltip,o=void 0===r?"":r,s=e.classes,l=e.onChange,d=void 0===l?function(){}:l,u=e.onBeforeChange,b=e.readOnly,j=void 0!==b&&b;return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(Xt.a,{className:s.inputLabel,children:[Object(a.jsx)("span",{children:c}),""!==o&&Object(a.jsx)("div",{className:s.tooltipContainer,children:Object(a.jsx)(en.a,{title:o,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:s.tooltip})})})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ja.Controlled,{value:t,options:{mode:"javascript",lineNumbers:!0,readOnly:j},onBeforeChange:u,onChange:d})})]})})),ha={setModalErrorSnackMessage:G},Oa=Object(s.b)(null,ha),ga=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({jsonPolicyEditor:{minHeight:400,width:"100%"},buttonContainer:{textAlign:"right"}},ke),Se))}))(Oa((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.policyEdit,o=e.setModalErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(""),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),f=Object(b.a)(O,2),v=f[0],C=f[1];Object(c.useEffect)((function(){r&&(h(r.name),C(r?JSON.stringify(JSON.parse(r.policy),null,4):""))}),[r]);var S=""!==p.trim();return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){i(!1)},title:"".concat(r?"Info":"Create"," Policy"),children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),d||(u(!0),me.invoke("POST","/api/v1/policies",{name:p,policy:v}).then((function(e){u(!1),i(!0)})).catch((function(e){u(!1),o(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"policy-name",name:"policy-name",label:"Policy Name",placeholder:"Enter Policy Name",onChange:function(e){h(e.target.value)},value:p,disabled:!!r})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(pa,{label:"".concat(r?"Edit":"Write"," Policy"),value:v,onBeforeChange:function(e,t,n){C(n)}})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[!r&&Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){h(""),C("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:d||!S,children:"Save"})]}),d&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),fa={setErrorSnackMessage:q},xa=Object(s.b)(null,fa)((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedPolicy,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Policy"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete policy ",Object(a.jsx)("b",{children:i}),"?."]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){l||(d(!0),me.invoke("DELETE","/api/v1/policy?name=".concat(i)).then((function(e){d(!1),t(!0)})).catch((function(e){d(!1),r(e)})))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),va={setErrorSnackMessage:q},ya=Object(s.b)(null,va),Ca=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(ya((function(e){var t=e.classes,n=e.setErrorSnackMessage,r=Object(c.useState)([]),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(!1),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],v=h[1],y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)(""),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(""),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(null),D=Object(b.a)(L,2),B=D[0],F=D[1];Object(c.useEffect)((function(){R()}),[]),Object(c.useEffect)((function(){j&&me.invoke("GET","/api/v1/policies").then((function(e){var t=Z()(e,"policies",[]);t.sort((function(e,t){return e.name>t.name?1:e.name365){var i=n/365;return"".concat(i," year").concat(1===Math.floor(i)?"":"s")}if(n>30){var r=Math.floor(n/30),o=n-30*r;return"".concat(r," month").concat(1===Math.floor(r)?"":"s"," ").concat(o>0?"".concat(o," day").concat(o>1?"s":""):"")}if(n>=7&&n<=30){var s=Math.floor(n/7);return"".concat(Math.floor(s)," week").concat(1===s?"":"s")}return n>=1&&n<=6?"".concat(n," day").concat(n>1?"s":""):"".concat(a>=1?"".concat(a," hour").concat(a>1?"s":""):""," ").concat(c>=1&&0===a?"".concat(c," minute").concat(c>1?"s":""):""," ").concat(t>=1&&0===c&&0===a?"".concat(t," second").concat(t>1?"s":""):"")}},{title:"Total Online disks",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-1"},{title:"Total Offline disks",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-2"},{title:"Total Data",data:[],dataOuter:[{name:"outer",value:100}],widgetConfiguration:{outerChart:{colorList:["#9c9c9c"],innerRadius:51,outerRadius:54,startAngle:-15,endAngle:195},innerChart:{colorList:Ea,innerRadius:35,outerRadius:50,startAngle:-15,endAngle:195}},type:ma.pieChart,layoutIdentifier:"panel-3",innerLabel:"N/A",labelDisplayFunction:ce},{title:"Data Growth",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-4",yAxisFormatter:ce,xAxisFormatter:ue},{title:"Object size distribution",data:[],widgetConfiguration:[{dataKey:"a",color:Ea[0],background:{fill:"rgba(0,0,0,0.1)"}}],customStructure:[{originTag:"LESS_THAN_1024_B",displayTag:"Less than 1024B"},{originTag:"BETWEEN_1024_B_AND_1_MB",displayTag:"Between 1024B and 1MB"},{originTag:"BETWEEN_1_MB_AND_10_MB",displayTag:"Between 1MB and 10MB"},{originTag:"BETWEEN_10_MB_AND_64_MB",displayTag:"Between 10MB and 64MB"},{originTag:"BETWEEN_64_MB_AND_128_MB",displayTag:"Between 64MB and 128MB"},{originTag:"BETWEEN_128_MB_AND_512_MB",displayTag:"Between 128MB and 512MB"},{originTag:"GREATER_THAN_512_MB",displayTag:"Greater than 512MB"}],type:ma.barChart,layoutIdentifier:"panel-5"},{title:"Total Online Servers",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-6"},{title:"Total Offline Servers",data:"N/A",type:ma.singleValue,layoutIdentifier:"panel-7"},{title:"Total S3 Traffic Inbound",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-8",color:"#22B573",fillColor:"#A6E8C4",labelDisplayFunction:ce},{title:"Total S3 Traffic Outbound",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-9",color:"#22B573",fillColor:"#A6E8C4",labelDisplayFunction:ce},{title:"Number of Buckets",data:[],innerLabel:"N/A",type:ma.singleRep,color:"#0071BC",fillColor:"#ADD5E0",layoutIdentifier:"panel-10"},{title:"Number of Objects",data:[],innerLabel:"N/A",type:ma.singleRep,color:"#0071BC",fillColor:"#ADD5E0",layoutIdentifier:"panel-11"},{title:"S3 API Request & Error Rate",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-12",disableYAxis:!0,xAxisFormatter:ue},{title:"Total Open FDs",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-13",color:"#F7655E",fillColor:"#F4CECE"},{title:"Total Goroutines",data:[],innerLabel:"N/A",type:ma.singleRep,layoutIdentifier:"panel-14",color:"#F7655E",fillColor:"#F4CECE"},{title:"S3 API Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-15",disableYAxis:!0,xAxisFormatter:ue},{title:"Total S3 API Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-16",yAxisFormatter:ce,xAxisFormatter:ue},{title:"Active S3 Requests",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-17",xAxisFormatter:ue},{title:"Internode Data Transfer",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-18",yAxisFormatter:ce,xAxisFormatter:ue},{title:"Online Disks",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-19",disableYAxis:!0,xAxisFormatter:ue},{title:"Disk Usage",data:[],widgetConfiguration:[{dataKey:"",keyLabel:"",lineColor:"#000",fillColor:"#000"}],type:ma.linearGraph,layoutIdentifier:"panel-20",yAxisFormatter:ce,xAxisFormatter:ue}],Aa=function(e,t){if(0===e.length)return["","0"];switch(t){case"mean":var n=e.reduce((function(e,t){return e+parseFloat(t[1])}),0);return["",Math.floor(n/e.length).toString()];default:var a=e.sort((function(e,t){return e[0]-t[0]}));return a[a.length-1]}},Ia=function(e){return _a.map((function(t){var n=e.find((function(e){return e.title===t.title}));if(!n)return t;var a=n.type;switch(t.type){case ma.singleValue:if("stat"===a||"singlestat"===a){var c=Z()(n,"targets[0].result[0].values",[]);null===c&&(c=[]);var i=Z()(n,"options.reduceOptions.calcs[0]","lastNotNull"),r=Aa(c,i),o=t.labelDisplayFunction?t.labelDisplayFunction(r[1]):r[1];return Object(j.a)(Object(j.a)({},t),{},{data:o})}break;case ma.pieChart:if("gauge"===a){var s=Z()(n,"targets[0].result",[]);null===s&&(s=[]);var l=Z()(n,"options.reduceOptions.calcs[0]","lastNotNull"),d=s.length>0?s[0].values:[],u=Aa(d,l),b=s.map((function(e){var t=Z()(e,"values",[]),n=Object.keys(e.metric),a=t.sort((function(e,t){return e[0]-t[0]})),c=e.metric[n[0]],i=a[a.length-1];return{name:c,value:parseInt(i)}})),m=t.labelDisplayFunction?t.labelDisplayFunction(u[1]):u[1];return Object(j.a)(Object(j.a)({},t),{},{data:b,innerLabel:m})}break;case ma.linearGraph:if("graph"===a){var p=Z()(n,"targets",[]);null===p&&(p=[]);var h=[],O=[];p.forEach((function(e,t){var n=Z()(e,"result",[]),a=e.legendFormat;null===n&&(n=[]),n.forEach((function(e){var n=function(e,t){var n=Object.keys(e),a=new RegExp("{{(".concat(n.join("|"),")}}"),"g");return t.replace(a,(function(t){var n=t.replace(/({{|}})/g,"");return e[n]})).replace(/{{(.*?)}}/g,"")}(e.metric,a),c="key_".concat(t).concat(n);h.push({dataKey:c,keyLabel:n,lineColor:"",fillColor:""});var i=Z()(e,"values",[]);null===i&&(i=[]),i.forEach((function(e){var t=O.findIndex((function(t){return t.name===e[0]}));if(-1===t){var n={name:e[0]};n[c]=e[1],O.push(n)}else O[t][c]=e[1]}))}))}));var g=h.sort((function(e,t){return e.keyLabelt.keyLabel?1:0})).map((function(e,t){return Object(j.a)(Object(j.a)({},e),{},{lineColor:Ea[t]||je(e.keyLabel),fillColor:Ea[t]||je(e.keyLabel)})})),f=O.sort((function(e,t){return e.name-t.name}));return Object(j.a)(Object(j.a)({},t),{},{widgetConfiguration:g,data:f})}break;case ma.barChart:if("bargauge"===a){var x=Z()(n,"targets[0].result",[]);null===x&&(x=[]);var v=function(e,t){return e[0]-t[0]},y=[];return y=t.customStructure?t.customStructure.map((function(e){var t=x.find((function(t){var n=Object.keys(t.metric);return t.metric[n[0]]===e.originTag})),n=Z()(t,"values",[]).sort(v),a=n[n.length-1]||["","0"];return{name:e.displayTag,a:parseInt(a[1])}})):x.map((function(e){var t=Object.keys(e.metric),n=e.metric[t[0]],a=Z()(e,"values",[]).sort(v),c=a[a.length-1]||["","0"];return{name:n,a:parseInt(c[1])}})),Object(j.a)(Object(j.a)({},t),{},{data:y})}break;case ma.singleRep:if("stat"===a){var C=Z()(n,"targets[0].result[0].values",[]);null===C&&(C=[]);var S=Z()(n,"options.reduceOptions.calcs[0]","lastNotNull"),k=Aa(C,S),w=C.sort((function(e,t){return e[0]-t[0]})),N=[];1===w.length&&N.push({value:0}),w.forEach((function(e){N.push({value:parseInt(e[1])})}));var T=t.labelDisplayFunction?t.labelDisplayFunction(k[1]):k[1];return Object(j.a)(Object(j.a)({},t),{},{data:N,innerLabel:T})}}return t}))},Ma=function(e){localStorage.setItem(Na,btoa(JSON.stringify(e)))},La=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},Re),{},{contentContainer:Object(j.a)(Object(j.a)({},Re.contentContainer),{},{fontWeight:700,color:"#072045",fontSize:18,textAlign:"center"})}))}))((function(e){var t=e.title,n=e.data,c=e.classes;return Object(a.jsxs)("div",{className:c.singleValueContainer,children:[Object(a.jsx)("div",{className:c.titleContainer,children:t}),Object(a.jsx)("div",{className:c.contentContainer,children:n})]})})),Da=n(657),Ba=n(639),Fa=n(643),Ra=n(193),Pa=n(194),za=n(320),Ka=n(201),Ua=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Pe))}))((function(e){var t=e.active,n=e.payload,c=e.label,i=e.linearConfiguration,r=e.yAxisFormatter,o=e.classes;return t?Object(a.jsxs)("div",{className:o.customTooltip,children:[Object(a.jsx)("div",{className:o.timeStampTitle,children:ue(c,!0)}),n&&n.map((function(e,t){return Object(a.jsxs)("div",{className:o.labelContainer,children:[Object(a.jsx)("div",{className:o.labelColor,style:{backgroundColor:i[t].lineColor}}),Object(a.jsx)("div",{className:o.itemValue,children:Object(a.jsxs)("span",{className:o.valueContainer,children:[i[t].keyLabel,":"," ",r(e.value)]})})]},"lbPl-".concat(t,"-").concat(i[t].keyLabel))}))]}):null})),Wa=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},Re),{},{containerElements:{display:"flex",flexDirection:"column",height:"calc(100% - 18px)"},chartCont:{position:"relative",flexGrow:1,minHeight:"65%",height:1},legendChart:{display:"flex",flexWrap:"wrap",flex:"0 1 auto",maxHeight:"35%",margin:0,overflowY:"auto",position:"relative",textAlign:"center"}}))}))((function(e){var t=e.classes,n=e.title,c=e.linearConfiguration,i=e.data,r=e.hideYAxis,o=void 0!==r&&r,s=e.yAxisFormatter,l=void 0===s?function(e){return e}:s,d=e.xAxisFormatter,u=void 0===d?function(e){return e}:d,b=e.panelWidth,j=void 0===b?0:b,m=5;return 0!==j&&(m=j>400?5:j>350?10:j>300?15:j>250?20:30),Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsxs)("div",{className:t.containerElements,children:[Object(a.jsx)("div",{className:t.chartCont,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(Ba.a,{data:i,margin:{top:5,right:20,left:o?20:5,bottom:0},children:[Object(a.jsx)(Fa.a,{strokeDasharray:"3 3",strokeWidth:1,strokeOpacity:.5}),Object(a.jsx)(Ra.a,{dataKey:"name",tickFormatter:function(e){return u(e)},interval:m,tick:{fontSize:"70%"},tickCount:10}),Object(a.jsx)(Pa.a,{domain:[0,function(e){return 4*e}],hide:o,tickFormatter:function(e){return l(e)},tick:{fontSize:"70%"}}),c.map((function(e,t){return Object(a.jsx)(za.a,{type:"monotone",dataKey:e.dataKey,stroke:e.lineColor,fill:e.fillColor,fillOpacity:.3},"area-".concat(e.dataKey,"-").concat(t.toString()))})),Object(a.jsx)(Ka.a,{content:Object(a.jsx)(Ua,{linearConfiguration:c,yAxisFormatter:l}),wrapperStyle:{zIndex:5e3}})]})})}),Object(a.jsx)("div",{className:t.legendChart,children:c.map((function(e,n){return Object(a.jsxs)("div",{className:t.singleLegendContainer,children:[Object(a.jsx)("div",{className:t.colorContainer,style:{backgroundColor:e.lineColor}}),Object(a.jsx)("div",{className:t.legendLabel,children:e.keyLabel})]},"legend-".concat(e.keyLabel,"-").concat(n.toString()))}))})]})]})})),qa=n(644),Va=n(347),Ga=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Pe))}))((function(e){var t=e.active,n=e.payload,c=e.label,i=e.barChartConfiguration,r=e.classes;return t?Object(a.jsxs)("div",{className:r.customTooltip,children:[Object(a.jsx)("div",{className:r.timeStampTitle,children:c}),n&&n.map((function(e,t){return Object(a.jsxs)("div",{className:r.labelContainer,children:[Object(a.jsx)("div",{className:r.labelColor,style:{backgroundColor:i[t].color}}),Object(a.jsx)("div",{className:r.itemValue,children:Object(a.jsx)("span",{className:r.valueContainer,children:e.value})})]},"pltiem-".concat(t,"-").concat(c))}))]}):null})),Ha=function(e){var t=e.x,n=e.y,c=e.payload;return Object(a.jsx)("text",{width:50,fontSize:"63%",textAnchor:"end",fill:"#333",transform:"translate(".concat(t,",").concat(n,")"),dy:3,children:c.value})},Ya=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Re))}))((function(e){var t=e.classes,n=e.title,c=e.barChartConfiguration,i=e.data;return Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsx)("div",{className:t.contentContainer,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(qa.a,{data:i,layout:"vertical",barCategoryGap:1,children:[Object(a.jsx)(Ra.a,{type:"number",hide:!0}),Object(a.jsx)(Pa.a,{dataKey:"name",type:"category",interval:0,tick:Object(a.jsx)(Ha,{}),tickLine:!1,axisLine:!1,width:150}),c.map((function(e){return Object(a.jsx)(Va.a,{dataKey:e.dataKey,fill:e.color,background:e.background},"bar-".concat(e.dataKey))})),Object(a.jsx)(Ka.a,{cursor:{fill:"rgba(255, 255, 255, 0.3)"},content:Object(a.jsx)(Ga,{barChartConfiguration:c})})]})})})]})})),Qa=n(659),Za=n(322),Ja=n(195),$a=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Re))}))((function(e){var t=e.classes,n=e.title,c=e.pieChartConfiguration,i=e.dataInner,r=e.dataOuter,o=e.middleLabel,s=void 0===o?"":o,l=Z()(c,"innerChart.colorList",[]),d=Z()(c,"outerChart.colorList",[]);return Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsx)("div",{className:t.contentContainer,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(Qa.a,{margin:{top:5,bottom:5},children:[r&&Object(a.jsx)(Za.a,{data:r,cx:"50%",cy:"50%",dataKey:"value",innerRadius:Z()(c,"outerChart.innerRadius",0),outerRadius:Z()(c,"outerChart.outerRadius","80%"),startAngle:Z()(c,"outerChart.startAngle",0),endAngle:Z()(c,"outerChart.endAngle",360),fill:"#201763",children:r.map((function(e,t){return Object(a.jsx)(Ja.a,{fill:"undefined"==typeof d[t]?"#393939":d[t]},"cellOuter-".concat(t))}))}),i&&Object(a.jsx)(Za.a,{data:i,dataKey:"value",cx:"50%",cy:"50%",innerRadius:Z()(c,"innerChart.innerRadius",0),outerRadius:Z()(c,"innerChart.outerRadius","80%"),startAngle:Z()(c,"innerChart.startAngle",0),endAngle:Z()(c,"innerChart.endAngle",360),fill:"#201763",children:i.map((function(e,t){return Object(a.jsx)(Ja.a,{fill:"undefined"==typeof l[t]?"#393939":l[t]},"cell-".concat(t))}))}),s&&Object(a.jsx)("text",{x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle",fontWeight:600,fontSize:14,children:s})]})})})]})})),Xa=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Re))}))((function(e){var t=e.classes,n=e.title,c=e.data,i=e.color,r=e.fillColor,o=e.label;return Object(a.jsxs)("div",{className:t.singleValueContainer,children:[Object(a.jsx)("div",{className:t.titleContainer,children:n}),Object(a.jsx)("div",{className:t.contentContainer,children:Object(a.jsx)(Da.a,{children:Object(a.jsxs)(Ba.a,{data:c,children:[Object(a.jsx)(Pa.a,{domain:[0,function(e){return 2*e}],hide:!0}),Object(a.jsx)(za.a,{type:"monotone",dataKey:"value",stroke:i,fill:r,fillOpacity:1}),Object(a.jsx)("text",{x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle",fontWeight:600,fontSize:18,fill:i,children:o})]})})})]})})),ec=n(326),tc=n(58),nc=n(651),ac=n(327),cc=n.n(ac),ic=Object(N.a)((function(e){return Object(k.a)({dateSelectorOverride:{height:40,border:"#EAEDEE 1px solid",marginLeft:15,backgroundColor:"#fff",padding:"0 16px",borderRadius:5,"&.MuiInput-underline:hover:not(.Mui-disabled):before":{borderBottom:0},"&:hover":{borderColor:"#000","&:before, &:after":{borderColor:"transparent",borderBottom:0}},"&:before, &:after":{borderColor:"transparent",borderBottom:0},"& input":{fontSize:12,fontWeight:600,color:"#393939"}},parentDateOverride:{flexGrow:1}})}))((function(e){var t=e.value,n=e.onChange,c=e.classes;return Object(a.jsx)(tc.a,{utils:ec.a,children:Object(a.jsx)(nc.a,{value:t,onChange:n,InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(cc.a,{})}),className:c.dateSelectorOverride},label:"",ampm:!1,variant:"inline",className:c.parentDateOverride,format:"MMMM Do YYYY, h:mm a"})})})),rc=Object(s.b)(null,{displayErrorMessage:q}),oc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({widgetsContainer:{height:"calc(100vh - 250px)",paddingBottom:235}},Ae),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(rc((function(e){var t=e.classes,n=e.displayErrorMessage,i=Object(c.useState)(null),r=Object(b.a)(i,2),o=r[0],s=r[1],l=Object(c.useState)(null),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!0),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(_a),v=Object(b.a)(f,2),y=v[0],C=v[1],S=function(){var e=localStorage.getItem(Na);if(!e)return Ta;var t=JSON.parse(atob(e));return 0===t.length||t.length>0&&!t[0].minW?Ta:t}(),k=Object(c.useCallback)((function(e){var t=e/8+5,n=function(e,n){switch(e.type){case ma.singleValue:return Object(a.jsx)(La,{title:e.title,data:e.data});case ma.pieChart:return Object(a.jsx)($a,{title:e.title,dataInner:e.data,dataOuter:e.dataOuter||null,pieChartConfiguration:e.widgetConfiguration,middleLabel:e.innerLabel});case ma.linearGraph:return Object(a.jsx)(Wa,{title:e.title,data:e.data,linearConfiguration:e.widgetConfiguration,hideYAxis:e.disableYAxis,xAxisFormatter:e.xAxisFormatter,yAxisFormatter:e.yAxisFormatter,panelWidth:t*S[n].w});case ma.barChart:return Object(a.jsx)(Ya,{title:e.title,data:e.data,barChartConfiguration:e.widgetConfiguration});case ma.singleRep:var c=e.fillColor?e.fillColor:e.color;return Object(a.jsx)(Xa,{title:e.title,data:e.data,label:e.innerLabel,color:e.color,fillColor:c});default:return null}};return y.map((function(e,t){return Object(a.jsx)("div",{children:n(e,t)},e.layoutIdentifier)}))}),[y,S]),w=Object(c.useCallback)((function(){var e=15;if(null!==o&&null!==u){var t=(u.unix()-o.unix())/60;e=t<1?15:t}me.invoke("GET","/api/v1/admin/info?step=".concat(e,"&").concat(null!==o?"&start=".concat(o.unix()):"").concat(null!==o&&null!==u?"&":"").concat(null!==u?"end=".concat(u.unix()):"")).then((function(e){if(e.widgets){var t=Ia(e.widgets);C(t)}else n("Widget information could not be retrieved at this time. Please try again");O(!1)})).catch((function(e){n(e),O(!1)}))}),[o,u,n]);return Object(c.useEffect)((function(){h&&w()}),[h,w]),Object(a.jsxs)(x.a,{container:!0,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(t.actionsTray," ").concat(t.timeContainers),children:[Object(a.jsx)("span",{className:t.label,children:"Start Time"}),Object(a.jsx)(ic,{value:o,onChange:s}),Object(a.jsx)("span",{className:t.label,children:"End Time"}),Object(a.jsx)(ic,{value:u,onChange:j}),Object(a.jsx)(g.a,{type:"button",variant:"contained",color:"primary",onClick:function(){O(!0)},children:"Get Information"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.widgetsContainer,children:Object(a.jsx)(Mt.a,{style:{width:"100%",height:"auto",paddingBottom:45},children:function(e){var t=e.width,n=e.height,c=n<600?600:n;c>380&&(c=480);var i=t>1920?1920:t;return Object(a.jsx)(ka.a,{width:i,cols:8,containerPadding:[10,10],onLayoutChange:Ma,layout:S,rowHeight:c/6,style:{margin:"0 auto",width:i},children:k(t)})}})})]})}))),sc=function(){return Object(a.jsxs)($e.a,{viewBox:"0 0 15.834 17.375",children:[Object(a.jsx)("defs",{children:Object(a.jsxs)("linearGradient",{id:"a",y1:"0.5",x2:"1",y2:"0.5",gradientUnits:"objectBoundingBox",children:[Object(a.jsx)("stop",{offset:"0.044",stopColor:"#362585"}),Object(a.jsx)("stop",{offset:"0.301",stopColor:"#281b6f"}),Object(a.jsx)("stop",{offset:"1",stopColor:"#1e1560"})]})}),Object(a.jsxs)("g",{transform:"translate(0 0.375)",children:[Object(a.jsx)("circle",{style:{opacity:.1,fill:"url(#a)"},cx:"6.625",cy:"6.625",r:"6.625",transform:"translate(0 3.75)"}),Object(a.jsxs)("g",{transform:"translate(3.092)",children:[Object(a.jsx)("ellipse",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.75px"},cx:"6.183",cy:"1.244",rx:"6.183",ry:"1.244",transform:"translate(0)"}),Object(a.jsx)("path",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.75px"},d:"M-3722.174,1225.225l-1.687,10.292a.858.858,0,0,1-.578.669,12.182,12.182,0,0,1-3.918.647,12.187,12.187,0,0,1-3.894-.639.878.878,0,0,1-.6-.678q-.843-5.145-1.687-10.291",transform:"translate(3734.541 -1223.981)"})]})]})]})},lc=function(){return Object(a.jsxs)($e.a,{viewBox:"0 0 18.344 17.009",children:[Object(a.jsx)("defs",{children:Object(a.jsxs)("linearGradient",{id:"a",y1:"0.5",x2:"1",y2:"0.5",gradientUnits:"objectBoundingBox",children:[Object(a.jsx)("stop",{offset:"0.044",stopColor:"#362585"}),Object(a.jsx)("stop",{offset:"0.301",stopColor:"#281b6f"}),Object(a.jsx)("stop",{offset:"1",stopColor:"#1e1560"})]})}),Object(a.jsxs)("g",{transform:"translate(0 0.25)",children:[Object(a.jsx)("ellipse",{style:{opacity:.1,fill:"url(#a)"},cx:"7.462",cy:"7.462",rx:"7.462",ry:"7.462",transform:"translate(0 1.835)"}),Object(a.jsx)("rect",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.5px"},width:"9.323",height:"9.323",transform:"translate(4.083)"}),Object(a.jsx)("rect",{style:{fill:"none",stroke:"#707070",strokeMiterlimit:10,strokeWidth:"0.5px"},width:"8.223",height:"8.223",transform:"translate(9.871 5.307)"})]})]})},dc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})),{},{paper:{padding:e.spacing(2),display:"flex",overflow:"auto",flexDirection:"column",border:"#eaedee 1px solid",borderRadius:5,boxShadow:"none"},fixedHeight:{height:165,minWidth:247,marginRight:20,padding:"25px 28px","& svg":{maxHeight:18}},consumptionValue:{color:"#000000",fontSize:"60px",fontWeight:"bold"},icon:{marginRight:10,color:"#777777"},notationContainer:{display:"flex"},dashboardBG:{width:390,height:255,zIndex:500,position:"absolute",backgroundSize:"fill",backgroundImage:"url(/images/BG_IllustrationDarker.svg)",backgroundPosition:"right bottom",right:0,bottom:0,backgroundRepeat:"no-repeat"},dashboardContainer:{zIndex:600,position:"absolute"},elementTitle:{fontWeight:500,color:"#777777",fontSize:14,marginTop:-9},smallUnit:{fontSize:20}}))}))((function(e){var t=e.classes,n=e.usage,i=Object(fe.a)(t.paper,t.fixedHeight),r=function(e){return void 0===e?0:e.toString().replace(/\B(?=(\d{3})+(?!\d))/g,",")};return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("div",{className:t.dashboardBG}),Object(a.jsx)(x.a,{container:!0,className:t.dashboardContainer,children:Object(a.jsx)(x.a,{container:!0,spacing:3,className:t.container,children:Object(a.jsxs)(x.a,{item:!0,className:t.notationContainer,children:[Object(a.jsxs)(S.a,{className:i,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(sc,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(v.a,{className:t.elementTitle,children:"All buckets"})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:n?r(n.buckets):0})]}),Object(a.jsxs)(S.a,{className:i,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(ra,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsx)(v.a,{className:t.elementTitle,children:"Usage"})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:n?function(e){if(void 0===e)return"0";var n=ce(e).split(" ");return 2!==n.length?n.join(" "):Object(a.jsxs)(c.Fragment,{children:[n[0],Object(a.jsx)("span",{className:t.smallUnit,children:n[1]})]})}(n.usage+""):0})]}),Object(a.jsxs)(S.a,{className:i,children:[Object(a.jsxs)(x.a,{container:!0,direction:"row",alignItems:"center",children:[Object(a.jsx)(x.a,{item:!0,className:t.icon,children:Object(a.jsx)(lc,{})}),Object(a.jsx)(x.a,{item:!0,children:Object(a.jsxs)(v.a,{className:t.elementTitle,children:[" ","Total Objects"]})})]}),Object(a.jsx)(v.a,{className:t.consumptionValue,children:n?r(n.objects):0})]})]})})})]})})),uc=Object(s.b)(null,{displayErrorMessage:q}),bc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(uc((function(e){var t=e.classes,n=e.displayErrorMessage,i=Object(c.useState)(!0),r=Object(b.a)(i,2),o=r[0],s=r[1],l=Object(c.useState)(null),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useCallback)((function(){me.invoke("GET","/api/v1/admin/info").then((function(e){j(e),s(!1)})).catch((function(e){n(e),s(!1)}))}),[j,s,n]);Object(c.useEffect)((function(){o&&m()}),[o,m]);var p=Z()(u,"widgets",null);return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(Rn,{label:"Dashboard"}),Object(a.jsx)(x.a,{container:!0,children:o?Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container,children:Object(a.jsx)(y.a,{})}):Object(a.jsx)(c.Fragment,{children:null!==p?Object(a.jsx)(oc,{}):Object(a.jsx)(dc,{usage:u})})})]})}))),jc=n(570),mc=n(646),pc=n(328),hc=n.n(pc),Oc=n(645),gc=n(647),fc=n(616),xc=n(648),vc=n.p+"static/media/minio_console_logo.0837460e.svg",yc=n.p+"static/media/minio_operator_logo.1312b7c9.svg",Cc=[{label:"",group:"common",collapsible:!1},{label:"User",group:"User",collapsible:!0},{label:"Admin",group:"Admin",collapsible:!0},{label:"Tools",group:"Tools",collapsible:!0},{label:"Operator",group:"Operator",collapsible:!1},{label:"",group:"License",collapsible:!1}],Sc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 11",children:[Object(a.jsx)("path",{fill:"#fff",d:"M11 11H0V2h11v9zM2 8v1h7V8zm0-3v1h5V5z"}),Object(a.jsxs)("g",{fill:"#07274a",stroke:"#fdfdfd",strokeWidth:"0.5",transform:"translate(7)",children:[Object(a.jsx)("circle",{cx:"3",cy:"3",r:"3",stroke:"none"}),Object(a.jsx)("circle",{cx:"3",cy:"3",r:"2.75",fill:"none"})]}),Object(a.jsx)("path",{fill:"none",stroke:"#fff",strokeWidth:"0.5",d:"M8.73 2.794l.954.953 1.471-1.471"})]})})},kc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 12.122 10.571",children:Object(a.jsxs)("g",{transform:"translate(0 0.5)",children:[Object(a.jsx)("path",{style:{fill:"none",stroke:"rgba(255,255,255,0.8)"},d:"M4816.27,3755.205v-2.939h8.539v9.571h-8.539v-2.932",transform:"translate(-4813.187 -3752.266)"}),Object(a.jsx)("path",{style:{fill:"none",stroke:"rgba(255,255,255,0.8)"},d:"M4813.187,3757.052h8.081",transform:"translate(-4813.187 -3752.266)"}),Object(a.jsx)("path",{style:{fill:"none",stroke:"rgba(255,255,255,0.8)"},d:"M4806.5,3756.511l2.265,2.063-2.265,2.063",transform:"translate(-4800.808 -3753.863)"})]})})})},wc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10 10",children:Object(a.jsxs)("g",{transform:"translate(-518 -361)",children:[Object(a.jsx)("path",{d:"M-126,0V10h10V0Zm1.5,8.5V2.95h7V8.5Z",transform:"translate(644 361)"}),Object(a.jsx)("rect",{width:"2",height:"1",transform:"translate(520.272 364.772)"})]})})})},Nc=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 10.014 9.993",children:[Object(a.jsx)("path",{className:"a",d:"M9.162,5.971h0L8.192,5,9.346,3.846a2.257,2.257,0,0,0,0-3.192,2.311,2.311,0,0,0-3.192,0L5,1.808,4.029.837,3.846.654a2.311,2.311,0,0,0-3.192,0,2.257,2.257,0,0,0,0,3.192l.184.183h0L1.808,5,.654,6.154A2.257,2.257,0,0,0,3.846,9.346L5,8.192l.971.971.183.183A2.257,2.257,0,0,0,9.346,6.154Zm-2.29-4.6a1.27,1.27,0,0,1,1.757,0,1.242,1.242,0,0,1,0,1.757L7.475,4.283,5.717,2.525Zm-5.5,1.757A1.243,1.243,0,0,1,3.129,1.371l.183.183L1.555,3.312Zm1.757,5.5a1.27,1.27,0,0,1-1.757,0,1.242,1.242,0,0,1,0-1.757L2.525,5.717,4.283,7.475Zm2.843-.9-.254-.253L2.525,4.283l-.253-.254L4.029,2.272l.254.253L7.475,5.717l.253.254Zm2.657.9a1.271,1.271,0,0,1-1.757,0l-.183-.183L8.446,6.688l.183.183h0a1.241,1.241,0,0,1,0,1.757Z",transform:"translate(0.007 -0.014)"}),Object(a.jsx)("circle",{cx:"0.5",cy:"0.5",r:"0.5",transform:"translate(4.507 4.486)"}),Object(a.jsx)("circle",{cx:"0.5",cy:"0.5",r:"0.5",transform:"translate(3.507 3.486)"}),Object(a.jsx)("circle",{cx:"0.5",cy:"0.5",r:"0.5",transform:"translate(5.507 5.486)"})]})})},Tc=n(329),Ec=n.n(Tc),_c=Object(s.b)((function(e){return{open:e.system.loggedIn,operatorMode:e.system.operatorMode}}),{userLoggedIn:P}),Ac=_c(Object(N.a)((function(e){return Object(k.a)({logo:{paddingTop:25,marginBottom:30,paddingLeft:45,"& img":{width:120}},menuList:{"& .active":{borderTopLeftRadius:2,borderBottomLeftRadius:2,color:"#fff",backgroundColor:"rgba(255, 255, 255, .18)","& .MuiSvgIcon-root":{color:"white"},"& .MuiTypography-root":{color:"#fff",fontWeight:700}},"& .MuiSvgIcon-root":{fontSize:16,color:"rgba(255, 255, 255, 0.8)",maxWidth:14},"& .MuiListItemIcon-root":{minWidth:25},"& .MuiTypography-root":{fontSize:12,color:"rgba(255, 255, 255, 0.8)"},"& .MuiListItem-gutters":{paddingRight:0,fontWeight:300},"& .MuiListItem-root":{padding:"2px 0 2px 16px",marginBottom:8,marginLeft:30,width:"calc(100% - 30px)"},"& .MuiCollapse-container .MuiCollapse-wrapper .MuiCollapse-wrapperInner .MuiDivider-root":{backgroundColor:"rgba(112,112,112,0.5)",marginBottom:12,height:1}},extraMargin:{"&.MuiListItem-gutters":{marginLeft:5}},groupTitle:{color:"#fff",fontSize:10,textTransform:"uppercase",fontWeight:700,marginBottom:3,cursor:"pointer",userSelect:"none",display:"flex",justifyContent:"space-between"},subTitleMenu:{fontWeight:700,marginLeft:10,"&.MuiTypography-root":{fontSize:13,color:"#fff"}},selectorArrow:{marginRight:20,marginTop:1,display:"inline-block",width:0,height:0,borderStyle:"solid",borderWidth:"4px 4px 0 4px",borderColor:"rgba(255, 255, 255, .29) transparent transparent transparent",transform:"rotateZ(0deg)",transitionDuration:"0.2s"},selectorArrowOpen:{transform:"rotateZ(180deg)"}})}))((function(e){var t=e.userLoggedIn,n=e.classes,r=e.pages,o=e.operatorMode,s=Object(c.useState)(function(){var e=[];return Cc.forEach((function(t){t.collapsible&&(e[t.group]=!0)})),e}()),l=Object(b.a)(s,2),d=l[0],m=l[1],p=[{group:"common",type:"item",component:Zt.b,to:"/dashboard",name:"Dashboard",icon:Object(a.jsx)(nt,{})},{group:"User",type:"item",component:Zt.b,to:"/object-browser",name:"Object Browser",icon:Object(a.jsx)(hc.a,{})},{group:"User",type:"item",component:Zt.b,to:"/account",name:"Account",icon:Object(a.jsx)(it,{})},{group:"Admin",type:"item",component:Zt.b,to:"/buckets",name:"Buckets",icon:Object(a.jsx)(at,{})},{group:"Admin",type:"item",component:Zt.b,to:"/users",name:"Users",icon:Object(a.jsx)(ct,{})},{group:"Admin",type:"item",component:Zt.b,to:"/groups",name:"Groups",icon:Object(a.jsx)(rt,{})},{group:"Admin",type:"item",component:Zt.b,to:"/policies",name:"IAM Policies",icon:Object(a.jsx)(ot,{})},{group:"Tools",type:"item",component:Zt.b,to:"/logs",name:"Logs",icon:Object(a.jsx)(wc,{})},{group:"Tools",type:"item",component:Zt.b,to:"/watch",name:"Watch",icon:Object(a.jsx)(jt,{})},{group:"Tools",type:"item",component:Zt.b,to:"/trace",name:"Trace",icon:Object(a.jsx)(st,{})},{group:"Tools",type:"item",component:Zt.b,to:"/heal",name:"Heal",icon:Object(a.jsx)(Nc,{})},{group:"Tools",type:"item",component:Zt.b,to:"/health-info",name:"Diagnostic",icon:Object(a.jsx)(Ec.a,{})},{group:"Admin",type:"item",component:Zt.b,to:"/settings",name:"Settings",icon:Object(a.jsx)(lt,{})},{group:"Operator",type:"item",component:Zt.b,to:"/tenants",name:"Tenants",icon:Object(a.jsx)(dt,{})},{group:"Operator",type:"item",component:Zt.b,to:"/mirroring",name:"Mirroring",icon:Object(a.jsx)(ut,{})},{group:"Operator",type:"item",component:Zt.b,to:"/warp",name:"Warp",icon:Object(a.jsx)(bt,{})}],h=r.reduce((function(e,t,n){return e[t]=!0,e}),{});h.hasOwnProperty("/tenants")?p.push({group:"Operator",type:"item",component:Zt.b,to:"/license",name:"License",icon:Object(a.jsx)(Sc,{})}):p.push({group:"License",type:"item",component:Zt.b,to:"/license",name:"License",icon:Object(a.jsx)(Sc,{})});var O=p.filter((function(e){return h[e.to]||e.forceDisplay||"item"!==e.type}));return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("div",{className:n.logo,children:Object(a.jsx)("img",{src:o?yc:vc,alt:"logo"})}),Object(a.jsxs)(fc.a,{className:n.menuList,children:[Cc.map((function(e,t){var c=(O||[]).filter((function(t){return t.group===e.group}));return 0===c.filter((function(e){return"title"!==e.type})).length?null:Object(a.jsxs)(i.a.Fragment,{children:[""!==e.label&&Object(a.jsxs)(jc.a,{className:n.groupTitle,onClick:function(){e.collapsible&&function(e){var t=Object(j.a)({},d);t[e]=!t[e],m(t)}(e.group)},children:[Object(a.jsx)("span",{children:e.label}),e.collapsible&&Object(a.jsx)("span",{className:"".concat(n.selectorArrow," ").concat(d[e.group]?n.selectorArrowOpen:"")})]}),Object(a.jsxs)(Oc.a,{in:!e.collapsible||d[e.group],timeout:"auto",unmountOnExit:!0,children:[c.map((function(e){switch(e.type){case"item":return Object(a.jsxs)(jc.a,{button:!0,component:e.component,to:e.to,className:e.extraMargin?n.extraMargin:null,children:[e.icon&&Object(a.jsx)(mc.a,{children:e.icon}),e.name&&Object(a.jsx)(gc.a,{primary:e.name})]},e.to);case"title":return Object(a.jsx)(jc.a,{component:e.component,className:n.subTitleMenu,children:e.name},e.name);default:return null}})),Object(a.jsx)(xc.a,{})]},"menuGroup-".concat(e.group))]},"menuElem-".concat(t.toString()))})),Object(a.jsxs)(jc.a,{button:!0,onClick:function(){var e=function(){ie(),t(!1),localStorage.setItem("userLoggedIn",""),u.push("/login")};me.invoke("POST","/api/v1/logout").then((function(){e()})).catch((function(t){console.log(t),e()}))},children:[Object(a.jsx)(mc.a,{children:Object(a.jsx)(kc,{})}),Object(a.jsx)(gc.a,{primary:"Logout"})]})]})]})}))),Ic={setModalErrorSnackMessage:G},Mc=Object(s.b)(null,Ic),Lc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({jsonPolicyEditor:{minHeight:400,width:"100%"},buttonContainer:{textAlign:"right"},infoDetails:{color:"#393939",fontSize:12,fontStyle:"italic"}},ke))}))(Mc((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.setModalErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1];Object(c.useEffect)((function(){l&&me.invoke("POST","/api/v1/service-accounts",{policy:m}).then((function(e){d(!1),i(e)})).catch((function(e){d(!1),r(e)}))}),[l,d,r,m,i]);return Object(a.jsx)(jn,{modalOpen:n,onClose:function(){i(null)},title:"Create Service Account",children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault(),d(!0)}(e)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)("div",{className:t.infoDetails,children:"Service Accounts inherit the policy explicitly attached to the parent user and the policy attached to each group in which the parent user has membership. You can specify an optional JSON-formatted policy below to restrict the Service Account access to a subset of actions and resources explicitly allowed for the parent user. You cannot modify the Service Account optional policy after saving."}),Object(a.jsx)(pa,{value:m,onBeforeChange:function(e,t,n){p(n)}})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){p("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:l,children:"Create"})]}),l&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),Dc={setErrorSnackMessage:q},Bc=Object(s.b)(null,Dc),Fc=Object(N.a)((function(e){return Object(k.a)({wrapText:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"}})}))(Bc((function(e){var t=e.classes,n=e.closeDeleteModalAndRefresh,i=e.deleteOpen,r=e.selectedServiceAccount,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];Object(c.useEffect)((function(){d&&me.invoke("DELETE","/api/v1/service-accounts/".concat(r)).then((function(){u(!1),n(!0)})).catch((function(e){u(!1),o(e)}))}),[d,n,r,o]);return Object(a.jsxs)(sn.a,{open:i,onClose:function(){n(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete ServiceAccount"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete service account"," ",Object(a.jsx)("b",{className:t.wrapText,children:r}),"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){n(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){null!=r&&u(!0)},color:"secondary",autoFocus:!0,children:"Delete"})]})]})}))),Rc=Object(N.a)((function(e){return Object(k.a)({warningBlock:{color:"red"},buttonContainer:{textAlign:"right"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,c=e.open,r=e.closeModal,o=e.entity;if(!n)return null;var s=Z()(n,"console",null);return Object(a.jsx)(jn,{modalOpen:c,onClose:function(){r()},title:"New ".concat(o," Created"),children:Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:["A new ",o," has been created with the following details:",s&&Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("strong",{children:"Console Credentials"}),Object(a.jsxs)("ul",{children:[Object(a.jsxs)("li",{children:[Object(a.jsx)("b",{children:"Access Key:"})," ",s.accessKey]}),Object(a.jsxs)("li",{children:[Object(a.jsx)("b",{children:"Secret Key:"})," ",s.secretKey]})]})]})}),Object(a.jsx)(v.a,{component:"p",variant:"body1",className:t.warningBlock,children:"Write these down, as this is the only time the secret will be displayed."})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)(g.a,{onClick:function(){var e={};s&&(e={console:{access_key:s.accessKey,secret_key:s.secretKey}}),function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)}("credentials.json",JSON.stringify(Object(j.a)({},e)))},color:"primary",children:"Download"}),Object(a.jsx)(g.a,{onClick:function(){r()},color:"secondary",autoFocus:!0,children:"Done"})]})]})})})})),Pc=function(e,t){return e.accessKey>t.accessKey?1:e.accessKeyt.name?1:e.namet?1:e0&&m.length>0&&f.length>0),children:"Save"})}),k&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})}):null}))),Gc=Object(s.b)(null,{displayErrorMessage:q}),Hc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"480px",minWidth:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},imageIcon:{height:"100%"},iconRoot:{textAlign:"center"}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(Gc((function(e){var t=e.classes,n=e.displayErrorMessage,r=e.changePassword,o=Object(c.useState)([]),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(!1),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(""),O=Object(b.a)(h,2),y=O[0],C=O[1],S=Object(c.useState)(!1),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(!1),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(null),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(!1),F=Object(b.a)(B,2),R=F[0],P=F[1],z=Object(c.useState)(null),K=Object(b.a)(z,2),U=K[0],W=K[1],q=Object(c.useState)(!1),V=Object(b.a)(q,2),G=V[0],H=V[1];Object(c.useEffect)((function(){Y()}),[]),Object(c.useEffect)((function(){m&&me.invoke("GET","/api/v1/service-accounts").then((function(e){var t=e.sort(Kc);p(!1),d(t)})).catch((function(e){n(e),p(!1)}))}),[m,p,d,n]);var Y=function(){p(!0)},Q=[{type:"delete",onClick:function(e){D(e),A(!0)}}],Z=l.filter((function(e){return e.toLowerCase().includes(y.toLowerCase())}));return Object(a.jsxs)(i.a.Fragment,{children:[w&&Object(a.jsx)(Lc,{open:w,closeModalAndRefresh:function(e){!function(e){if(N(!1),Y(),null!==e){var t={console:{accessKey:"".concat(e.accessKey),secretKey:"".concat(e.secretKey)}};W(t),P(!0)}}(e)}}),_&&Object(a.jsx)(Fc,{deleteOpen:_,selectedServiceAccount:L,closeDeleteModalAndRefresh:function(e){!function(e){A(!1),e&&Y()}(e)}}),R&&Object(a.jsx)(Rc,{newServiceAccount:U,open:R,closeModal:function(){P(!1),W(null)},entity:"Service Account"}),Object(a.jsx)(Rn,{label:"Account"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[r&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"h5",component:"h5",children:"Settings"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(Vc,{open:G,closeModal:function(){return H(!1)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(Wc.a,{}),onClick:function(){return H(!0)},children:"Change Password"})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsx)(xc.a,{}),Object(a.jsx)("br",{})]})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"h5",component:"h5",children:"Service Accounts"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Service Accounts",className:t.searchField,id:"search-resource",label:"",InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){C(e.target.value)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){N(!0),D(null)},children:"Create service account"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{isLoading:m,records:Z,entityName:"Service Accounts",idField:"",columns:[{label:"Service Account",elementKey:""}],itemActions:Q})})]})})]})}))),Yc=n(331),Qc=n.n(Yc),Zc={setModalErrorSnackMessage:G},Jc=Object(s.b)(null,Zc),$c=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#000",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#000"}}}},Ae),De))}))(Jc((function(e){var t=e.classes,n=e.selectedGroups,r=e.setSelectedGroups,o=e.setModalErrorSnackMessage,s=Object(c.useState)([]),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!1),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(""),g=Object(b.a)(O,2),v=g[0],C=g[1],k=Object(c.useCallback)((function(){me.invoke("GET","/api/v1/groups").then((function(e){var t=Z()(e,"groups",[]);t||(t=[]),u(t.sort(Kc)),h(!1)})).catch((function(e){o(e),h(!1)}))}),[o]);Object(c.useEffect)((function(){h(!0)}),[]),Object(c.useEffect)((function(){p&&k()}),[p,k]);var w=n||[],N=d.filter((function(e){return e.includes(v)}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:t.paper,children:[p&&Object(a.jsx)(y.a,{}),null!=d&&d.length>0?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)("span",{className:t.actionsTitle,children:"Assign Groups"}),Object(a.jsx)(f.a,{placeholder:"Filter by Group",className:t.filterField,id:"search-resource",label:"",InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){C(e.target.value)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.tableBlock,children:Object(a.jsx)(on,{columns:[{label:"Group",elementKey:""}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(w);return a?c.push(n):c=c.filter((function(e){return e!==n})),r(c),c},selectedItems:w,isLoading:p,records:N,entityName:"Groups",idField:"",customPaperHeight:t.multiSelectTable})})]}):Object(a.jsx)("div",{className:t.noFound,children:"No Groups Available"})]})})})}))),Xc=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Me))}))((function(e){var t=e.classes,n=e.label,i=void 0===n?"":n,r=e.content,o=e.multiLine,s=void 0!==o&&o;return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(x.a,{className:t.prefinedContainer,children:[""!==i&&Object(a.jsx)(x.a,{item:!0,xs:12,className:t.predefinedTitle,children:i}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.predefinedList,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:s?t.innerContentMultiline:t.innerContent,children:r})})]})})})),ei={setModalErrorSnackMessage:G},ti=Object(s.b)(null,ei),ni=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"}},ke))}))(ti((function(e){var t=e.classes,n=e.closeModalAndRefresh,r=e.selectedUser,o=e.open,s=e.setModalErrorSnackMessage,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(""),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(""),v=Object(b.a)(f,2),C=v[0],S=v[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)([]),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)([]),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useCallback)((function(){if(!r)return null;me.invoke("GET","/api/v1/users/".concat(r.accessKey)).then((function(e){j(!1),O(e.accessKey),I(e.memberOf||[]),B(e.memberOf||[]),T("enabled"===e.status)})).catch((function(e){j(!1),s(e)}))}),[r,s]);Object(c.useEffect)((function(){null==r?(O(""),S(""),I([])):F()}),[r,F]);var R=""!==h.trim()&&(""!==C.trim()&&null===r||null!==r);return Object(a.jsxs)(jn,{onClose:function(){n()},modalOpen:o,title:null!==r?"Edit User":"Create User",children:[null!==r&&Object(a.jsx)("div",{className:t.floatingEnabled,children:Object(a.jsx)(In,{indicatorLabels:["Enabled","Disabled"],checked:N,value:"user_enabled",id:"user-status",name:"user-status",onChange:function(e){T(e.target.checked)},switchOnly:!0})}),Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),u||(j(!0),null!==r?me.invoke("PUT","/api/v1/users/".concat(r.accessKey),{status:N?"enabled":"disabled",groups:A}).then((function(e){j(!1),n()})).catch((function(e){j(!1),s(e)})):me.invoke("POST","/api/v1/users",{accessKey:h,secretKey:C,groups:A}).then((function(e){j(!1),n()})).catch((function(e){j(!1),s(e)})))},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.formScrollable,children:[Object(a.jsx)(hn,{id:"accesskey-input",name:"accesskey-input",label:"Access Key",value:h,onChange:function(e){O(e.target.value)},disabled:null!==r}),null!==r?Object(a.jsx)(Xc,{label:"Current Groups",content:D.join(", ")}):Object(a.jsx)(hn,{id:"standard-multiline-static",name:"standard-multiline-static",label:"Secret Key",type:"password",value:C,onChange:function(e){S(e.target.value)},autoComplete:"current-password"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)($c,{selectedGroups:A,setSelectedGroups:function(e){I(e)}})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){null===r?(O(""),S(""),I([])):I([])},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:u||!R,children:"Save"})]}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})]})}))),ai={setErrorSnackMessage:q},ci=Object(s.b)(null,ai),ii=ci((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedUser,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1];return null===i?Object(a.jsx)("div",{}):Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete User"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete user ",Object(a.jsx)("b",{children:i.accessKey}),"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){l||null!=i&&(d(!0),me.invoke("DELETE","/api/v1/users/".concat(i.accessKey),{id:i.id}).then((function(e){d(!1),t(!0)})).catch((function(e){d(!1),r(e)})))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})),ri={setModalErrorSnackMessage:G},oi=Object(s.b)(null,ri),si=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"}},ke))}))(oi((function(e){var t=e.open,n=e.checkedUsers,r=e.closeModalAndRefresh,o=e.classes,s=e.setModalErrorSnackMessage,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)([]),v=Object(b.a)(f,2),C=v[0],S=v[1];Object(c.useEffect)((function(){u&&(C.length>0?me.invoke("PUT","/api/v1/users-groups-bulk",{groups:C,users:n}).then((function(){j(!1),O(!0)})).catch((function(e){j(!1),s(e)})):(j(!1),s("You need to select at least one group to assign")))}),[u,j,r,C,n,s]);return Object(a.jsx)(jn,{modalOpen:t,onClose:function(){r(h)},title:h?"The selected users were added to the following groups.":"Add Users to Group",children:h?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(Xc,{label:"Groups",content:C.join(", ")}),Object(a.jsx)(Xc,{label:"Users",content:n.join(", ")})]}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{})]}):Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),j(!0)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.formScrollable,children:[Object(a.jsx)(Xc,{label:"Selected Users",content:n.join(", ")}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)($c,{selectedGroups:C,setSelectedGroups:S})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:o.clearButton,onClick:function(){S([])},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:u||C.length<1,children:"Save"})]}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})})}))),li=Object(s.b)(null,{setModalErrorSnackMessage:G}),di=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#000",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#000"}}}},Ae),De))}))(li((function(e){var t=e.classes,n=e.selectedPolicy,r=void 0===n?[]:n,o=e.setSelectedPolicy,s=e.setModalErrorSnackMessage,l=Object(c.useState)([]),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],g=Object(c.useState)(""),v=Object(b.a)(g,2),C=v[0],k=v[1],w=Object(c.useCallback)((function(){O(!0),me.invoke("GET","/api/v1/policies?limit=1000").then((function(e){var t=null===e.policies?[]:e.policies;O(!1),j(t.sort(zc))})).catch((function(e){O(!1),s(e)}))}),[s]);Object(c.useEffect)((function(){O(!0)}),[]),Object(c.useEffect)((function(){h&&w()}),[h,w]);var N=u.filter((function(e){return e.name.includes(C)}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:t.paper,children:[h&&Object(a.jsx)(y.a,{}),u.length>0?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)("span",{className:t.actionsTitle,children:"Assign Policies"}),Object(a.jsx)(f.a,{placeholder:"Filter by Policy",className:t.filterField,id:"search-resource",label:"",InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){k(e.target.value)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.tableBlock,children:Object(a.jsx)(on,{columns:[{label:"Policy",elementKey:"name"}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(r);a?c.push(n):c=c.filter((function(e){return e!==n})),c=c.filter((function(e){return""!==e})),o(c)},selectedItems:r,isLoading:h,records:N,entityName:"Policies",idField:"name",customPaperHeight:t.multiSelectTable})})]}):Object(a.jsx)("div",{className:t.noFound,children:"No Policies Available"})]})})})}))),ui={setModalErrorSnackMessage:G},bi=Object(s.b)(null,ui),ji=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({},ke),{},{buttonContainer:{textAlign:"right"}}))}))(bi((function(e){var t=e.classes,n=e.closeModalAndRefresh,i=e.selectedUser,r=e.selectedGroup,o=e.setModalErrorSnackMessage,s=e.open,l=Object(c.useState)(!1),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)([]),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)([]),v=Object(b.a)(f,2),C=v[0],S=v[1];Object(c.useEffect)((function(){if(s){if(null!==r)return void(r&&me.invoke("GET","/api/v1/groups/".concat(r)).then((function(e){var t=Z()(e,"policy","");O(t.split(",")),S(t.split(","))})).catch((function(e){o(e),j(!1)})));var e=Z()(i,"policy","");O(e.split(",")),S(e.split(","))}}),[s,r,i]);var k=Z()(i,"accessKey","");return Object(a.jsxs)(jn,{onClose:function(){n()},modalOpen:s,title:"Set Policies",children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Xc,{label:"Selected ".concat(null!==r?"Group":"User"),content:null!==r?r:k})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Xc,{label:"Current Policy",content:h.join(", ")})}),Object(a.jsx)(di,{selectedPolicy:C,setSelectedPolicy:S}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:function(){S(h)},children:"Clear"}),Object(a.jsx)(g.a,{type:"button",variant:"contained",color:"primary",disabled:u,onClick:function(){var e="user",t=null;null!==r?(e="group",t=r):null!==i&&(t=i.accessKey),j(!0),me.invoke("PUT","/api/v1/set-policy/".concat(C),{entityName:t,entityType:e}).then((function(){j(!1),n()})).catch((function(e){j(!1),o(e)}))},children:"Save"})]}),u&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})}))),mi={setErrorSnackMessage:q},pi=Object(s.b)(null,mi),hi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(pi((function(e){var t=e.classes,n=e.setErrorSnackMessage,r=Object(c.useState)([]),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(!1),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],v=h[1],y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)(null),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(!1),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(""),D=Object(b.a)(L,2),B=D[0],F=D[1],R=Object(c.useState)([]),P=Object(b.a)(R,2),z=P[0],K=P[1],U=Object(c.useState)(!1),W=Object(b.a)(U,2),q=W[0],V=W[1],G=Object(c.useCallback)((function(){m(!0),me.invoke("GET","/api/v1/users").then((function(e){var t=null===e.users?[]:e.users;m(!1),l(t.sort(Pc))})).catch((function(e){m(!1),n(e)}))}),[m,l,n]);Object(c.useEffect)((function(){G()}),[G]);var H=s.filter((function(e){return e.accessKey.includes(B)})),Y=atob(localStorage.getItem("userLoggedIn")||""),Q=[{type:"view",onClick:function(e){v(!0),E(e)}},{type:"description",onClick:function(e){V(!0),E(e)}},{type:"delete",onClick:function(e){k(!0),E(e)},hideButtonFunction:function(e){return e===Y}}];return Object(a.jsxs)(i.a.Fragment,{children:[O&&Object(a.jsx)(ni,{open:O,selectedUser:T,closeModalAndRefresh:function(){v(!1),G()}}),q&&Object(a.jsx)(ji,{open:q,selectedUser:T,selectedGroup:null,closeModalAndRefresh:function(){V(!1),G()}}),S&&Object(a.jsx)(ii,{deleteOpen:S,selectedUser:T,closeDeleteModalAndRefresh:function(e){!function(e){k(!1),e&&G()}(e)}}),I&&Object(a.jsx)(si,{open:I,checkedUsers:z,closeModalAndRefresh:function(e){!function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];M(!1),e&&K([])}(e)}}),Object(a.jsx)(Rn,{label:"Users"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Users",className:t.searchField,id:"search-resource",label:"",InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){F(e.target.value)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(Qc.a,{}),disabled:z.length<=0,onClick:function(){z.length>0&&M(!0)},children:"Add to Group"}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){v(!0),E(null)},children:"Create User"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:Q,columns:[{label:"Access Key",elementKey:"accessKey"}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(z);return a?c.push(n):c=c.filter((function(e){return e!==n})),K(c),c},selectedItems:z,isLoading:j,records:H,entityName:"Users",idField:"accessKey"})})]})})]})}))),Oi={setModalErrorSnackMessage:G},gi=Object(s.b)(null,Oi),fi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column",paddingTop:15,boxShadow:"none"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},noFound:{textAlign:"center",padding:"10px 0"},tableContainer:{maxHeight:200},stickyHeader:{backgroundColor:"#fff"},actionsTitle:{fontWeight:600,color:"#000",fontSize:16,alignSelf:"center"},tableBlock:{marginTop:15},filterField:{width:375,fontWeight:600,"& .input":{"&::placeholder":{fontWeight:600,color:"#000"}}}},Ae),De))}))(gi((function(e){var t=e.classes,n=e.selectedUsers,r=e.setSelectedUsers,o=e.editMode,s=void 0!==o&&o,l=e.setModalErrorSnackMessage,d=Object(c.useState)([]),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],g=h[1],v=Object(c.useState)(""),C=Object(b.a)(v,2),k=C[0],w=C[1],N=Object(c.useCallback)((function(){me.invoke("GET","/api/v1/users").then((function(e){var t=Z()(e,"users",[]);t||(t=[]),m(t.sort(Pc)),g(!1)})).catch((function(e){l(e),g(!1)}))}),[l]);Object(c.useEffect)((function(){g(!0)}),[]),Object(c.useEffect)((function(){O&&N()}),[O,N]);var T=n||[],E=j.filter((function(e){return e.accessKey.includes(k)}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)(S.a,{className:t.paper,children:[O&&Object(a.jsx)(y.a,{}),null!=j&&j.length>0?Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)("span",{className:t.actionsTitle,children:s?"Edit Members":"Assign Users"}),Object(a.jsx)(f.a,{placeholder:"Filter Users",className:t.filterField,id:"search-resource",label:"",InputProps:{startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){w(e.target.value)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.tableBlock,children:Object(a.jsx)(on,{columns:[{label:"Access Key",elementKey:"accessKey"}],onSelect:function(e){var t=e.target,n=t.value,a=t.checked,c=Object(Nt.a)(T);return a?c.push(n):c=c.filter((function(e){return e!==n})),r(c),c},selectedItems:T,isLoading:O,records:E,entityName:"Users",idField:"accessKey",customPaperHeight:t.multiSelectTable})})]}):Object(a.jsx)("div",{className:t.noFound,children:"No Users Available"})]})})})}))),xi={setModalErrorSnackMessage:G},vi=Object(s.b)(null,xi),yi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"}},ke))}))(vi((function(e){var t=e.open,n=e.selectedGroup,r=e.closeModalAndRefresh,o=e.classes,s=e.setModalErrorSnackMessage,l=Object(c.useState)(""),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(!1),v=Object(b.a)(f,2),C=v[0],S=v[1],k=Object(c.useState)([]),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1];Object(c.useEffect)((function(){null!==n?I(!0):(j(""),T([]))}),[n]),Object(c.useEffect)((function(){B(""!==u.trim())}),[u,N]),Object(c.useEffect)((function(){if(C){null!==n?me.invoke("PUT","/api/v1/groups/".concat(u),{group:u,members:N,status:h?"enabled":"disabled"}).then((function(e){S(!1),r()})).catch((function(e){S(!1),s(e)})):me.invoke("POST","/api/v1/groups",{group:u,members:N}).then((function(e){S(!1),r()})).catch((function(e){S(!1),s(e)}))}}),[C,u,N,h,n,r,s]),Object(c.useEffect)((function(){if(n&&A){me.invoke("GET","/api/v1/groups/".concat(n)).then((function(e){O("enabled"===e.status),j(e.name),T(e.members)})).catch((function(e){s(e),I(!1)}))}}),[A,n,s]);return Object(a.jsxs)(jn,{modalOpen:t,onClose:r,title:null!==n?"Edit Group":"Create Group",children:[null!==n&&Object(a.jsx)("div",{className:o.floatingEnabled,children:Object(a.jsx)(In,{indicatorLabels:["Enabled","Disabled"],checked:h,value:"group_enabled",id:"group-status",name:"group-status",onChange:function(e){O(e.target.checked)},switchOnly:!0})}),Object(a.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),S(!0)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.formScrollable,children:[null===n?Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"group-name",name:"group-name",label:"Group Name",value:u,onChange:function(e){j(e.target.value)}})})}):Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(Xc,{label:"Group Name",content:n})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(fi,{selectedUsers:N,setSelectedUsers:T,editMode:null!==n})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:o.clearButton,onClick:function(){null===n&&j(""),T([])},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:C||!D,children:"Save"})]}),C&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]})})]})}))),Ci={setErrorSnackMessage:q},Si=Object(s.b)(null,Ci),ki=Si((function(e){var t=e.selectedGroup,n=e.deleteOpen,r=e.closeDeleteModalAndRefresh,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];Object(c.useEffect)((function(){if(d){t&&me.invoke("DELETE","/api/v1/groups/".concat(t)).then((function(){u(!1),r(!0)})).catch((function(e){u(!1),o(e)}))}}),[d,t,r,o]);var j=function(){r(!1)};return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(sn.a,{open:n,onClose:j,"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete User"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete group ",Object(a.jsx)("b",{children:t}),"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:j,color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){u(!0)},color:"secondary",autoFocus:!0,children:"Delete"})]})]})})})),wi={setErrorSnackMessage:q},Ni=Object(s.b)(null,wi),Ti=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},wrapCell:{maxWidth:"200px",whiteSpace:"normal",wordWrap:"break-word"},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(Ni((function(e){var t=e.classes,n=e.setErrorSnackMessage,r=Object(c.useState)(!1),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(null),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],v=h[1],y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)([]),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(""),A=Object(b.a)(_,2),I=A[0],M=A[1],L=Object(c.useState)(!1),D=Object(b.a)(L,2),B=D[0],F=D[1];Object(c.useEffect)((function(){k(!0)}),[]),Object(c.useEffect)((function(){k(!0)}),[]),Object(c.useEffect)((function(){if(S){me.invoke("GET","/api/v1/groups").then((function(e){var t=[];null!==e.groups&&(t=e.groups.sort(Kc)),E(t),k(!1)})).catch((function(e){n(e),k(!1)}))}}),[S,n]);var R=T.filter((function(e){return e.includes(I)})),P=[{type:"view",onClick:function(e){l(!0),m(e)}},{type:"description",onClick:function(e){F(!0),m(e)}},{type:"delete",onClick:function(e){v(!0),m(e)}}];return Object(a.jsxs)(i.a.Fragment,{children:[s&&Object(a.jsx)(yi,{open:s,selectedGroup:j,closeModalAndRefresh:function(){l(!1),k(!0)}}),O&&Object(a.jsx)(ki,{deleteOpen:O,selectedGroup:j,closeDeleteModalAndRefresh:function(e){v(!1),e&&k(!0)}}),F&&Object(a.jsx)(ji,{open:B,selectedGroup:j,selectedUser:null,closeModalAndRefresh:function(){F(!1)}}),Object(a.jsx)(Rn,{label:"Groups"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Search Groups",className:t.searchField,id:"search-resource",label:"",InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})},onChange:function(e){M(e.target.value)}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){m(null),l(!0)},children:"Create Group"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:P,columns:[{label:"Name",elementKey:""}],isLoading:S,records:R,entityName:"Groups",idField:""})})]})})]})}))),Ei="notify_postgres",_i="notify_mysql",Ai="notify_kafka",Ii="notify_amqp",Mi="notify_mqtt",Li="notify_redis",Di="notify_nats",Bi="notify_elasticsearch",Fi="notify_webhooks",Ri="notify_nsq",Pi=[{configuration_id:"region",configuration_label:"Edit Region Configuration"},{configuration_id:"cache",configuration_label:"Edit Cache Configuration"},{configuration_id:"compression",configuration_label:"Edit Compression Configuration"},{configuration_id:"etcd",configuration_label:"Edit Etcd Configuration"},{configuration_id:"identity_openid",configuration_label:"Edit Identity Openid Configuration"},{configuration_id:"identity_ldap",configuration_label:"Edit Identity LDAP Configuration"},{configuration_id:"logger_webhook",configuration_label:"Edit Logger Webhook Configuration"},{configuration_id:"audit_webhook",configuration_label:"Edit Audit Webhook Configuration"}],zi={region:[{name:"name",required:!0,label:"Server Location",tooltip:'Name of the location of the server e.g. "us-west-rack2"',type:"string",placeholder:"e.g. us-west-rack-2"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",placeholder:"Enter Comment"}],cache:[{name:"drives",required:!0,label:"Drives",tooltip:'Mountpoints e.g. "/optane1" or "/optane2", you can write one per field',type:"csv",placeholder:"Enter Mount Point"},{name:"expiry",required:!1,label:"Expiry",tooltip:'Cache expiry duration in days e.g. "90"',type:"number",placeholder:"Enter Number of Days"},{name:"quota",required:!1,label:"Quota",tooltip:'Limit cache drive usage in percentage e.g. "90"',type:"number",placeholder:"Enter in %"},{name:"exclude",required:!1,label:"Exclude",tooltip:'Wildcard exclusion patterns e.g. "bucket/*.tmp" or "*.exe", you can write one per field',type:"csv",placeholder:"Enter Wildcard Exclusion Patterns"},{name:"after",required:!1,label:"After",tooltip:"Minimum number of access before caching an object",type:"number",placeholder:"Enter Number of Attempts"},{name:"watermark_low",required:!1,label:"Watermark Low",tooltip:"Watermark Low",type:"number",placeholder:"Enter Watermark Low"},{name:"watermark_high",required:!1,label:"Watermark High",tooltip:"Watermark High",type:"number",placeholder:"Enter Watermark High"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",multiline:!0,placeholder:"Enter Comment"}],compression:[{name:"extensions",required:!1,label:"Extensions",tooltip:'Extensions to compress e.g. ".txt",".log" or ".csv", you can write one per field',type:"csv",placeholder:"Enter an Extension",withBorder:!0},{name:"mime_types",required:!1,label:"Mime Types",tooltip:'Mime types e.g. "text/*","application/json" or "application/xml", you can write one per field',type:"csv",placeholder:"Enter a Mime Type",withBorder:!0}],etcd:[{name:"endpoints",required:!0,label:"Endpoints",tooltip:'List of etcd endpoints e.g. "http://localhost:2379", you can write one per field',type:"csv",placeholder:"Enter Endpoint"},{name:"path_prefix",required:!1,label:"Path Prefix",tooltip:'namespace prefix to isolate tenants e.g. "customer1/"',type:"string",placeholder:"Enter Path Prefix"},{name:"coredns_path",required:!1,label:"Coredns Path",tooltip:'Shared bucket DNS records, default is "/skydns"',type:"string",placeholder:"Enter Coredns Path"},{name:"client_cert",required:!1,label:"Client Cert",tooltip:"Client cert for mTLS authentication",type:"string",placeholder:"Enter Client Cert"},{name:"client_cert_key",required:!1,label:"Client Cert Key",tooltip:"Client cert key for mTLS authentication",type:"string",placeholder:"Enter Client Cert Key"},{name:"comment",required:!1,label:"Comment",tooltip:"You can add a comment to this setting",type:"comment",multiline:!0,placeholder:"Enter Comment"}],identity_openid:[{name:"config_url",required:!1,label:"Config URL",tooltip:"Config URL for Client ID configuration",type:"string",placeholder:"Enter Config URL"},{name:"client_id",required:!1,label:"Client ID",type:"string",placeholder:"Enter Client ID"},{name:"claim_name",required:!1,label:"Claim Name",tooltip:"Claim Name",type:"string",placeholder:"Enter Claim Name"},{name:"claim_prefix",required:!1,label:"Claim Prefix",tooltip:"Claim Prefix",type:"string",placeholder:"Enter Claim Prefix"}],identity_ldap:[{name:"server_addr",required:!0,label:"Server Addr",tooltip:'AD/LDAP server address e.g. "myldapserver.com:636"',type:"string",placeholder:"Enter Server Address"},{name:"username_format",required:!0,label:"Username Format",tooltip:'List of username bind DNs e.g. "uid=%s","cn=accounts","dc=myldapserver" or "dc=com", you can write one per field',type:"csv",placeholder:"Enter Username Format"},{name:"username_search_filter",required:!0,label:"Username Search Filter",tooltip:'User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"',type:"string",placeholder:"Enter Username Search Filter"},{name:"group_search_filter",required:!0,label:"Group Search Filter",tooltip:'Search filter for groups e.g. "(&(objectclass=groupOfNames)(memberUid=%s))"',type:"string",placeholder:"Enter Group Search Filter"},{name:"username_search_base_dn",required:!1,label:"Username Search Base DN",tooltip:"List of username search DNs, you can write one per field",type:"csv",placeholder:"Enter Username Search Base DN"},{name:"group_name_attribute",required:!1,label:"Group Name Attribute",tooltip:'Search attribute for group name e.g. "cn"',type:"string",placeholder:"Enter Group Name Attribute"},{name:"sts_expiry",required:!1,label:"STS Expiry",tooltip:'temporary credentials validity duration in s,m,h,d. Default is "1h"',type:"string",placeholder:"Enter STS Expiry"},{name:"tls_skip_verify",required:!1,label:"TLS Skip Verify",tooltip:'Trust server TLS without verification, defaults to "off" (verify)',type:"on|off"},{name:"server_insecure",required:!1,label:"Server Insecure",tooltip:'Allow plain text connection to AD/LDAP server, defaults to "off"',type:"on|off"},{name:"comment",required:!1,label:"Comment",tooltip:"Optionally add a comment to this setting",type:"comment",placeholder:"Enter Comment"}],logger_webhook:[{name:"endpoint",required:!0,label:"Endpoint",type:"string",placeholder:"Enter Endpoint"},{name:"auth_token",required:!0,label:"Auth Token",type:"string",placeholder:"Enter Auth Token"}],audit_webhook:[{name:"endpoint",required:!0,label:"Endpoint",type:"string",placeholder:"Enter Endpoint"},{name:"auth_token",required:!0,label:"Auth Token",type:"string",placeholder:"Enter Auth Token"}]},Ki=[{name:"queue-dir",label:"Queue Directory",required:!0,tooltip:"staging dir for undelivered messages e.g. '/home/events'",type:"string",placeholder:"Enter Queue Directory"},{name:"queue-limit",label:"Queue Limit",required:!1,tooltip:"maximum limit for undelivered messages, defaults to '10000'",type:"number",placeholder:"Enter Queue Limit"},{name:"comment",label:"Comment",required:!1,type:"comment",placeholder:"Enter Comment"}],Ui=(wa={},Object(ge.a)(wa,Ai,[{name:"brokers",label:"Brokers",required:!0,tooltip:"Comma separated list of Kafka broker addresses",type:"string",placeholder:"Enter Brokers"},{name:"topic",label:"Topic",tooltip:"Kafka topic used for bucket notifications",type:"string",placeholder:"Enter Topic"},{name:"sasl_username",label:"SASL Username",tooltip:"Username for SASL/PLAIN or SASL/SCRAM authentication",type:"string",placeholder:"Enter SASL Username"},{name:"sasl_password",label:"SASL Password",tooltip:"Password for SASL/PLAIN or SASL/SCRAM authentication",type:"string",placeholder:"Enter SASL Password"},{name:"sasl_mechanism",label:"SASL Mechanism",tooltip:"SASL authentication mechanism, default 'PLAIN'",type:"string"},{name:"tls_client_auth",label:"TLS Client Auth",tooltip:"Client Auth determines the Kafka server's policy for TLS client auth",type:"string",placeholder:"Enter TLS Client Auth"},{name:"sasl",label:"SASL",tooltip:"Set to 'on' to enable SASL authentication",type:"on|off"},{name:"tls",label:"TLS",tooltip:"Set to 'on' to enable TLS",type:"on|off"},{name:"tls_skip_verify",label:"TLS skip verify",tooltip:'Trust server TLS without verification, defaults to "on" (verify)',type:"on|off"},{name:"client_tls_cert",label:"client TLS cert",tooltip:"Path to client certificate for mTLS auth",type:"path",placeholder:"Enter TLS Client Cert"},{name:"client_tls_key",label:"client TLS key",tooltip:"Path to client key for mTLS auth",type:"path",placeholder:"Enter TLS Client Key"},{name:"version",label:"Version",tooltip:"Specify the version of the Kafka cluster e.g '2.2.0'",type:"string",placeholder:"Enter Kafka Version"}].concat(Ki)),Object(ge.a)(wa,Ii,[{name:"url",required:!0,label:"URL",tooltip:"AMQP server endpoint e.g. `amqp://myuser:mypassword@localhost:5672`",type:"url"},{name:"exchange",label:"Exchange",tooltip:"Name of the AMQP exchange",type:"string",placeholder:"Enter Exchange"},{name:"exchange_type",label:"Exchange Type",tooltip:"AMQP exchange type",type:"string",placeholder:"Enter Exchange Type"},{name:"routing_key",label:"Routing Key",tooltip:"Routing key for publishing",type:"string",placeholder:"Enter Routing Key"},{name:"mandatory",label:"Mandatory",tooltip:"Quietly ignore undelivered messages when set to 'off', default is 'on'",type:"on|off"},{name:"durable",label:"Durable",tooltip:"Persist queue across broker restarts when set to 'on', default is 'off'",type:"on|off"},{name:"no_wait",label:"No Wait",tooltip:"Non-blocking message delivery when set to 'on', default is 'off'",type:"on|off"},{name:"internal",label:"Internal",tooltip:"Set to 'on' for exchange to be not used directly by publishers, but only when bound to other exchanges",type:"on|off"},{name:"auto_deleted",label:"Auto Deleted",tooltip:"Auto delete queue when set to 'on', when there are no consumers",type:"on|off"},{name:"delivery_mode",label:"Delivery Mode",tooltip:"Set to '1' for non-persistent or '2' for persistent queue",type:"number",placeholder:"Enter Delivery Mode"}].concat(Ki)),Object(ge.a)(wa,Li,[{name:"address",required:!0,label:"Address",tooltip:"Redis server's address. For example: `localhost:6379`",type:"address",placeholder:"Enter Address"},{name:"key",required:!0,label:"Key",tooltip:"Redis key to store/update events, key is auto-created",type:"string",placeholder:"Enter Key"},{name:"password",label:"Password",tooltip:"Redis server password",type:"string",placeholder:"Enter Password"}].concat(Ki)),Object(ge.a)(wa,Mi,[{name:"broker",required:!0,label:"Broker",tooltip:"MQTT server endpoint e.g. `tcp://localhost:1883`",type:"uri",placeholder:"Enter Brokers"},{name:"topic",required:!0,label:"Topic",tooltip:"name of the MQTT topic to publish",type:"string",placeholder:"Enter Topic"},{name:"username",label:"Username",tooltip:"MQTT username",type:"string",placeholder:"Enter Username"},{name:"password",label:"Password",tooltip:"MQTT password",type:"string",placeholder:"Enter Password"},{name:"qos",label:"QOS",tooltip:"Set the quality of service priority, defaults to '0'",type:"number",placeholder:"Enter QOS"},{name:"keep_alive_interval",label:"Keep Alive Interval",tooltip:"Keep-alive interval for MQTT connections in s,m,h,d",type:"duration",placeholder:"Enter Keep Alive Internal"},{name:"reconnect_interval",label:"Reconnect Interval",tooltip:"Reconnect interval for MQTT connections in s,m,h,d",type:"duration",placeholder:"Enter Reconnect Interval"}].concat(Ki)),Object(ge.a)(wa,Di,[{name:"address",required:!0,label:"Address",tooltip:"NATS server address e.g. '0.0.0.0:4222'",type:"address",placeholder:"Enter Address"},{name:"subject",required:!0,label:"Subject",tooltip:"NATS subscription subject",type:"string",placeholder:"Enter NATS Subject"},{name:"username",label:"Username",tooltip:"NATS username",type:"string",placeholder:"Enter NATS Username"},{name:"password",label:"Password",tooltip:"NATS password",type:"string",placeholder:"Enter NATS password"},{name:"token",label:"Token",tooltip:"NATS token",type:"string",placeholder:"Enter NATS token"},{name:"tls",label:"TLS",tooltip:"Set to 'on' to enable TLS",type:"on|off"},{name:"tls_skip_verify",label:"TLS Skip Verify",tooltip:'Trust server TLS without verification, defaults to "on" (verify)',type:"on|off"},{name:"ping_interval",label:"Ping Interval",tooltip:"Client ping commands interval in s,m,h,d. Disabled by default",type:"duration",placeholder:"Enter Ping Interval"},{name:"streaming",label:"Streaming",tooltip:"Set to 'on', to use streaming NATS server",type:"on|off"},{name:"streaming_async",label:"Streaming async",tooltip:"Set to 'on', to enable asynchronous publish",type:"on|off"},{name:"streaming_max_pub_acks_in_flight",label:"Streaming max publish ACKS in flight",tooltip:"Number of messages to publish without waiting for ACKs",type:"number",placeholder:"Enter Streaming in flight value"},{name:"streaming_cluster_id",label:"Streaming Cluster ID",tooltip:"Unique ID for NATS streaming cluster",type:"string",placeholder:"Enter Streaming Cluster ID"},{name:"cert_authority",label:"Cert Authority",tooltip:"Path to certificate chain of the target NATS server",type:"string",placeholder:"Enter Cert Authority"},{name:"client_cert",label:"Client Cert",tooltip:"Client cert for NATS mTLS auth",type:"string",placeholder:"Enter Client Cert"},{name:"client_key",label:"Client Key",tooltip:"Client cert key for NATS mTLS auth",type:"string",placeholder:"Enter Client Key"}].concat(Ki)),Object(ge.a)(wa,Bi,[{name:"url",required:!0,label:"URL",tooltip:"Elasticsearch server's address, with optional authentication info",type:"url",placeholder:"Enter URL"},{name:"index",required:!0,label:"Index",tooltip:"Elasticsearch index to store/update events, index is auto-created",type:"string",placeholder:"Enter Index"},{name:"format",required:!0,label:"Format",tooltip:"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'",type:"enum",placeholder:"Enter Format"}].concat(Ki)),Object(ge.a)(wa,Fi,[{name:"endpoint",required:!0,label:"Endpoint",tooltip:"webhook server endpoint e.g. http://localhost:8080/minio/events",type:"url",placeholder:"Enter Endpoint"},{name:"auth_token",label:"Auth Token",tooltip:"opaque string or JWT authorization token",type:"string",placeholder:"Enter auth_token"}].concat(Ki)),Object(ge.a)(wa,Ri,[{name:"nsqd_address",required:!0,label:"NSQD Address",tooltip:"NSQ server address e.g. '127.0.0.1:4150'",type:"address",placeholder:"Enter nsqd_address"},{name:"topic",required:!0,label:"Topic",tooltip:"NSQ topic",type:"string",placeholder:"Enter Topic"},{name:"tls",label:"TLS",tooltip:"set to 'on' to enable TLS",type:"on|off"},{name:"tls_skip_verify",label:"TLS Skip Verify",tooltip:'trust server TLS without verification, defaults to "on" (verify)',type:"on|off"}].concat(Ki)),wa),Wi=function(e){return e.filter((function(e){return""!==e.value}))},qi=n(102),Vi=n.n(qi),Gi=function(){return Object(a.jsx)($e.a,{viewBox:"0 0 12 12",children:Object(a.jsx)("path",{fill:"#081c42",className:"a",d:"M-13160.269,1885.114h-3.235v-4.381h-4.382V1877.5h4.382v-4.381h3.235v4.381h4.383v3.238h-4.383v4.38Z",transform:"translate(13167.886 -1873.114)"})})},Hi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{inputWithBorder:{border:"1px solid #EAEAEA",padding:15,height:150,overflowY:"auto",position:"relative",marginTop:15},labelContainer:{display:"flex"}}))}))((function(e){var t=e.elements,n=e.name,r=e.label,o=e.tooltip,s=void 0===o?"":o,l=e.commonPlaceholder,d=void 0===l?"":l,u=e.onChange,j=e.withBorder,m=void 0!==j&&j,p=e.classes,h=Object(c.useState)([""]),O=Object(b.a)(h,2),g=O[0],f=O[1],v=Object(c.createRef)();Object(c.useEffect)((function(){if(1===g.length&&""===g[0]&&t&&""!==t){var e=t.split(",");e.push(""),f(e)}}),[t,g]),Object(c.useEffect)((function(){if(g.length>1){var e=v.current;e&&e.scrollIntoView(!1)}}),[g,v]);var y=Object(c.useRef)(!0);Object(c.useLayoutEffect)((function(){y.current?y.current=!1:S()}),[g]);var C=function(e){e.persist();var t=Object(Nt.a)(g);t[Z()(e.target,"dataset.index",0)]=e.target.value,f(t)},S=Vi()((function(){var e=g.filter((function(e){return""!==e.trim()})).join(",");u(e)}),500),k=g.map((function(e,t){return Object(a.jsx)(hn,{id:"".concat(n,"-").concat(t.toString()),label:"",name:"".concat(n,"-").concat(t.toString()),value:g[t],onChange:C,index:t,placeholder:d,overlayIcon:t===g.length-1?Object(a.jsx)(Gi,{}):null,overlayAction:function(){!function(e){if(""!==e[e.length-1].trim()){var t=Object(Nt.a)(e);t.push(""),f(t)}}(g)}},"csv-".concat(n,"-").concat(t.toString()))}));return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:p.fieldContainer,children:[Object(a.jsxs)(Xt.a,{className:p.inputLabel,children:[Object(a.jsx)("span",{children:r}),""!==s&&Object(a.jsx)("div",{className:p.tooltipContainer,children:Object(a.jsx)(en.a,{title:s,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:p.tooltip})})})})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(m?p.inputWithBorder:""),children:[k,Object(a.jsx)("div",{ref:v})]})]})})})),Yi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{inputLabel:Object(j.a)(Object(j.a)({},Se.inputLabel),{},{marginBottom:16,fontSize:14}),textBoxContainer:{flexGrow:1,position:"relative"},errorState:{color:"#b53b4b",fontSize:14,position:"absolute",top:7,right:7},cssOutlinedInput:{borderColor:"#9C9C9C",padding:16},rootContainer:{"& .MuiOutlinedInput-inputMultiline":Object(j.a)(Object(j.a)({},Se.inputLabel),{},{fontSize:13,minHeight:150})}}))}))((function(e){var t=e.label,n=e.onChange,c=e.value,r=e.id,o=e.name,s=e.disabled,l=void 0!==s&&s,d=e.tooltip,u=void 0===d?"":d,b=e.index,j=void 0===b?0:b,m=e.error,p=void 0===m?"":m,h=e.required,O=void 0!==h&&h,g=e.placeholder,v=void 0===g?"":g,y=e.classes,C={"data-index":j};return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(y.fieldContainer," ").concat(""!==p?y.errorInField:""),children:[""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:r,className:y.inputLabel,children:[Object(a.jsxs)("span",{children:[t,O?"*":""]}),""!==u&&Object(a.jsx)("div",{className:y.tooltipContainer,children:Object(a.jsx)(en.a,{title:u,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:y.tooltip})})})})]}),Object(a.jsx)("div",{className:y.textBoxContainer,children:Object(a.jsx)(f.a,{id:r,name:o,fullWidth:!0,value:c,disabled:l,onChange:n,multiline:!0,inputProps:C,error:""!==p,helperText:p,placeholder:v,InputLabelProps:{shrink:!0},InputProps:{classes:{notchedOutline:y.cssOutlinedInput,root:y.rootContainer}},variant:"outlined"})})]})})})),Qi=function(e,t,n){var a="on|off"===t?"false":"";if(n.length>0){var c=n.find((function(t){return t.key===e}));c&&(a=c.value)}return a},Zi=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))((function(e){var t=e.onChange,n=e.fields,i=e.defaultVals,r=(e.classes,Object(c.useState)([])),o=Object(b.a)(r,2),s=o[0],l=o[1],d=n||[],u=i||[];Object(c.useEffect)((function(){var e=[];n.forEach((function(t){var n={key:t.name,value:Qi(t.name,t.type,u)};e.push(n)})),l(e)}),[n,i]),Object(c.useEffect)((function(){t(s)}),[s]);var j=function(e,t,n){var a=Object(Nt.a)(s);a[n]={key:e,value:t},l(a)},m=function(e,t){switch(e.type){case"on|off":var n=s[t]?s[t].value:"false";return Object(a.jsx)(In,{indicatorLabels:["On","Off"],onChange:function(n){var a=n.target.checked?"true":"false";j(e.name,a,t)},id:e.name,name:e.name,label:e.label,value:"switch_on",tooltip:e.tooltip,checked:"true"===n});case"csv":return Object(a.jsx)(Hi,{elements:s[t]?s[t].value:"",label:e.label,name:e.name,onChange:function(n){return j(e.name,n,t)},tooltip:e.tooltip,commonPlaceholder:e.placeholder,withBorder:!!e.withBorder});case"comment":return Object(a.jsx)(Yi,{id:e.name,name:e.name,label:e.label,tooltip:e.tooltip,value:s[t]?s[t].value:"",onChange:function(n){return j(e.name,n.target.value,t)},placeholder:e.placeholder});default:return Object(a.jsx)(hn,{id:e.name,name:e.name,label:e.label,tooltip:e.tooltip,value:s[t]?s[t].value:"",onChange:function(n){return j(e.name,n.target.value,t)},multiline:!!e.multiline,placeholder:e.placeholder})}};return Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{xs:12,item:!0,children:d.map((function(e,t){return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:m(e,t)})},e.name)}))})})})),Ji={serverNeedsRestart:K,setErrorSnackMessage:q},$i=Object(s.b)(null,Ji),Xi=$i(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),Be),{},{strongText:{fontWeight:700},keyName:{marginLeft:5},buttonContainer:{textAlign:"right"},logoButton:{height:"80px"},customTitle:Object(j.a)(Object(j.a)({},Be.customTitle),{},{marginTop:0})}))}))((function(e){var t=e.closeModalAndRefresh,n=e.serverNeedsRestart,i=e.selectedConfiguration,r=e.setErrorSnackMessage,o=e.classes,s=Object(c.useState)([]),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!1),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(!0),f=Object(b.a)(O,2),v=f[0],C=f[1],S=Object(c.useState)([]),k=Object(b.a)(S,2),w=k[0],N=k[1];Object(c.useEffect)((function(){var e=Z()(i,"configuration_id",!1);e&&me.invoke("GET","/api/v1/configs/".concat(e)).then((function(e){var t=Z()(e,"key_values",[]);N(t)})).catch((function(e){C(!1),r(e)})),C(!1)}),[i,r]),Object(c.useEffect)((function(){if(p){var e={key_values:Wi(d)};me.invoke("PUT","/api/v1/configs/".concat(i.configuration_id),e).then((function(){h(!1),n(!0),t()})).catch((function(e){h(!1),r(e)}))}}),[p,n,i,d,t,r]);var T=Object(c.useCallback)((function(e){u(e)}),[u]);return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:o.customTitle,children:i.configuration_label}),Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)("form",{noValidate:!0,onSubmit:function(e){e.preventDefault(),h(!0)},children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:o.settingsFormContainer,children:[v&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})}),Object(a.jsx)(Zi,{fields:zi[i.configuration_id],onChange:T,defaultVals:w})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:o.settingsButtonContainer,children:Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:p,children:"Save"})})]})})]})}))),er=Object(N.a)((function(){return Object(k.a)({masterContainer:{overflowX:"hidden",overflowY:"auto"},sliderContainer:{width:"auto",transitionDuration:"0.3s",position:"relative"},slide:{float:"left"}})}))((function(e){var t=e.classes,n=e.slideOptions,i=e.currentSlide;return Object(a.jsx)(Mt.a,{children:function(e){var r=e.width,o=e.height,s=i*r,l=r*n.length;return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)("div",{className:t.masterContainer,style:{width:r,height:o},children:Object(a.jsx)("div",{className:t.sliderContainer,style:{left:"-".concat(s,"px"),width:"".concat(l,"px")},children:n.map((function(e,n){return Object(a.jsx)("div",{className:t.slide,style:{width:r},children:e},"slide-panel-".concat(n.toString()))}))})})})}})})),tr=function(){return Object(a.jsx)($e.a,{viewBox:"0 0 10.847 6.572",children:Object(a.jsxs)("g",{transform:"translate(-84.793 -81.193)",children:[Object(a.jsx)("line",{x2:"9.64",transform:"translate(85.5 84.5)",fill:"none",stroke:"#000",strokeLinecap:"round",strokeWidth:"1"}),Object(a.jsx)("line",{y1:"2.558",x2:"2.645",transform:"translate(85.5 81.9)",fill:"none",stroke:"#000",strokeLinecap:"round",strokeWidth:"1"}),Object(a.jsx)("line",{x2:"2.645",y2:"2.558",transform:"translate(85.5 84.5)",fill:"none",stroke:"#000",strokeLinecap:"round",strokeWidth:"1"})]})})},nr={configuration_id:"",configuration_label:""},ar=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},iconText:{lineHeight:"24px"},customConfigurationPage:{height:"calc(100vh - 324px)",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}},Ie),Ae),Be),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(nr),i=Object(b.a)(n,2),r=i[0],o=i[1],s=Object(c.useState)(0),l=Object(b.a)(s,2),d=l[0],j=l[1],m=[{type:"edit",onClick:function(e){var t=Z()(e,"url","");""!==t?u.push(t):(j(1),o(e))}}];return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("div",{className:t.settingsOptionsContainer,children:Object(a.jsx)(er,{slideOptions:[Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.customTitle,children:"Configuration Types"}),Object(a.jsx)(on,{itemActions:m,columns:[{label:"Configuration",elementKey:"configuration_id"}],isLoading:!1,records:Pi,entityName:"Configurations",idField:"configuration_id",customPaperHeight:t.customConfigurationPage,noBackground:!0})]}),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.backContainer,children:Object(a.jsxs)("button",{onClick:function(){j(0),o(nr)},className:t.backButton,children:[Object(a.jsx)(tr,{}),"Back To Configurations"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:1===d?Object(a.jsx)(Xi,{closeModalAndRefresh:function(){j(0)},selectedConfiguration:r}):null})]})],currentSlide:d})})})})})})})),cr=n(198),ir=n(332),rr=n.n(ir),or=[{actionTrigger:Ei,targetTitle:"Postgres SQL",logo:"/postgres.png"},{actionTrigger:Ai,targetTitle:"Kafka",logo:"/kafka.png"},{actionTrigger:Ii,targetTitle:"AMQP",logo:"/amqp.png"},{actionTrigger:Mi,targetTitle:"MQTT",logo:"/mqtt.png"},{actionTrigger:Li,targetTitle:"Redis",logo:"/redis.png"},{actionTrigger:Di,targetTitle:"NATS",logo:"/nats.png"},{actionTrigger:_i,targetTitle:"Mysql",logo:"/mysql.png"},{actionTrigger:Bi,targetTitle:"Elastic Search",logo:"/elasticsearch.png"},{actionTrigger:Fi,targetTitle:"Webhook",logo:""},{actionTrigger:Ri,targetTitle:"NSQ",logo:""}],sr=n(48),lr=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},ke))}))((function(e){var t=e.onChange,n=e.classes,r=Object(c.useState)(!1),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(""),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(""),h=Object(b.a)(p,2),O=h[0],g=h[1],f=Object(c.useState)(""),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(" "),F=Object(b.a)(B,2),R=F[0],P=F[1],z=Object(c.useState)(""),K=Object(b.a)(z,2),U=K[0],W=K[1],q=Object(c.useState)("namespace"),V=Object(b.a)(q,2),G=V[0],H=V[1],Y=Object(c.useState)(""),Q=Object(b.a)(Y,2),Z=Q[0],J=Q[1],$=Object(c.useState)(""),X=Object(b.a)($,2),ee=X[0],te=X[1],ne=Object(c.useState)(""),ae=Object(b.a)(ne,2),ce=ae[0],ie=ae[1],re=Object(c.useCallback)((function(){var e="";return""!==O&&(e="".concat(e," host=").concat(O)),""!==y&&(e="".concat(e," dbname=").concat(y)),""!==_&&(e="".concat(e," user=").concat(_)),""!==L&&(e="".concat(e," password=").concat(L)),""!==w&&(e="".concat(e," port=").concat(w))," "!==R&&(e="".concat(e," sslmode=").concat(R)),(e="".concat(e," ")).trim()}),[O,y,_,L,w,R]);return Object(c.useEffect)((function(){""!==j&&t([{key:"connection_string",value:j},{key:"table",value:U},{key:"format",value:G},{key:"queue_dir",value:Z},{key:"queue_limit",value:ee},{key:"comment",value:ce}])}),[j,U,G,Z,ee,ce,t]),Object(c.useEffect)((function(){var e=re();m(e)}),[_,y,L,w,R,O,m,re]),Object(c.useEffect)((function(){if(s){var e=re();m(e)}else{var t=function(e,t){var n,a=[],c=Object(sr.a)(t);try{for(c.s();!(n=c.n()).done;){var i=n.value,r=e.indexOf(i+"=");-1!==r&&a.push(r)}}catch(h){c.e(h)}finally{c.f()}a.sort((function(e,t){return e-t}));for(var o=new Map,s=new Array(a.length),l=0;l=0})),_=function(){T(""),S(C-1)};return Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("div",{className:t.settingsOptionsContainer,children:Object(a.jsx)(er,{slideOptions:[Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.customTitle,children:"Lambda Notification Targets"}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.lambdaContainer,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Filter",className:t.searchField,id:"search-resource",label:"",onChange:function(e){j(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){S(1)},children:"Add Notification Target"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:[],columns:[{label:"Status",elementKey:"status",renderFunction:function(e){return Object(a.jsxs)("div",{style:{display:"flex",alignItems:"center"},children:[Object(a.jsx)(rr.a,{style:"Offline"===e?{color:cr.a[500]}:{}}),e]})},width:150},{label:"Service",elementKey:"service_name"}],isLoading:h,records:E,entityName:"Notification Endpoints",idField:"service_name",customPaperHeight:t.customConfigurationPage,noBackground:!0})})]})]}),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.backContainer,children:Object(a.jsxs)("button",{onClick:_,className:t.backButton,children:[Object(a.jsx)(tr,{}),"Back To Lambda Notifications"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(pr,{setService:function(e){T(e),S(2)}})})]}),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.backContainer,children:Object(a.jsxs)("button",{onClick:_,className:t.backButton,children:[Object(a.jsx)(tr,{}),"Back To Supported Services"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(br,{service:N,saveAndRefresh:function(){O(!0),S(0),T("")}})})]})],currentSlide:C})})})})})})}))),fr=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({headerLabel:{fontSize:22,fontWeight:600,color:"#000",marginTop:4}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(0),i=Object(b.a)(n,2),r=i[0],o=i[1];return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(Rn,{label:"Settings"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.headerLabel,children:"All Settings"}),Object(a.jsxs)(Kn.a,{value:r,indicatorColor:"primary",textColor:"primary",onChange:function(e,t){o(t)},"aria-label":"tenant-tabs",children:[Object(a.jsx)(Un.a,{label:"Configurations"}),Object(a.jsx)(Un.a,{label:"Lambda Notifications"})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[0===r&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ar,{})}),1===r&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(gr,{})})]})]})})]})})),xr=n(196),vr=n.n(xr),yr={logger:{main:"logger",title:"Logger Webhook Configuration",modalTitle:"Logger Webhook",apiURL:"",configuration:{configuration_id:"logger_webhook",configuration_label:"Logger Webhook"}},audit:{main:"audit",title:"Audit Webhook Configuration",modalTitle:"Audit Webhook",apiURL:"",configuration:{configuration_id:"audit_webhook",configuration_label:"Audit Webhook"}}},Cr=Object(N.a)((function(e){return Object(k.a)({strongText:{fontWeight:700},keyName:{marginLeft:5},actionsTray:{textAlign:"right","& button":{marginLeft:10}},searchField:{background:"#FFFFFF",padding:12,borderRadius:5,boxShadow:"0px 3px 6px #00000012"},iconText:{lineHeight:"24px"}})}))((function(e){var t=e.match,n=e.classes,r=Object(c.useState)(!1),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(""),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],y=h[1],C=Z()(t,"path","").split("/"),S=Z()(yr,C[2],!1);if(!S)return null;var k=[].filter((function(e){return e.name.toLocaleLowerCase().includes(j.toLocaleLowerCase())}));return Object(a.jsxs)(i.a.Fragment,{children:[s&&Object(a.jsx)(Xi,{closeModalAndRefresh:function(){y(!0),l(!1)},selectedConfiguration:S.configuration}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"h6",children:S.title})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:n.actionsTray,children:[Object(a.jsx)(f.a,{placeholder:"Filter",className:n.searchField,id:"search-resource",label:"",onChange:function(e){m(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(vr.a,{}),onClick:function(){l(!0)},children:"Add Webhook Configuration"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:[{type:"edit",onClick:function(){}}],columns:[{label:"Name",elementKey:"name"}],isLoading:O,records:k,entityName:"Webhook Configurations",idField:"name"})})]})]})})),Sr=Object(s.b)(null,{setErrorSnackMessage:q})((function(e){var t=e.deleteOpen,n=e.selectedTenant,i=e.closeDeleteModalAndRefresh,r=e.setErrorSnackMessage,o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1];Object(c.useEffect)((function(){l&&me.invoke("DELETE","/api/v1/namespaces/".concat(n.namespace,"/tenants/").concat(n.name)).then((function(){d(!1),i(!0)})).catch((function(e){d(!1),r(e)}))}),[l]);return Object(a.jsxs)(sn.a,{open:t,onClose:function(){i(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Tenant"}),Object(a.jsxs)(dn.a,{children:[l&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["To continue please type ",Object(a.jsx)("b",{children:n.name})," in the box.",Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"retype-tenant",name:"retype-tenant",onChange:function(e){p(e.target.value)},label:"",value:m})})]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){i(!1)},color:"primary",disabled:l,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){m===n.name?d(!0):r("Tenant name is not correct")},color:"secondary",autoFocus:!0,disabled:""===m,children:"Delete"})]})]})})),kr=Object(N.a)((function(e){return Object(k.a)({wizardStepContainer:{display:"flex",flexDirection:"column"},wizardComponent:{overflowY:"auto",marginBottom:10,height:"calc(100vh - 435px)"},buttonsContainer:{display:"flex",flexDirection:"row",justifyContent:"flex-end",padding:"10px 0",borderTop:"#EAEAEA 1px solid","& button":{marginLeft:10}}})}))((function(e){var t=e.classes,n=e.page,c=e.pageChange;return Object(a.jsxs)("div",{className:t.wizardStepContainer,children:[Object(a.jsx)("div",{className:t.wizardComponent,children:n.componentRender}),Object(a.jsx)("div",{className:t.buttonsContainer,children:n.buttons.map((function(e){return Object(a.jsx)(g.a,{variant:"contained",color:"primary",size:"small",onClick:function(){!function(e){switch(e.type){case"next":c("++");break;case"back":c("--");break;case"to":c(e.toPage||0)}e.action&&e.action()}(e)},disabled:!e.enabled,children:e.label},"button-".concat(n.label,"-").concat(e.label))}))})]})})),wr=Object(N.a)((function(e){return Object(k.a)({wizardMain:{display:"flex",width:"100%",height:"100%",flexGrow:1},wizFromContainer:{height:"calc(100vh - 365px)",minHeight:450,padding:"0 30px"},wizardSteps:{minWidth:180,marginRight:10,borderRight:"#eaeaea 1px solid",display:"flex",flexGrow:1,flexDirection:"column",height:"100%","& ul":{padding:"0 15px 0 40px",marginTop:"0px","& li":{listStyle:"lower-roman",marginBottom:12}}},buttonList:{backgroundColor:"transparent",border:"none",cursor:"pointer","&:not(:disabled):hover":{textDecoration:"underline"},"&:selected, &:active, &:focus, &:focus:active":{border:"none",outline:0,boxShadow:"none"}},paddedContentGrid:{padding:"0 10px"},stepsLabel:{fontSize:20,color:"#393939",fontWeight:600,margin:"15px 12px"}})}))((function(e){var t=e.classes,n=e.wizardSteps,i=Object(c.useState)(0),r=Object(b.a)(i,2),o=r[0],s=r[1],l=function(e){var t=n.length-1;if("++"===e){var a=o+1;a>t&&(a=t),s(a)}if("--"===e){var c=o-1;c<0&&(c=0),s(c)}if("number"===typeof e){var i=e;e<0&&(i=0),e>t&&(i=t),s(i)}};return 0===n.length?null:Object(a.jsxs)(x.a,{container:!0,className:t.wizFromContainer,children:[Object(a.jsx)(x.a,{item:!0,xs:12,sm:3,md:3,lg:3,xl:2,children:Object(a.jsxs)("div",{className:t.wizardSteps,children:[Object(a.jsx)("span",{className:t.stepsLabel,children:"Steps"}),Object(a.jsx)("ul",{children:n.map((function(e,n){return Object(a.jsx)("li",{children:Object(a.jsx)("button",{onClick:function(){return l(n)},disabled:n>o,className:t.buttonList,children:e.label})},"wizard-".concat(n.toString()))}))})]})}),Object(a.jsx)(x.a,{item:!0,xs:12,sm:9,md:9,lg:9,xl:10,className:t.paddedContentGrid,children:Object(a.jsx)(kr,{page:n[o],pageChange:l})})]})})),Nr=function(e,t){return{podAntiAffinity:{requiredDuringSchedulingIgnoredDuringExecution:[{labelSelector:{matchExpressions:[{key:"v1.min.io/tenant",operator:"In",values:[e]},{key:"v1.min.io/pool",operator:"In",values:[t]}]},topologyKey:"kubernetes.io/hostname"}]}}},Tr="ADD_TENANT/SET_CURRENT_PAGE",Er="ADD_TENANT/SET_ADVANCED_MODE",_r="ADD_TENANT/UPDATE_FIELD",Ar="ADD_TENANT/SET_PAGE_VALID",Ir="ADD_TENANT/RESET_FORM",Mr="ADD_TENANT/SET_STORAGE_CLASSES_LIST",Lr="ADD_TENANT/ADD_MINIO_KEYPAIR",Dr="ADD_TENANT/ADD_FILE_MINIO_KEYPAIR",Br="ADD_TENANT/DELETE_MINIO_KEYPAIR",Fr="ADD_TENANT/ADD_CA_KEYPAIR",Rr="ADD_TENANT/ADD_FILE_TO_CA_KEYPAIR",Pr="ADD_TENANT/DELETE_CA_KEYPAIR",zr="ADD_TENANT/ADD_CONSOLE_CERT",Kr="ADD_TENANT/ENCRYPTION_SERVER_CERT",Ur="ADD_TENANT/ENCRYPTION_CLIENT_CERT",Wr="ADD_TENANT/ENCRYPTION_VAULT_CERT",qr="ADD_TENANT/ENCRYPTION_VAULT_CA",Vr="ADD_TENANT/ENCRYPTION_GEMALTO_CA",Gr=function(e,t,n){return{type:_r,pageName:e,field:t,value:n}},Hr=function(e,t){return{type:Ar,pageName:e,valid:t}},Yr=function(e,t,n){return{type:zr,key:e,fileName:t,value:n}},Qr=function(e){var t={};return e.forEach((function(e){if(e.required&&""===e.value.trim())t[e.fieldKey]="Field cannot be empty";else if(e.customValidation&&e.customValidationMessage)t[e.fieldKey]=e.customValidationMessage;else if(e.pattern&&e.customPatternMessage){var n=new RegExp(e.pattern,"g");e.value.match(n)||(t[e.fieldKey]=e.customPatternMessage)}else;})),t},Zr=function(e,t){var n=Object(j.a)({},e);return delete n[t],n},Jr=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,tenantName:e.tenants.createTenant.fields.nameTenant.tenantName,namespace:e.tenants.createTenant.fields.nameTenant.namespace,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,storageClasses:e.tenants.createTenant.storageClasses}}),{setModalErrorSnackMessage:G,setAdvancedMode:function(e){return{type:Er,state:e}},updateAddField:Gr,setStorageClassesList:function(e){return{type:Mr,storageClasses:e}},setLimitSize:function(e){return{type:"ADD_TENANT/SET_LIMIT_SIZE",limitSize:e}},isPageValid:Hr}),$r=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(Jr((function(e){var t=e.classes,n=e.storageClasses,r=e.advancedMode,o=e.tenantName,s=e.namespace,l=e.selectedStorageClass,d=e.setAdvancedMode,u=e.updateAddField,j=e.setStorageClassesList,m=e.setLimitSize,p=e.isPageValid,h=Object(c.useState)({}),O=Object(b.a)(h,2),g=O[0],f=O[1],v=Object(c.useCallback)((function(e,t){u("nameTenant",e,t)}),[u]),y=Object(c.useCallback)((function(){v("selectedStorageClass",""),j([]),me.invoke("GET","/api/v1/namespaces/".concat(s,"/resourcequotas/").concat(s,"-storagequota")).then((function(e){var t=Z()(e,"elements",[]);m(function(e){var t=Z()(e,"elements",[]),n={};return t.forEach((function(e){var t=e.name.split(".storageclass.storage.k8s.io/requests.storage")[0],a=Z()(e,"hard",0),c=Z()(e,"used",0);n[t]=a-c})),n}(e));var n=t.map((function(e){var t=Z()(e,"name","").split(".storageclass.storage.k8s.io/requests.storage")[0];return{label:t,value:t}}));j(n),n.length>0&&v("selectedStorageClass",n[0].value)})).catch((function(e){console.error(e)}))}),[s,m,j,v]),C=Object(c.useMemo)((function(){return Vi()(y,500)}),[y]);Object(c.useEffect)((function(){if(""!==s)return C(),C.cancel}),[C,s]),Object(c.useEffect)((function(){var e=Qr([{fieldKey:"tenant-name",required:!0,pattern:/^[a-z0-9-]{3,63}$/,customPatternMessage:"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3",value:o},{fieldKey:"namespace",required:!0,value:s,customValidation:n.length<1,customValidationMessage:"Please enter a valid namespace"}]),t=!("tenant-name"in e)&&!("namespace"in e)&&n.length>0;p("nameTenant",t),f(e)}),[n,s,o,p]);var S=function(e){f(Zr(g,e))};return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Name Tenant"}),Object(a.jsx)("span",{className:t.descriptionText,children:"How would you like to name this new tenant?"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"tenant-name",name:"tenant-name",onChange:function(e){v("tenantName",e.target.value),S("tenant-name")},label:"Name",value:o,required:!0,error:g["tenant-name"]||""})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"namespace",name:"namespace",onChange:function(e){v("namespace",e.target.value),S("namespace")},label:"Namespace",value:s,error:g.namespace||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(yn,{id:"storage_class",name:"storage_class",onChange:function(e){v("selectedStorageClass",e.target.value)},label:"Storage Class",value:l,options:n,disabled:n.length<1})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsxs)("span",{className:t.descriptionText,children:["Check 'Advanced Mode' for additional configuration options, such as configuring an Identity Provider, Encryption at rest, and customized TLS/SSL Certificates.",Object(a.jsx)("br",{}),"Leave 'Advanced Mode' unchecked to use the secure default settings for the tenant."]}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(In,{value:"adv_mode",id:"adv_mode",name:"adv_mode",checked:r,onChange:function(e){var t=e.target.checked;d(t)},label:"Advanced Mode"})]})]})}))),Xr=Object(s.b)((function(e){return{customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,consoleImage:e.tenants.createTenant.fields.configure.consoleImage,customDockerhub:e.tenants.createTenant.fields.configure.customDockerhub,imageRegistry:e.tenants.createTenant.fields.configure.imageRegistry,imageRegistryUsername:e.tenants.createTenant.fields.configure.imageRegistryUsername,imageRegistryPassword:e.tenants.createTenant.fields.configure.imageRegistryPassword,exposeMinIO:e.tenants.createTenant.fields.configure.exposeMinIO,exposeConsole:e.tenants.createTenant.fields.configure.exposeConsole}}),{updateAddField:Gr,isPageValid:Hr}),eo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(Xr((function(e){var t=e.classes,n=e.customImage,i=e.imageName,r=e.consoleImage,o=e.customDockerhub,s=e.imageRegistry,l=e.imageRegistryUsername,d=e.imageRegistryPassword,u=e.exposeMinIO,j=e.exposeConsole,m=e.updateAddField,p=e.isPageValid,h=Object(c.useState)({}),O=Object(b.a)(h,2),g=O[0],f=O[1],v=Object(c.useCallback)((function(e,t){m("configure",e,t)}),[m]);Object(c.useEffect)((function(){var e=[];n&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"image",required:!0,value:i,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/minio:VERSION'"},{fieldKey:"consoleImage",required:!0,value:r,pattern:/^((.*?)\/(.*?):(.+))$/,customPatternMessage:"Format must be of form: 'minio/console:VERSION'"}]),o&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"registry",required:!0,value:s},{fieldKey:"registryUsername",required:!0,value:l},{fieldKey:"registryPassword",required:!0,value:d}])));var t=Qr(e);p("configure",0===Object.keys(t).length),f(t)}),[n,i,r,o,s,l,d,p]);var y=function(e){f(Zr(g,e))};return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Configure"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Basic configurations for tenant management"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"custom_image",id:"custom_image",name:"custom_image",checked:n,onChange:function(e){var t=e.target.checked;v("customImage",t)},label:"Use custom image"})}),n&&Object(a.jsxs)(c.Fragment,{children:["Please enter the MinIO image from dockerhub to use",Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"image",name:"image",onChange:function(e){v("imageName",e.target.value),y("image")},label:"MinIO's Image",value:i,error:g.image||"",placeholder:"E.g. minio/minio:RELEASE.2020-05-08T02-40-49Z",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"consoleImage",name:"consoleImage",onChange:function(e){v("consoleImage",e.target.value),y("consoleImage")},label:"Console's Image",value:r,error:g.consoleImage||"",placeholder:"E.g. minio/console:v0.3.13",required:!0})})]}),n&&Object(a.jsx)(c.Fragment,{children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"custom_docker_hub",id:"custom_docker_hub",name:"custom_docker_hub",checked:o,onChange:function(e){var t=e.target.checked;v("customDockerhub",t)},label:"Set/Update Image Registry"})})}),o&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"registry",name:"registry",onChange:function(e){v("imageRegistry",e.target.value)},label:"Endpoint",value:s,error:g.registry||"",placeholder:"E.g. https://index.docker.io/v1/",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"registryUsername",name:"registryUsername",onChange:function(e){v("imageRegistryUsername",e.target.value)},label:"Username",value:l,error:g.registryUsername||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"registryPassword",name:"registryPassword",onChange:function(e){v("imageRegistryPassword",e.target.value)},label:"Password",value:d,error:g.registryPassword||"",required:!0})})]}),Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Expose Services"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Whether the tenant's services should request an external IP."})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"expose_minio",id:"expose_minio",name:"expose_minio",checked:u,onChange:function(e){var t=e.target.checked;v("exposeMinIO",t)},label:"Expose MiniO Service"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"expose_console",id:"expose_console",name:"expose_console",checked:j,onChange:function(e){var t=e.target.checked;v("exposeConsole",t)},label:"Expose Console Service"})})]})}))),to=Object(s.b)((function(e){return{idpSelection:e.tenants.createTenant.fields.identityProvider.idpSelection,openIDURL:e.tenants.createTenant.fields.identityProvider.openIDURL,openIDClientID:e.tenants.createTenant.fields.identityProvider.openIDClientID,openIDSecretID:e.tenants.createTenant.fields.identityProvider.openIDSecretID,ADURL:e.tenants.createTenant.fields.identityProvider.ADURL,ADSkipTLS:e.tenants.createTenant.fields.identityProvider.ADSkipTLS,ADServerInsecure:e.tenants.createTenant.fields.identityProvider.ADServerInsecure,ADUserNameFilter:e.tenants.createTenant.fields.identityProvider.ADUserNameFilter,ADGroupBaseDN:e.tenants.createTenant.fields.identityProvider.ADGroupBaseDN,ADGroupSearchFilter:e.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,ADNameAttribute:e.tenants.createTenant.fields.identityProvider.ADNameAttribute}}),{updateAddField:Gr,isPageValid:Hr}),no=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(to((function(e){var t=e.classes,n=e.idpSelection,i=e.openIDURL,r=e.openIDClientID,o=e.openIDSecretID,s=e.ADURL,l=e.ADSkipTLS,d=e.ADServerInsecure,u=e.ADUserNameFilter,j=e.ADGroupBaseDN,m=e.ADGroupSearchFilter,p=e.ADNameAttribute,h=e.updateAddField,O=e.isPageValid,g=Object(c.useState)({}),f=Object(b.a)(g,2),y=f[0],C=f[1],S=Object(c.useCallback)((function(e,t){h("identityProvider",e,t)}),[h]),k=function(e){C(Zr(y,e))};return Object(c.useEffect)((function(){var e=[];if("Built-in"===n)return O("identityProvider",!0),void C({});"OpenID"===n&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"openID_URL",required:!0,value:i},{fieldKey:"openID_clientID",required:!0,value:r},{fieldKey:"openID_secretID",required:!0,value:o}])),"AD"===n&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"AD_URL",required:!0,value:s},{fieldKey:"ad_userNameFilter",required:!0,value:u},{fieldKey:"ad_groupBaseDN",required:!0,value:j},{fieldKey:"ad_groupSearchFilter",required:!0,value:m},{fieldKey:"ad_nameAttribute",required:!0,value:p}]));var t=Qr(e);O("identityProvider",0===Object.keys(t).length),C(t)}),[n,i,r,o,s,u,j,m,p,O]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Identity Provider"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Access to the tenant can be controlled via an external Identity Manager."})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(Tn,{currentSelection:n,id:"idp-options",name:"idp-options",label:"Protocol",onChange:function(e){S("idpSelection",e.target.value)},selectorOptions:[{label:"Built-in",value:"Built-in"},{label:"OpenID",value:"OpenID"},{label:"Active Directory",value:"AD"}]}),"MinIO supports both OpenID and Active Directory"]}),"OpenID"===n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"openID_URL",name:"openID_URL",onChange:function(e){S("openIDURL",e.target.value),k("openID_URL")},label:"URL",value:i,error:y.openID_URL||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"openID_clientID",name:"openID_clientID",onChange:function(e){S("openIDClientID",e.target.value),k("openID_clientID")},label:"Client ID",value:r,error:y.openID_clientID||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"openID_secretID",name:"openID_secretID",onChange:function(e){S("openIDSecretID",e.target.value),k("openID_secretID")},label:"Secret ID",value:o,error:y.openID_secretID||"",required:!0})})]}),"AD"===n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"AD_URL",name:"AD_URL",onChange:function(e){S("ADURL",e.target.value),k("AD_URL")},label:"URL",value:s,error:y.AD_URL||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"ad_skipTLS",id:"ad_skipTLS",name:"ad_skipTLS",checked:l,onChange:function(e){var t=e.target.checked;S("ADSkipTLS",t)},label:"Skip TLS Verification"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"ad_serverInsecure",id:"ad_serverInsecure",name:"ad_serverInsecure",checked:d,onChange:function(e){var t=e.target.checked;S("ADServerInsecure",t)},label:"Server Insecure"})}),d?Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(v.a,{className:t.error,variant:"caption",display:"block",gutterBottom:!0,children:"Warning: All traffic with Active Directory will be unencrypted"}),Object(a.jsx)("br",{})]}):null,Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_userNameFilter",name:"ad_userNameFilter",onChange:function(e){S("ADUserNameFilter",e.target.value),k("ad_userNameFilter")},label:"User Search Filter",value:u,error:y.ad_userNameFilter||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_groupBaseDN",name:"ad_groupBaseDN",onChange:function(e){S("ADGroupBaseDN",e.target.value),k("ad_groupBaseDN")},label:"Group Search Base DN",value:j,error:y.ad_groupBaseDN||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_groupSearchFilter",name:"ad_groupSearchFilter",onChange:function(e){S("ADGroupSearchFilter",e.target.value),k("ad_groupSearchFilter")},label:"Group Search Filter",value:m,error:y.ad_groupSearchFilter||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"ad_nameAttribute",name:"ad_nameAttribute",onChange:function(e){S("ADNameAttribute",e.target.value),k("ad_nameAttribute")},label:"Group Name Attribute",value:p,error:y.ad_nameAttribute||"",required:!0})})]})]})}))),ao=n(334),co=n.n(ao),io=n(333),ro=n.n(io),oo=Object(N.a)((function(e){return Object(k.a)({errorBlock:{color:e.palette.error.main}})}))((function(e){var t=e.classes,n=e.errorMessage,c=e.withBreak,r=void 0===c||c;return Object(a.jsxs)(i.a.Fragment,{children:[r&&Object(a.jsx)("br",{}),Object(a.jsx)(v.a,{component:"p",variant:"body1",className:t.errorBlock,children:n})]})})),so=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Se),we),{},{textBoxContainer:{flexGrow:1,position:"relative",flexDirection:"column"},errorState:{color:"#b53b4b",fontSize:14,position:"absolute",top:7,right:7},errorText:{margin:"0",fontSize:"0.75rem",marginTop:3,textAlign:"left",fontFamily:"Lato,sans-serif",fontWeight:400,lineHeight:"1.66",color:"#dc1f2e"},valueString:{maxWidth:350,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",marginTop:2},fileReselect:{display:"flex",alignItems:"center"},fieldBottom:{borderBottom:"#9c9c9c 1px solid"},fileInputField:{margin:"13px 0"}}))}))((function(e){var t=e.label,n=e.classes,r=e.onChange,o=e.id,s=e.name,l=e.disabled,d=void 0!==l&&l,u=e.tooltip,j=void 0===u?"":u,m=e.required,p=e.error,h=void 0===p?"":p,O=e.accept,g=void 0===O?"":O,f=e.value,v=void 0===f?"":f,y=Object(c.useState)(!1),C=Object(b.a)(y,2),S=C[0],k=C[1];return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(n.fieldBottom," ").concat(n.fieldContainer," ").concat(""!==h?n.errorInField:""),children:[""!==t&&Object(a.jsxs)(Xt.a,{htmlFor:o,className:"".concat(""!==h?n.fieldLabelError:""," ").concat(n.inputLabel),children:[Object(a.jsxs)("span",{children:[t,m?"*":""]}),""!==j&&Object(a.jsx)("div",{className:n.tooltipContainer,children:Object(a.jsx)(en.a,{title:j,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:n.tooltip})})})})]}),S||""===v?Object(a.jsxs)("div",{className:n.textBoxContainer,children:[Object(a.jsx)("input",{type:"file",name:s,onChange:function(e){var t=Z()(e,"target.files[0].name","");!function(e,t){var n=e.target.files[0],a=new FileReader;a.readAsDataURL(n),a.onload=function(){var e=a.result;if(e){var n=e.toString().split("base64,");2===n.length&&t(n[1])}}}(e,(function(e){r(e,t)}))},accept:g,required:m,disabled:d,className:n.fileInputField}),""!==v&&Object(a.jsx)(_t.a,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){k(!1)},disableRipple:!1,disableFocusRipple:!1,children:Object(a.jsx)(ro.a,{})}),""!==h&&Object(a.jsx)(oo,{errorMessage:h})]}):Object(a.jsxs)("div",{className:n.fileReselect,children:[Object(a.jsx)("div",{className:n.valueString,children:v}),Object(a.jsx)(_t.a,{color:"primary","aria-label":"upload picture",component:"span",onClick:function(){k(!0)},disableRipple:!1,disableFocusRipple:!1,children:Object(a.jsx)(co.a,{})})]})]})})})),lo=Object(s.b)((function(e){return{enableTLS:e.tenants.createTenant.fields.security.enableTLS,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,caCertificates:e.tenants.createTenant.certificates.caCertificates,consoleCertificate:e.tenants.createTenant.certificates.consoleCertificate}}),{updateAddField:Gr,isPageValid:Hr,addFileToCaCertificates:function(e,t,n,a){return{type:Rr,id:e,key:t,fileName:n,value:a}},deleteCaCertificate:function(e){return{type:Pr,id:e}},addCaCertificate:function(){return{type:Fr}},addKeyPair:function(){return{type:Lr}},addFileToKeyPair:function(e,t,n,a){return{type:Dr,id:e,key:t,fileName:n,value:a}},deleteKeyPair:function(e){return{type:Br,id:e}},addConsoleCertificate:Yr}),uo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(lo((function(e){var t=e.classes,n=e.enableTLS,i=e.enableAutoCert,r=e.enableCustomCerts,o=e.minioCertificates,s=e.caCertificates,l=e.consoleCertificate,d=e.updateAddField,u=e.isPageValid,b=e.addFileToCaCertificates,j=e.deleteCaCertificate,m=e.addCaCertificate,p=e.addKeyPair,h=e.addFileToKeyPair,O=e.deleteKeyPair,f=Object(c.useCallback)((function(e,t){d("security",e,t)}),[d]);return Object(c.useEffect)((function(){u("security",!n||(!!i||!!r))}),[n,i,r,u]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("div",{className:t.headerElement,children:Object(a.jsx)("h3",{className:t.h3Section,children:"Security"})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(In,{value:"enableTLS",id:"enableTLS",name:"enableTLS",checked:n,onChange:function(e){var t=e.target.checked;f("enableTLS",t)},label:"Enable TLS"}),"Enable TLS for the tenant, this is required for Encryption Configuration",n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(v.a,{variant:"caption",display:"block",gutterBottom:!0,children:"AutoCert: MinIO Operator will generate all TLS certificates automatically"}),Object(a.jsx)(v.a,{variant:"caption",display:"block",gutterBottom:!0,children:"Custom certificates: Allow user to provide your own certificates"}),Object(a.jsx)("br",{})]})]}),n&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(In,{value:"enableAutoCert",id:"enableAutoCert",name:"enableAutoCert",checked:i,onChange:function(e){var t=e.target.checked;f("enableAutoCert",t)},label:"Enable AutoCert"}),Object(a.jsx)(In,{value:"enableCustomCerts",id:"enableCustomCerts",name:"enableCustomCerts",checked:r,onChange:function(e){var t=e.target.checked;f("enableCustomCerts",t)},label:"Custom Certificates"})]}),r&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"MinIO Certificates"})}),o.map((function(e){return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:5,children:Object(a.jsx)(so,{onChange:function(t,n){h(e.id,"key",n,t)},accept:".key,.pem",id:"tlsKey",name:"tlsKey",label:"Key",value:e.key})}),Object(a.jsx)(x.a,{item:!0,xs:5,children:Object(a.jsx)(so,{onChange:function(t,n){h(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),Object(a.jsx)(x.a,{item:!0,xs:1,children:Object(a.jsx)(g.a,{onClick:function(){O(e.id)},color:"secondary",children:"Remove"})})]},e.id)})),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{onClick:p,color:"primary",children:"Add More"})})]}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsx)(xc.a,{}),Object(a.jsx)("br",{})]})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"CA Certificates"})}),s.map((function(e){return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:10,children:Object(a.jsx)(so,{onChange:function(t,n){b(e.id,"cert",n,t)},accept:".cer,.crt,.cert,.pem",id:"tlsCert",name:"tlsCert",label:"Cert",value:e.cert})}),Object(a.jsx)(x.a,{item:!0,xs:1,children:Object(a.jsx)(g.a,{onClick:function(){j(e.id)},color:"secondary",children:"Remove"})})]},e.id)})),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{onClick:m,color:"primary",children:"Add More"})})]}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)("br",{}),Object(a.jsx)(xc.a,{}),Object(a.jsx)("br",{})]})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"Console Certificates"})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){Yr("key",t,e)},accept:".key,.pem",id:"consoleKey",name:"consoleKey",label:"Key",value:l.key})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){Yr("cert",t,e)},accept:".cer,.crt,.cert,.pem",id:"consoleCert",name:"consoleCert",label:"Cert",value:l.cert})})]})]})]})]})}))),bo=Object(s.b)((function(e){return{enableEncryption:e.tenants.createTenant.fields.encryption.enableEncryption,encryptionType:e.tenants.createTenant.fields.encryption.encryptionType,gemaltoEndpoint:e.tenants.createTenant.fields.encryption.gemaltoEndpoint,gemaltoToken:e.tenants.createTenant.fields.encryption.gemaltoToken,gemaltoDomain:e.tenants.createTenant.fields.encryption.gemaltoDomain,gemaltoRetry:e.tenants.createTenant.fields.encryption.gemaltoRetry,awsEndpoint:e.tenants.createTenant.fields.encryption.awsEndpoint,awsRegion:e.tenants.createTenant.fields.encryption.awsRegion,awsKMSKey:e.tenants.createTenant.fields.encryption.awsKMSKey,awsAccessKey:e.tenants.createTenant.fields.encryption.awsAccessKey,awsSecretKey:e.tenants.createTenant.fields.encryption.awsSecretKey,awsToken:e.tenants.createTenant.fields.encryption.awsToken,vaultEndpoint:e.tenants.createTenant.fields.encryption.vaultEndpoint,vaultEngine:e.tenants.createTenant.fields.encryption.vaultEngine,vaultNamespace:e.tenants.createTenant.fields.encryption.vaultNamespace,vaultPrefix:e.tenants.createTenant.fields.encryption.vaultPrefix,vaultAppRoleEngine:e.tenants.createTenant.fields.encryption.vaultAppRoleEngine,vaultId:e.tenants.createTenant.fields.encryption.vaultId,vaultSecret:e.tenants.createTenant.fields.encryption.vaultSecret,vaultRetry:e.tenants.createTenant.fields.encryption.vaultRetry,vaultPing:e.tenants.createTenant.fields.encryption.vaultPing,gcpProjectID:e.tenants.createTenant.fields.encryption.gcpProjectID,gcpEndpoint:e.tenants.createTenant.fields.encryption.gcpEndpoint,gcpClientEmail:e.tenants.createTenant.fields.encryption.gcpClientEmail,gcpClientID:e.tenants.createTenant.fields.encryption.gcpClientID,gcpPrivateKeyID:e.tenants.createTenant.fields.encryption.gcpPrivateKeyID,gcpPrivateKey:e.tenants.createTenant.fields.encryption.gcpPrivateKey,enableCustomCertsForKES:e.tenants.createTenant.fields.encryption.enableCustomCertsForKES,enableAutoCert:e.tenants.createTenant.fields.security.enableAutoCert,enableTLS:e.tenants.createTenant.fields.security.enableTLS,minioCertificates:e.tenants.createTenant.certificates.minioCertificates,serverCertificate:e.tenants.createTenant.certificates.serverCertificate,clientCertificate:e.tenants.createTenant.certificates.clientCertificate,vaultCertificate:e.tenants.createTenant.certificates.vaultCertificate,vaultCA:e.tenants.createTenant.certificates.vaultCA,gemaltoCA:e.tenants.createTenant.certificates.gemaltoCA,enableCustomCerts:e.tenants.createTenant.fields.security.enableCustomCerts}}),{updateAddField:Gr,isPageValid:Hr,addFileServerCert:function(e,t,n){return{type:Kr,key:e,fileName:t,value:n}},addFileClientCert:function(e,t,n){return{type:Ur,key:e,fileName:t,value:n}},addFileVaultCert:function(e,t,n){return{type:Wr,key:e,fileName:t,value:n}},addFileVaultCa:function(e,t){return{type:qr,fileName:e,value:t}},addFileGemaltoCa:function(e,t){return{type:Vr,fileName:e,value:t}}}),jo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(bo((function(e){var t=e.classes,n=e.updateAddField,i=e.isPageValid,r=e.addFileServerCert,o=e.addFileClientCert,s=e.addFileVaultCert,l=e.addFileVaultCa,d=e.addFileGemaltoCa,u=e.enableEncryption,j=e.enableCustomCerts,m=e.encryptionType,p=e.gemaltoEndpoint,h=e.gemaltoToken,O=e.gemaltoDomain,g=e.gemaltoRetry,f=e.awsEndpoint,y=e.awsRegion,C=e.awsKMSKey,S=e.awsAccessKey,k=e.awsSecretKey,w=e.awsToken,N=e.vaultEndpoint,T=e.vaultEngine,E=e.vaultNamespace,_=e.vaultPrefix,A=e.vaultAppRoleEngine,I=e.vaultId,M=e.vaultSecret,L=e.vaultRetry,D=e.vaultPing,B=e.gcpProjectID,F=e.gcpEndpoint,R=e.gcpClientEmail,P=e.gcpClientID,z=e.gcpPrivateKeyID,K=e.gcpPrivateKey,U=e.enableCustomCertsForKES,W=e.enableAutoCert,q=e.enableTLS,V=e.minioCertificates,G=e.serverCertificate,H=e.clientCertificate,Y=e.vaultCertificate,Q=e.vaultCA,Z=e.gemaltoCA,J=Object(c.useState)({}),$=Object(b.a)(J,2),X=$[0],ee=$[1],te=!1;q&&(W||V&&V.filter((function(e){return e.encoded_key&&e.encoded_cert})).length>0)&&(te=!0);var ne=Object(c.useCallback)((function(e,t){n("encryption",e,t)}),[n]),ae=function(e){ee(Zr(X,e))};return Object(c.useEffect)((function(){var e=[];u&&(j&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"serverKey",required:!W,value:G.encoded_key},{fieldKey:"serverCert",required:!W,value:G.encoded_cert},{fieldKey:"clientKey",required:!W,value:H.encoded_key},{fieldKey:"clientCert",required:!W,value:H.encoded_cert}])),"vault"===m&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"vault_endpoint",required:!0,value:N},{fieldKey:"vault_id",required:!0,value:I},{fieldKey:"vault_secret",required:!0,value:M},{fieldKey:"vault_ping",required:!1,value:D,customValidation:parseInt(D)<0,customValidationMessage:"Value needs to be 0 or greater"},{fieldKey:"vault_retry",required:!1,value:L,customValidation:parseInt(L)<0,customValidationMessage:"Value needs to be 0 or greater"}])),"aws"===m&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"aws_endpoint",required:!0,value:f},{fieldKey:"aws_region",required:!0,value:y},{fieldKey:"aws_accessKey",required:!0,value:S},{fieldKey:"aws_secretKey",required:!0,value:k}])),"gemalto"===m&&(e=[].concat(Object(Nt.a)(e),[{fieldKey:"gemalto_endpoint",required:!0,value:p},{fieldKey:"gemalto_token",required:!0,value:h},{fieldKey:"gemalto_domain",required:!0,value:O},{fieldKey:"gemalto_retry",required:!1,value:g,customValidation:parseInt(g)<0,customValidationMessage:"Value needs to be 0 or greater"}])));var t=Qr(e);i("encryption",0===Object.keys(t).length),ee(t)}),[u,m,N,T,I,M,D,L,f,y,k,S,p,h,O,g,B,i,W,j,G.encoded_key,G.encoded_cert,H.encoded_key,H.encoded_cert]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Encryption"}),Object(a.jsx)("span",{className:t.descriptionText,children:"How would you like to encrypt the information at rest."})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"enableEncryption",id:"enableEncryption",name:"enableEncryption",checked:u,onChange:function(e){var t=e.target.checked;ne("enableEncryption",t)},label:"Enable Server Side Encryption",disabled:!te})}),u&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:m,id:"encryptionType",name:"encryptionType",label:"Encryption Options",onChange:function(e){ne("encryptionType",e.target.value)},selectorOptions:[{label:"Vault",value:"vault"},{label:"AWS",value:"aws"},{label:"Gemalto",value:"gemalto"},{label:"GCP",value:"gcp"}]})}),"vault"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"enableCustomCertsForKES",id:"enableCustomCertsForKES",name:"enableCustomCertsForKES",checked:U||!W,onChange:function(e){var t=e.target.checked;ne("enableCustomCertsForKES",t)},label:"Custom Certificates",disabled:!W})}),(U||!W)&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"Encryption Service Certificates"})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){r("key",t,e),ae("serverKey")},accept:".key,.pem",id:"serverKey",name:"serverKey",label:"Key",error:X.serverKey||"",value:G.key,required:!W})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){r("cert",t,e),ae("serverCert")},accept:".cer,.crt,.cert,.pem",id:"serverCert",name:"serverCert",label:"Cert",error:X.serverCert||"",value:G.cert,required:!W})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,children:"Mutual TLS authentication"})}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){o("key",t,e),ae("clientKey")},accept:".key,.pem",id:"clientKey",name:"clientKey",label:"Key",error:X.clientKey||"",value:H.key,required:!W})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){o("cert",t,e),ae("clientCert")},accept:".cer,.crt,.cert,.pem",id:"clientCert",name:"clientCert",label:"Cert",error:X.clientCert||"",value:H.cert,required:!W})})]})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_endpoint",name:"vault_endpoint",onChange:function(e){ne("vaultEndpoint",e.target.value),ae("vault_endpoint")},label:"Endpoint",value:N,error:X.vault_endpoint||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_engine",name:"vault_engine",onChange:function(e){ne("vaultEngine",e.target.value),ae("vault_engine")},label:"Engine",value:T})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_namespace",name:"vault_namespace",onChange:function(e){ne("vaultNamespace",e.target.value)},label:"Namespace",value:E})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_prefix",name:"vault_prefix",onChange:function(e){ne("vaultPrefix",e.target.value)},label:"Prefix",value:_})}),Object(a.jsx)("h5",{children:"App Role"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_approle_engine",name:"vault_approle_engine",onChange:function(e){ne("vaultAppRoleEngine",e.target.value)},label:"Engine",value:A})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_id",name:"vault_id",onChange:function(e){ne("vaultId",e.target.value),ae("vault_id")},label:"AppRole ID",value:I,error:X.vault_id||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"vault_secret",name:"vault_secret",onChange:function(e){ne("vaultSecret",e.target.value),ae("vault_secret")},label:"AppRole Secret",value:M,error:X.vault_secret||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",min:"0",id:"vault_retry",name:"vault_retry",onChange:function(e){ne("vaultRetry",e.target.value),ae("vault_retry")},label:"Retry (Seconds)",value:L,error:X.vault_retry||""})}),Object(a.jsx)("h5",{children:"Mutual TLS authentication (optional)"}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){s("key",t,e),ae("vault_key")},accept:".key,.pem",id:"vault_key",name:"vault_key",label:"Key",value:Y.key})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsx)(so,{onChange:function(e,t){s("cert",t,e),ae("vault_cert")},accept:".cer,.crt,.cert,.pem",id:"vault_cert",name:"vault_cert",label:"Cert",value:Y.cert})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(so,{onChange:function(e,t){l(t,e),ae("vault_ca")},accept:".cer,.crt,.cert,.pem",id:"vault_ca",name:"vault_ca",label:"CA",value:Q.cert})}),Object(a.jsx)("h5",{children:"Status"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",min:"0",id:"vault_ping",name:"vault_ping",onChange:function(e){ne("vaultPing",e.target.value),ae("vault_ping")},label:"Ping (Seconds)",value:D,error:X.vault_ping||""})})]}),"gcp"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_project_id",name:"gcp_project_id",onChange:function(e){ne("gcpProjectID",e.target.value)},label:"Project ID",value:B})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_endpoint",name:"gcp_endpoint",onChange:function(e){ne("gcpEndpoint",e.target.value)},label:"Endpoint",value:F})}),Object(a.jsx)("h5",{children:"Credentials"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_client_email",name:"gcp_client_email",onChange:function(e){ne("gcpClientEmail",e.target.value)},label:"Client Email",value:R})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_client_id",name:"gcp_client_id",onChange:function(e){ne("gcpClientID",e.target.value)},label:"Client ID",value:P})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_private_key_id",name:"gcp_private_key_id",onChange:function(e){ne("gcpPrivateKeyID",e.target.value)},label:"Private Key ID",value:z})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gcp_private_key",name:"gcp_private_key",onChange:function(e){ne("gcpPrivateKey",e.target.value)},label:"Private Key",value:K})})]}),"aws"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_endpoint",name:"aws_endpoint",onChange:function(e){ne("awsEndpoint",e.target.value),ae("aws_endpoint")},label:"Endpoint",value:f,error:X.aws_endpoint||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_region",name:"aws_region",onChange:function(e){ne("awsRegion",e.target.value),ae("aws_region")},label:"Region",value:y,error:X.aws_region||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_kmsKey",name:"aws_kmsKey",onChange:function(e){ne("awsKMSKey",e.target.value)},label:"KMS Key",value:C})}),Object(a.jsx)("h5",{children:"Credentials"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_accessKey",name:"aws_accessKey",onChange:function(e){ne("awsAccessKey",e.target.value),ae("aws_accessKey")},label:"Access Key",value:S,error:X.aws_accessKey||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_secretKey",name:"aws_secretKey",onChange:function(e){ne("awsSecretKey",e.target.value),ae("aws_secretKey")},label:"Secret Key",value:k,error:X.aws_secretKey||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"aws_token",name:"aws_token",onChange:function(e){ne("awsToken",e.target.value)},label:"Token",value:w})})]}),"gemalto"===m&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gemalto_endpoint",name:"gemalto_endpoint",onChange:function(e){ne("gemaltoEndpoint",e.target.value),ae("gemalto_endpoint")},label:"Endpoint",value:p,error:X.gemalto_endpoint||"",required:!0})}),Object(a.jsx)("h5",{children:"Credentials"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gemalto_token",name:"gemalto_token",onChange:function(e){ne("gemaltoToken",e.target.value),ae("gemalto_token")},label:"Token",value:h,error:X.gemalto_token||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"gemalto_domain",name:"gemalto_domain",onChange:function(e){ne("gemaltoDomain",e.target.value),ae("gemalto_domain")},label:"Domain",value:O,error:X.gemalto_domain||"",required:!0})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",min:"0",id:"gemalto_retry",name:"gemalto_retry",onChange:function(e){ne("gemaltoRetry",e.target.value),ae("gemalto_retry")},label:"Retry (seconds)",value:g,error:X.gemalto_retry||""})}),Object(a.jsx)("h5",{children:"Custom CA Root certificate verification"}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(so,{onChange:function(e,t){d(t,e),ae("gemalto_ca")},accept:".cer,.crt,.cert,.pem",id:"gemalto_ca",name:"gemalto_ca",label:"CA",value:Z.cert})})]})]})]})}))),mo=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor,drivesPerServer:e.tenants.createTenant.fields.tenantSize.drivesPerServer,nodes:e.tenants.createTenant.fields.tenantSize.nodes,memoryNode:e.tenants.createTenant.fields.tenantSize.memoryNode,ecParity:e.tenants.createTenant.fields.tenantSize.ecParity,ecParityChoices:e.tenants.createTenant.fields.tenantSize.ecParityChoices,cleanECChoices:e.tenants.createTenant.fields.tenantSize.cleanECChoices,maxAllocableMemo:e.tenants.createTenant.fields.tenantSize.maxAllocableMemo,memorySize:e.tenants.createTenant.fields.tenantSize.memorySize,distribution:e.tenants.createTenant.fields.tenantSize.distribution,ecParityCalc:e.tenants.createTenant.fields.tenantSize.ecParityCalc,limitSize:e.tenants.createTenant.fields.tenantSize.limitSize,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass}}),{updateAddField:Gr,isPageValid:Hr}),po=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(mo((function(e){var t=e.classes,n=e.updateAddField,i=e.isPageValid,r=e.advancedMode,o=e.volumeSize,s=e.sizeFactor,l=e.drivesPerServer,d=e.nodes,u=e.memoryNode,j=e.ecParity,m=e.ecParityChoices,p=e.cleanECChoices,h=e.maxAllocableMemo,O=e.memorySize,g=e.distribution,f=e.ecParityCalc,v=e.limitSize,y=e.selectedStorageClass,C=Object(c.useState)({}),S=Object(b.a)(C,2),k=S[0],w=S[1],N=f.storageFactors.find((function(e){return e.erasureCode===j})),T=Object(c.useCallback)((function(e,t){n("tenantSize",e,t)}),[n]),E=function(e){w(Zr(k,e))},_=Object(c.useCallback)((function(){var e=parseInt(u)||0,t=h||0,n=s,a=function(e,t,n){var a=oe(e.toString(10),"Gi",!0),c=parseInt(a,10);if(0===n)return{error:"There is no memory available for the selected number of nodes",request:0,limit:0};if(nn)return{error:"The requested memory is greater than the max available memory for the selected number of nodes",request:0,limit:0};var i=parseInt(t,10),r=c;return i>=parseInt(oe("1","Pi",!0),10)?r=Math.max(c,parseInt(oe("64","Gi",!0),10)):i>=parseInt(oe("100","Ti"),10)?r=Math.max(c,parseInt(oe("32","Gi",!0),10)):i>=parseInt(oe("10","Ti"),10)?r=Math.max(c,parseInt(oe("16","Gi",!0),10)):i>=parseInt(oe("1","Ti"),10)&&(r=Math.max(c,parseInt(oe("8","Gi",!0),10))),{error:"",request:c,limit:r}}(e,oe((o||0).toString(10),n),t);T("memorySize",a)}),[h,u,s,T,o]);Object(c.useEffect)((function(){_()}),[u,_]),Object(c.useEffect)((function(){_()}),[h,_]),Object(c.useEffect)((function(){if(m.length>0&&""===g.error){var e=function(e,t,n,a){if(e.length<1)return{error:1,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]};var c=t*n,i=e[0],r=2*parseInt(i.split(":")[1],10),o=e.map((function(e){var n=parseInt(e.split(":")[1],10),a=r/(r-n),i=Math.floor(c/a),o=t-Math.floor(t/a);return{erasureCode:e,storageFactor:a,maxCapacity:i.toString(10),maxFailureTolerations:o}})),s=i,l=e.find((function(e){return"EC:4"===e}));return t>=8&&a>16&&l&&(s="EC:4"),{error:0,storageFactors:o,maxEC:i,rawCapacity:c.toString(10),erasureCodeSet:r,defaultEC:s}}(p,g.persistentVolumes,g.pvSize,g.nodes);T("ecParityCalc",e),T("ecParity",e.defaultEC)}}),[m.length,g,p,T]),Object(c.useEffect)((function(){A(),I(),function(e){""===e||isNaN(parseInt(e))||me.invoke("GET","/api/v1/cluster/max-allocatable-memory?num_nodes=".concat(e)).then((function(e){var t=e.max_memory?e.max_memory:0;T("maxAllocableMemo",t)})).catch((function(e){T("maxAllocableMemo",0),console.error(e)}))}(d)}),[d,o,s,l]);var A=function(){var e=o,t=s,n=oe("12","Ti",!0),a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,c=oe(e.value,e.unit,!0);return parseInt(c,10)v[y],customValidationMessage:"Volume size must be greater than 1Gi and less than ".concat(ce(v[y],!0))},{fieldKey:"memory_per_node",required:!0,value:u,customValidation:parseInt(u)<2,customValidationMessage:"Memory size must be greater than 2Gi"},{fieldKey:"drivesps",required:!0,value:l,customValidation:parseInt(l)<1,customValidationMessage:"There must be at least one drive"}]);i("tenantSize",!("nodes"in t)&&!("volume_size"in t)&&!("memory_per_node"in t)&&!("drivesps"in t)&&""===g.error&&0===f.error&&""===O.error),w(t)}),[d,o,s,u,g,l,f,O,v,y]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Tenant Size"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Please select the desired capacity"})]}),Object(a.jsx)("span",{className:t.error,children:g.error}),Object(a.jsx)("span",{className:t.error,children:O.error}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"nodes",name:"nodes",type:"number",onChange:function(e){T("nodes",e.target.value),E("nodes")},label:"Number of Servers",value:d,min:"4",required:!0,error:k.nodes||""})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{id:"drivesps",name:"drivesps",type:"number",onChange:function(e){T("drivesPerServer",e.target.value),E("drivesps")},label:"Number of Drives per Server",value:l,min:"1",required:!0,error:k.drivesps||""})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsxs)("div",{className:t.multiContainer,children:[Object(a.jsx)("div",{children:Object(a.jsx)(hn,{type:"number",id:"volume_size",name:"volume_size",onChange:function(e){T("volumeSize",e.target.value),E("volume_size")},label:"Total Size",value:o,required:!0,error:k.volume_size||"",min:"0"})}),Object(a.jsx)("div",{className:t.sizeFactorContainer,children:Object(a.jsx)(yn,{label:"Unit",id:"size_factor",name:"size_factor",value:s,onChange:function(e){T("sizeFactor",e.target.value)},options:ne.map((function(e){return{label:e,value:e}}))})})]})}),r&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{type:"number",id:"memory_per_node",name:"memory_per_node",onChange:function(e){T("memoryNode",e.target.value),E("memory_per_node")},label:"Memory per Node [Gi]",value:u,required:!0,error:k.memory_per_node||"",min:"2"})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(yn,{id:"ec_parity",name:"ec_parity",onChange:function(e){T("ecParity",e.target.value)},label:"Erasure Code Parity",value:j,options:m}),Object(a.jsx)("span",{className:t.descriptionText,children:"Please select the desired parity. This setting will change the max usable capacity in the cluster"})]})]}),Object(a.jsx)("h4",{children:"Resource Allocation"}),Object(a.jsx)(Jn.a,{className:t.table,"aria-label":"simple table",children:Object(a.jsxs)(Zn.a,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Number of Servers"}),Object(a.jsx)(Qn.a,{align:"right",children:parseInt(d)>0?d:"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Drives per Server"}),Object(a.jsx)(Qn.a,{align:"right",children:g?g.disks:"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Drive Capacity"}),Object(a.jsx)(Qn.a,{align:"right",children:g?ce(g.pvSize):"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Total Number of Volumes"}),Object(a.jsx)(Qn.a,{align:"right",children:g?g.persistentVolumes:"-"})]}),!r&&Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Memory per Node"}),Object(a.jsxs)(Qn.a,{align:"right",children:[u," Gi"]})]})]})}),0===f.error&&N&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)("h4",{children:"Erasure Code Configuration"}),Object(a.jsx)(Jn.a,{className:t.table,"aria-label":"simple table",children:Object(a.jsxs)(Zn.a,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"EC Parity"}),Object(a.jsx)(Qn.a,{align:"right",children:""!==j?j:"-"})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Raw Capacity"}),Object(a.jsx)(Qn.a,{align:"right",children:ce(f.rawCapacity)})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Usable Capacity"}),Object(a.jsx)(Qn.a,{align:"right",children:ce(N.maxCapacity)})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{component:"th",scope:"row",children:"Number of server failures to tolerate"}),Object(a.jsx)(Qn.a,{align:"right",children:g?Math.floor(N.maxFailureTolerations/g.disks):"-"})]})]})})]})]})}))),ho=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,enableTLS:e.tenants.createTenant.fields.security.enableTLS,tenantName:e.tenants.createTenant.fields.nameTenant.tenantName,selectedStorageClass:e.tenants.createTenant.fields.nameTenant.selectedStorageClass,customImage:e.tenants.createTenant.fields.configure.customImage,imageName:e.tenants.createTenant.fields.configure.imageName,consoleImage:e.tenants.createTenant.fields.configure.consoleImage,namespace:e.tenants.createTenant.fields.nameTenant.namespace,volumeSize:e.tenants.createTenant.fields.tenantSize.volumeSize,sizeFactor:e.tenants.createTenant.fields.tenantSize.sizeFactor}}),{}),Oo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke))}))(ho((function(e){var t=e.classes,n=e.tenantName,i=e.customImage,r=e.imageName,o=e.consoleImage,s=e.namespace,l=e.selectedStorageClass,d=e.volumeSize,u=e.sizeFactor,b=e.advancedMode,j=e.enableTLS;return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)("div",{className:t.headerElement,children:[Object(a.jsx)("h3",{className:t.h3Section,children:"Review"}),Object(a.jsx)("span",{className:t.descriptionText,children:"Review the details of the new tenant"})]}),Object(a.jsx)(Jn.a,{size:"small",children:Object(a.jsxs)(Zn.a,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Tenant Name"}),Object(a.jsx)(Qn.a,{children:n})]}),i&&Object(a.jsxs)(c.Fragment,{children:[Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"MinIO Image"}),Object(a.jsx)(Qn.a,{children:r})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Console Image"}),Object(a.jsx)(Qn.a,{children:o})]})]}),""!==s&&Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Namespace"}),Object(a.jsx)(Qn.a,{children:s})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Storage Class"}),Object(a.jsx)(Qn.a,{children:l})]}),Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Total Size"}),Object(a.jsxs)(Qn.a,{children:[d," ",u]})]}),b&&Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(Yn.a,{children:[Object(a.jsx)(Qn.a,{align:"right",className:t.tableTitle,children:"Enable TLS"}),Object(a.jsx)(Qn.a,{children:j?"Enabled":"Disabled"})]})})]})})]})}))),go=Object(s.b)((function(e){return{advancedMode:e.tenants.createTenant.advancedModeOn,namespace:e.tenants.createTenant.fields.nameTenant.namespace,validPages:e.tenants.createTenant.validPages,fields:e.tenants.createTenant.fields,certificates:e.tenants.createTenant.certificates}}),{setModalErrorSnackMessage:G,updateAddField:Gr}),fo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({buttonContainer:{textAlign:"right"}},ke),Ke),Be))}))(go((function(e){var t=e.classes,n=e.advancedMode,i=e.fields,r=e.certificates,o=e.namespace,s=e.validPages,l=e.setModalErrorSnackMessage,d=e.closeAndRefresh,u=Object(c.useState)(!1),m=Object(b.a)(u,2),p=m[0],h=m[1],O=Object(c.useState)(null),g=Object(b.a)(O,2),f=g[0],v=g[1],C=Object(c.useState)(!1),S=Object(b.a)(C,2),k=S[0],w=S[1];Object(c.useEffect)((function(){var e=i.nameTenant.tenantName,t=i.nameTenant.selectedStorageClass,n=i.configure.imageName,a=i.configure.consoleImage,c=i.configure.customDockerhub,s=i.configure.imageRegistry,d=i.configure.imageRegistryUsername,u=i.configure.imageRegistryPassword,b=i.configure.exposeMinIO,m=i.configure.exposeConsole,p=i.identityProvider.idpSelection,O=i.identityProvider.openIDURL,g=i.identityProvider.openIDClientID,f=i.identityProvider.openIDSecretID,x=i.identityProvider.ADURL,y=i.identityProvider.ADSkipTLS,C=i.identityProvider.ADServerInsecure,S=i.identityProvider.ADUserNameFilter,N=i.identityProvider.ADGroupBaseDN,T=i.identityProvider.ADGroupSearchFilter,E=i.identityProvider.ADNameAttribute,_=r.minioCertificates,A=r.caCertificates,I=r.consoleCertificate,M=r.serverCertificate,L=r.clientCertificate,D=r.vaultCertificate,B=r.vaultCA,F=r.gemaltoCA,R=i.encryption.enableEncryption,P=i.encryption.encryptionType,z=i.encryption.gemaltoEndpoint,K=i.encryption.gemaltoToken,U=i.encryption.gemaltoDomain,W=i.encryption.gemaltoRetry,q=i.encryption.awsEndpoint,V=i.encryption.awsRegion,G=i.encryption.awsKMSKey,H=i.encryption.awsAccessKey,Y=i.encryption.awsSecretKey,Q=i.encryption.awsToken,Z=i.encryption.vaultEndpoint,J=i.encryption.vaultEngine,$=i.encryption.vaultNamespace,X=i.encryption.vaultPrefix,ee=i.encryption.vaultAppRoleEngine,te=i.encryption.vaultId,ne=i.encryption.vaultSecret,ae=i.encryption.vaultRetry,ce=i.encryption.vaultPing,ie=i.encryption.gcpProjectID,re=i.encryption.gcpEndpoint,oe=i.encryption.gcpClientEmail,se=i.encryption.gcpClientID,le=i.encryption.gcpPrivateKeyID,ue=i.encryption.gcpPrivateKey,be=i.security.enableAutoCert,je=i.security.enableTLS,pe=i.tenantSize.ecParity,he=i.tenantSize.distribution,Oe=i.tenantSize.memorySize;if(k){var ge=de([]),fe=Nr(e,ge),xe=pe.split(":")[1],ve={name:e,namespace:o,access_key:"",secret_key:"",enable_tls:je&&be,enable_console:!0,enable_prometheus:!0,service_name:"",image:n,console_image:a,expose_minio:b,expose_console:m,pools:[{name:ge,servers:he.nodes,volumes_per_server:he.disks,volume_configuration:{size:he.pvSize,storage_class_name:t},resources:{requests:{memory:Oe.request},limits:{memory:Oe.limit}},affinity:fe}],erasureCodingParity:parseInt(xe,10)};c&&(ve=Object(j.a)(Object(j.a)({},ve),{},{image_registry:{registry:s,username:d,password:u}}));var ye=null,Ce=null,Se=null;if(A.length>0&&(Se={ca_certificates:A.map((function(e){return e.encoded_cert})).filter((function(e){return e}))}),je&&_.length>0&&(ye={minio:_.map((function(e){return{crt:e.encoded_cert,key:e.encoded_key}})).filter((function(e){return e.crt&&e.key}))}),je&&""!==I.encoded_cert&&""!==I.encoded_key&&(Ce={console:{crt:I.encoded_cert,key:I.encoded_key}}),(ye||Ce||Se)&&(ve=Object(j.a)(Object(j.a)({},ve),{},{tls:Object(j.a)(Object(j.a)(Object(j.a)({},ye),Ce),Se)})),R){var ke={};switch(P){case"gemalto":var we={};""!==F.encoded_cert&&(we={ca:F.encoded_cert}),ke={gemalto:{keysecure:{endpoint:z,credentials:{token:K,domain:U,retry:parseInt(W)},tls:Object(j.a)({},we)}}};break;case"aws":ke={aws:{secretsmanager:{endpoint:q,region:V,kmskey:G,credentials:{accesskey:H,secretkey:Y,token:Q}}}};break;case"gcp":ke={gcp:{secretmanager:{project_id:ie,endpoint:re,credentials:{client_email:oe,client_id:se,private_key_id:le,private_key:ue}}}};break;case"vault":var Ne=null,Te=null;""!==D.encoded_key&&""!==D.encoded_cert&&(Ne={key:D.encoded_key,crt:D.encoded_cert}),""!==B.encoded_cert&&(Te={ca:B.encoded_cert});var Ee=null;(Ne||B)&&(Ee={tls:Object(j.a)(Object(j.a)({},Ne),Te)}),ke={vault:Object(j.a)(Object(j.a)({endpoint:Z,engine:J,namespace:$,prefix:X,approle:{engine:ee,id:te,secret:ne,retry:parseInt(ae)}},Ee),{},{status:{ping:parseInt(ce)}})}}var _e={},Ae={};""!==L.encoded_key&&""!==L.encoded_cert&&(Ae={client:{key:L.encoded_key,crt:L.encoded_cert}}),""!==M.encoded_key&&""!==M.encoded_cert&&(_e={server:{key:M.encoded_key,crt:M.encoded_cert}}),ve=Object(j.a)(Object(j.a)({},ve),{},{encryption:Object(j.a)(Object(j.a)(Object(j.a)({},Ae),_e),ke)})}if("Built-in"!==p){var Ie={};switch(p){case"OpenID":Ie={oidc:{url:O,client_id:g,secret_id:f}};break;case"AD":Ie={active_directory:{url:x,skip_tls_verification:y,server_insecure:C,username_format:"",user_search_filter:S,group_search_base_dn:N,group_search_filter:T,group_name_attribute:E}}}ve=Object(j.a)(Object(j.a)({},ve),{},{idp:Object(j.a)({},Ie)})}me.invoke("POST","/api/v1/tenants",ve).then((function(e){var t={console:{accessKey:e.console.access_key,secretKey:e.console.secret_key}};w(!1),h(!0),v(t)})).catch((function(e){w(!1),l(e)}))}}),[k]);var N={label:"Cancel",type:"other",enabled:!0,action:function(){d(!1)}},T=[{label:"Name Tenant",componentRender:Object(a.jsx)($r,{}),buttons:[N,{label:"Next",type:"next",enabled:s.includes("nameTenant")}]},{label:"Configure",advancedOnly:!0,componentRender:Object(a.jsx)(eo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("configure")}]},{label:"Identity Provider",advancedOnly:!0,componentRender:Object(a.jsx)(no,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("identityProvider")}]},{label:"Security",advancedOnly:!0,componentRender:Object(a.jsx)(uo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("security")}]},{label:"Encryption",advancedOnly:!0,componentRender:Object(a.jsx)(jo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("encryption")}]},{label:"Tenant Size",componentRender:Object(a.jsx)(po,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Next",type:"next",enabled:s.includes("tenantSize")}]},{label:"Preview Configuration",componentRender:Object(a.jsx)(Oo,{}),buttons:[N,{label:"Back",type:"back",enabled:!0},{label:"Create",type:"submit",enabled:!k,action:function(){w(!0)}}]}],E=T;n||(E=T.filter((function(e){return!e.advancedOnly})));return Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.customTitle,children:"Create New Tenant"}),k&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})}),p&&Object(a.jsx)(Rc,{newServiceAccount:f,open:p,closeModal:function(){d(!0)},entity:"Tenant"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(wr,{wizardSteps:E})})})]})}))),xo=n(335),vo=n.n(xo),yo=Object(s.b)(null,{setErrorSnackMessage:q,resetAddTenantForm:function(){return{type:Ir}}}),Co=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({},Ae),Ie),Be),{},{seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},actionsTray:Object(j.a)(Object(j.a)({},Ae.actionsTray),{},{padding:"0 38px"}),tenantsContainer:{padding:"15px 0"},customConfigurationPage:{height:"calc(100vh - 440px)",scrollbarWidth:"none","&::-webkit-scrollbar":{display:"none"}}}))}))(yo((function(e){var t=e.classes,n=e.setErrorSnackMessage,i=e.resetAddTenantForm,r=Object(c.useState)(0),o=Object(b.a)(r,2),s=o[0],l=o[1],d=Object(c.useState)(!1),j=Object(b.a)(d,2),m=j[0],p=j[1],h=Object(c.useState)(null),O=Object(b.a)(h,2),v=O[0],y=O[1],C=Object(c.useState)(!1),S=Object(b.a)(C,2),k=S[0],w=S[1],N=Object(c.useState)(""),T=Object(b.a)(N,2),E=T[0],_=T[1],A=Object(c.useState)([]),I=Object(b.a)(A,2),M=I[0],L=I[1],D=Object(c.useState)(!1),B=Object(b.a)(D,2),F=B[0],R=B[1],P=Object(c.useState)(null),z=Object(b.a)(P,2),K=z[0],U=z[1],W=[{type:"view",onClick:function(e){u.push("/namespaces/".concat(e.namespace,"/tenants/").concat(e.name))}},{type:"delete",onClick:function(e){y(e),p(!0)}}],q=M.filter((function(e){return""===E||e.name.indexOf(E)>=0}));Object(c.useEffect)((function(){if(k){me.invoke("GET","/api/v1/tenants").then((function(e){if(null!==e){var t=[];null!==e.tenants&&(t=e.tenants);for(var n=0;n ".concat(n.params.tenantName)}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:9,className:t.containerHeader,children:Object(a.jsx)(S.a,{className:t.paperContainer,children:Object(a.jsxs)("div",{className:t.infoGrid,children:[Object(a.jsx)("div",{children:"Capacity:"}),Object(a.jsx)("div",{children:ce(m.toString(10))}),Object(a.jsx)("div",{children:"Minio:"}),Object(a.jsxs)("div",{children:[J?J.image:""," ",Object(a.jsx)("button",{className:t.updateButton,onClick:function(){he(!0)},children:Object(a.jsx)(Wt,{active:!1})})]}),Object(a.jsx)("div",{children:"Clusters:"}),Object(a.jsx)("div",{children:f}),Object(a.jsx)("div",{children:"Console:"}),Object(a.jsx)("div",{children:J?J.console_image:""}),Object(a.jsx)("div",{children:"Instances:"}),Object(a.jsx)("div",{children:_}),Object(a.jsx)("div",{children:"Volumes:"}),Object(a.jsx)("div",{children:L}),(null===J||void 0===J?void 0:J.endpoints)&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("div",{children:"Endpoint:"}),Object(a.jsx)("div",{children:Object(a.jsx)("a",{href:null===J||void 0===J?void 0:J.endpoints.minio,target:"_blank",rel:"noopener noreferrer",children:null===J||void 0===J?void 0:J.endpoints.minio})}),Object(a.jsx)("div",{children:"Console:"}),Object(a.jsx)("div",{children:Object(a.jsx)("a",{href:null===J||void 0===J?void 0:J.endpoints.console,target:"_blank",rel:"noopener noreferrer",children:null===J||void 0===J?void 0:J.endpoints.console})})]})]})})}),Object(a.jsx)(x.a,{item:!0,xs:3,children:Object(a.jsx)(To,{currValue:de,maxValue:J?J.total_size:0,label:"Storage",renderFunction:ce,error:re,loading:te})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:6,children:Object(a.jsxs)(Kn.a,{value:l,indicatorColor:"primary",textColor:"primary",onChange:function(e,t){d(t)},"aria-label":"tenant-tabs",children:[Object(a.jsx)(Un.a,{label:"Clusters"}),Object(a.jsx)(Un.a,{label:"License"})]})}),Object(a.jsx)(x.a,{item:!0,xs:6,className:t.actionsTray,children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){P(!0)},children:"Expand Tenant"})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[0===l&&Object(a.jsx)(on,{itemActions:[{type:"delete",onClick:function(e){console.log(e)},sendOnlyId:!0}],columns:[{label:"Name",elementKey:"name"},{label:"Capacity",elementKey:"capacity"},{label:"# of Instances",elementKey:"servers"},{label:"# of Drives",elementKey:"volumes"}],isLoading:!1,records:w,entityName:"Servers",idField:"name"}),1===l&&Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(S.a,{className:J&&J.subnet_license?t.licenseContainer:"",children:J&&J.subnet_license?Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.licenseInfo,children:[Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"License"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:"Commercial License"}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Organization"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:J.subnet_license.organization}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Registered Capacity"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:ce((1099511627776*J.subnet_license.storage_capacity).toString(10))}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Expiry Date"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:Object(a.jsx)(Je.a,{format:"YYYY-MM-DD",children:J.subnet_license.expires_at})})]}),Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Subscription Plan"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:J.subnet_license.plan}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Requester"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:J.subnet_license.email})]}),Object(a.jsx)("img",{className:t.verifiedIcon,src:"/verified.svg"})]})}):!Ce&&Object(a.jsxs)(x.a,{className:t.paperContainer,children:[!fe&&Object(a.jsx)(Zt.a,{to:"/license",onClick:function(e){e.stopPropagation()},className:t.noUnderLine,children:Object(a.jsx)(g.a,{className:t.licenseButton,variant:"contained",color:"primary",children:"Activate Product"})}),fe&&J&&Object(a.jsx)(g.a,{disabled:Ne,className:t.licenseButton,variant:"contained",color:"primary",onClick:function(){return function(e,t){Ne||(Te(!0),me.invoke("POST","/api/v1/subscription/namespaces/".concat(e,"/tenants/").concat(t,"/activate"),{}).then((function(){Te(!1),Ae()})).catch((function(e){Te(!1),r(e)})))}(J.namespace,J.name)},children:"Attach License"})]})})})})})]})]})]})}))),Mo="OBJECT_BROWSER/ADD_ROUTE",Lo="OBJECT_BROWSER/RESET_ROUTES_LIST",Do="OBJECT_BROWSER/REMOVE_ROUTE_LEVEL",Bo="OBJECT_BROWSER/SET_ALL_ROUTES",Fo="OBJECT_BROWSER/CREATE_FOLDER",Ro="OBJECT_BROWSER/SET_LAST_AS_FILE",Po="OBJECT_BROWSER/DOWNLOAD_FILE_LOADER",zo="OBJECT_BROWSER/DOWNLOADED_FILE",Ko=function(e,t,n){return{type:Mo,route:e,label:t,routeType:n}},Uo=function(e){return{type:Do,toRoute:e}},Wo=function(e){return{type:Bo,currentRoute:e}},qo=function(e){return{type:Po,path:e}},Vo=function(e){return{type:zo,path:e}},Go={removeRouteLevel:Uo},Ho=Object(s.b)((function(e){var t=e.objectBrowser;return{objectsList:Z()(t,"routesList",[])}}),Go)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({},Le))}))((function(e){var t=e.classes,n=e.objectsList,c=e.removeRouteLevel,r=n.map((function(e,t){return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Zt.a,{to:e.route,onClick:function(){c(e.route)},children:e.label}),t0?n.slice(-1)[0].label:""})}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.breadcrumbs,children:r})]})}))),Yo={addRoute:Ko,resetRoutesList:function(e){return{type:Lo,reset:e}},displayErrorMessage:q},Qo=Object(s.b)(null,Yo),Zo=Object(l.g)(Qo(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},usedSpaceCol:{width:150,textAlign:"right"},subTitleLabel:{alignItems:"center",display:"flex"},bucketName:{display:"flex",alignItems:"center"},iconBucket:{backgroundImage:"url(/images/ob_bucket_clear.svg)",backgroundRepeat:"no-repeat",backgroundPosition:"center center",width:16,height:40,marginRight:10},"@global":{".rowLine:hover .iconBucketElm":{backgroundImage:"url(/images/ob_bucket_filled.svg)"}},browsePaper:{height:"calc(100vh - 280px)"}},Ae),Ie),Le))}))((function(e){var t=e.classes,n=e.match,i=e.addRoute,r=e.resetRoutesList,o=e.displayErrorMessage,s=Object(c.useState)(!0),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)([]),m=Object(b.a)(j,2),p=m[0],h=m[1],O=Object(c.useState)(!1),v=Object(b.a)(O,2),y=v[0],C=v[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(!0),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(!1),M=Object(b.a)(I,2),L=M[0],D=M[1];Object(c.useEffect)((function(){if(_){me.invoke("POST","/api/v1/has-permission",{actions:[{id:"createBucket",action:"s3:CreateBucket"}]}).then((function(e){var t=e.permissions.filter((function(e){return"createBucket"==e.id})).pop();t&&t.can?D(!0):D(!1),A(!1)})).catch((function(e){A(!1),q(e)}))}}),[_,q]),Object(c.useEffect)((function(){r(!0)}),[n,r]),Object(c.useEffect)((function(){d&&me.invoke("GET","/api/v1/buckets").then((function(e){u(!1),h(e.buckets||[])})).catch((function(e){u(!1),o(e)}))}),[d,o]);var B=p.filter((function(e){return""===w||e.name.indexOf(w)>=0}));return Object(a.jsxs)(c.Fragment,{children:[y&&Object(a.jsx)(Mn,{open:y,closeModalAndRefresh:function(e){C(!1),e&&u(!0)}}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.obTitleSection,children:[Object(a.jsx)("div",{children:Object(a.jsx)(Ho,{})}),L&&Object(a.jsx)("div",{children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),onClick:function(){C(!0)},children:"Create Bucket"})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:Object(a.jsx)(f.a,{placeholder:"Search Buckets",className:t.searchField,id:"search-resource",label:"",onChange:function(e){N(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:[{type:"view",sendOnlyId:!0,onClick:function(e){var t=Z()(n,"url","/object-browser"),a="".concat(t,"/").concat(e);i(a,e,"path")}}],columns:[{label:"Name",elementKey:"name",renderFunction:function(e){return Object(a.jsxs)("div",{className:t.bucketName,children:[Object(a.jsx)("div",{className:"".concat(t.iconBucket," iconBucketElm")}),Object(a.jsx)("span",{children:e})]})}},{label:"Used Space",elementKey:"size",renderFunction:ce,globalClass:t.usedSpaceCol,rowClass:t.usedSpaceCol,width:100,contentTextAlign:"right",headerTextAlign:"right"}],isLoading:d,records:B,entityName:"Buckets",idField:"name",customPaperHeight:t.browsePaper})})]})]})})))),Jo=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({watchList:{background:"white",maxHeight:"400",overflow:"auto","& ul":{margin:"4",padding:"0"},"& ul li":{listStyle:"none",margin:"0",padding:"0",borderBottom:"1px solid #dedede"}},actionsTray:{textAlign:"right","& button":{marginLeft:10}},inputField:{background:"#FFFFFF",padding:12,borderRadius:5,marginLeft:10,boxShadow:"0px 3px 6px #00000012"},fieldContainer:{background:"#FFFFFF",padding:0,borderRadius:5,marginLeft:10,textAlign:"left",minWidth:"206",boxShadow:"0px 3px 6px #00000012"},lastElementWPadding:{paddingRight:"78"}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.match,n=e.classes,c=Z()(t,"url","");return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"Object Browser"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:n.container,children:"/object-browser"===c&&Object(a.jsx)(Zo,{})})})]})})),$o={setErrorSnackMessage:q},Xo=Object(s.b)(null,$o)((function(e){var t=e.closeDeleteModalAndRefresh,n=e.deleteOpen,i=e.selectedBucket,r=e.selectedObject,o=e.setErrorSnackMessage,s=Object(c.useState)(!1),l=Object(b.a)(s,2),d=l[0],u=l[1];return Object(a.jsxs)(sn.a,{open:n,onClose:function(){t(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete"}),Object(a.jsxs)(dn.a,{children:[d&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete: ",Object(a.jsx)("b",{children:r}),"?"," "]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){t(!1)},color:"primary",disabled:d,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){!function(){if(!d){var e=!1;r.endsWith("/")&&(e=!0),u(!0),me.invoke("DELETE","/api/v1/buckets/".concat(i,"/objects?path=").concat(r,"&recursive=").concat(e)).then((function(){u(!1),t(!0)})).catch((function(e){u(!1),o(e)}))}}()},color:"secondary",disabled:d,children:"Delete"})]})]})})),es=n(610),ts={createFolder:function(e){return{type:Fo,newRoute:e}}},ns=Object(s.b)(null,ts)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},pathLabel:{marginTop:0,marginBottom:32}},ke))}))((function(e){var t=e.modalOpen,n=e.folderName,r=e.onClose,o=e.createFolder,s=e.classes,l=Object(c.useState)(""),d=Object(b.a)(l,2),u=d[0],j=d[1],m=n.split("/").slice(2).join("/");return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(jn,{modalOpen:t,title:"Add Folder",onClose:r,children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)("h3",{className:s.pathLabel,children:["Current Path: ",m,"/"]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{value:u,label:"Folder Path",id:"folderPath",name:"folderPath",placeholder:"Enter Folder Path",onChange:function(e){j(e.target.value)}})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:s.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:s.clearButton,onClick:function(){j("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:""===u.trim(),onClick:function(){o(u),r()},children:"Save"})]})]})})})}))),as=function(){return Object(a.jsx)($e.a,{children:Object(a.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 12.996",children:Object(a.jsxs)("g",{transform:"translate(-63.686 -70.783)",children:[Object(a.jsx)("path",{className:"a",d:"M74.736,79.879v1.95h-9.1v-1.95h-1.95v3.9h13v-3.9Z"}),Object(a.jsx)("path",{className:"a",d:"M69.211,80.533h1.95V73.861h1.525l-2.5-3.078-2.5,3.078h1.525Z"})]})})})},cs=n(336),is=function(e,t,n,a,c){var i=document.createElement("a");document.body.appendChild(i);var r=new XMLHttpRequest,o=t.split("/"),s=o[o.length-1],l="/api/v1/buckets/".concat(e,"/objects/download?prefix=").concat(t);Object(cs.isNullOrUndefined)(n)||"null"===n||(l=l.concat("&version_id=".concat(n))),r.open("GET",l,!0),r.responseType="blob",r.onload=function(r){if(200===this.status){var o=new Blob([this.response],{type:"octet/stream"}),l=window.URL.createObjectURL(o);i.href=l,i.download=s,i.click(),window.URL.revokeObjectURL(l),i.remove(),a&&a("".concat(e,"/").concat(t).concat(c?"-".concat(n):""))}},r.send()},rs={backgroundRepeat:"no-repeat",backgroundPosition:"center center",width:16,minWidth:16,height:40,marginRight:10};var os=Object(a.jsx)(v.a,{component:"h3",children:"Loading..."}),ss={addRoute:Ko,setAllRoutes:Wo,setLastAsFile:function(){return{type:Ro}},setLoadingProgress:function(e){return{type:M,loadingProgress:e}},setSnackBarMessage:W,setErrorSnackMessage:q,fileIsBeingPrepared:qo,fileDownloadStarted:Vo},ls=Object(s.b)((function(e){var t=e.objectBrowser;return{routesList:Z()(t,"routesList",[]),downloadingFiles:Z()(t,"downloadingFiles",[])}}),ss),ds=Object(l.g)(ls(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({seeMore:{marginTop:e.spacing(3)},paper:{display:"flex",overflow:"auto",flexDirection:"column"},addSideBar:{width:"320px",padding:"20px"},tableToolbar:{paddingLeft:e.spacing(2),paddingRight:e.spacing(0)},minTableHeader:{color:"#393939","& tr":{"& th":{fontWeight:"bold"}}},fileName:{display:"flex",alignItems:"center"},fileNameText:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},iconFolder:Object(j.a)({backgroundImage:"url(/images/ob_folder_clear.svg)"},rs),iconFile:Object(j.a)({backgroundImage:"url(/images/ob_file_clear.svg)"},rs),buttonsContainer:{"& .MuiButtonBase-root":{marginLeft:10}},browsePaper:{height:"calc(100vh - 280px)"},"@global":{".rowLine:hover .iconFileElm":{backgroundImage:"url(/images/ob_file_filled.svg)"},".rowLine:hover .iconFolderElm":{backgroundImage:"url(/images/ob_folder_filled.svg)"}}},Ae),Ie),Le),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.match,r=e.addRoute,o=e.setAllRoutes,s=e.routesList,l=e.downloadingFiles,d=e.setLastAsFile,u=e.setLoadingProgress,j=e.setSnackBarMessage,m=e.setErrorSnackMessage,p=e.fileIsBeingPrepared,h=e.fileDownloadStarted,O=Object(c.useState)([]),y=Object(b.a)(O,2),C=y[0],S=y[1],k=Object(c.useState)(!0),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)(""),R=Object(b.a)(F,2),P=R[0],z=R[1],K=Object(c.useState)(""),U=Object(b.a)(K,2),W=U[0],q=U[1],V=Object(c.useState)(""),G=Object(b.a)(V,2),H=G[0],Y=G[1],Q=Object(c.useState)(null),J=Object(b.a)(Q,2),$=(J[0],J[1]),X=Object(c.useState)(0),ee=Object(b.a)(X,2),te=ee[0],ne=ee[1],ae=Object(c.useState)(os),ie=Object(b.a)(ae,2),re=ie[0],oe=ie[1];!function(e,t){var n=Object(c.useRef)(null);Object(c.useEffect)((function(){n.current=e}),[e]),Object(c.useEffect)((function(){if(null!==t){var e=setInterval((function(){void 0!==n&&n.current&&n.current()}),t);return function(){return clearInterval(e)}}}),[t])}((function(){N&&function(){var e=Date.now()-te;e/1e3>=6?oe(Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(v.a,{component:"h3",children:["This operation is taking longer than expected... (",Math.ceil(e/1e3),"s)"]})})):e/1e3>=3&&oe(Object(a.jsx)(v.a,{component:"h3",children:"This operation is taking longer than expected..."}))}()}),1e3),Object(c.useEffect)((function(){var e=n.params.bucket,t=n.params[0];if(N){var a="";t&&(a="?prefix=".concat(t,"/"));var c=Date.now()+0;ne(c),oe(os);var i=me.invoke("GET","/api/v1/buckets/".concat(e,"/objects").concat(a)).then((function(t){q(e);var c=t.objects||[],i=[],r=[];c.forEach((function(e){e.name.endsWith("/")?i.push(e):r.push(e)}));var o=[].concat(i,r);S(o),t.objects||""===a?T(!1):function(){var e=n.params.bucket,t=n.params[0];me.invoke("GET","/api/v1/buckets/".concat(e,"/objects?prefix=").concat(t)).then((function(e){null!==e.objects?d():T(!1)})).catch((function(e){T(!1),m(e)}))}()})).catch((function(e){T(!1),m(e)}));$(i)}}),[N,n,d,m]),Object(c.useEffect)((function(){var e=Z()(n,"url","/object-browser");e!==s[s.length-1].route&&o(e)}),[n,s,o]),Object(c.useEffect)((function(){T(!0)}),[s,T]);var se=function(e){h(e)},le=function(e){var t=s[s.length-1].route.split("/").filter((function(e){return""!==e.trim()})),n="";t.length>2&&(n="".concat(t.slice(2).join("/"),"/")),function(e,t,n){if(null!==e&&void 0!==e&&null!==e.target&&void 0!==e.target){e.preventDefault();var a=e.target.files,c="/api/v1/buckets/".concat(t,"/objects/upload");""!==n&&(c="".concat(c,"?prefix=").concat(n));var i=new XMLHttpRequest,r=a.length>1,o="An error occurred while uploading the file".concat(r?"s":"","."),s="Object".concat(r?"s":""," uploaded successfully.");i.open("POST",c,!0),i.withCredentials=!1,i.onload=function(e){401!==i.status&&403!==i.status&&400!==i.status&&500!==i.status||j(o),200===i.status&&j(s)},i.upload.addEventListener("error",(function(e){j(o)})),i.upload.addEventListener("progress",(function(e){u(Math.floor(100*e.loaded/e.total))})),i.onerror=function(){j(o)},i.onloadend=function(){T(!0),u(100)};var l,d=new FormData,b=Object(sr.a)(a);try{for(b.s();!(l=b.n()).done;){var m=l.value,p=m.name,h=new Blob([m]);d.append(p,h)}}catch(O){b.e(O)}finally{b.f()}i.send(d),e.target.value=null}}(e,W,n)},de=[{type:"view",onClick:function(e){var t=Z()(n,"url","/object-browser");if(e.endsWith("/")){var a=e.substr(0,e.length-1).split("/"),c=a.length-1,i="".concat(t,"/").concat(a[c]);r(i,a[c],"path")}else{var o=e.split("/"),s=o[o.length-1],l="".concat(t,"/").concat(s);r(l,s,"file")}},sendOnlyId:!0},{type:"download",onClick:function(e){p("".concat(W,"/").concat(e.name)),e.size>104857600&&j("Download process started, it may take a few moments to complete"),is(W,e.name,e.version_id,se)},showLoaderFunction:function(e){return l.includes("".concat(n.params.bucket,"/").concat(e))}},{type:"delete",onClick:function(e){I(!0),z(e)},sendOnlyId:!0}],ue=C.filter((function(e){return""===H||e.name.indexOf(H)>=0}));return Object(a.jsxs)(i.a.Fragment,{children:[A&&Object(a.jsx)(Xo,{deleteOpen:A,selectedBucket:W,selectedObject:P,closeDeleteModalAndRefresh:function(e){I(!1),e&&(j("Object '".concat(P,"' deleted successfully.")),T(!0))}}),D&&Object(a.jsx)(ns,{modalOpen:D,folderName:s[s.length-1].route,onClose:function(){B(!1)}}),Object(a.jsx)(Rn,{label:"Object Browser"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.obTitleSection,children:[Object(a.jsx)("div",{children:Object(a.jsx)(Ho,{})}),Object(a.jsxs)("div",{className:t.buttonsContainer,children:[Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(et,{}),component:"label",onClick:function(){B(!0)},children:"Create Folder"}),Object(a.jsxs)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(as,{}),component:"label",children:["File",Object(a.jsx)(es.a,{type:"file",inputProps:{multiple:!0},onChange:function(e){return le(e)},id:"file-input",style:{display:"none"}})]})]})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:Object(a.jsx)(f.a,{placeholder:"Search Objects",className:t.searchField,id:"search-resource",label:"",onChange:function(e){Y(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{itemActions:de,columns:[{label:"Name",elementKey:"name",renderFunction:function(e){var n=e,c="".concat(t.iconFile," iconFileElm");e.endsWith("/")&&(c="".concat(t.iconFolder," iconFolderElm"),n=e.substr(0,e.length-1));var i=n.split("/");return Object(a.jsxs)("div",{className:t.fileName,children:[Object(a.jsx)("div",{className:c}),Object(a.jsx)("span",{className:t.fileNameText,children:i[i.length-1]})]})}},{label:"Last Modified",elementKey:"last_modified",renderFunction:function(e){return e.name.endsWith("/")?"":Object(a.jsx)(Je.a,{children:e.last_modified})},renderFullObject:!0},{label:"Size",elementKey:"size",renderFunction:function(e){return e.name.endsWith("/")?"":ce(String(e.size))},renderFullObject:!0,width:60,contentTextAlign:"right"}],isLoading:N,loadingMessage:re,entityName:"Objects",idField:"name",records:ue,customPaperHeight:t.browsePaper})})]})})]})})))),us=n(669),bs=n(338),js=n.n(bs),ms=n(337),ps=n.n(ms),hs=[{value:"01",label:"January"},{value:"02",label:"February"},{value:"03",label:"March"},{value:"04",label:"April"},{value:"05",label:"May"},{value:"06",label:"June"},{value:"07",label:"July"},{value:"08",label:"August"},{value:"09",label:"September"},{value:"10",label:"October"},{value:"11",label:"November"},{value:"12",label:"December"}],Os=Array.from(Array(31),(function(e,t){return t+1})),gs=(new Date).getFullYear(),fs=Array.from(Array(25),(function(e,t){return t+gs})),xs=Object(N.a)((function(e){return Object(k.a)({root:{"& .MuiSelect-icon":{color:"#000","&.Mui-disabled":{color:"#9c9c9c"}}},input:{borderBottom:0,fontSize:12}})}))(On.a),vs=Object(c.forwardRef)((function(e,t){var n=e.classes,i=e.id,r=e.label,o=e.disableOptions,s=void 0!==o&&o,l=e.addSwitch,d=void 0!==l&&l,u=e.tooltip,j=void 0===u?"":u,m=e.borderBottom,p=void 0!==m&&m,h=e.onDateChange,O=e.value,g=void 0===O?"":O;Object(c.useImperativeHandle)(t,(function(){return{resetDate:B}}));var f=Object(c.useState)(!1),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)(""),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1];Object(c.useEffect)((function(){if(""!==g){var e=g.split("-");D(e[0]),N(e[1]),A("".concat(parseInt(e[2])))}}),[g]),Object(c.useEffect)((function(){var e=function(e,t,n){var a=Date.parse("".concat(e,"-").concat(t,"-").concat(n));if(isNaN(a))return[!1,""];var c=parseInt(t),i=parseInt(n),r=c<10?"0".concat(c):c,o=i<10?"0".concat(i):i,s=new Date(a).toISOString().split("T")[0],l="".concat(e,"-").concat(r,"-").concat(o);return[s===l,l]}(L,w,_),t=Object(b.a)(e,2),n=t[0],a=t[1];h(a,n)}),[w,_,L,h]);var B=function(){N(""),A(""),D("")},F=function(){return s||!!d&&!y};return Object(a.jsxs)(x.a,{item:!0,xs:12,className:Object(fe.a)(n.fieldContainer,Object(ge.a)({},n.fieldContainerBorder,p)),children:[Object(a.jsx)("div",{className:n.labelContainer,children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(Xt.a,{htmlFor:i,className:n.inputLabel,children:[Object(a.jsx)("span",{children:r}),""!==j&&Object(a.jsx)("div",{className:n.tooltipContainer,children:Object(a.jsx)(en.a,{title:j,placement:"top-start",children:Object(a.jsx)("div",{children:Object(a.jsx)(tn,{className:n.tooltip})})})})]}),d&&Object(a.jsx)(In,{indicatorLabels:["Specific Date","Default (7 Days)"],checked:y,value:"date_enabled",id:"date-status",name:"date-status",onChange:function(e){C(e.target.checked),e.target.checked||h("",!0)},switchOnly:!0})]})}),Object(a.jsxs)("div",{children:[Object(a.jsx)(gn.a,{disabled:F(),className:n.dateInput,children:Object(a.jsxs)(fn.a,{id:"".concat(i,"-month"),name:"".concat(i,"-month"),value:w,displayEmpty:!0,onChange:function(e){N(e.target.value)},input:Object(a.jsx)(xs,{}),children:[Object(a.jsx)(xn.a,{value:"",disabled:!0,children:""}),hs.map((function(e){return Object(a.jsx)(xn.a,{value:e.value,children:e.label},"select-".concat(i,"-monthOP-").concat(e.label))}))]})}),Object(a.jsx)(gn.a,{disabled:F(),className:n.dateInput,children:Object(a.jsxs)(fn.a,{id:"".concat(i,"-day"),name:"".concat(i,"-day"),value:_,displayEmpty:!0,onChange:function(e){A(e.target.value)},input:Object(a.jsx)(xs,{}),children:[Object(a.jsx)(xn.a,{value:"",disabled:!0,children:""}),Os.map((function(e){return Object(a.jsx)(xn.a,{value:e,children:e},"select-".concat(i,"-dayOP-").concat(e))}))]})}),Object(a.jsx)(gn.a,{disabled:F(),className:n.dateInput,children:Object(a.jsxs)(fn.a,{id:"".concat(i,"-year"),name:"".concat(i,"-year"),value:L,displayEmpty:!0,onChange:function(e){D(e.target.value)},input:Object(a.jsx)(xs,{}),children:[Object(a.jsx)(xn.a,{value:"",disabled:!0,children:""}),fs.map((function(e){return Object(a.jsx)(xn.a,{value:e,children:e},"select-".concat(i,"-yearOP-").concat(e))}))]})})]})]})})),ys=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({dateInput:{"&:not(:last-child)":{marginRight:22}}},Se),we),{},{labelContainer:{flex:1},fieldContainer:Object(j.a)(Object(j.a)({},Se.fieldContainer),{},{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:10,marginTop:11,marginBottom:6}),fieldContainerBorder:{borderBottom:"#9c9c9c 1px solid",marginBottom:20}}))}))(vs),Cs=Object(s.b)(null,{setModalSnackMessage:V,setModalErrorSnackMessage:G}),Ss=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({copyButtonContainer:{paddingLeft:16},modalContent:{paddingBottom:53}},ke))}))(Cs((function(e){var t=e.classes,n=e.open,r=e.closeModalAndRefresh,o=e.bucketName,s=e.dataObject,l=e.setModalSnackMessage,d=e.setModalErrorSnackMessage,u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(!1),O=Object(b.a)(h,2),f=O[0],v=O[1],y=Object(c.useState)(""),C=Object(b.a)(y,2),S=C[0],k=C[1],w=Object(c.useState)(!0),N=Object(b.a)(w,2),T=N[0],E=N[1];return Object(c.useEffect)((function(){if(T){v(!0),p("");var e=new Date("".concat(S,"T23:59:59")),t=new Date,n=e.getTime()-t.getTime();return n<0?(d("Selected date must be greater than current time."),p(""),void v(!1)):n>6048e5?(d("You can share a file only for less than 7 days."),p(""),void v(!1)):void me.invoke("GET","/api/v1/buckets/".concat(o,"/objects/share?prefix=").concat(s.name,"&version_id=").concat(s.version_id).concat(""!==S?"&expires=".concat(n,"ms"):"")).then((function(e){p(e),v(!1)})).catch((function(e){d(e),p(""),v(!1)}))}}),[s,S,o,T,p,d]),Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(jn,{title:"Share File",modalOpen:n,onClose:function(){r()},children:Object(a.jsxs)(x.a,{container:!0,className:t.modalContent,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.dateContainer,children:Object(a.jsx)(ys,{id:"date",label:"Active until",borderBottom:!1,addSwitch:!0,onDateChange:function(e,t){E(t),k(t?e:"")}})}),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:10,children:Object(a.jsx)(Xc,{content:m})}),Object(a.jsx)(x.a,{item:!0,xs:2,className:t.copyButtonContainer,children:Object(a.jsx)(ps.a,{text:m,children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",startIcon:Object(a.jsx)(Xe,{}),onClick:function(){l("Share URL Copied to clipboard")},disabled:""===m||f,children:"Copy"})})})]})]})})})}))),ks=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 13",children:[Object(a.jsx)("path",{d:"M11.05 8.617v2.429h-9.1v-9.1h2.429v-1.95H0v13h13V8.617z",className:"a"}),Object(a.jsx)("path",{d:"M3.854 9.256h1.95a4.945 4.945 0 013.6-4.74v1.3l.6-.487 2.474-2.012L9.4.817v1.7a6.9 6.9 0 00-5.546 6.739z",className:"a"})]})})},ws=function(){return Object(a.jsx)($e.a,{children:Object(a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 13 12.996",children:[Object(a.jsx)("path",{d:"M11.05 9.096v1.95h-9.1v-1.95H0v3.9h13v-3.9z"}),Object(a.jsx)("path",{d:"M6.5 9.75L9 6.672H7.475V0h-1.95v6.672H4z"})]})})},Ns={setModalErrorSnackMessage:G},Ts=Object(s.b)(null,Ns),Es=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({objectName:{fontSize:18,fontWeight:700,marginBottom:40},buttonContainer:{textAlign:"right"}},ke))}))(Ts((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.objectName,o=e.objectInfo,s=e.bucketName,l=e.setModalErrorSnackMessage,d=Object(c.useState)(!0),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(""),h=Object(b.a)(p,2),O=h[0],f=h[1],v=Object(c.useState)(""),y=Object(b.a)(v,2),C=y[0],S=y[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1];Object(c.useEffect)((function(){if(o.retention_mode&&(f(o.retention_mode.toLowerCase()),B(!0)),o.retention_until_date){var e=new Date(o.retention_until_date);if("Invalid Date"!==e.toString()){var t=e.getFullYear(),n=(c=e.getMonth()+1)<10?"0".concat(c):"".concat(c),a=e.getDate();isNaN(a)||"NaN"===n||isNaN(t)||S("".concat(t,"-").concat(n,"-").concat(a))}B(!0)}var c}),[o]);var F=Object(c.useRef)(null),R=function(){m(!1),f(""),F.current&&F.current.resetDate()},P=D&&("governance"===O||""===O);return Object(a.jsxs)(jn,{title:"Set Retention Policy",modalOpen:n,onClose:function(){R(),i(!1)},children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.objectName,children:r}),Object(a.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault()}(e)},children:[P&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"status",id:"status",name:"status",checked:j,onChange:function(e){m(!j)},label:"Status",indicatorLabels:["Enabled","Disabled"]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(Tn,{currentSelection:O,id:"type",name:"type",label:"Type",disableOptions:!j||D&&""!==O,onChange:function(e){f(e.target.value)},selectorOptions:[{label:"Governance",value:"governance"},{label:"Compliance",value:"compliance"}]})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ys,{id:"date",label:"Date",disableOptions:!(j&&("governance"===O||"compliance"===O)),ref:F,value:C,borderBottom:!0,onDateChange:function(e,t){T(t),t&&S(e)}})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:R,children:"Reset"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:j&&""===O||j&&!N||A,onClick:function(){I(!0);var e=o.name,t=o.version_id,n=j||"governance"!==O?"".concat(C,"T23:59:59Z"):"";j||"governance"!==O?function(e,t,n){me.invoke("PUT","/api/v1/buckets/".concat(s,"/objects/retention?prefix=").concat(e,"&version_id=").concat(t),{expires:n,mode:O}).then((function(e){I(!1),i(!0)})).catch((function(e){l(e),I(!1)}))}(e,t,n):function(e,t){me.invoke("DELETE","/api/v1/buckets/".concat(s,"/objects/retention?prefix=").concat(e,"&version_id=").concat(t)).then((function(){I(!1),i(!0)})).catch((function(e){l(e),I(!1)}))}(e,t)},children:"Save"})]})]})]})}))),_s={setModalErrorSnackMessage:G},As=Object(s.b)(null,_s),Is=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},pathLabel:{marginTop:0,marginBottom:32}},ke))}))(As((function(e){var t=e.modalOpen,n=e.currentTags,r=e.selectedObject,o=e.onCloseAndUpdate,s=e.bucketName,l=e.versionId,d=e.setModalErrorSnackMessage,u=e.classes,m=Object(c.useState)(""),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(""),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)(!1),k=Object(b.a)(S,2),w=k[0],N=k[1];return Object(a.jsx)(i.a.Fragment,{children:Object(a.jsx)(jn,{modalOpen:t,title:"Add New Tag",onClose:function(){o(!1)},children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)("h3",{className:u.pathLabel,children:["Selected Object: ",r]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{value:h,label:"New Tag Key",id:"newTagKey",name:"newTagKey",placeholder:"Enter New Tag Key",onChange:function(e){O(e.target.value)}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{value:y,label:"New Tag Label",id:"newTagLabel",name:"newTagLabel",placeholder:"Enter New Tag Label",onChange:function(e){C(e.target.value)}})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:u.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:u.clearButton,onClick:function(){C(""),O("")},children:"Clear"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:""===y.trim()||""===h.trim()||w,onClick:function(){N(!0);var e={};e[h]=y;var t=Object(j.a)(Object(j.a)({},n),e);me.invoke("PUT","/api/v1/buckets/".concat(s,"/objects/tags?prefix=").concat(r,"&version_id=").concat(l),{tags:t}).then((function(e){N(!1),o(!0)})).catch((function(e){d(e),N(!1)}))},children:"Save"})]})]})})})}))),Ms={setErrorSnackMessage:q},Ls=Object(s.b)(null,Ms),Ds=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({buttonContainer:{textAlign:"right"},pathLabel:{marginTop:0,marginBottom:32}},ke))}))(Ls((function(e){var t=e.deleteOpen,n=e.currentTags,i=e.selectedObject,r=e.selectedTag,o=e.onCloseAndUpdate,s=e.bucketName,l=e.versionId,d=e.setErrorSnackMessage,u=e.classes,m=Object(c.useState)(!1),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(b.a)(r,2),x=f[0],v=f[1];return Object(a.jsxs)(sn.a,{open:t,onClose:function(){o(!1)},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsx)(ln.a,{id:"alert-dialog-title",children:"Delete Tag"}),Object(a.jsxs)(dn.a,{children:[h&&Object(a.jsx)(y.a,{}),Object(a.jsxs)(Ln.a,{id:"alert-dialog-description",children:["Are you sure you want to delete the tag"," ",Object(a.jsxs)("b",{className:u.wrapText,children:[x," : ",v]})," ","from ",i,"?"]})]}),Object(a.jsxs)(Dn.a,{children:[Object(a.jsx)(g.a,{onClick:function(){o(!1)},color:"primary",disabled:h,children:"Cancel"}),Object(a.jsx)(g.a,{onClick:function(){O(!0);var e=Object(j.a)({},n);delete e[x],me.invoke("PUT","/api/v1/buckets/".concat(s,"/objects/tags?prefix=").concat(i,"&version_id=").concat(l),{tags:e}).then((function(e){O(!1),o(!0)})).catch((function(e){d(e),O(!1)}))},color:"secondary",autoFocus:!0,children:"Delete"})]})]})}))),Bs={setModalErrorSnackMessage:G},Fs=Object(s.b)(null,Bs),Rs=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({objectName:{fontSize:18,fontWeight:700,marginBottom:40},buttonContainer:{textAlign:"right"}},ke))}))(Fs((function(e){var t=e.classes,n=e.open,i=e.closeModalAndRefresh,r=e.objectName,o=e.bucketName,s=e.actualInfo,l=e.setModalErrorSnackMessage,d=Object(c.useState)(!1),u=Object(b.a)(d,2),j=u[0],m=u[1],p=Object(c.useState)(!1),h=Object(b.a)(p,2),O=h[0],f=h[1],v=s.version_id;Object(c.useEffect)((function(){var e=Z()(s,"legal_hold_status","OFF");m("ON"===e)}),[s]);var y=function(){m(!1)};return Object(a.jsxs)(jn,{title:"Set Legal Hold",modalOpen:n,onClose:function(){y(),i(!1)},children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.objectName,children:r}),Object(a.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){!function(e){e.preventDefault(),f(!0),me.invoke("PUT","/api/v1/buckets/".concat(o,"/objects/legalhold?prefix=").concat(r,"&version_id=").concat(v),{status:j?"enabled":"disabled"}).then((function(){f(!1),i(!0)})).catch((function(e){l(e),f(!1)}))}(e)},children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(In,{value:"legalhold",id:"legalhold",name:"legalhold",checked:j,onChange:function(e){m(!j)},label:"Legal Hold Status",indicatorLabels:["Enabled","Disabled"],tooltip:"To enable this feature you need to enable versioning on the bucket before creation"})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.buttonContainer,children:[Object(a.jsx)("button",{type:"button",color:"primary",className:t.clearButton,onClick:y,children:"Reset"}),Object(a.jsx)(g.a,{type:"submit",variant:"contained",color:"primary",disabled:O,children:"Save"})]})]})]})}))),Ps={is_latest:!0,last_modified:"",legal_hold_status:"",name:"",retention_mode:"",retention_until_date:"",size:"0",tags:{},version_id:null},zs={removeRouteLevel:Uo,setErrorSnackMessage:q,fileIsBeingPrepared:qo,fileDownloadStarted:Vo,setSnackBarMessage:W},Ks=Object(s.b)((function(e){var t=e.objectBrowser;return{downloadingFiles:Z()(t,"downloadingFiles",[])}}),zs)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({objectNameContainer:{marginBottom:8},objectPathContainer:{marginBottom:26,fontSize:10},objectPathLink:{"&:visited":{color:"#000"}},objectName:{fontSize:24},propertiesContainer:{display:"flex",flexDirection:"row",marginBottom:15},propertiesItem:{display:"flex",flexDirection:"row",marginRight:21},propertiesItemBold:{fontWeight:700},propertiesValue:{marginLeft:8,textTransform:"capitalize"},propertiesIcon:{marginLeft:5},actionsIconContainer:{marginLeft:12},actionsIcon:{height:16,width:16,"& .MuiSvgIcon-root":{height:16}},tagsContainer:{display:"flex",flexDirection:"row",alignItems:"center",marginBottom:15},tagText:{marginRight:13},tag:{marginRight:6,fontSize:10,fontWeight:700,"&.MuiChip-sizeSmall":{height:18},"& .MuiSvgIcon-root":{height:10,width:10}},search:{marginBottom:8,"&.MuiFormControl-root":{marginRight:0}},"@global":{".progressDetails":{paddingTop:3,display:"inline-block",position:"relative",width:18,height:18},".progressDetails > .MuiCircularProgress-root":{position:"absolute",left:0,top:3}}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.routesList,r=e.downloadingFiles,o=e.removeRouteLevel,s=e.setErrorSnackMessage,l=e.setSnackBarMessage,d=e.fileIsBeingPrepared,j=e.fileDownloadStarted,m=Object(c.useState)(!0),p=Object(b.a)(m,2),h=p[0],O=p[1],g=Object(c.useState)(!1),v=Object(b.a)(g,2),y=v[0],S=v[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)(["",""]),R=Object(b.a)(F,2),P=R[0],z=R[1],K=Object(c.useState)(!1),U=Object(b.a)(K,2),W=U[0],q=U[1],V=Object(c.useState)(Ps),G=Object(b.a)(V,2),H=G[0],Y=G[1],Q=Object(c.useState)([]),J=Object(b.a)(Q,2),$=J[0],X=J[1],ee=Object(c.useState)(""),te=Object(b.a)(ee,2),ne=te[0],ae=te[1],ce=Object(c.useState)(!1),ie=Object(b.a)(ce,2),re=ie[0],oe=ie[1],se=n[n.length-1].route.split("/"),le=se[se.length-1],de=se[2],ue=se.slice(3).join("/");Object(c.useEffect)((function(){h&&me.invoke("GET","/api/v1/buckets/".concat(de,"/objects?prefix=").concat(ue,"&with_versions=true")).then((function(e){var t=Z()(e,"objects",[]);Y(t.find((function(e){return e.is_latest}))||Ps),X(t.filter((function(e){return!e.is_latest}))),O(!1)})).catch((function(e){s(e),O(!1)}))}),[h,de,ue,s]);var be=[];H.tags&&(be=Object.keys(H.tags));var je=function(){S(!0)},pe=function(e){j(e)},he=function(e,t){d("".concat(de,"/").concat(e.name).concat(t?"-".concat(e.version_id):"")),e.size&&parseInt(e.size)>104857600&&l("Download process started, it may take a few moments to complete"),is(de,ue,e.version_id,pe,t)},Oe=[{type:"share",onClick:je,sendOnlyId:!0},{type:"download",onClick:function(e){he(e,!0)},showLoaderFunction:function(e){return r.includes("".concat(de,"/").concat(le,"-").concat(e))}}],ge=$.filter((function(e){return!!e.version_id&&e.version_id.includes(ne)}));return Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"Object Browser"}),y&&Object(a.jsx)(Ss,{open:y,closeModalAndRefresh:function(){S(!1)},bucketName:de,dataObject:H}),N&&Object(a.jsx)(Es,{open:N,closeModalAndRefresh:function(e){T(!1),e&&O(!0)},objectName:le,objectInfo:H,bucketName:de}),re&&Object(a.jsx)(Xo,{deleteOpen:re,selectedBucket:de,selectedObject:ue,closeDeleteModalAndRefresh:function(e){if(oe(!1),e){var t=se.slice(0,-1).join("/");o(t),u.push(t)}}}),A&&Object(a.jsx)(Is,{modalOpen:A,currentTags:H.tags,selectedObject:ue,versionId:H.version_id,bucketName:de,onCloseAndUpdate:function(e){I(!1),e&&O(!0)}}),D&&Object(a.jsx)(Ds,{deleteOpen:D,currentTags:H.tags,selectedObject:ue,versionId:H.version_id,bucketName:de,onCloseAndUpdate:function(e){B(!1),e&&O(!0)},selectedTag:P}),W&&Object(a.jsx)(Rs,{open:W,closeModalAndRefresh:function(e){q(!1),e&&O(!0)},objectName:ue,bucketName:de,actualInfo:H}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.obTitleSection,children:Object(a.jsx)("div",{children:Object(a.jsx)(Ho,{})})}),Object(a.jsx)("br",{}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.propertiesContainer,children:[H.version_id&&"null"!==H.version_id&&Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsxs)("div",{className:t.propertiesItem,children:[Object(a.jsxs)("div",{children:[Object(a.jsx)("span",{className:t.propertiesItemBold,children:"Legal Hold:"}),Object(a.jsx)("span",{className:t.propertiesValue,children:H.legal_hold_status?H.legal_hold_status.toLowerCase():"Off"})]}),Object(a.jsx)("div",{children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"legal-hold",size:"small",className:t.propertiesIcon,onClick:function(){q(!0)},children:Object(a.jsx)(Wt,{active:!0})})})]}),Object(a.jsxs)("div",{className:t.propertiesItem,children:[Object(a.jsxs)("div",{children:[Object(a.jsx)("span",{className:t.propertiesItemBold,children:"Retention:"}),Object(a.jsx)("span",{className:t.propertiesValue,children:H.retention_mode?H.retention_mode.toLowerCase():"Undefined"})]}),Object(a.jsx)("div",{children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"retention",size:"small",className:t.propertiesIcon,onClick:function(){T(!0)},children:Object(a.jsx)(Wt,{active:!0})})})]})]}),Object(a.jsxs)("div",{className:t.propertiesItem,children:[Object(a.jsx)("div",{className:t.propertiesItemBold,children:"File Actions:"}),Object(a.jsx)("div",{className:t.actionsIconContainer,children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"share",size:"small",className:t.actionsIcon,onClick:function(){je()},children:Object(a.jsx)(ks,{})})}),Object(a.jsx)("div",{className:t.actionsIconContainer,children:r.includes("".concat(de,"/").concat(H.name))?Object(a.jsx)("div",{className:"progressDetails",children:Object(a.jsx)(C.a,{color:"primary",size:17,variant:"indeterminate"})}):Object(a.jsx)(_t.a,{color:"primary","aria-label":"download",size:"small",className:t.actionsIcon,onClick:function(){he(H)},children:Object(a.jsx)(ws,{})})}),Object(a.jsx)("div",{className:t.actionsIconContainer,children:Object(a.jsx)(_t.a,{color:"primary","aria-label":"delete",size:"small",className:t.actionsIcon,onClick:function(){oe(!0)},children:Object(a.jsx)(tt,{})})})]})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.tagsContainer,children:[Object(a.jsx)("div",{className:t.tagText,children:"Tags:"}),be&&be.map((function(e,n){var c=Z()(H,"tags.".concat(e),"");return""!==c?Object(a.jsx)(us.a,{className:t.tag,size:"small",label:"".concat(e," : ").concat(c),color:"primary",deleteIcon:Object(a.jsx)(js.a,{}),onDelete:function(){!function(e,t){z([e,t]),B(!0)}(e,c)}},"chip-".concat(n)):null})),Object(a.jsx)(us.a,{className:t.tag,icon:Object(a.jsx)(vr.a,{}),clickable:!0,size:"small",label:"Add tag",color:"primary",variant:"outlined",onClick:function(){I(!0)}})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:H.version_id&&"null"!==H.version_id&&Object(a.jsx)(f.a,{placeholder:"Search ".concat(le),className:Object(fe.a)(t.search,t.searchField),id:"search-resource",label:"",onChange:function(e){ae(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:H.version_id&&"null"!==H.version_id&&Object(a.jsx)(on,{itemActions:Oe,columns:[{label:"Version ID",elementKey:"version_id"},{label:"Last Modified",elementKey:"last_modified",renderFunction:function(e){return Object(a.jsx)(Je.a,{children:e})}}],isLoading:!1,entityName:"Versions",idField:"version_id",records:ge})})]})})]})}))),Us={setAllRoutes:Wo},Ws=Object(s.b)((function(e){var t=e.objectBrowser;return{routesList:Z()(t,"routesList",[])}}),Us),qs=Object(l.g)(Ws((function(e){var t=e.routesList,n=e.match,i=e.setAllRoutes,r=t[t.length-1];return Object(c.useEffect)((function(){var e=Z()(n,"url","/object-browser");e!==t[t.length-1].route&&i(e)}),[n,t,i]),"path"===r.type?Object(a.jsx)(ds,{}):Object(a.jsx)(Ks,{routesList:t})}))),Vs=n(200),Gs=n.n(Vs),Hs=[{id:0,title:"Community",price:"Open Source",capacityMin:""},{id:1,title:"Standard",price:"$10/TB/month",capacityMax:"Up to 10PB. No additional charges for capacity over 10PB",capacityMin:""},{id:2,title:"Enterprise",price:"$20/TB/month",capacityMax:"Up to 5PB. No additional charges for capacity over 5PB",capacityMin:""}],Ys=[{id:0,field:"License",community:"GNU AGPL v3",communityDetail:"",standard:"Commercial License",standardDetail:"",enterprise:"Commercial License",enterpriseDetail:""},{id:1,field:"Software Release",community:"Update to latest",standard:"1 Year Long Term Support",enterprise:"5 Years Long Term Support"},{id:2,field:"SLA",community:"No SLA",standard:"<24 hours",enterprise:"<1 hour"},{id:3,field:"Support",community:"Community:",communityDetail:"Public Slack Channel + Github Issues",standard:"24x7 L4 direct engineering",standardDetail:"Support via SUBNET",enterprise:"24x7 L4 direct engineering",enterpriseDetail:"Support via SUBNET"},{id:4,field:"Security Updates & Critical Bugs",community:"Self Update",standard:"Guided Update",enterprise:"Guided Update"},{id:5,field:"Panic Button",community:"N/A",standard:"1 per year",enterprise:"Unlimited"},{id:6,field:"Annual Architecture Review",community:"N/A",standard:"Yes",enterprise:"Yes"},{id:7,field:"Annual Performance Review",community:"N/A",standard:"Yes",enterprise:"Yes"},{id:8,field:"Indemnification",community:"N/A",standard:"N/A",enterprise:"Yes"},{id:9,field:"Security + Policy Review",community:"N/A",standard:"N/A",enterprise:"Yes"}],Qs=[{id:0,text:"Join Slack",text2:"",link:"https://slack.min.io",plan:"community"},{id:1,text:"Subscribe",text2:"Upgrade",link:"https://subnet.min.io/subscription",plan:"standard"},{id:2,text:"Subscribe",text2:"Upgrade",link:"https://subnet.min.io/subscription",plan:"enterprise"}],Zs=n(339),Js=n.n(Zs),$s=n(340),Xs=n.n($s),el={setModalErrorSnackMessage:G},tl=Object(s.b)(null,el),nl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({errorBlock:{color:"red"},subnetLicenseKey:{padding:"10px 10px 10px 0px",borderRight:"1px solid rgba(0, 0, 0, 0.12)",opacity:.5,"&:hover":{opacity:1}},subnetLoginForm:{padding:"10px 0px 10px 10px",opacity:.5,"&:hover":{opacity:1}},licenseKeyField:{},pageTitle:{marginBottom:20},button:{textTransform:"none",fontSize:15,fontWeight:700,background:"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box",color:"#fff"},buttonSignup:{textTransform:"none",fontSize:15,fontWeight:700,marginLeft:15}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(tl((function(e){var t=e.classes,n=e.open,i=e.closeModal,r=e.setModalErrorSnackMessage,o=Object(c.useState)(""),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(""),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(""),O=Object(b.a)(h,2),C=O[0],S=O[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=function(){if(!N){T(!0);var e={license:l,email:C,password:m};me.invoke("POST","/api/v1/subscription/validate",e).then((function(){T(!1),d(""),p(""),S(""),i()})).catch((function(e){T(!1),d(""),p(""),S(""),r(e)}))}};return n?Object(a.jsxs)(jn,{title:"",modalOpen:n,onClose:function(){d(""),p(""),S(""),i()},"aria-labelledby":"alert-dialog-title","aria-describedby":"alert-dialog-description",children:[Object(a.jsxs)(x.a,{container:!0,alignItems:"center",item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{component:"h2",variant:"h6",className:t.pageTitle,children:"Activate SUBNET License"})}),Object(a.jsxs)(x.a,{item:!0,className:t.subnetLicenseKey,xs:6,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(v.a,{variant:"caption",display:"block",gutterBottom:!0,children:"Enter your license key here"})}),Object(a.jsx)(f.a,{id:"license-key",placeholder:"",multiline:!0,rows:3,value:l,onChange:function(e){return d(e.target.value)},fullWidth:!0,className:t.licenseKeyField,variant:"outlined"}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",onClick:function(){return E()},disabled:N||0===l.trim().length,children:"Activate"})]}),Object(a.jsx)(x.a,{item:!0,className:t.subnetLoginForm,xs:6,children:Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{overlayIcon:Object(a.jsx)(Js.a,{}),id:"subnet-email",name:"subnet-email",onChange:function(e){S(e.target.value)},placeholder:"email",label:"",type:"text",value:C})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(hn,{overlayIcon:Object(a.jsx)(Xs.a,{}),id:"subnet-password",name:"subnet-password",onChange:function(e){p(e.target.value)},placeholder:"password",label:"",type:"password",value:m})}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[Object(a.jsx)(g.a,{className:t.button,color:"primary",onClick:function(){return E()},disabled:N||0===C.trim().length||0===m.trim().length,variant:"contained",children:"Activate"}),Object(a.jsx)(g.a,{className:t.buttonSignup,color:"primary",target:"_blank",rel:"noopener noreferrer",href:"#",onClick:function(e){e.preventDefault(),window.open("https://min.io/pricing","_blank")},variant:"outlined",children:"Sign Up"})]})]})})]}),N&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})})]}):null}))),al=Object(s.b)((function(e){return{operatorMode:e.system.operatorMode}}),null)(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({pageTitle:{fontSize:18,marginBottom:20},paper:{padding:"20px 52px 20px 28px"},licenseContainer:{position:"relative",padding:"20px 52px 0px 28px",background:"#032F51",boxShadow:"0px 3px 7px #00000014","& h2":{color:"#FFF",marginBottom:67},"& a":{textDecoration:"none"},"& h3":{color:"#FFFFFF",marginBottom:"30px",fontWeight:"bold"},"& h6":{color:"#FFFFFF !important"}},tableContainer:{marginLeft:28},detailsContainer:{textAlign:"center",paddingBottom:12,borderRadius:"3px 3px 0 0",marginLeft:8,maxWidth:"calc(25% - 8px)"},detailsContainerBorder:{border:"1px solid #e2e2e2",borderBottom:0,borderRadius:"4px 4px 0px 0px"},detailsContainerBorderHighlighted:{border:"1px solid #B5B5B5",borderBottom:0},detailsTitle:{fontSize:19,fontWeight:700,marginBottom:26,paddingTop:18},activePlanHeader:{fontWeight:700,background:"#D5DDE5",borderRadius:"3px 3px 0px 0px",color:"#121212",padding:8,borderTop:"1px solid #D5DDE5",marginTop:-2},planHeader:{background:"#FFFFFF",borderRadius:"3px 3px 0px 0px",padding:8,borderTop:"1px solid #D5DDE5"},detailsPrice:{fontSize:13,fontWeight:700,marginBottom:8},detailsCapacityMax:{minHeight:28,fontSize:10,fontWeight:700,marginBottom:12,padding:"0% 15%"},detailsCapacityMin:{fontSize:10},itemContainer:{height:36},itemContainerDetail:{height:48},item:{height:"100%",borderLeft:"1px solid #e2e2e2",borderRight:"1px solid #e2e2e2",textAlign:"center",fontSize:10,fontWeight:700,display:"flex",alignItems:"center",alignContent:"center",marginLeft:8,maxWidth:"calc(25% - 8px)",borderTop:"1px solid #e5e5e5"},itemFirst:{borderLeft:0,borderRight:0},itemHighlighted:{borderLeft:"1px solid #B5B5B5",borderRight:"1px solid #B5B5B5"},field:{textAlign:"left",fontWeight:400,fontSize:12},checkIcon:{height:12,color:"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box"},buttonContainer:{paddingTop:8,paddingBottom:24,height:"100%",display:"flex",justifyContent:"center",borderRadius:"0 0 3px 3px",border:"1px solid #e2e2e2",borderTop:0,marginLeft:8,maxWidth:"calc(25% - 8px)"},buttonContainerBlank:{border:0},buttonContainerHighlighted:{border:"1px solid #B5B5B5",borderTop:0},button:{textTransform:"none",fontSize:15,fontWeight:700},licenseButton:{float:"right",marginTop:25,marginRight:25},openSourcePolicy:{color:"#1C5A8D",fontWeight:"bold"},activateLink:{color:"#1C5A8D",fontWeight:"bold",clear:"both",background:"none",border:"none",textDecoration:"underline",cursor:"pointer"},subnetRefreshLicenseLink:{color:"#1C5A8D",fontWeight:"bold",clear:"both",background:"none",border:"none",textDecoration:"underline",cursor:"pointer",fontSize:13},fullWidth:{width:"100%",height:"100%"},midWidth:{width:"70%",float:"left",height:"100%"},smallWidth:{width:"30%",float:"right",height:"100%",borderRadius:"0px 3px 0px 0px !important"},licenseInfo:{color:"#FFFFFF",position:"relative"},licenseInfoTitle:{textTransform:"none",color:"#BFBFBF",fontSize:11},licenseInfoValue:{textTransform:"none",fontSize:14,fontWeight:"bold"},licenseDescription:{background:"#032F51",padding:"30px 30px",borderTop:"1px solid #e2e5e4",borderLeft:"1px solid #e2e5e4",borderRight:"1px solid #e2e5e4",bottom:0,left:"5%",right:"5%",position:"absolute"},currentPlanBG:{background:"#022A4A 0% 0% no-repeat padding-box",color:"#FFFFFF",borderTop:"1px solid #52687d"},currentPlanButton:{background:"#FFFFFF",color:"#022A4A","&:hover":{background:"#FFFFFF"}},planItemsPadding:{padding:"23px 33px"},subnetSubTitle:{fontSize:12},verifiedIcon:{width:96,position:"absolute",right:0,bottom:29},loadingLoginStrategy:{textAlign:"center"}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.operatorMode,r=function(){E(!0),me.invoke("GET","/api/v1/subscription/info").then((function(e){e&&("STANDARD"===e.plan?k(1):"ENTERPRISE"===e.plan?k(2):k(1),p(e)),E(!1)})).catch((function(e){E(!1)}))},o=Object(c.useState)(!1),s=Object(b.a)(o,2),l=s[0],d=s[1],u=Object(c.useState)(),j=Object(b.a)(u,2),m=j[0],p=j[1],h=Object(c.useState)(0),O=Object(b.a)(h,2),f=O[0],k=O[1],w=Object(c.useState)(!0),N=Object(b.a)(w,2),T=N[0],E=N[1],_=Object(c.useState)(!1),A=Object(b.a)(_,2),I=A[0],M=A[1];return Object(c.useEffect)((function(){r()}),[]),T?Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(y.a,{})}):Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"License"}),Object(a.jsxs)(x.a,{container:!0,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:t.container,children:[Object(a.jsx)(S.a,{className:"".concat(t.licenseContainer," ").concat(t.midWidth),children:m?Object(a.jsx)(i.a.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.licenseInfo,children:[Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"License"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:"Commercial License"}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Organization"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:m.organization}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Registered Capacity"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:ce((1099511627776*m.storage_capacity).toString(10))}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Expiry Date"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:Object(a.jsx)(Je.a,{format:"YYYY-MM-DD",children:m.expires_at})})]}),Object(a.jsxs)(x.a,{item:!0,xs:6,children:[Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Subscription Plan"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:m.plan}),Object(a.jsx)(v.a,{variant:"button",display:"block",gutterBottom:!0,className:t.licenseInfoTitle,children:"Requester"}),Object(a.jsx)(v.a,{variant:"overline",display:"block",gutterBottom:!0,className:t.licenseInfoValue,children:m.email})]}),Object(a.jsx)("img",{className:t.verifiedIcon,src:"/verified.svg"})]})}):Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)("img",{src:"/agpl.svg",height:40,alt:"agpl"}),Object(a.jsx)(v.a,{component:"h2",variant:"h6",children:"GNU Affero General Public License"}),Object(a.jsx)("a",{href:"https://www.gnu.org/licenses/agpl-3.0.html",target:"_blank",rel:"nofollow noopener noreferrer",children:Object(a.jsxs)("div",{className:t.licenseDescription,children:[Object(a.jsx)(v.a,{component:"h3",children:"Version 3"}),Object(a.jsx)(v.a,{component:"h6",children:"The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the Community in the case of network server software."})]})})]})}),Object(a.jsx)(S.a,{className:"".concat(t.paper," ").concat(t.smallWidth),children:m?Object(a.jsxs)(i.a.Fragment,{children:[" ",Object(a.jsx)(v.a,{component:"h2",variant:"h6",className:t.pageTitle,children:"Login to MinIO SUBNET !"}),Object(a.jsx)(v.a,{component:"h6",className:t.subnetSubTitle,children:"It combines a commercial license with a support experience unlike any other."}),Object(a.jsx)("br",{}),Object(a.jsx)(g.a,{variant:"contained",color:"primary",className:t.button,target:"_blank",rel:"noopener noreferrer",href:"https://subnet.min.io/support/?ref=op",children:"Login to SUBNET"}),n&&Object(a.jsxs)(i.a.Fragment,{children:[" ",Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("button",{className:t.subnetRefreshLicenseLink,onClick:function(e){e.preventDefault(),M(!0),me.invoke("POST","/api/v1/subscription/refresh",{}).then((function(e){e&&("STANDARD"===e.plan?k(1):"ENTERPRISE"===e.plan?k(2):k(1),p(e)),M(!1)})).catch((function(e){M(!1)}))},children:"Refresh Licence"}),I&&Object(a.jsx)(C.a,{size:16,className:t.loadingLoginStrategy})]})]}):Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(v.a,{component:"h2",variant:"h6",className:t.pageTitle,children:"Choosing between GNU AGPL v3 and Commercial License"}),Object(a.jsx)(v.a,{component:"h6",children:"If you are building proprietary applications, you may want to choose the commercial license included as part of the Standard and Enterprise subscription plans. Applications must otherwise comply with all the GNU AGPLv3 License & Trademark obligations. Follow the links below to learn more about the compliance policy."}),Object(a.jsx)("br",{}),Object(a.jsx)("a",{href:"https://min.io/compliance?ref=op",className:t.openSourcePolicy,target:"_blank",rel:"nofollow noopener noreferrer",children:"Open Source Policy Compliance"}),Object(a.jsx)("br",{}),Object(a.jsx)("br",{}),Object(a.jsx)("a",{href:"https://min.io/logo?ref=op",className:t.openSourcePolicy,target:"_blank",rel:"nofollow noopener noreferrer",children:"Trademark Policy"})]})})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:Object(fe.a)(t.planItemsPadding),children:Object(a.jsx)(S.a,{className:t.paper,style:{borderRadius:"0px 0px 3px 3px"},children:Object(a.jsxs)(x.a,{container:!0,children:[n?Object(a.jsx)(nl,{open:l,closeModal:function(){return d(!1),void r()}}):null,Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,className:t.tableContainer,children:[Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:3,className:t.detailsContainer}),Hs.map((function(e){var n=!m&&"Community"===e.title||m&&m.plan.toLowerCase()===e.title.toLowerCase();return Object(a.jsxs)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.detailsContainer,t.detailsContainerBorder,Object(ge.a)({},t.detailsContainerBorderHighlighted,"Community"!==e.title),n?t.currentPlanBG:""),children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:n?t.activePlanHeader:t.planHeader,children:n?"Current Plan":"\xa0"}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.detailsTitle,children:e.title}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.detailsPrice,children:e.price}),Object(a.jsx)(x.a,{item:!0,xs:12,className:t.detailsCapacityMax,children:e.capacityMax||""})]},e.id)}))]}),Ys.map((function(e){return Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,className:Object(fe.a)(t.itemContainer,e.communityDetail&&t.itemContainerDetail),children:[Object(a.jsx)(x.a,{item:!0,xs:3,className:Object(fe.a)(t.item,t.field,t.itemFirst),children:e.field}),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.item,0===f?t.currentPlanBG:""),children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:"N/A"===e.community?"":"Yes"===e.community?Object(a.jsx)(Gs.a,{className:t.checkIcon}):e.community}),void 0!==e.communityDetail&&Object(a.jsx)(x.a,{item:!0,xs:12,children:e.communityDetail})]}),Object(a.jsx)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.item,t.itemHighlighted,1===f?t.currentPlanBG:""),children:Object(a.jsx)(x.a,{item:!0,xs:12,children:"N/A"===e.standard?"":"Yes"===e.standard?Object(a.jsx)(Gs.a,{className:t.checkIcon}):e.standard})}),Object(a.jsx)(x.a,{container:!0,item:!0,xs:3,className:Object(fe.a)(t.item,t.itemHighlighted,2===f?t.currentPlanBG:""),children:Object(a.jsx)(x.a,{item:!0,xs:12,children:"N/A"===e.enterprise?"":"Yes"===e.enterprise?Object(a.jsx)(Gs.a,{className:t.checkIcon}):e.enterprise})})]},e.id)})),Object(a.jsxs)(x.a,{container:!0,item:!0,xs:12,children:[Object(a.jsx)(x.a,{item:!0,xs:3,className:Object(fe.a)(t.buttonContainer,t.buttonContainerBlank)}),Qs.map((function(e,c){return Object(a.jsxs)(x.a,{container:!0,item:!0,xs:3,style:{textAlign:"center"},className:Object(fe.a)(t.buttonContainer,f===c?t.currentPlanBG:"",Object(ge.a)({},t.buttonContainerHighlighted,"Subscribe"===e.text)),children:[Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(g.a,{variant:"contained",color:"primary",className:Object(fe.a)(t.button,f===c?t.currentPlanButton:""),target:"_blank",rel:"noopener noreferrer",href:"#",disabled:m&&m.plan.toLowerCase()===e.plan.toLowerCase(),onClick:function(t){t.preventDefault(),window.open(e.link,"_blank")},children:f!==c&&c>0?e.text2:e.text})}),n&&"Subscribe"===e.text&&!(m&&m.plan.toLowerCase()===e.plan.toLowerCase())&&Object(a.jsx)(x.a,{item:!0,xs:12,style:{marginTop:"10px"},children:Object(a.jsx)("button",{className:t.activateLink,onClick:function(e){e.preventDefault(),d(!0)},children:"Activate"})})]},e.id)}))]})]})]})})})]})]})})}))),cl=n(89),il="TRACE_MESSAGE_RECEIVED",rl="TRACE_RESET_MESSAGES";var ol=function(e){var t="ws";return"https:"===e&&(t="wss"),t},sl=n(110),ll=n.n(sl),dl=Object(s.b)((function(e){return{messages:e.trace.messages}}),{traceMessageReceived:function(e){return{type:il,message:e}},traceResetMessages:function(){return{type:rl}}})(Object(N.a)((function(e){return Object(k.a)(Object(j.a)({logList:{background:"white",height:"400px",overflow:"auto","& ul":{margin:"4px",padding:"0px"},"& ul li":{listStyle:"none",margin:"0px",padding:"0px",borderBottom:"1px solid #dedede"}},sizeItem:{width:150},timeItem:{width:100}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=e.traceMessageReceived,r=e.traceResetMessages,o=e.messages;return Object(c.useEffect)((function(){r();var e=new URL(window.location.toString()),t=e.port,a=ol(e.protocol),c=new cl.w3cwebsocket("".concat(a,"://").concat(e.hostname,":").concat(t,"/ws/trace")),i=null;if(null!==c)return c.onopen=function(){console.log("WebSocket Client Connected"),c.send("ok"),i=setInterval((function(){c.send("ok")}),1e4)},c.onmessage=function(e){var t=JSON.parse(e.data.toString());t.ptime=ll()(t.time,"YYYY-MM-DD HH:mm:s.SSSS +0000 UTC").toDate(),t.key=Math.random(),n(t)},c.onclose=function(){clearInterval(i),console.log("connection closed by server")},function(){c.close(1e3),clearInterval(i),console.log("closing websockets")}}),[n,r]),Object(a.jsxs)(i.a.Fragment,{children:[Object(a.jsx)(Rn,{label:"Trace"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container,children:Object(a.jsx)(on,{itemActions:[],columns:[{label:"Time",elementKey:"ptime",renderFunction:function(e){var t=new Date(e);return re(t)},globalClass:t.timeItem},{label:"Name",elementKey:"api"},{label:"Status",elementKey:"",renderFunction:function(e){return"".concat(e.statusCode," ").concat(e.statusMsg)},renderFullObject:!0},{label:"Location",elementKey:"configuration_id",renderFunction:function(e){return"".concat(e.host," ").concat(e.client)},renderFullObject:!0},{label:"Load Time",elementKey:"callStats.duration",globalClass:t.timeItem},{label:"Upload",elementKey:"callStats.rx",renderFunction:ce,globalClass:t.sizeItem},{label:"Download",elementKey:"callStats.tx",renderFunction:ce,globalClass:t.sizeItem}],isLoading:!1,records:o,entityName:"Traces",idField:"api",customEmptyMessage:"There are no traced Elements yet",autoScrollToBottom:!0})})})]})}))),ul="LOG_MESSAGE_RECEIVED",bl="LOG_RESET_MESSAGES";var jl=Object(s.b)((function(e){return{messages:e.logs.messages}}),{logMessageReceived:function(e){return{type:ul,message:e}},logResetMessages:function(){return{type:bl}}}),ml=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({logList:{background:"#fff",minHeight:400,height:"calc(100vh - 304px)",overflow:"auto",fontSize:13,padding:"25px 45px 0",border:"1px solid #EAEDEE",borderRadius:4},tab:{paddingLeft:25},logerror:{color:"#A52A2A"},logerror_tab:{color:"#A52A2A",paddingLeft:25},ansidefault:{color:"#000"},highlight:{"& span":{backgroundColor:"#082F5238"}}},Ae),Ie),Fe))}))(jl((function(e){var t=e.classes,n=e.logMessageReceived,i=e.logResetMessages,r=e.messages,o=Object(c.useState)(""),s=Object(b.a)(o,2),l=s[0],d=s[1];Object(c.useEffect)((function(){i();var e=new URL(window.location.toString()),t=e.port,a=ol(e.protocol),c=new cl.w3cwebsocket("".concat(a,"://").concat(e.hostname,":").concat(t,"/ws/console")),r=null;if(null!==c)return c.onopen=function(){console.log("WebSocket Client Connected"),c.send("ok"),r=setInterval((function(){c.send("ok")}),1e4)},c.onmessage=function(e){var t=JSON.parse(e.data.toString());t.time=ll()(t.time,"HH:mm:s UTC MM/DD/YYYY").toDate(),t.key=Math.random(),n(t)},c.onclose=function(){clearInterval(r),console.log("connection closed by server")},function(){c.close(1e3),clearInterval(r),console.log("closing websockets")}}),[n,i]);var u=function(e){var n=e.ConsoleMsg,c=(n=n.replace(/([^\x20-\x7F])/g,"")).replace(/((\[[0-9;]+m))/g,""),i=""!==l&&n.toLowerCase().includes(l.toLowerCase());return c.startsWith(" ")?Object(a.jsx)("div",{className:"".concat(i?t.highlight:""),children:Object(a.jsx)("span",{className:t.tab,children:c})},e.key):null!==e.error&&void 0!==e.error?function(e){var n=[];if(null!==e.error&&void 0!==e.error){if(e.api&&e.api.name){var c="API: ".concat(e.api.name),i=""!==l&&c.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsxs)("div",{className:"".concat(i?t.highlight:""),children:[Object(a.jsx)("br",{}),Object(a.jsx)("span",{className:t.logerror,children:c})]},"api-".concat(e.key)))}if(e.time){var r="Time: ".concat(re(e.time)),o=""!==l&&r.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(o?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:r})},"time-".concat(e.key)))}if(e.deploymentid){var s="DeploymentID: ".concat(e.deploymentid),d=""!==l&&s.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(d?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:s})},"deploytmentid-".concat(e.key)))}if(e.requestID){var u="RequestID: ".concat(e.requestID),b=""!==l&&u.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(b?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:u})},"requestid-".concat(e.key)))}if(e.remotehost){var j="RemoteHost: ".concat(e.remotehost),m=""!==l&&j.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(m?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:j})},"remotehost-".concat(e.key)))}if(e.host){var p="Host: ".concat(e.host),h=""!==l&&p.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(h?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:p})},"host-".concat(e.key)))}if(e.userAgent){var O="UserAgent: ".concat(e.userAgent),g=""!==l&&O.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(g?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:O})},"useragent-".concat(e.key)))}if(e.error.message){var f="Error: ".concat(e.error.message),x=""!==l&&f.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(x?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror,children:f})},"message-".concat(e.key)))}if(e.error.source)for(var v in e.error.source){var y=e.error.source[v],C=""!==l&&y.toLowerCase().includes(l.toLowerCase());n.push(Object(a.jsx)("div",{className:"".concat(C?t.highlight:""),children:Object(a.jsx)("span",{className:t.logerror_tab,children:y})},"source-".concat(e.key,"-").concat(v)))}}return n}(e):Object(a.jsx)("div",{className:"".concat(i?t.highlight:""),children:Object(a.jsx)("span",{className:t.ansidefault,children:c})},e.key)},j=r.map((function(e){return u(e)}));return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.logsSubContainer,children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.actionsTray,children:Object(a.jsx)(f.a,{placeholder:"Highlight Line",className:t.searchField,id:"search-resource",label:"",onChange:function(e){d(e.target.value)},InputProps:{disableUnderline:!0,startAdornment:Object(a.jsx)(He.a,{position:"start",children:Object(a.jsx)(Qe.a,{})})}})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("br",{})}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)("div",{className:t.logList,children:j})})]})})}))),pl=n(649),hl=Object(N.a)((function(e){return Object(k.a)({searchField:Object(j.a)(Object(j.a)({},Ie.searchField),{},{height:30,padding:0,"& input":{padding:"0 12px",height:28,fontSize:12,fontWeight:600,color:"#393939"},"&.isDisabled":{"&:hover":{borderColor:"#EAEDEE"}},"& input.Mui-disabled":{backgroundColor:"#EAEAEA"}}),labelStyle:{color:"#393939",fontSize:12,marginBottom:4},buttonKit:{display:"flex",alignItems:"center"},toggleButton:{marginRight:10},fieldContainer:{flexGrow:1,margin:"0 15px"}})}))((function(e){var t=e.classes,n=e.label,i=e.onChange,r=e.value,o=e.placeholder,s=void 0===o?"":o,l=e.id,d=e.name;return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)("div",{className:t.fieldContainer,children:[Object(a.jsx)("div",{className:t.labelStyle,children:n}),Object(a.jsx)("div",{className:t.buttonKit,children:Object(a.jsx)(f.a,{placeholder:s,id:l,name:d,label:"",onChange:function(e){i(e.target.value)},InputProps:{disableUnderline:!0},className:t.searchField,value:r})})]})})})),Ol={setErrorSnackMessage:q},gl=Object(s.b)(null,Ol),fl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)(Object(j.a)({inputBar:{flexGrow:1,marginLeft:15},advancedLabel:{display:"flex",alignItems:"center",color:"#091C42",border:0,backgroundColor:"transparent",cursor:"pointer","&:focus, &:active":{outline:"none"}},advancedLabelContainer:{marginTop:10},getInformationContainer:{textAlign:"right"},orderButton:{width:93},recordsLabel:{alignSelf:"center",marginLeft:15},blockCollapsed:{height:0,overflowY:"hidden",transitionDuration:"0.3s"},filterOpen:{height:200,marginBottom:12},endLineAction:{marginBottom:15},filtersContainer:{display:"flex",justifyContent:"space-between",marginBottom:12},innerContainer:{backgroundColor:"#fff",border:"#EAEDEE 1px solid",borderRadius:3,padding:10,marginBottom:15},noticeLabel:{marginLeft:15,marginBottom:15,fontSize:12,color:"#9C9C9C"},tableFOpen:{height:"calc(100vh - 561px)"},tableFClosed:{height:"calc(100vh - 349px)"},"@global":{".overrideMargin":{marginLeft:0}}},Ie),Ae),Fe),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))(gl((function(e){var t=e.classes,n=e.setErrorSnackMessage,i=Object(c.useState)(!0),r=Object(b.a)(i,2),o=r[0],s=r[1],l=Object(c.useState)(null),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)(null),p=Object(b.a)(m,2),h=p[0],O=p[1],f=Object(c.useState)(!1),v=Object(b.a)(f,2),y=v[0],C=v[1],S=Object(c.useState)([]),k=Object(b.a)(S,2),w=k[0],N=k[1],T=Object(c.useState)(""),E=Object(b.a)(T,2),_=E[0],A=E[1],I=Object(c.useState)(""),M=Object(b.a)(I,2),L=M[0],D=M[1],B=Object(c.useState)(""),F=Object(b.a)(B,2),R=F[0],P=F[1],z=Object(c.useState)(""),K=Object(b.a)(z,2),U=K[0],W=K[1],q=Object(c.useState)(""),V=Object(b.a)(q,2),G=V[0],H=V[1],Y=Object(c.useState)(""),Q=Object(b.a)(Y,2),J=Q[0],$=Q[1],X=Object(c.useState)("DESC"),ee=Object(b.a)(X,2),te=ee[0],ne=ee[1],ae=Object(c.useState)(["time","api_name","bucket","object","remote_host","request_id","user_agent","response_status"]),ie=Object(b.a)(ae,2),re=ie[0],oe=ie[1],se=Object(c.useState)(0),le=Object(b.a)(se,2),de=le[0],ue=le[1],je=Object(c.useState)(!1),pe=Object(b.a)(je,2),he=pe[0],Oe=pe[1],ge=null,fe=Object(c.useCallback)((function(){if(!he){Oe(!0);var e="".concat(""!==_?"&fp=bucket:".concat(_):"").concat(""!==U?"&fp=object:".concat(U):"").concat(""!==L?"&fp=api_name:".concat(L):"").concat(""!==G?"&fp=request_id:".concat(G):"").concat(""!==R?"&fp=user_agent:".concat(R):"").concat(""!==J?"&fp=response_status:".concat(J):"");(e=e.trim()).endsWith(",")&&(e=e.slice(0,-1)),me.invoke("GET","/api/v1/logs/search?q=reqinfo".concat(""!==e?"".concat(e):"","&pageSize=100&pageNo=").concat(de,"&order=").concat("DESC"===te?"timeDesc":"timeAsc").concat(null!==u?"&timeStart=".concat(u.toISOString()):"").concat(null!==h?"&timeEnd=".concat(h.toISOString()):"")).then((function(e){var t=e.results||[],n=[].concat(Object(Nt.a)(w),Object(Nt.a)(t));s(!1),Oe(!1),N(n),ue(de+1),null!==ge&&ge()})).catch((function(e){s(!1),Oe(!1),n(e)}))}}),[_,U,L,G,R,J,de,te,u,h,he,w,ge,n]);Object(c.useEffect)((function(){o&&(N([]),fe())}),[o,te,fe]);return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)(x.a,{container:!0,className:t.logsSubContainer,children:[Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(t.actionsTray," ").concat(t.timeContainers),children:[Object(a.jsx)("span",{className:t.label,children:"Start Time"}),Object(a.jsx)(ic,{value:u,onChange:j}),Object(a.jsx)("span",{className:t.label,children:"End Time"}),Object(a.jsx)(ic,{value:h,onChange:O})]}),Object(a.jsx)(x.a,{item:!0,xs:12,className:"".concat(t.advancedLabelContainer),children:Object(a.jsx)("div",{className:"".concat(t.blockCollapsed," ").concat(y?t.filterOpen:""),children:Object(a.jsxs)("div",{className:t.innerContainer,children:[Object(a.jsxs)("div",{className:t.noticeLabel,children:["Enable your preferred options to get filtered records.",Object(a.jsx)("br",{}),"You can use '*' to match any character, '.' to signify a single character or '\\' to scape an special character (E.g. mybucket-*)"]}),Object(a.jsxs)("div",{className:t.filtersContainer,children:[Object(a.jsx)(hl,{onChange:A,value:_,label:"Bucket",id:"bucket",name:"bucket"}),Object(a.jsx)(hl,{onChange:D,value:L,label:"API Name",id:"api_name",name:"api_name"}),Object(a.jsx)(hl,{onChange:P,value:R,label:"User Agent",id:"user_agent",name:"user_agent"})]}),Object(a.jsxs)("div",{className:t.filtersContainer,children:[Object(a.jsx)(hl,{onChange:W,value:U,label:"Object",id:"object",name:"object"}),Object(a.jsx)(hl,{onChange:H,value:G,label:"Request ID",id:"request_id",name:"request_id"}),Object(a.jsx)(hl,{onChange:$,value:J,label:"Response Status",id:"response_status",name:"response_status"})]})]})})}),Object(a.jsxs)(x.a,{item:!0,xs:12,className:"".concat(t.actionsTray," ").concat(t.endLineAction),children:[Object(a.jsx)("div",{children:Object(a.jsxs)("button",{type:"button",className:"".concat(t.advancedLabel," overrideMargin"),onClick:function(){C(!y)},children:["Advanced Filters"," ",y?Object(a.jsx)(pl.a,{}):Object(a.jsx)(Ft.a,{})]})}),Object(a.jsx)(g.a,{type:"button",variant:"contained",color:"primary",onClick:function(){ue(0),s(!0)},children:"Get Information"})]}),Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(on,{columns:[{label:"Timestamp",elementKey:"time",enableSort:!0},{label:"API Name",elementKey:"api_name"},{label:"Bucket",elementKey:"bucket"},{label:"Object",elementKey:"object"},{label:"Remote Host",elementKey:"remote_host"},{label:"Request ID",elementKey:"request_id"},{label:"User Agent",elementKey:"user_agent"},{label:"Response Status",elementKey:"response_status",renderFunction:function(e){return Object(a.jsx)(c.Fragment,{children:Object(a.jsxs)("span",{children:[e.response_status_code," (",e.response_status,")"]})})},renderFullObject:!0},{label:"Request Content Length",elementKey:"request_content_length",renderFunction:ce},{label:"Response Content Length",elementKey:"response_content_length",renderFunction:ce},{label:"Time to Response NS",elementKey:"time_to_response_ns",renderFunction:be,contentTextAlign:"right"}],isLoading:o,records:w,entityName:"Logs",customEmptyMessage:"There is no information with this criteria",idField:"request_id",columnsSelector:!0,columnsShown:re,onColumnChange:function(e,t){var n=Object(Nt.a)(re);t?n.includes(e)||n.push(e):n=re.filter((function(t){return t!==e})),oe(n)},customPaperHeight:y?t.tableFOpen:t.tableFClosed,sortConfig:{currentSort:"time",currentDirection:te,triggerSort:function(e){var t=Z()(e,"sortDirection","DESC");ne(t),ue(0),s(!0)}},infiniteScrollConfig:{recordsCount:1e6,loadMoreRecords:function(e){return fe(),new Promise((function(e){ge=e}))}},textSelectable:!0})})]})})}))),xl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)({headerLabel:{fontSize:22,fontWeight:600,color:"#000",marginTop:4}},(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(0),i=Object(b.a)(n,2),r=i[0],o=i[1],s=Object(c.useState)(!0),l=Object(b.a)(s,2),d=l[0],u=l[1],j=Object(c.useState)(!1),m=Object(b.a)(j,2),p=m[0],h=m[1];return Object(c.useEffect)((function(){me.invoke("GET","/api/v1/logs/search?q=reqinfo&pageSize=10&pageNo=0").then((function(){h(!0),u(!1)})).catch((function(e){u(!1),console.info("Log Search API not available.")}))}),[d]),Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(Rn,{label:"Logs"}),Object(a.jsx)(x.a,{container:!0,children:Object(a.jsx)(x.a,{item:!0,xs:12,className:t.container,children:d?Object(a.jsx)(y.a,{}):Object(a.jsxs)(c.Fragment,{children:[Object(a.jsx)(x.a,{item:!0,xs:12,className:t.headerLabel,children:"All Logs"}),Object(a.jsxs)(Kn.a,{value:r,onChange:function(e,t){o(t)},indicatorColor:"primary",textColor:"primary","aria-label":"cluster-tabs",children:[Object(a.jsx)(Un.a,{label:"Error Logs"}),p&&Object(a.jsx)(Un.a,{label:"Logs Search"})]}),Object(a.jsxs)(x.a,{item:!0,xs:12,children:[0===r&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(ml,{})}),1===r&&p&&Object(a.jsx)(x.a,{item:!0,xs:12,children:Object(a.jsx)(fl,{})})]})]})})})]})})),vl=n(341),yl=Object(N.a)((function(e){return Object(k.a)({root:{width:450,lineHeight:"50px",marginRight:15,"label + &":{marginTop:e.spacing(3)},"& .MuiSelect-select:focus":{backgroundColor:"transparent"}},input:{height:50,fontSize:13,lineHeight:"50px",width:450}})}))(On.a),Cl=Object(N.a)((function(e){return Object(k.a)(Object(j.a)(Object(j.a)(Object(j.a)({watchList:{background:"white",maxHeight:"400",overflow:"auto","& ul":{margin:"4",padding:"0"},"& ul li":{listStyle:"none",margin:"0",padding:"0",borderBottom:"1px solid #dedede"}},graphContainer:{backgroundColor:"#fff",border:"#EAEDEE 1px solid",borderRadius:3,padding:"19px 38px"},scanInfo:{marginTop:20,display:"flex",flexDirection:"row",justifyContent:"space-between"},scanData:{fontSize:13},inlineCheckboxes:{display:"flex",justifyContent:"flex-start"}},Ae),Ie),(e.spacing(4),{container:{padding:"110px 33px 0","& h6":{color:"#777777",fontSize:14},"& p":{"& span:not(*[class*='smallUnit'])":{fontSize:16}}}})))}))((function(e){var t=e.classes,n=Object(c.useState)(!1),r=Object(b.a)(n,2),o=r[0],s=r[1],l=Object(c.useState)(""),d=Object(b.a)(l,2),u=d[0],j=d[1],m=Object(c.useState)([]),p=Object(b.a)(m,2),h=p[0],O=p[1],v=Object(c.useState)(""),y=Object(b.a)(v,2),C=y[0],S=y[1],k=Object(c.useState)(!1),w=Object(b.a)(k,2),N=w[0],T=w[1],E=Object(c.useState)(!1),_=Object(b.a)(E,2),A=_[0],I=_[1],M=Object(c.useState)(!1),L=Object(b.a)(M,2),D=L[0],B=L[1],F=Object(c.useState)({beforeHeal:[0,0,0,0],afterHeal:[0,0,0,0],objectsHealed:0,objectsScanned:0,healDuration:0,sizeScanned:""}),R=Object(b.a)(F,2),P=R[0],z=R[1];Object(c.useEffect)((function(){me.invoke("GET","/api/v1/buckets").then((function(e){var t=[];null!==e.buckets&&(t=e.buckets),O(t)})).catch((function(e){console.log(e)}))}),[]),Object(c.useEffect)((function(){!0===A&&B(!1)}),[A]),Object(c.useEffect)((function(){!0===D&&I(!1)}),[D]);var K=function(e){return[e.Green,e.Yellow,e.Red,e.Grey]};Object(c.useEffect)((function(){if(o){var e={Green:0,Yellow:0,Red:0,Grey:0},t={Green:0,Yellow:0,Red:0,Grey:0},n=new URL(window.location.toString()),a=n.port,c=ol(n.protocol),i=new cl.w3cwebsocket("".concat(c,"://").concat(n.hostname,":").concat(a,"/ws/heal/").concat(u,"?prefix=").concat(C,"&recursive=").concat(N,"&force-start=").concat(A,"&force-stop=").concat(D));if(null!==i)return i.onopen=function(){console.log("WebSocket Client Connected"),i.send("ok")},i.onmessage=function(n){for(var a=JSON.parse(n.data.toString()),c=0,i=Object.entries(a.healthAfterCols);c0?Object(a.jsx)(l.a,{to:S[0].path}):null]})})})]})]}):null})}))),Bl=function(e){var t=e.location;return Object(c.useEffect)((function(){var e=(t.search.match(/code=([^&]+)/)||[])[1],n=(t.search.match(/state=([^&]+)/)||[])[1];me.invoke("POST","/api/v1/login/oauth2/auth",{code:e,state:n}).then((function(e){e&&e.sessionId&&($.a.setItem("token",e.sessionId),window.location.href="/")})).catch((function(e){window.location.href="/login"}))}),[]),null},Fl=n(342),Rl="SESSION_RESPONSE";var Pl=Object(s.b)((function(e){return{loggedIn:e.system.loggedIn}}),{userLoggedIn:P,consoleOperatorMode:function(e){return{type:E,operatorMode:e}},saveSessionResponse:function(e){return{type:Rl,message:e}}})((function(e){var t=e.Component,n=e.loggedIn,i=e.userLoggedIn,r=e.consoleOperatorMode,o=e.saveSessionResponse,s=Object(c.useState)(!0),d=Object(b.a)(s,2),u=d[0],j=d[1];return Object(c.useEffect)((function(){me.invoke("GET","/api/v1/session").then((function(e){o(e),i(!0),j(!1),e.operator&&(r(!0),document.title="MinIO Operator")})).catch((function(){return j(!1)}))}),[o,r,i]),u?null:n?Object(a.jsx)(t,{}):Object(a.jsx)(l.a,{to:{pathname:"/login"}})})),zl=Object(Fl.hot)((function(){return Object(a.jsx)(l.c,{history:u,children:Object(a.jsxs)(l.d,{children:[Object(a.jsx)(l.b,{exact:!0,path:"/oauth_callback",component:Bl}),Object(a.jsx)(l.b,{exact:!0,path:"/login",component:Oe}),Object(a.jsx)(Pl,{Component:Dl})]})})})),Kl=n(126),Ul=n(343),Wl={loggedIn:!1,operatorMode:!1,session:"",userName:"",sidebarOpen:!0,serverNeedsRestart:!1,serverIsLoading:!1,loadingProgress:100,snackBar:{message:"",type:"message"},modalSnackBar:{message:"",type:"message"},serverDiagnosticStatus:""};var ql={messages:[]};var Vl={messages:[]};var Gl={message:{}};var Hl={messages:[]};var Yl={session:{operator:!1,status:"",pages:[]}};var Ql={open:!1,addBucketName:"",addBucketVersioningEnabled:!1,addBucketLockingEnabled:!1,addBucketQuotaEnabled:!1,addBucketQuotaType:"hard",addBucketQuotaSize:"1",addBucketQuotaUnit:"TiB",addBucketRetentionEnabled:!1,addBucketRetentionMode:"compliance",addBucketRetentionUnit:"days",addBucketRetentionValidity:1};var Zl=[{route:"/object-browser",label:"All Buckets",type:"path"}],Jl={routesList:Zl,downloadingFiles:[]};var $l=n(344),Xl=n.n($l),ed={createTenant:{page:0,validPages:[],advancedModeOn:!1,storageClasses:[],limitSize:{},fields:{nameTenant:{tenantName:"",namespace:"",selectedStorageClass:""},configure:{customImage:!1,imageName:"",consoleImage:"",customDockerhub:!1,imageRegistry:"",imageRegistryUsername:"",imageRegistryPassword:"",exposeMinIO:!0,exposeConsole:!0},identityProvider:{idpSelection:"Built-in",openIDURL:"",openIDClientID:"",openIDSecretID:"",ADURL:"",ADSkipTLS:!1,ADServerInsecure:!1,ADUserNameFilter:"",ADGroupBaseDN:"",ADGroupSearchFilter:"",ADNameAttribute:""},security:{enableAutoCert:!0,enableCustomCerts:!1,enableTLS:!0},encryption:{enableEncryption:!1,encryptionType:"vault",gemaltoEndpoint:"",gemaltoToken:"",gemaltoDomain:"",gemaltoRetry:"0",awsEndpoint:"",awsRegion:"",awsKMSKey:"",awsAccessKey:"",awsSecretKey:"",awsToken:"",vaultEndpoint:"",vaultEngine:"",vaultNamespace:"",vaultPrefix:"",vaultAppRoleEngine:"",vaultId:"",vaultSecret:"",vaultRetry:"0",vaultPing:"0",gcpProjectID:"",gcpEndpoint:"",gcpClientEmail:"",gcpClientID:"",gcpPrivateKeyID:"",gcpPrivateKey:"",enableCustomCertsForKES:!1},tenantSize:{volumeSize:"100",sizeFactor:"Gi",drivesPerServer:"1",nodes:"4",memoryNode:"2",ecParity:"",ecParityChoices:[],cleanECChoices:[],maxAllocableMemo:0,memorySize:{error:"",limit:0,request:0},distribution:{error:"",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0},ecParityCalc:{error:0,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]},limitSize:{}}},certificates:{minioCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],caCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],consoleCertificate:{id:"console_cert_pair",key:"",cert:"",encoded_key:"",encoded_cert:""},serverCertificate:{id:"encryptionServerCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},clientCertificate:{id:"encryptionClientCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCertificate:{id:"encryptionVaultCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCA:{id:"encryptionVaultCA",key:"",cert:"",encoded_key:"",encoded_cert:""},gemaltoCA:{id:"encryptionGemaltoCA",key:"",cert:"",encoded_key:"",encoded_cert:""}}}};var td=Object(Kl.c)({system:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Wl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case T:return Object(j.a)(Object(j.a)({},e),{},{loggedIn:t.logged});case E:return Object(j.a)(Object(j.a)({},e),{},{operatorMode:t.operatorMode});case _:return Object(j.a)(Object(j.a)({},e),{},{sidebarOpen:t.open});case A:return Object(j.a)(Object(j.a)({},e),{},{serverNeedsRestart:t.needsRestart});case I:return Object(j.a)(Object(j.a)({},e),{},{serverIsLoading:t.isLoading});case M:return Object(j.a)(Object(j.a)({},e),{},{loadingProgress:t.loadingProgress});case L:return Object(j.a)(Object(j.a)({},e),{},{snackBar:{message:t.message,type:"message"}});case B:return Object(j.a)(Object(j.a)({},e),{},{snackBar:{message:t.message,type:"error"}});case F:return Object(j.a)(Object(j.a)({},e),{},{modalSnackBar:{message:t.message,type:"message"}});case R:return Object(j.a)(Object(j.a)({},e),{},{modalSnackBar:{message:t.message,type:"error"}});case D:return Object(j.a)(Object(j.a)({},e),{},{serverDiagnosticStatus:t.serverDiagnosticStatus});default:return e}},trace:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ql,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case il:return Object(j.a)(Object(j.a)({},e),{},{messages:[].concat(Object(Nt.a)(e.messages),[t.message])});case rl:return Object(j.a)(Object(j.a)({},e),{},{messages:[]});default:return e}},logs:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Vl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case ul:return Object(j.a)(Object(j.a)({},e),{},{messages:[].concat(Object(Nt.a)(e.messages),[t.message])});case bl:return Object(j.a)(Object(j.a)({},e),{},{messages:[]});default:return e}},watch:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Hl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Sl:return Object(j.a)(Object(j.a)({},e),{},{messages:[].concat(Object(Nt.a)(e.messages),[t.message])});case kl:return Object(j.a)(Object(j.a)({},e),{},{messages:[]});default:return e}},console:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Yl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Rl:return Object(j.a)(Object(j.a)({},e),{},{session:t.message});default:return e}},buckets:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ql,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case mt:return Object(j.a)(Object(j.a)({},e),{},{open:t.open});case pt:return Object(j.a)(Object(j.a)({},e),{},{addBucketName:t.name});case ht:return Object(j.a)(Object(j.a)({},e),{},{addBucketVersioningEnabled:t.versioned});case Ot:return Object(j.a)(Object(j.a)({},e),{},{addBucketLockingEnabled:t.locking});case gt:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaEnabled:t.quota});case ft:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaType:t.quotaType});case xt:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaSize:t.quotaSize});case vt:return Object(j.a)(Object(j.a)({},e),{},{addBucketQuotaUnit:t.quotaUnit});case Ct:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionEnabled:t.retention});case St:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionMode:t.retentionMode});case kt:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionUnit:t.retentionUnit});case wt:return Object(j.a)(Object(j.a)({},e),{},{addBucketRetentionValidity:t.retentionValidity});case yt:return Object(j.a)(Object(j.a)({},e),{},{addBucketName:"",addBucketVersioningEnabled:!1,addBucketLockingEnabled:!1,addBucketQuotaEnabled:!1,addBucketQuotaType:"hard",addBucketQuotaSize:"1",addBucketQuotaUnit:"TiB",addBucketRetentionEnabled:!1,addBucketRetentionMode:"compliance",addBucketRetentionUnit:"days",addBucketRetentionValidity:1});default:return e}},objectBrowser:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Jl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Mo:var n=[].concat(Object(Nt.a)(e.routesList),[{route:t.route,label:t.label,type:t.routeType}]);return u.push(t.route),Object(j.a)(Object(j.a)({},e),{},{routesList:n});case Lo:return Object(j.a)(Object(j.a)({},e),{},{routesList:[].concat(Zl)});case Do:var a=e.routesList.findIndex((function(e){return e.route===t.toRoute}))+1,c=e.routesList.slice(0,a);return Object(j.a)(Object(j.a)({},e),{},{routesList:c});case Bo:var i=t.currentRoute.split("/"),r=[],o=Zl[0].route;i.forEach((function(e){""!==e&&"object-browser"!==e&&(o="".concat(o,"/").concat(e),r.push({route:o,label:e,type:"path"}))}));var s=[].concat(Zl,r);return Object(j.a)(Object(j.a)({},e),{},{routesList:s});case Fo:var l=Object(Nt.a)(e.routesList),d=e.routesList[e.routesList.length-1].route,b=t.newRoute.split("/");return b.forEach((function(e){var t=e.trim();if(""!==t){var n={route:d="".concat(d,"/").concat(t),label:t,type:"path"};l.push(n)}})),u.push(d),Object(j.a)(Object(j.a)({},e),{},{routesList:l});case Ro:var m=e.routesList,p=m.slice(-1)[0];"path"===p.type&&(p.type="file");var h=[].concat(Object(Nt.a)(m.slice(0,-1)),[p]);return Object(j.a)(Object(j.a)({},e),{},{routesList:h});case Po:var O=Object(Nt.a)(e.downloadingFiles);return O.push(t.path),Object(j.a)(Object(j.a)({},e),{},{downloadingFiles:Object(Nt.a)(O)});case zo:var g=e.downloadingFiles.filter((function(e){return e!==t.path}));return Object(j.a)(Object(j.a)({},e),{},{downloadingFiles:Object(Nt.a)(g)});default:return e}},healthInfo:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Gl,t=arguments.length>1?arguments[1]:void 0;switch(t.type){case Tl:return Object(j.a)(Object(j.a)({},e),{},{message:t.message});case El:return Object(j.a)(Object(j.a)({},e),{},{message:{}});default:return e}},tenants:function(){var e,t,n,a,c=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ed,i=arguments.length>1?arguments[1]:void 0,r=Object(j.a)({},c);switch(i.type){case Tr:return r.createTenant.page=i.page,Object(j.a)({},r);case Er:return r.createTenant.advancedModeOn=i.state,Object(j.a)({},r);case _r:if(Xl()(r.createTenant.fields,"".concat(i.pageName,".").concat(i.field))){var o=Z()(r.createTenant.fields,"".concat(i.pageName),{}),s={};s[i.field]=i.value;var l=Object(j.a)(Object(j.a)({},o),s);return r.createTenant.fields[i.pageName]=Object(j.a)({},l),Object(j.a)({},r)}return c;case Ar:var d=c.createTenant.validPages;if(i.valid)d.includes(i.pageName)||(d.push(i.pageName),r.createTenant.validPages=Object(Nt.a)(d));else{var u=d.filter((function(e){return e!==i.pageName}));r.createTenant.validPages=Object(Nt.a)(u)}return Object(j.a)({},r);case Mr:var b=Object(j.a)(Object(j.a)({},c),{},{createTenant:Object(j.a)(Object(j.a)({},c.createTenant),{},{storageClasses:i.storageClasses})});return Object(j.a)({},b);case Lr:var m=[].concat(Object(Nt.a)(c.createTenant.certificates.minioCertificates),[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]);return r.createTenant.certificates.minioCertificates=Object(Nt.a)(m),Object(j.a)({},r);case Dr:var p=c.createTenant.certificates.minioCertificates,h=p.map((function(e){var t;return e.id===i.id?Object(j.a)(Object(j.a)({},e),{},(t={},Object(ge.a)(t,i.key,i.fileName),Object(ge.a)(t,"encoded_".concat(i.key),i.value),t)):e}));return r.createTenant.certificates.minioCertificates=Object(Nt.a)(h),Object(j.a)({},r);case Br:var O=c.createTenant.certificates.minioCertificates;if(O.length>1){var g=O.filter((function(e){return e.id!==i.id}));return r.createTenant.certificates.minioCertificates=Object(Nt.a)(g),Object(j.a)({},r)}return Object(j.a)({},c);case Fr:var f=[].concat(Object(Nt.a)(c.createTenant.certificates.caCertificates),[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}]);return r.createTenant.certificates.caCertificates=Object(Nt.a)(f),Object(j.a)({},r);case Rr:var x=c.createTenant.certificates.caCertificates,v=x.map((function(e){var t;return e.id===i.id?Object(j.a)(Object(j.a)({},e),{},(t={},Object(ge.a)(t,i.key,i.fileName),Object(ge.a)(t,"encoded_".concat(i.key),i.value),t)):e}));return r.createTenant.certificates.caCertificates=Object(Nt.a)(v),Object(j.a)({},r);case Pr:var y=c.createTenant.certificates.minioCertificates;if(y.length>1){var C=y.filter((function(e){return e.id!==i.id}));return r.createTenant.certificates.caCertificates=Object(Nt.a)(C),Object(j.a)({},r)}return Object(j.a)({},c);case zr:var S=c.createTenant.certificates.consoleCertificate;return r.createTenant.certificates.consoleCertificate=Object(j.a)(Object(j.a)({},S),{},(e={},Object(ge.a)(e,i.key,i.fileName),Object(ge.a)(e,"encoded_".concat(i.key),i.value),e)),Object(j.a)({},r);case Kr:var k=c.createTenant.certificates.serverCertificate;return r.createTenant.certificates.serverCertificate=Object(j.a)(Object(j.a)({},k),{},(t={},Object(ge.a)(t,i.key,i.fileName),Object(ge.a)(t,"encoded_".concat(i.key),i.value),t)),Object(j.a)({},r);case Ur:var w=c.createTenant.certificates.clientCertificate;return r.createTenant.certificates.clientCertificate=Object(j.a)(Object(j.a)({},w),{},(n={},Object(ge.a)(n,i.key,i.fileName),Object(ge.a)(n,"encoded_".concat(i.key),i.value),n)),Object(j.a)({},r);case Wr:var N=c.createTenant.certificates.vaultCertificate;return r.createTenant.certificates.vaultCertificate=Object(j.a)(Object(j.a)({},N),{},(a={},Object(ge.a)(a,i.key,i.fileName),Object(ge.a)(a,"encoded_".concat(i.key),i.value),a)),Object(j.a)({},r);case qr:var T=c.createTenant.certificates.vaultCA;return r.createTenant.certificates.vaultCA=Object(j.a)(Object(j.a)({},T),{},{cert:i.fileName,encoded_cert:i.value}),Object(j.a)({},r);case Vr:var E=c.createTenant.certificates.gemaltoCA;return r.createTenant.certificates.gemaltoCA=Object(j.a)(Object(j.a)({},E),{},{cert:i.fileName,encoded_cert:i.value}),Object(j.a)({},r);case Ir:return Object(j.a)(Object(j.a)({},c),{},{createTenant:{page:0,validPages:[],advancedModeOn:!1,storageClasses:[],limitSize:{},fields:{nameTenant:{tenantName:"",namespace:"",selectedStorageClass:""},configure:{customImage:!1,imageName:"",consoleImage:"",customDockerhub:!1,imageRegistry:"",imageRegistryUsername:"",imageRegistryPassword:"",exposeMinIO:!0,exposeConsole:!0},identityProvider:{idpSelection:"Built-in",openIDURL:"",openIDClientID:"",openIDSecretID:"",ADURL:"",ADSkipTLS:!1,ADServerInsecure:!1,ADUserNameFilter:"",ADGroupBaseDN:"",ADGroupSearchFilter:"",ADNameAttribute:""},security:{enableAutoCert:!0,enableCustomCerts:!1,enableTLS:!0},encryption:{enableEncryption:!1,encryptionType:"vault",gemaltoEndpoint:"",gemaltoToken:"",gemaltoDomain:"",gemaltoRetry:"0",awsEndpoint:"",awsRegion:"",awsKMSKey:"",awsAccessKey:"",awsSecretKey:"",awsToken:"",vaultEndpoint:"",vaultEngine:"",vaultNamespace:"",vaultPrefix:"",vaultAppRoleEngine:"",vaultId:"",vaultSecret:"",vaultRetry:"0",vaultPing:"0",gcpProjectID:"",gcpEndpoint:"",gcpClientEmail:"",gcpClientID:"",gcpPrivateKeyID:"",gcpPrivateKey:"",enableCustomCertsForKES:!1},tenantSize:{volumeSize:"100",sizeFactor:"Gi",drivesPerServer:"1",nodes:"4",memoryNode:"2",ecParity:"",ecParityChoices:[],cleanECChoices:[],maxAllocableMemo:0,memorySize:{error:"",limit:0,request:0},distribution:{error:"",nodes:0,persistentVolumes:0,disks:0,volumePerDisk:0},ecParityCalc:{error:0,defaultEC:"",erasureCodeSet:0,maxEC:"",rawCapacity:"0",storageFactors:[]},limitSize:{}}},certificates:{minioCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],caCertificates:[{id:Date.now().toString(),key:"",cert:"",encoded_key:"",encoded_cert:""}],consoleCertificate:{id:"console_cert_pair",key:"",cert:"",encoded_key:"",encoded_cert:""},serverCertificate:{id:"encryptionServerCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},clientCertificate:{id:"encryptionClientCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCertificate:{id:"encryptionVaultCertificate",key:"",cert:"",encoded_key:"",encoded_cert:""},vaultCA:{id:"encryptionVaultCA",key:"",cert:"",encoded_key:"",encoded_cert:""},gemaltoCA:{id:"encryptionGemaltoCA",key:"",cert:"",encoded_key:"",encoded_cert:""}}}});default:return c}}}),nd=window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||Kl.d;Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));var ad=n(650),cd=(n(561),n(562),n(563),n(564),n(345)),id=Object(cd.a)({palette:{primary:{light:"#073052",main:"#081C42",dark:"#05122B",contrastText:"#fff"},secondary:{light:"#ff7961",main:"#f44336",dark:"#ba000d",contrastText:"#000"},error:{light:"#e03a48",main:"#dc1f2e",contrastText:"#ffffff"},grey:{100:"#f0f0f0",200:"#e6e6e6",300:"#cccccc",400:"#999999",500:"#8c8c8c",600:"#737373",700:"#666666",800:"#4d4d4d",900:"#333333"},background:{default:"#F4F4F4"}},typography:{fontFamily:["Lato","sans-serif"].join(","),h1:{fontWeight:"bold",color:"#081C42"},h2:{fontWeight:"bold",color:"#081C42"},h3:{fontWeight:"bold",color:"#081C42"},h4:{fontWeight:"bold",color:"#081C42"},h5:{fontWeight:"bold",color:"#081C42"},h6:{fontWeight:"bold",color:"#000000"}},overrides:{MuiButton:{root:{borderRadius:3,color:"white",height:40,padding:"0 20px",fontSize:14,fontWeight:600,boxShadow:"none","& .MuiSvgIcon-root":{maxHeight:18},"&.MuiButton-contained.Mui-disabled":{backgroundColor:"#EAEDEE",fontWeight:600,color:"#767676"},"& .MuiButton-iconSizeMedium > *:first-child":{fontSize:12}}}}}),rd=Object(N.a)({"@global":{".MuiButton-contained":{fontSize:"14px",textTransform:"capitalize",padding:"16px 25px 16px 25px",borderRadius:3},".MuiButton-sizeSmall":{padding:"4px 10px",fontSize:"0.8125rem"},".MuiTableCell-head":{borderRadius:"3px 3px 0px 0px",fontSize:13},".MuiPaper-root":{borderRadius:3},".MuiDrawer-paperAnchorDockedLeft":{borderRight:0},".MuiDrawer-root":{"& .MuiPaper-root":{borderRadius:0}}}})((function(){return null}));o.a.render(Object(a.jsxs)(s.a,{store:Object(Kl.e)(td,nd(Object(Kl.a)(Ul.a))),children:[Object(a.jsx)(rd,{}),Object(a.jsx)(ad.a,{theme:id,children:Object(a.jsx)(zl,{})})]}),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()}))}},[[565,1,2]]]); +//# sourceMappingURL=main.e71727db.chunk.js.map \ No newline at end of file diff --git a/portal-ui/build/static/js/main.e71727db.chunk.js.map b/portal-ui/build/static/js/main.e71727db.chunk.js.map new file mode 100644 index 000000000..e39fb421e --- /dev/null +++ b/portal-ui/build/static/js/main.e71727db.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["history.ts","types.ts","actions.ts","screens/LoginPage/types.ts","common/utils.ts","common/api/index.ts","screens/LoginPage/LoginPage.tsx","screens/Console/Common/FormComponents/common/styleLibrary.ts","common/Copyright.tsx","screens/NotFoundPage.tsx","icons/CopyIcon.tsx","icons/CreateIcon.tsx","icons/DeleteIcon.tsx","icons/DashboardIcon.tsx","icons/BucketsIcon.tsx","icons/UsersIcon.tsx","icons/ServiceAccountsIcon.tsx","icons/GroupsIcon.tsx","icons/IAMPoliciesIcon.tsx","icons/TraceIcon.tsx","icons/ConfigurationsListIcon.tsx","icons/ClustersIcon.tsx","icons/MirroringIcon.tsx","icons/WarpIcon.tsx","icons/WatchIcon.tsx","screens/Console/Buckets/actions.ts","screens/Console/Common/TableWrapper/TableActionIcons/common.ts","screens/Console/Common/TableWrapper/TableActionIcons/ViewIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/PencilIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/ShareIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DeleteIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DescriptionIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/CloudIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/ConsoleIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DownloadIcon.tsx","screens/Console/Common/TableWrapper/TableActionButton.tsx","icons/HelpIcon.tsx","screens/Console/Common/FormComponents/CheckboxWrapper/CheckboxWrapper.tsx","screens/Console/Common/TableWrapper/TableWrapper.tsx","screens/Console/Common/ModalWrapper/ModalWrapper.tsx","screens/Console/Common/FormComponents/InputBoxWrapper/InputBoxWrapper.tsx","screens/Console/Common/FormComponents/SelectWrapper/SelectWrapper.tsx","screens/Console/Common/FormComponents/RadioGroupSelector/RadioGroupSelector.tsx","screens/Console/Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper.tsx","screens/Console/Buckets/ListBuckets/AddBucket.tsx","screens/Console/Buckets/ListBuckets/DeleteBucket.tsx","screens/Console/Common/PageHeader/PageHeader.tsx","screens/Console/Buckets/ListBuckets/ListBuckets.tsx","screens/Console/Buckets/ViewBucket/SetAccessPolicy.tsx","screens/Console/Buckets/ViewBucket/SetRetentionConfig.tsx","screens/Console/Buckets/ViewBucket/AddEvent.tsx","screens/Console/Buckets/ViewBucket/DeleteEvent.tsx","screens/Console/Buckets/ViewBucket/AddReplicationModal.tsx","screens/Console/Buckets/ViewBucket/EnableBucketEncryption.tsx","screens/Console/Buckets/ViewBucket/EnableVersioningModal.tsx","icons/UsageIcon.tsx","screens/Console/Buckets/ViewBucket/ViewBucket.tsx","screens/Console/Buckets/Buckets.tsx","screens/Console/Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper.tsx","screens/Console/Dashboard/Prometheus/types.ts","screens/Console/Policies/AddPolicy.tsx","screens/Console/Policies/DeletePolicy.tsx","screens/Console/Policies/Policies.tsx","screens/Console/Dashboard/Prometheus/utils.ts","screens/Console/Dashboard/Prometheus/Widgets/SingleValueWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/tooltips/LineChartTooltip.tsx","screens/Console/Dashboard/Prometheus/Widgets/LinearGraphWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/tooltips/BarChartTooltip.tsx","screens/Console/Dashboard/Prometheus/Widgets/BarChartWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/PieChartWidget.tsx","screens/Console/Dashboard/Prometheus/Widgets/SingleRepWidget.tsx","screens/Console/Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper.tsx","screens/Console/Dashboard/Prometheus/PrDashboard.tsx","icons/AllBucketsIcon.tsx","icons/EgressIcon.tsx","screens/Console/Dashboard/BasicDashboard/BasicDashboard.tsx","screens/Console/Dashboard/Dashboard.tsx","icons/minio_console_logo.svg","icons/minio_operator_logo.svg","screens/Console/Menu/utils.ts","icons/LicenseIcon.tsx","icons/LogoutIcon.tsx","icons/ConsoleIcon.tsx","icons/HealIcon.tsx","screens/Console/Menu/Menu.tsx","screens/Console/Account/AddServiceAccount.tsx","screens/Console/Account/DeleteServiceAccount.tsx","screens/Console/Common/CredentialsPrompt/CredentialsPrompt.tsx","utils/sortFunctions.ts","screens/Console/Account/ChangePasswordModal.tsx","screens/Console/Account/Account.tsx","screens/Console/Users/GroupsSelectors.tsx","screens/Console/Common/FormComponents/PredefinedList/PredefinedList.tsx","screens/Console/Users/AddUser.tsx","screens/Console/Users/DeleteUser.tsx","screens/Console/Users/AddToGroup.tsx","screens/Console/Policies/PolicySelectors.tsx","screens/Console/Policies/SetPolicy.tsx","screens/Console/Users/Users.tsx","screens/Console/Groups/UsersSelectors.tsx","screens/Console/Groups/AddGroup.tsx","screens/Console/Groups/DeleteGroup.tsx","screens/Console/Groups/Groups.tsx","screens/Console/Configurations/utils.ts","icons/AddIcon.tsx","screens/Console/Common/FormComponents/CSVMultiSelector/CSVMultiSelector.tsx","screens/Console/Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper.tsx","screens/Console/Configurations/ConfTargetGeneric.tsx","screens/Console/Configurations/CustomForms/EditConfiguration.tsx","screens/Console/Common/SlideOptions/SlideOptions.tsx","icons/BackSettingsIcon.tsx","screens/Console/Configurations/ConfigurationPanels/ConfigurationsList.tsx","screens/Console/Configurations/NotificationEndpoints/utils.ts","screens/Console/Configurations/CustomForms/ConfPostgres.tsx","screens/Console/Configurations/CustomForms/ConfMySql.tsx","screens/Console/Configurations/NotificationEndpoints/AddNotificationEndpoint.tsx","screens/Console/Configurations/NotificationEndpoints/NotificationTypeSelector.tsx","screens/Console/Configurations/NotificationEndpoints/ListNotificationEndpoints.tsx","screens/Console/Configurations/ConfigurationMain.tsx","screens/Console/Configurations/ConfigurationPanels/WebhookPanel.tsx","screens/Console/Tenants/ListTenants/DeleteTenant.tsx","screens/Console/Common/GenericWizard/WizardPage.tsx","screens/Console/Common/GenericWizard/GenericWizard.tsx","screens/Console/Tenants/TenantDetails/utils.ts","screens/Console/Tenants/types.ts","screens/Console/Tenants/actions.ts","utils/validationFunctions.ts","screens/Console/Tenants/utils.ts","screens/Console/Tenants/AddTenant/Steps/NameTenant.tsx","screens/Console/Tenants/ListTenants/utils.ts","screens/Console/Tenants/AddTenant/Steps/Configure.tsx","screens/Console/Tenants/AddTenant/Steps/IdentityProvider.tsx","screens/shared/ErrorBlock.tsx","screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Tenants/AddTenant/Steps/Security.tsx","screens/Console/Tenants/AddTenant/Steps/Encryption.tsx","screens/Console/Tenants/AddTenant/Steps/TenantSize.tsx","screens/Console/Tenants/AddTenant/Steps/Preview.tsx","screens/Console/Tenants/AddTenant/AddTenant.tsx","screens/Console/Tenants/ListTenants/ListTenants.tsx","screens/Console/Tenants/TenantsMain.tsx","screens/Console/Tenants/TenantDetails/AddPoolModal.tsx","screens/Console/Tenants/TenantDetails/ReplicationSetup.tsx","screens/Console/Common/UsageBarWrapper/UsageBarWrapper.tsx","screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx","screens/Console/Tenants/TenantDetails/TenantDetails.tsx","screens/Console/ObjectBrowser/actions.ts","screens/Console/ObjectBrowser/BrowserBreadcrumbs.tsx","screens/Console/ObjectBrowser/BrowseBuckets.tsx","screens/Console/ObjectBrowser/ObjectBrowser.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/DeleteObject.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/CreateFolderModal.tsx","icons/UploadFile.tsx","screens/Console/Buckets/ListBuckets/Objects/utils.ts","screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx","screens/Console/Common/FormComponents/DateSelector/utils.ts","screens/Console/Common/FormComponents/DateSelector/DateSelector.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.tsx","icons/ShareIcon.tsx","icons/DownloadIcon.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/SetRetention.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/AddTagModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/DeleteTagModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/SetLegalHoldModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ObjectDetails.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/ObjectRouting.tsx","screens/Console/License/utils.ts","screens/Console/License/ActivationModal.tsx","screens/Console/License/License.tsx","screens/Console/Trace/actions.ts","utils/wsUtils.ts","screens/Console/Trace/Trace.tsx","screens/Console/Logs/actions.ts","screens/Console/Logs/ErrorLogs/ErrorLogs.tsx","screens/Console/Common/FormComponents/FilterInputWrapper/FilterInputWrapper.tsx","screens/Console/Logs/LogSearch/LogsSearchMain.tsx","screens/Console/Logs/LogsMain.tsx","screens/Console/Heal/Heal.tsx","screens/Console/Watch/actions.ts","screens/Console/Watch/Watch.tsx","screens/Console/HealthInfo/actions.ts","screens/Console/HealthInfo/types.ts","screens/Console/HealthInfo/HealthInfo.tsx","screens/Console/Console.tsx","screens/LoginPage/LoginCallback.tsx","screens/Console/actions.ts","ProtectedRoutes.tsx","Routes.tsx","reducer.ts","screens/Console/Trace/reducers.ts","screens/Console/Logs/reducers.ts","screens/Console/HealthInfo/reducers.ts","screens/Console/Watch/reducers.ts","screens/Console/reducer.ts","screens/Console/Buckets/reducers.ts","screens/Console/ObjectBrowser/reducers.ts","screens/Console/Tenants/reducer.ts","store.ts","serviceWorker.ts","theme/main.ts","index.tsx"],"names":["createBrowserHistory","USER_LOGGED","OPERATOR_MODE","MENU_OPEN","SERVER_NEEDS_RESTART","SERVER_IS_LOADING","SET_LOADING_PROGRESS","SET_SNACK_BAR_MESSAGE","SET_SERVER_DIAG_STAT","SET_ERROR_SNACK_MESSAGE","SET_SNACK_MODAL_MESSAGE","SET_MODAL_ERROR_MESSAGE","userLoggedIn","loggedIn","type","logged","setMenuOpen","open","serverNeedsRestart","needsRestart","loginStrategyType","setSnackBarMessage","message","setErrorSnackMessage","setModalSnackMessage","setModalErrorSnackMessage","minStReq","minMemReq","units","k8sUnits","k8sCalcUnits","niceBytes","x","showK8sUnits","l","n","parseInt","k8sUnitsN","toFixed","clearSession","name","storage","removeItem","document","cookie","timeFromDate","d","h","getHours","m","getMinutes","s","getSeconds","getMilliseconds","getBytes","value","unit","fromk8s","vl","parseFloat","unitsTake","powFactor","findIndex","element","factor","Math","pow","total","toString","calculateStorage","requestedBytes","forcedNodes","limitSize","drivesPerServer","intReqBytes","structureCalc","nodes","desiredCapacity","maxDiskSize","maxClusterSize","disksPerNode","isNaN","error","persistentVolumes","disks","volumePerDisk","persistentVolumeSize","numberPersistentVolumes","volumesPerServer","floor","min","max","ceil","pvSize","generatePoolName","pools","poolCounter","length","getTimeFromTimestamp","timestamp","fullDate","dateObject","Date","getFullYear","String","getMonth","padStart","getDay","nsToSeconds","nanoseconds","conversion","round","Number","EPSILON","textToRGBColor","text","hashColored","split","reduce","acc","currItem","charCodeAt","toUpperCase","api","method","url","data","request","send","then","res","body","catch","err","status","window","location","href","onError","errMessage","get","response","throwMessage","charAt","slice","Promise","reject","inputStyles","makeStyles","theme","createStyles","disabled","borderColor","borderBottomStyle","LoginField","props","classes","TextField","InputProps","connector","connect","state","withStyles","backgroundColor","paper","borderRadius","display","flexDirection","alignItems","width","height","margin","position","top","left","marginLeft","marginTop","avatar","spacing","palette","secondary","main","form","submit","boxShadow","padding","errorBlock","justifyContent","color","fontWeight","fontSize","boxSizing","mainContainer","theOcean","borderTopLeftRadius","borderBottomLeftRadius","background","oceanBg","backgroundImage","backgroundRepeat","backgroundPosition","theLogin","loadingLoginStrategy","textAlign","headerTitle","marginBottom","submitContainer","disclaimer","jwtInput","linearPredef","errorIconStyle","marginRight","useState","accessKey","setAccessKey","jwt","setJwt","secretKey","setSecretKey","setError","loginStrategy","unknown","redirect","setLoginStrategy","loginSending","setLoginSending","loginStrategyEndpoints","loginStrategyPayload","formSubmit","e","preventDefault","post","bodyResponse","localStorage","setItem","btoa","history","push","useEffect","invoke","loginDetails","loginComponent","Fragment","Typography","component","variant","className","noValidate","onSubmit","Grid","container","item","xs","fullWidth","id","onChange","target","label","autoComplete","Button","LinearProgress","replace","hostname","serviceAccount","required","CircularProgress","Paper","fieldBasic","inputLabel","overflow","fieldLabelError","paddingBottom","fieldContainer","maxWidth","tooltipContainer","modalBasic","formScrollable","maxHeight","overflowY","formSlider","clearButton","fontFamily","border","outline","cursor","floatingEnabled","right","zIndex","configureString","tooltipHelper","tooltip","checkBoxBasic","checkboxIcons","unCheckedIcon","checkedIcon","radioBasic","radioIcons","radioUnselectedIcon","radioSelectedIcon","actionsTray","alignSelf","whiteSpace","timeContainers","flexGrow","searchField","opacity","predefinedList","prefinedContainer","predefinedTitle","minHeight","innerContent","overflowX","scrollbarWidth","innerContentMultiline","objectBrowserCommon","obTitleSection","sectionTitle","lineHeight","breadcrumbs","textDecoration","selectorsCommon","multiSelectTable","settingsCommon","customTitle","borderBottom","settingsFormContainer","settingsButtonContainer","borderTop","settingsOptionsContainer","backButton","backContainer","logsCommon","logsSubContainer","widgetCommon","singleValueContainer","titleContainer","contentContainer","contentContainerWithLabel","legendBlock","bottom","flexWrap","singleLegendContainer","colorContainer","minWidth","legendLabel","textOverflow","tooltipCommon","customTooltip","labelContainer","labelColor","itemValue","valueContainer","timeStampTitle","snackBarCommon","snackBar","errorSnackBar","snackBarExternal","snackDiv","snackBarModal","wizardCommon","multiContainer","sizeFactorContainer","headerElement","paddingTop","tableTitle","poolError","paddingLeft","h3Section","descriptionText","Copyright","align","Link","useStyles","common","white","NotFound","Container","CssBaseline","Box","mt","CopyIcon","SvgIcon","xmlns","viewBox","data-name","CreateIcon","transform","fill","DeleteIcon","DashboardIcon","BucketsIcon","UsersIcon","cx","cy","rx","ry","ServiceAccountsIcon","GroupsIcon","r","TraceIcon","ConfigurationsListIcon","ClustersIcon","y","MirroringIcon","WarpIcon","WatchIcon","ADD_BUCKET_OPEN","ADD_BUCKET_NAME","ADD_BUCKET_VERSIONED","ADD_BUCKET_LOCKING","ADD_BUCKET_QUOTA","ADD_BUCKET_QUOTA_TYPE","ADD_BUCKET_QUOTA_SIZE","ADD_BUCKET_QUOTA_UNIT","ADD_BUCKET_RESET","ADD_BUCKET_RETENTION","ADD_BUCKET_RETENTION_MODE","ADD_BUCKET_RETENTION_UNIT","ADD_BUCKET_RETENTION_VALIDITY","unSelected","selected","ViewIcon","active","PencilIcon","ShareIcon","DescriptionIcon","CloudIcon","ConsoleIcon","defineIcon","onClick","valueToSend","idField","to","sendOnlyId","valueClick","buttonElement","IconButton","aria-label","size","stopPropagation","isString","HelpIcon","flexBasis","checked","Checkbox","inputProps","icon","InputLabel","htmlFor","Tooltip","title","placement","rowText","borderWidth","transitionDuration","paddingRight","generateColumnsMap","columns","containerWidth","actionsWidth","hasSelect","hasActions","selectedItems","columnsSelector","columnsShown","sortColumn","sortDirection","commonRestWidth","colsItems","filter","column","includes","elementKey","initialValue","currValue","el","calculateColumnRest","map","index","disableSort","enableSort","dataKey","headerClassName","headerTextAlign","headerRenderer","contentTextAlign","cellRenderer","rowData","isSelected","itemElement","renderConst","renderFullObject","renderElement","renderFunction","subRenderFunction","defaultSortDirection","dialogContainer","noBackground","defaultPaperHeight","allTableSettings","minTableHeader","rowUnselected","rowSelected","paginatorContainer","checkBoxHeader","actionsContainer","paginatorComponent","checkBoxRow","loadingBox","overlayColumnSelection","popoverContainer","popoverContent","shownColumnsLabel","userSelect","fontStyle","textTransform","itemActions","onSelect","records","isLoading","loadingMessage","entityName","radioSelection","customEmptyMessage","customPaperHeight","textSelectable","onColumnChange","infiniteScrollConfig","sortConfig","autoScrollToBottom","columnSelectorOpen","setColumnSelectorOpen","React","anchorEl","setAnchorEl","findView","find","openColumnsSelector","event","currentTarget","closeColumnSelector","style","aria-describedby","Popover","anchorOrigin","vertical","horizontal","transformOrigin","onClose","columnsSelection","isRowLoaded","loadMoreRows","loadMoreRecords","rowCount","recordsCount","onRowsRendered","registerChild","optionsWidth","totalOptions","sizeOptions","calculateOptionsSize","hasOptions","ref","disableHeader","headerHeight","noRowsRenderer","overscanRowCount","rowHeight","rowGetter","onRowClick","rowItem","clickAction","rowClassName","sort","triggerSort","undefined","sortBy","currentSort","currentDirection","scrollToIndex","actions","action","vlSend","hideButtonFunction","showLoaderFunction","elementActions","baseCloseLine","content","borderLeft","modalSnackMessage","system","modalSnackBar","closeContainer","closeButton","modalCloseIcon","closeIcon","titleClass","modalContent","customDialogSize","modalOpen","children","wideLimit","openSnackbar","setOpenSnackbar","customSize","Dialog","aria-labelledby","Snackbar","ContentProps","autoHideDuration","disableRipple","DialogTitle","DialogContent","root","input","InputField","textBoxContainer","textBoxWithIcon","errorState","overlayAction","multiline","placeholder","overlayIcon","errorInField","helperText","inputRebase","disableFocusRipple","disableTouchRipple","SelectStyled","InputBase","options","FormControl","Select","option","MenuItem","radioStyles","RadioButton","Radio","radioBoxContainer","optionLabel","checkedOption","selectorOptions","currentSelection","disableOptions","displayInColumn","RadioGroup","row","selectorOption","FormControlLabel","control","clsx","StyledSwitch","switchBase","track","thumb","Switch","seeMore","addSideBar","tableToolbar","wrapCell","wordWrap","noFound","tableContainer","stickyHeader","actionsTitle","tableBlock","filterField","divContainer","wrapperContainer","indicatorLabel","switchContainer","fieldDescription","switchOnly","description","indicatorLabels","containerClass","switchComponent","addBucketModalOpen","buckets","bucketName","addBucketName","versioningEnabled","addBucketVersioningEnabled","lockingEnabled","addBucketLockingEnabled","quotaEnabled","addBucketQuotaEnabled","quotaType","addBucketQuotaType","quotaSize","addBucketQuotaSize","quotaUnit","addBucketQuotaUnit","retentionEnabled","addBucketRetentionEnabled","retentionMode","addBucketRetentionMode","retentionUnit","addBucketRetentionUnit","retentionValidity","addBucketRetentionValidity","addBucketVersioned","versioned","enableObjectLocking","locking","addBucketQuota","quota","addBucketRetention","retention","mode","validity","setModalError","buttonContainer","quotaSizeContainer","closeModalAndRefresh","addLoading","setAddLoading","sendEnabled","setSendEnabled","lockingFieldDisabled","setLockingFieldDisabled","useDebounce","resetForm","valid","trim","versioning","amount","enabled","quota_type","addRecord","valueAsNumber","mapDispatchToProps","closeDeleteModalAndRefresh","deleteOpen","selectedBucket","deleteLoading","setDeleteLoading","DialogContentText","DialogActions","autoFocus","headerContainer","labelStyle","addBucketOpen","addBucketReset","setRecords","loading","setLoading","setDeleteOpen","setSelectedBucket","filterBuckets","setFilterBuckets","loadingPerms","setLoadingPerms","canCreateBucket","setCanCreateBucket","permissions","canCreate","can","tableActions","bucket","filteredRecords","b","indexOf","refresh","val","disableUnderline","startAdornment","InputAdornment","startIcon","date","actualPolicy","accessPolicy","setAccessPolicy","access","setRetentionMode","setRetentionUnit","setRetentionValidity","setValid","prefix","setPrefix","suffix","setSuffix","arn","setArn","selectedEvents","setSelectedEvents","arnList","setArnList","fetchArnList","useCallback","arns","handleClick","selectedIndex","newSelected","concat","arnValues","arnConstant","configuration","events","ignoreExisting","Table","TableHead","TableRow","TableCell","TableBody","bucketEvent","removeRecord","targetURL","setTargetURL","targetBucket","setTargetBucket","region","setRegion","remoteBucketInfo","sourceBucket","remoteBucket","itemRemote","remoteARN","replicationInfo","destination_bucket","kmsKeyID","setKmsKeyID","encryptionType","setEncryptionType","encType","closeVersioningModalAndRefresh","versioningCurrentState","versioningLoading","setVersioningLoading","UsageIcon","y1","x2","y2","gradientUnits","offset","stopColor","stroke","strokeMiterlimit","strokeWidth","TabPanel","other","role","hidden","a11yProps","noRecords","gridWrapper","gridContainer","gridTemplateColumns","gridGap","masterActions","paperContainer","capitalizeFirst","doubleElement","encCheckbox","tabPan","fixedHeight","elementTitle","consumptionValue","match","info","setInfo","replicationRules","setReplicationRules","loadingBucket","setLoadingBucket","loadingEvents","setLoadingEvents","loadingVersioning","setLoadingVersioning","loadingObjectLocking","setLoadingLocking","loadingReplication","setLoadingReplication","loadingSize","setLoadingSize","loadingEncryption","setLoadingEncryption","accessPolicyScreenOpen","setAccessPolicyScreenOpen","curTab","setCurTab","addScreenOpen","setAddScreenOpen","enableEncryptionScreenOpen","setEnableEncryptionScreenOpen","selectedEvent","setSelectedEvent","bucketSize","setBucketSize","openSetReplication","setOpenSetReplication","isVersioned","setIsVersioned","hasObjectLocking","setHasObjectLocking","encryptionEnabled","setEncryptionEnabled","retentionConfigOpen","setRetentionConfigOpen","enableVersioningOpen","setEnableVersioningOpen","canPutReplication","setCanPutReplication","canGetReplication","setCanGetReplication","bucket_name","params","is_versioned","object_locking_enabled","rules","bucketInfo","algorithm","console","loadAllBucketData","setOpenReplicationOpen","evnt","direction","toLowerCase","propertiesIcon","handleEncryptionCheckbox","Tabs","newValue","indicatorColor","textColor","Tab","join","sidebarOpen","withRouter","path","ViewBucket","ListBuckets","NotFoundPage","require","widgetType","onBeforeChange","readOnly","lineNumbers","jsonPolicyEditor","policyEdit","policyName","setPolicyName","policyDefinition","setPolicyDefinition","JSON","stringify","parse","policy","validSave","editor","selectedPolicy","setSelectedPolicy","filterPolicies","setFilterPolicies","setPolicyEdit","fetchRecords","policies","pa","pb","elementItem","dLocalStorageV","defaultWidgetsLayout","w","minW","i","moved","static","colorsMain","panelsConfiguration","singleValue","layoutIdentifier","labelDisplayFunction","secondsValue","seconds","days","hours","minutes","years","months","diffDays","weeks","dataOuter","widgetConfiguration","outerChart","colorList","innerRadius","outerRadius","startAngle","endAngle","innerChart","pieChart","innerLabel","keyLabel","lineColor","fillColor","linearGraph","yAxisFormatter","xAxisFormatter","customStructure","originTag","displayTag","barChart","singleRep","disableYAxis","calculateMainValue","elements","metricCalc","sumValues","accumulator","sortResult","value1","value2","getWidgetsWithValue","payload","panelItem","payloadData","panelT","typeOfPayload","valueDisplay","chartSeries","valuesArray","values","totalValues","elementValue","metricKeyItem","Object","keys","metric","metricName","targets","series","plotValues","forEach","targetMaster","results","legendFormat","itemVals","labelName","metrics","keysToReplace","expToReplace","RegExp","matchItem","nwMatchItem","constructLabelNames","keyName","valInfo","itemIndex","itemToPush","seriesWithColors","series1","series2","serialC","sortedVals","chartBars","sortFunction","structureItem","metricTake","lastValue","a","valuesForBackground","eachVal","saveDashboardDistribution","linearConfiguration","pl","containerElements","chartCont","legendChart","flex","hideYAxis","panelWidth","intervalCount","ResponsiveContainer","AreaChart","CartesianGrid","strokeDasharray","strokeOpacity","XAxis","tickFormatter","interval","tick","tickCount","YAxis","domain","dataMax","hide","section","Area","fillOpacity","wrapperStyle","barChartConfiguration","CustomizedAxisTick","textAnchor","dy","BarChart","layout","barCategoryGap","tickLine","axisLine","bar","Bar","pieChartConfiguration","dataInner","middleLabel","innerColors","outerColors","PieChart","Pie","entry","Cell","dominantBaseline","dateSelectorOverride","parentDateOverride","utils","MomentUtils","DateTimePicker","ampm","format","displayErrorMessage","widgetsContainer","timeStart","setTimeStart","timeEnd","setTimeEnd","panelInformation","setPanelInformation","dashboardDistr","storedConfiguration","getItem","parsedConfig","atob","getDashboardDistribution","panels","singlePanelWidth","xSpacing","componentToUse","fetchUsage","stepCalc","periods","unix","widgets","widgetsWithValue","hpanel","totalWidth","cols","containerPadding","onLayoutChange","AllBucketsIcon","EgressIcon","notationContainer","dashboardBG","backgroundSize","dashboardContainer","smallUnit","usage","fixedHeightPaper","prettyNumber","niceBytesUsage","prettyUsage","objects","basicResult","setBasicResult","menuGroups","group","collapsible","LicenseIcon","LogoutIcon","HealIcon","operatorMode","logo","menuList","extraMargin","groupTitle","subTitleMenu","selectorArrow","borderStyle","selectorArrowOpen","pages","menuItem","menuStateBuilder","menuOpen","menuItems","NavLink","IAMPoliciesIcon","allowedPages","result","hasOwnProperty","allowedItems","forceDisplay","src","operator_logo","alt","List","groupMember","filterByGroup","ListItem","menuClicked","newMenu","setMenuCollapse","Collapse","in","timeout","unmountOnExit","page","button","ListItemIcon","ListItemText","primary","Divider","deleteSession","log","infoDetails","addSending","setAddSending","addServiceAccount","wrapText","selectedServiceAccount","warningBlock","newServiceAccount","closeModal","entity","consoleCreds","consoleExtras","access_key","secret_key","filename","createElement","setAttribute","encodeURIComponent","appendChild","click","removeChild","download","usersSort","policySort","stringSort","currentPassword","setCurrentPassword","newPassword","setNewPassword","reNewPassword","setReNewPassword","current_secret_key","new_secret_key","changePassword","imageIcon","iconRoot","setFilter","setSelectedServiceAccount","showNewCredentials","setShowNewCredentials","setNewServiceAccount","changePasswordModalOpen","setChangePasswordModalOpen","serviceAccounts","nsa","closeAddModalAndRefresh","ChangePasswordModal","selectedGroups","setSelectedGroups","fetchGroups","groups","selGroups","targetD","multiLine","strongText","selectedUser","setEnabled","currentGroups","setCurrentGroups","getUserInformation","memberOf","checkedUsers","saving","isSaving","accepted","setAccepted","users","fetchPolicies","selectedGroup","setActualPolicy","groupPolicy","userPolicy","userName","entityType","setSelectedUser","addGroupOpen","setAddGroupOpen","setCheckedUsers","policyOpen","setPolicyOpen","selectionElement","topValue","close","unCheckAll","closeAddGroupBulk","selectedUsers","setSelectedUsers","editMode","fetchUsers","selUsers","groupName","setGroupName","groupEnabled","setGroupEnabled","loadingGroup","isLoadingGroup","validGroup","setValidGroup","members","isDeleting","closeNoAction","setGroupOpen","setSelectedGroup","resGroups","notifyPostgres","notifyMysql","notifyKafka","notifyAmqp","notifyMqtt","notifyRedis","notifyNats","notifyElasticsearch","notifyWebhooks","notifyNsq","configurationElements","configuration_id","configuration_label","fieldsConfigurations","cache","compression","withBorder","etcd","identity_openid","identity_ldap","logger_webhook","audit_webhook","commonFields","notificationEndpointsFields","removeEmptyFields","formFields","field","AddIcon","inputWithBorder","commonPlaceholder","currentElements","setCurrentElements","bottomList","createRef","elementsSplit","refScroll","current","scrollIntoView","firstUpdate","useRef","useLayoutEffect","debouncedOnChange","onChangeElement","persist","updatedElement","debounce","elementsString","inputs","elementsUp","cpList","addEmptyLine","cssOutlinedInput","rootContainer","InputLabelProps","shrink","notchedOutline","valueDef","key","defaults","defValue","storedConfig","fields","defaultVals","valueHolder","setValueHolder","fieldsElements","defValList","stateInsert","setValueElement","valuesDup","fieldDefinition","logoButton","selectedConfiguration","valuesObj","setValueObj","setSaving","loadingConfig","setLoadingConfig","configValues","setConfigValues","configId","keyVals","key_values","onValueChange","masterContainer","sliderContainer","slide","float","slideOptions","currentSlide","currentSliderPosition","containerSize","block","BackSettingsIcon","strokeLinecap","initialConfiguration","iconText","customConfigurationPage","setSelectedConfiguration","currentConfiguration","setCurrentConfiguration","servicesList","actionTrigger","targetTitle","useConnectionString","setUseConnectionString","connectionString","setConnectionString","host","setHostname","dbName","setDbName","port","setPort","user","setUser","password","setPassword","sslMode","setSslMode","table","setTable","setFormat","queueDir","setQueueDir","queueLimit","setQueueLimit","comment","setComment","configToString","strValue","cs","kv","valueIndexes","n1","n2","kvFields","Map","Array","j","substr","set","parseConnectionString","useDsnString","setUseDsnString","dsnString","setDsnString","configToDsnString","regex","exec","lastIndex","parseDsnString","lambdaFormIndicator","service","saveAndRefresh","valuesArr","setValueArr","srvComponent","targetElement","nonLogos","elService","withLogos","lambdaNotif","iconContainer","nonIconContainer","pickTitle","centerElements","setService","lambdaContainer","setIsLoading","currentPanel","setCurrentPanel","resNotEndList","notification_endpoints","service_name","account_id","backClick","red","serviceName","headerLabel","selectedTab","setSelectedTab","_","logger","modalTitle","apiURL","audit","addWebhookOpen","setAddWebhookOpen","panelToDisplay","panelData","toLocaleLowerCase","selectedTenant","retypeTenant","setRetypeTenant","namespace","wizardStepContainer","wizardComponent","buttonsContainer","pageChange","componentRender","buttons","btn","toPage","buttonAction","wizardMain","wizFromContainer","wizardSteps","borderRight","listStyle","buttonList","paddedContentGrid","stepsLabel","currentStep","setCurrentStep","toElement","lastPage","nextPage","prevPage","pg","sm","md","lg","xl","step","getHardcodedAffinity","tenantName","poolName","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","labelSelector","matchExpressions","operator","topologyKey","ADD_TENANT_SET_CURRENT_PAGE","ADD_TENANT_SET_ADVANCED_MODE","ADD_TENANT_UPDATE_FIELD","ADD_TENANT_SET_PAGE_VALID","ADD_TENANT_RESET_FORM","ADD_TENANT_SET_STORAGE_CLASSES_LIST","ADD_TENANT_ADD_MINIO_KEYPAIR","ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR","ADD_TENANT_DELETE_MINIO_KEYPAIR","ADD_TENANT_ADD_CA_KEYPAIR","ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR","ADD_TENANT_DELETE_CA_KEYPAIR","ADD_TENANT_ADD_CONSOLE_CERT","ADD_TENANT_ENCRYPTION_SERVER_CERT","ADD_TENANT_ENCRYPTION_CLIENT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CERT","ADD_TENANT_ENCRYPTION_VAULT_CA","ADD_TENANT_ENCRYPTION_GEMALTO_CA","updateAddField","pageName","fieldName","isPageValid","addConsoleCertificate","fileName","commonFormValidation","fieldsValidate","returnErrors","fieldKey","customValidation","customValidationMessage","pattern","customPatternMessage","rgx","clearValidationError","validationErrors","newValidationElement","advancedMode","tenants","createTenant","advancedModeOn","nameTenant","selectedStorageClass","storageClasses","setAdvancedMode","setStorageClassesList","setLimitSize","setValidationErrors","updateField","getNamespaceInformation","resourceQuotas","quotas","returnQuotas","rsQuota","stCName","hard","used","getLimitSizes","newStorage","storageClass","debounceNamespace","useMemo","cancel","commonValidation","isValid","frmValidationCleanup","customImage","configure","imageName","consoleImage","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","exposeMinIO","exposeConsole","customAccountValidation","commonVal","cleanValidation","idpSelection","identityProvider","openIDURL","openIDClientID","openIDSecretID","ADURL","ADSkipTLS","ADServerInsecure","ADUserNameFilter","ADGroupBaseDN","ADGroupSearchFilter","ADNameAttribute","customIDPValidation","gutterBottom","errorMessage","withBreak","errorText","valueString","fileReselect","fieldBottom","fileInputField","accept","showFileSelector","setShowSelector","evt","callback","file","files","reader","FileReader","readAsDataURL","onload","fileBase64","fileArray","fileProcess","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","caCertificates","consoleCertificate","addFileToCaCertificates","deleteCaCertificate","addCaCertificate","addKeyPair","addFileToKeyPair","deleteKeyPair","keyPair","encodedValue","cert","enableEncryption","encryption","gemaltoEndpoint","gemaltoToken","gemaltoDomain","gemaltoRetry","awsEndpoint","awsRegion","awsKMSKey","awsAccessKey","awsSecretKey","awsToken","vaultEndpoint","vaultEngine","vaultNamespace","vaultPrefix","vaultAppRoleEngine","vaultId","vaultSecret","vaultRetry","vaultPing","gcpProjectID","gcpEndpoint","gcpClientEmail","gcpClientID","gcpPrivateKeyID","gcpPrivateKey","enableCustomCertsForKES","serverCertificate","clientCertificate","vaultCertificate","vaultCA","gemaltoCA","addFileServerCert","addFileClientCert","addFileVaultCert","addFileVaultCa","addFileGemaltoCa","encryptionAvailable","encoded_key","encoded_cert","encryptionValidation","volumeSize","tenantSize","sizeFactor","memoryNode","ecParity","ecParityChoices","cleanECChoices","maxAllocableMemo","memorySize","distribution","ecParityCalc","usableInformation","storageFactors","erasureCode","validateMemorySize","memSize","maxMemSize","clusterSizeFactor","memoSize","capacitySize","maxMemorySize","requestedSizeBytes","memReqSize","limit","capSize","memLimitSize","setMemoryResource","ecCodeValidated","parityValidValues","totalDisks","totalNodes","defaultEC","erasureCodeSet","maxEC","rawCapacity","totalStorage","erasureStripeSet","currentParity","parityNumber","storageFactor","maxCapacity","maxTolerations","maxFailureTolerations","fourVar","erasureCodeCalc","validateClusterSize","getECValue","maxMemory","max_memory","getMaxAllocableMemory","distrCalculate","capacityToUse","calculateDistribution","ecList","ecListTransform","parsedSize","scope","validPages","closeAndRefresh","createdAccount","setCreatedAccount","hardCodedAffinity","dataSend","enable_tls","enable_console","enable_prometheus","image","console_image","expose_minio","expose_console","servers","volumes_per_server","volume_configuration","storage_class_name","resources","requests","memory","limits","affinity","erasureCodingParity","image_registry","registry","username","tenantCerts","consoleCerts","caCerts","ca_certificates","minio","crt","tls","insertEncrypt","gemaltoCAIntroduce","ca","gemalto","keysecure","endpoint","credentials","token","retry","aws","secretsmanager","kmskey","accesskey","secretkey","gcp","secretmanager","project_id","client_email","client_id","private_key_id","private_key","vaultKeyPair","vaultCAInsert","vaultTLS","vault","engine","approle","secret","ping","encryptionServerKeyPair","encryptionClientKeyPair","client","server","dataIDP","oidc","secret_id","active_directory","skip_tls_verification","server_insecure","username_format","user_search_filter","group_search_base_dn","group_search_filter","group_name_attribute","idp","newSrvAcc","cancelButton","advancedOnly","filteredWizardSteps","resetAddTenantForm","tenantsContainer","setSelectedTenant","filterTenants","setFilterTenants","tenant","resTenants","capacity","total_size","reloadData","bottomContainer","factorElements","sizeNumber","sizeDescription","onClosePoolAndReload","numberOfNodes","setNumberOfNodes","setVolumeSize","setVolumesPerSever","instanceCapacity","totalCapacity","storage_class","labels","setSourceBucket","clusterSelected","setClusterSelected","destinationBucket","setDestinationBucket","address","setAddress","setBucket","BorderLinearProgress","colorPrimary","allValue","currentUsage","centerItem","maxValue","porcentualValue","idTenant","isSending","setIsSending","minioImage","setMinioImage","setConsoleImage","setImageRegistry","imageRegistryEndpoint","setImageRegistryEndpoint","setImageRegistryUsername","setImageRegistryPassword","validMinioImage","setValidMinioImage","validConsoleImage","setValidConsoleImage","validateImage","fieldToCheck","test","containerHeader","infoGrid","updateButton","noUnderLine","poolLabel","licenseContainer","licenseInfo","licenseInfoTitle","licenseInfoValue","verifiedIcon","setCapacity","poolCount","setPoolCount","setPools","instances","setInstances","volumes","setVolumes","addPoolOpen","setAddPool","setAddBucketOpen","addReplicationOpen","setAddReplicationOpen","setTenant","loadingUsage","setLoadingUsage","usageError","setUsageError","setUsage","updateMinioVersion","setUpdateMinioVersion","setLicenseInfo","loadingLicenseInfo","setLoadingLicenseInfo","loadingActivateProduct","setLoadingActivateProduct","tenantNamespace","loadInfo","resPools","totalInstances","totalVolumes","poolNamedIndex","pool","cap","loadUsage","reload","endpoints","rel","subnet_license","organization","storage_capacity","expires_at","plan","email","licenseButton","activateProduct","OBJECT_BROWSER_ADD_ROUTE","OBJECT_BROWSER_RESET_ROUTES_LIST","OBJECT_BROWSER_REMOVE_ROUTE_LEVEL","OBJECT_BROWSER_SET_ALL_ROUTES","OBJECT_BROWSER_CREATE_FOLDER","OBJECT_BROWSER_SET_LAST_AS_FILE","OBJECT_BROWSER_DOWNLOAD_FILE_LOADER","OBJECT_BROWSER_DOWNLOADED_FILE","addRoute","route","routeType","removeRouteLevel","toRoute","setAllRoutes","currentRoute","fileIsBeingPrepared","fileDownloadStarted","objectBrowser","objectsList","listBreadcrumbs","objectItem","resetRoutesList","reset","usedSpaceCol","subTitleLabel","iconBucket","browsePaper","pop","idElement","currentPath","newPath","globalClass","rowClass","watchList","inputField","lastElementWPadding","pathIn","selectedObject","recursive","endsWith","createFolder","newRoute","pathLabel","folderName","pathUrl","setPathUrl","folderTruncated","UploadFile","objectPath","versionID","callBack","includeVersionInCallback","anchor","xhr","XMLHttpRequest","allPathData","objectName","isNullOrUndefined","responseType","this","blob","Blob","blobUrl","URL","createObjectURL","revokeObjectURL","remove","commonIcon","defLoading","setLastAsFile","setLoadingProgress","progress","loadingProgress","routesList","downloadingFiles","fileNameText","iconFolder","iconFile","createFolderOpen","setCreateFolderOpen","setSelectedObject","filterObjects","setFilterObjects","setLoadingPromise","loadingStartTime","setLoadingStartTime","setLoadingMessage","delay","savedCallback","setInterval","clearInterval","useInterval","timeDelta","now","updateMessage","internalPaths","extraPath","currentTimestamp","p","folders","record","recordsInElement","verifyIfIsFile","removeDownloadAnimation","uploadObject","splitPaths","uploadUrl","areMultipleFiles","okMessage","withCredentials","upload","addEventListener","loaded","onerror","onloadend","formData","FormData","blobFile","append","idElementClean","pathInArray","object","version_id","Input","multiple","elementString","splitItem","last_modified","from","num","currentYear","numYear","DateSelector","forwardRef","addSwitch","onDateChange","useImperativeHandle","resetDate","dateEnabled","setDateEnabled","month","setMonth","day","setDay","year","setYear","valueSplit","currentDate","parsedMonth","parsedDay","monthForString","dayForString","parsedDate","toISOString","dateString","validDate","isDateDisabled","fieldContainerBorder","dateInput","displayEmpty","dayNumber","copyButtonContainer","dataObject","shareURL","setShareURL","isLoadingFile","setIsLoadingFile","selectedDate","setSelectedDate","dateValid","setDateValid","slDate","currDate","diffDate","getTime","dateContainer","newDate","DownloadIcon","objectInfo","statusEnabled","setStatusEnabled","setType","setDate","isDateValid","setIsDateValid","setIsSaving","alreadyConfigured","setAlreadyConfigured","retention_mode","retention_until_date","valueDate","getDate","dateElement","showSwitcher","versionId","expireDate","expires","addRetention","disableRetention","currentTags","onCloseAndUpdate","newKey","setNewKey","newLabel","setNewLabel","newTag","newTagList","tags","selectedTag","setDeleteSending","tagKey","tagLabel","cleanObject","actualInfo","legalHoldEnabled","setLegalHoldEnabled","emptyFile","is_latest","legal_hold_status","objectNameContainer","objectPathContainer","objectPathLink","propertiesContainer","propertiesItem","propertiesItemBold","propertiesValue","actionsIconContainer","actionsIcon","tagsContainer","tagText","tag","search","loadObjectData","setLoadObjectData","shareFileModalOpen","setShareFileModalOpen","retentionModalOpen","setRetentionModalOpen","tagModalOpen","setTagModalOpen","deleteTagModalOpen","setDeleteTagModalOpen","setSelectedTag","legalholdOpen","setLegalholdOpen","setActualInfo","versions","setVersions","filterVersion","setFilterVersion","pathInBucket","tagKeys","shareObject","downloadObject","includeVersion","version","updateInfo","redirectBack","reloadObjectData","Chip","deleteIcon","onDelete","deleteTag","clickable","currentItem","planDetails","price","capacityMin","capacityMax","planItems","community","communityDetail","standard","standardDetail","enterprise","enterpriseDetail","planButtons","text2","link","subnetLicenseKey","subnetLoginForm","licenseKeyField","pageTitle","buttonSignup","license","setLicense","subnetPassword","setSubnetPassword","subnetEmail","setSubnetEmail","rows","detailsContainer","detailsContainerBorder","detailsContainerBorderHighlighted","detailsTitle","activePlanHeader","planHeader","detailsPrice","detailsCapacityMax","detailsCapacityMin","itemContainer","itemContainerDetail","alignContent","itemFirst","itemHighlighted","checkIcon","buttonContainerBlank","buttonContainerHighlighted","openSourcePolicy","activateLink","clear","subnetRefreshLicenseLink","midWidth","smallWidth","licenseDescription","currentPlanBG","currentPlanButton","planItemsPadding","subnetSubTitle","fetchLicenseInfo","setCurrentPlanID","activateProductModal","setActivateProductModal","currentPlanID","loadingRefreshLicense","setLoadingRefreshLicense","details","currentPlan","TRACE_MESSAGE_RECEIVED","TRACE_RESET_MESSAGES","wsProtocol","protocol","messages","trace","traceMessageReceived","traceResetMessages","logList","sizeItem","timeItem","wsProt","c","W3CWebSocket","onopen","onmessage","ptime","moment","time","toDate","random","onclose","timeParse","fullElement","statusCode","statusMsg","LOG_MESSAGE_RECEIVED","LOG_RESET_MESSAGES","logs","logMessageReceived","logResetMessages","tab","logerror","logerror_tab","ansidefault","highlight","setHighlight","renderLog","logElement","logMessage","ConsoleMsg","highlightedLine","startsWith","errorElems","deploymentid","requestID","remotehost","userAgent","source","renderError","renderLines","buttonKit","toggleButton","inputBar","advancedLabel","advancedLabelContainer","getInformationContainer","orderButton","recordsLabel","blockCollapsed","filterOpen","endLineAction","filtersContainer","innerContainer","noticeLabel","tableFOpen","tableFClosed","setFilterOpen","apiName","setApiName","setUserAgent","setObject","setRequestID","responseStatus","setResponseStatus","sortOrder","setSortOrder","setColumnsShown","setNextPage","alreadyFetching","setAlreadyFetching","recordsResp","queryParams","fetchedResults","newResultSet","response_status_code","response_status","colName","newArray","sortData","newSortDirection","resolve","currentTab","setCurrentTab","showLogSearch","setShowLogSearch","graphContainer","scanInfo","scanData","inlineCheckboxes","start","setStart","setBucketName","bucketList","setBucketList","setRecursive","forceStart","setForceStart","forceStop","setForceStop","beforeHeal","afterHeal","objectsHealed","objectsScanned","healDuration","sizeScanned","hStatus","setHStatus","colorHealthArr","Green","Yellow","Red","Grey","cB","cA","entries","healthAfterCols","itemsScanned","healthBeforeCols","bytesScanned","datasets","bucketNames","legend","WATCH_MESSAGE_RECEIVED","WATCH_RESET_MESSAGES","watch","watchMessageReceived","watchResetMessages","searchPrefix","some","Time","HEALTH_INFO_MESSAGE_RECEIVED","HEALTH_INFO_RESET_MESSAGE","DiagStatError","DiagStatSuccess","DiagStatInProgress","healthInfo","serverDiagnosticStatus","healthInfoMessageReceived","healthInfoResetMessage","setServerDiagStat","gap","startDiagnostic","setStartDiagnostic","downloadDisabled","setDownloadDisabled","code","isServerLoading","serverIsLoading","session","snackBarMessage","toolbar","default","toolbarIcon","mixins","appBar","drawer","transition","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","enteringScreen","menuButton","menuButtonHidden","drawerPaper","drawerPaperClose","breakpoints","up","warningBar","heigh","widht","allowedRoutes","Dashboard","Buckets","ObjectBrowser","ObjectRouting","Watch","Users","Groups","Policies","Heal","Trace","LogsMain","HealthInfo","ConfigurationMain","Account","WebhookPanel","TenantsMain","TenantDetails","License","Drawer","exact","routerProps","LoginCallback","sessionId","SESSION_RESPONSE","consoleOperatorMode","saveSessionResponse","Component","sessionLoading","setSessionLoading","pathname","hot","Login","Console","initialState","initialRoute","globalReducer","combineReducers","newRouteList","indexOfTopPath","newRouteLevels","splitRoutes","routesArray","initRoute","newSetOfRoutes","newFoldersRoutes","lastRoute","splitElements","folderTrim","newItem","currentList","lastItem","newList","actualFiles","newState","has","originPageNameItems","joinValue","originValidPages","newSetOfPages","elm","changeCL","minioCerts","NCertList","minioCertsList","cleanMinioCertsList","CACerts","NACList","CACertsList","consoleCert","encServerCert","encClientCert","encVaultCert","encVaultCA","encGemaltoCA","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","Boolean","createMuiTheme","light","dark","contrastText","grey","100","200","300","400","500","600","700","800","900","typography","h1","h2","h3","h4","h5","h6","overrides","MuiButton","GlobalCss","ReactDOM","render","store","createStore","applyMiddleware","thunk","ThemeProvider","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.e71727db.chunk.js","sourcesContent":["import { createBrowserHistory } from \"history\";\n\nexport default createBrowserHistory();\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nexport interface snackBarMessage {\n message: string;\n type: \"message\" | \"error\";\n}\n\nexport interface SystemState {\n loggedIn: boolean;\n operatorMode: boolean;\n sidebarOpen: boolean;\n session: string;\n userName: string;\n serverNeedsRestart: boolean;\n serverIsLoading: boolean;\n loadingProgress: number;\n snackBar: snackBarMessage;\n modalSnackBar: snackBarMessage;\n serverDiagnosticStatus: string;\n}\n\nexport const USER_LOGGED = \"USER_LOGGED\";\nexport const OPERATOR_MODE = \"OPERATOR_MODE\";\nexport const MENU_OPEN = \"MENU_OPEN\";\nexport const SERVER_NEEDS_RESTART = \"SERVER_NEEDS_RESTART\";\nexport const SERVER_IS_LOADING = \"SERVER_IS_LOADING\";\nexport const SET_LOADING_PROGRESS = \"SET_LOADING_PROGRESS\";\nexport const SET_SNACK_BAR_MESSAGE = \"SET_SNACK_BAR_MESSAGE\";\nexport const SET_SERVER_DIAG_STAT = \"SET_SERVER_DIAG_STAT\";\nexport const SET_ERROR_SNACK_MESSAGE = \"SET_ERROR_SNACK_MESSAGE\";\nexport const SET_SNACK_MODAL_MESSAGE = \"SET_SNACK_MODAL_MESSAGE\";\nexport const SET_MODAL_ERROR_MESSAGE = \"SET_MODAL_ERROR_MESSAGE\";\n\ninterface UserLoggedAction {\n type: typeof USER_LOGGED;\n logged: boolean;\n}\n\ninterface OperatorModeAction {\n type: typeof OPERATOR_MODE;\n operatorMode: boolean;\n}\n\ninterface SetMenuOpenAction {\n type: typeof MENU_OPEN;\n open: boolean;\n}\n\ninterface ServerNeedsRestartAction {\n type: typeof SERVER_NEEDS_RESTART;\n needsRestart: boolean;\n}\n\ninterface ServerIsLoading {\n type: typeof SERVER_IS_LOADING;\n isLoading: boolean;\n}\ninterface SetLoadingProgress {\n type: typeof SET_LOADING_PROGRESS;\n loadingProgress: number;\n}\n\ninterface SetServerDiagStat {\n type: typeof SET_SERVER_DIAG_STAT;\n serverDiagnosticStatus: string;\n}\n\ninterface SetSnackBarMessage {\n type: typeof SET_SNACK_BAR_MESSAGE;\n message: string;\n}\n\ninterface SetErrorSnackMessage {\n type: typeof SET_ERROR_SNACK_MESSAGE;\n message: string;\n}\n\ninterface SetModalSnackMessage {\n type: typeof SET_SNACK_MODAL_MESSAGE;\n message: string;\n}\n\ninterface SetModalErrorMessage {\n type: typeof SET_MODAL_ERROR_MESSAGE;\n message: string;\n}\n\nexport type SystemActionTypes =\n | UserLoggedAction\n | OperatorModeAction\n | SetMenuOpenAction\n | ServerNeedsRestartAction\n | ServerIsLoading\n | SetLoadingProgress\n | SetServerDiagStat\n | SetSnackBarMessage\n | SetErrorSnackMessage\n | SetModalSnackMessage\n | SetModalErrorMessage;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n MENU_OPEN,\n OPERATOR_MODE,\n SERVER_IS_LOADING,\n SERVER_NEEDS_RESTART,\n USER_LOGGED,\n SET_LOADING_PROGRESS,\n SET_SNACK_BAR_MESSAGE,\n SET_SERVER_DIAG_STAT,\n SET_ERROR_SNACK_MESSAGE,\n SET_SNACK_MODAL_MESSAGE,\n SET_MODAL_ERROR_MESSAGE,\n} from \"./types\";\n\nexport function userLoggedIn(loggedIn: boolean) {\n return {\n type: USER_LOGGED,\n logged: loggedIn,\n };\n}\n\nexport function consoleOperatorMode(operatorMode: boolean) {\n return {\n type: OPERATOR_MODE,\n operatorMode: operatorMode,\n };\n}\n\nexport function setMenuOpen(open: boolean) {\n return {\n type: MENU_OPEN,\n open: open,\n };\n}\n\nexport function serverNeedsRestart(needsRestart: boolean) {\n return {\n type: SERVER_NEEDS_RESTART,\n needsRestart: needsRestart,\n };\n}\n\nexport function serverIsLoading(isLoading: boolean) {\n return {\n type: SERVER_IS_LOADING,\n isLoading: isLoading,\n };\n}\n\nexport const setLoadingProgress = (progress: number) => {\n return {\n type: SET_LOADING_PROGRESS,\n loadingProgress: progress,\n };\n};\n\nexport const setServerDiagStat = (status: string) => {\n return {\n type: SET_SERVER_DIAG_STAT,\n serverDiagnosticStatus: status,\n };\n};\n\nexport const setSnackBarMessage = (message: string) => {\n return {\n type: SET_SNACK_BAR_MESSAGE,\n message,\n };\n};\n\nexport const setErrorSnackMessage = (message: string) => {\n return {\n type: SET_ERROR_SNACK_MESSAGE,\n message,\n };\n};\n\nexport const setModalSnackMessage = (message: string) => {\n return {\n type: SET_SNACK_MODAL_MESSAGE,\n message,\n };\n};\n\nexport const setModalErrorSnackMessage = (message: string) => {\n return {\n type: SET_MODAL_ERROR_MESSAGE,\n message,\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport interface ILoginDetails {\n loginStrategy: loginStrategyType;\n redirect: string;\n}\n\nexport enum loginStrategyType {\n unknown = \"unknown\",\n form = \"form\",\n redirect = \"redirect\",\n serviceAccount = \"service-account\",\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport storage from \"local-storage-fallback\";\nimport { ICapacity, IErasureCodeCalc, IStorageFactors } from \"./types\";\nimport { IPool } from \"../screens/Console/Tenants/ListTenants/types\";\n\nconst minStReq = 1073741824; // Minimal Space required for MinIO\nconst minMemReq = 2147483648; // Minimal Memory required for MinIO in bytes\n\nexport const units = [\n \"B\",\n \"KiB\",\n \"MiB\",\n \"GiB\",\n \"TiB\",\n \"PiB\",\n \"EiB\",\n \"ZiB\",\n \"YiB\",\n];\nexport const k8sUnits = [\"Ki\", \"Mi\", \"Gi\", \"Ti\", \"Pi\", \"Ei\"];\nexport const k8sCalcUnits = [\"B\", ...k8sUnits];\n\nexport const niceBytes = (x: string, showK8sUnits: boolean = false) => {\n let l = 0,\n n = parseInt(x, 10) || 0;\n\n while (n >= 1024 && ++l) {\n n = n / 1024;\n }\n //include a decimal point and a tenths-place digit if presenting\n //less than ten of KB or greater units\n const k8sUnitsN = [\"B\", ...k8sUnits];\n return (\n n.toFixed(n < 10 && l > 0 ? 1 : 0) +\n \" \" +\n (showK8sUnits ? k8sUnitsN[l] : units[l])\n );\n};\n\nexport const setCookie = (name: string, val: string) => {\n const date = new Date();\n const value = val;\n\n // Set it expire in 45 minutes\n date.setTime(date.getTime() + 45 * 60 * 1000);\n\n // Set it\n document.cookie =\n name + \"=\" + value + \"; expires=\" + date.toUTCString() + \"; path=/\";\n};\n\nexport const deleteCookie = (name: string) => {\n document.cookie = name + \"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n};\n\nexport const clearSession = () => {\n storage.removeItem(\"token\");\n deleteCookie(\"token\");\n};\n\n// timeFromDate gets time string from date input\nexport const timeFromDate = (d: Date) => {\n let h = d.getHours() < 10 ? `0${d.getHours()}` : `${d.getHours()}`;\n let m = d.getMinutes() < 10 ? `0${d.getMinutes()}` : `${d.getMinutes()}`;\n let s = d.getSeconds() < 10 ? `0${d.getSeconds()}` : `${d.getSeconds()}`;\n\n return `${h}:${m}:${s}:${d.getMilliseconds()}`;\n};\n\n// units to be used in a dropdown\nexport const factorForDropdown = () => {\n return units.map((unit) => {\n return { label: unit, value: unit };\n });\n};\n\n// units to be used in a dropdown\nexport const k8sfactorForDropdown = () => {\n return k8sUnits.map((unit) => {\n return { label: unit, value: unit };\n });\n};\n\n//getBytes, converts from a value and a unit from units array to bytes\nexport const getBytes = (\n value: string,\n unit: string,\n fromk8s: boolean = false\n) => {\n const vl: number = parseFloat(value);\n\n const unitsTake = fromk8s ? k8sCalcUnits : units;\n\n const powFactor = unitsTake.findIndex((element) => element === unit);\n\n if (powFactor === -1) {\n return \"0\";\n }\n const factor = Math.pow(1024, powFactor);\n const total = vl * factor;\n\n return total.toString(10);\n};\n\n//getTotalSize gets the total size of a value & unit\nexport const getTotalSize = (value: string, unit: string) => {\n const bytes = getBytes(value, unit, true).toString();\n return niceBytes(bytes);\n};\n\nexport const setMemoryResource = (\n memorySize: number,\n capacitySize: string,\n maxMemorySize: number\n) => {\n // value always comes as Gi\n const requestedSizeBytes = getBytes(memorySize.toString(10), \"Gi\", true);\n const memReqSize = parseInt(requestedSizeBytes, 10);\n if (maxMemorySize === 0) {\n return {\n error: \"There is no memory available for the selected number of nodes\",\n request: 0,\n limit: 0,\n };\n }\n\n if (maxMemorySize < minMemReq) {\n return {\n error: \"There are not enough memory resources available\",\n request: 0,\n limit: 0,\n };\n }\n\n if (memReqSize < minMemReq) {\n return {\n error: \"The requested memory size must be greater than 2Gi\",\n request: 0,\n limit: 0,\n };\n }\n if (memReqSize > maxMemorySize) {\n return {\n error:\n \"The requested memory is greater than the max available memory for the selected number of nodes\",\n request: 0,\n limit: 0,\n };\n }\n\n const capSize = parseInt(capacitySize, 10);\n let memLimitSize = memReqSize;\n // set memory limit based on the capacitySize\n // if capacity size is lower than 1TiB we use the limit equal to request\n if (capSize >= parseInt(getBytes(\"1\", \"Pi\", true), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"64\", \"Gi\", true), 10)\n );\n } else if (capSize >= parseInt(getBytes(\"100\", \"Ti\"), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"32\", \"Gi\", true), 10)\n );\n } else if (capSize >= parseInt(getBytes(\"10\", \"Ti\"), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"16\", \"Gi\", true), 10)\n );\n } else if (capSize >= parseInt(getBytes(\"1\", \"Ti\"), 10)) {\n memLimitSize = Math.max(\n memReqSize,\n parseInt(getBytes(\"8\", \"Gi\", true), 10)\n );\n }\n\n return {\n error: \"\",\n request: memReqSize,\n limit: memLimitSize,\n };\n};\n\nexport const calculateDistribution = (\n capacityToUse: ICapacity,\n forcedNodes: number = 0,\n limitSize: number = 0,\n drivesPerServer: number = 0\n) => {\n let numberOfNodes = {};\n const requestedSizeBytes = getBytes(\n capacityToUse.value,\n capacityToUse.unit,\n true\n );\n\n if (parseInt(requestedSizeBytes, 10) < minStReq) {\n return {\n error: \"The pool size must be greater than 1Gi\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n pvSize: 0,\n };\n }\n\n if (forcedNodes < 4) {\n return {\n error: \"Number of nodes cannot be less than 4\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n pvSize: 0,\n };\n }\n\n if (drivesPerServer <= 0) {\n return {\n error: \"Number of drives must be at least 1\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n pvSize: 0,\n };\n }\n\n numberOfNodes = calculateStorage(\n requestedSizeBytes,\n forcedNodes,\n limitSize,\n drivesPerServer\n );\n\n return numberOfNodes;\n};\n\nconst calculateStorage = (\n requestedBytes: string,\n forcedNodes: number,\n limitSize: number,\n drivesPerServer: number\n) => {\n // Size validation\n const intReqBytes = parseInt(requestedBytes, 10);\n const maxDiskSize = minStReq * 256; // 256 GiB\n\n // We get the distribution\n return structureCalc(\n forcedNodes,\n intReqBytes,\n maxDiskSize,\n limitSize,\n drivesPerServer\n );\n};\n\nconst structureCalc = (\n nodes: number,\n desiredCapacity: number,\n maxDiskSize: number,\n maxClusterSize: number,\n disksPerNode: number = 0\n) => {\n if (\n isNaN(nodes) ||\n isNaN(desiredCapacity) ||\n isNaN(maxDiskSize) ||\n isNaN(maxClusterSize)\n ) {\n return {\n error: \"Some provided data is invalid, please try again.\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n }; // Invalid Data\n }\n\n let persistentVolumeSize = 0;\n let numberPersistentVolumes = 0;\n let volumesPerServer = 0;\n\n if (disksPerNode === 0) {\n persistentVolumeSize = Math.floor(\n Math.min(desiredCapacity / Math.max(4, nodes), maxDiskSize)\n ); // pVS = min((desiredCapacity / max(4 | nodes)) | maxDiskSize)\n\n numberPersistentVolumes = desiredCapacity / persistentVolumeSize; // nPV = dC / pVS\n volumesPerServer = numberPersistentVolumes / nodes; // vPS = nPV / n\n }\n\n if (disksPerNode) {\n volumesPerServer = disksPerNode;\n numberPersistentVolumes = volumesPerServer * nodes;\n persistentVolumeSize = Math.floor(\n desiredCapacity / numberPersistentVolumes\n );\n }\n\n // Volumes are not exact, we force the volumes number & minimize the volume size\n if (volumesPerServer % 1 > 0) {\n volumesPerServer = Math.ceil(volumesPerServer); // Increment of volumes per server\n numberPersistentVolumes = volumesPerServer * nodes; // nPV = vPS * n\n persistentVolumeSize = Math.floor(\n desiredCapacity / numberPersistentVolumes\n ); // pVS = dC / nPV\n\n const limitSize = persistentVolumeSize * volumesPerServer * nodes; // lS = pVS * vPS * n\n\n if (limitSize > maxClusterSize) {\n return {\n error: \"We were not able to allocate this server.\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n }; // Cannot allocate this server\n }\n }\n\n if (persistentVolumeSize < minStReq) {\n return {\n error:\n \"Disk Size with this combination would be less than 1Gi, please try another combination\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n }; // Cannot allocate this volume size\n }\n\n return {\n error: \"\",\n nodes,\n persistentVolumes: numberPersistentVolumes,\n disks: volumesPerServer,\n pvSize: persistentVolumeSize,\n };\n};\n\n// Erasure Code Parity Calc\nexport const erasureCodeCalc = (\n parityValidValues: string[],\n totalDisks: number,\n pvSize: number,\n totalNodes: number\n): IErasureCodeCalc => {\n // Parity Values is empty\n if (parityValidValues.length < 1) {\n return {\n error: 1,\n defaultEC: \"\",\n erasureCodeSet: 0,\n maxEC: \"\",\n rawCapacity: \"0\",\n storageFactors: [],\n };\n }\n\n const totalStorage = totalDisks * pvSize;\n const maxEC = parityValidValues[0];\n const maxParityNumber = parseInt(maxEC.split(\":\")[1], 10);\n\n const erasureStripeSet = maxParityNumber * 2; // ESS is calculated by multiplying maximum parity by two.\n\n const storageFactors: IStorageFactors[] = parityValidValues.map(\n (currentParity) => {\n const parityNumber = parseInt(currentParity.split(\":\")[1], 10);\n const storageFactor =\n erasureStripeSet / (erasureStripeSet - parityNumber);\n\n const maxCapacity = Math.floor(totalStorage / storageFactor);\n const maxTolerations =\n totalDisks - Math.floor(totalDisks / storageFactor);\n return {\n erasureCode: currentParity,\n storageFactor,\n maxCapacity: maxCapacity.toString(10),\n maxFailureTolerations: maxTolerations,\n };\n }\n );\n\n let defaultEC = maxEC;\n\n const fourVar = parityValidValues.find((element) => element === \"EC:4\");\n\n if (totalDisks >= 8 && totalNodes > 16 && fourVar) {\n defaultEC = \"EC:4\";\n }\n\n return {\n error: 0,\n storageFactors,\n maxEC,\n rawCapacity: totalStorage.toString(10),\n erasureCodeSet: erasureStripeSet,\n defaultEC,\n };\n};\n\n// Pool Name Generator\nexport const generatePoolName = (pools: IPool[]) => {\n const poolCounter = pools.length;\n\n return `pool-${poolCounter}`;\n};\n\n// seconds / minutes /hours / Days / Years calculator\nexport const niceDays = (secondsValue: string) => {\n let seconds = parseFloat(secondsValue);\n\n const days = Math.floor(seconds / (3600 * 24));\n\n seconds -= days * 3600 * 24;\n const hours = Math.floor(seconds / 3600);\n seconds -= hours * 3600;\n const minutes = Math.floor(seconds / 60);\n seconds -= minutes * 60;\n\n if (days > 365) {\n const years = days / 365;\n return `${years} year${Math.floor(years) === 1 ? \"\" : \"s\"}`;\n }\n\n if (days > 30) {\n const months = Math.floor(days / 30);\n const diffDays = days - months * 30;\n\n return `${months} month${Math.floor(months) === 1 ? \"\" : \"s\"} ${\n diffDays > 0 ? `${diffDays} day${diffDays > 1 ? \"s\" : \"\"}` : \"\"\n }`;\n }\n\n if (days >= 7 && days <= 30) {\n const weeks = Math.floor(days / 7);\n\n return `${Math.floor(weeks)} week${weeks === 1 ? \"\" : \"s\"}`;\n }\n\n if (days >= 1 && days <= 6) {\n return `${days} day${days > 1 ? \"s\" : \"\"}`;\n }\n\n return `${hours >= 1 ? `${hours} hour${hours > 1 ? \"s\" : \"\"}` : \"\"} ${\n minutes >= 1 && hours === 0\n ? `${minutes} minute${minutes > 1 ? \"s\" : \"\"}`\n : \"\"\n } ${\n seconds >= 1 && minutes === 0 && hours === 0\n ? `${seconds} second${seconds > 1 ? \"s\" : \"\"}`\n : \"\"\n }`;\n};\n\nexport const getTimeFromTimestamp = (\n timestamp: string,\n fullDate: boolean = false\n) => {\n const dateObject = new Date(parseInt(timestamp) * 1000);\n\n if (fullDate) {\n return `${dateObject.getFullYear()}-${String(\n dateObject.getMonth() + 1\n ).padStart(2, \"0\")}-${String(dateObject.getDay()).padStart(\n 2,\n \"0\"\n )} ${dateObject.getHours()}:${String(dateObject.getMinutes()).padStart(\n 2,\n \"0\"\n )}:${String(dateObject.getSeconds()).padStart(2, \"0\")}`;\n }\n return `${dateObject.getHours()}:${String(dateObject.getMinutes()).padStart(\n 2,\n \"0\"\n )}`;\n};\n\nexport const calculateBytes = (\n x: string,\n showDecimals = false,\n roundFloor = true\n) => {\n const bytes = parseInt(x, 10);\n\n if (bytes === 0) {\n return { total: 0, unit: k8sCalcUnits[0] };\n }\n\n // Gi : GiB\n const k = 1024;\n\n // Get unit for measure\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n const fractionDigits = showDecimals ? 0 : 1;\n\n const bytesUnit = bytes / Math.pow(k, i);\n\n const roundedUnit = roundFloor ? Math.floor(bytesUnit) : bytesUnit;\n\n // Get Unit parsed\n const unitParsed = parseFloat(roundedUnit.toFixed(fractionDigits));\n const finalUnit = k8sCalcUnits[i];\n\n return { total: unitParsed, unit: finalUnit };\n};\n\nexport const nsToSeconds = (nanoseconds: number) => {\n const conversion = nanoseconds * 0.000000001;\n const round = Math.round((conversion + Number.EPSILON) * 10000) / 10000;\n\n return `${round} s`;\n};\n\nexport const textToRGBColor = (text: string) => {\n const splitText = text.split(\"\");\n\n const hashVl = splitText.reduce((acc, currItem) => {\n return acc + currItem.charCodeAt(0) + ((acc << 5) - acc);\n }, 0);\n\n const hashColored = ((hashVl * 100) & 0x00ffffff).toString(16).toUpperCase();\n\n return `#${hashColored.padStart(6, \"0\")}`;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport request from \"superagent\";\nimport get from \"lodash/get\";\nimport { clearSession } from \"../utils\";\n\nexport class API {\n invoke(method: string, url: string, data?: object) {\n return request(method, url)\n .send(data)\n .then((res) => res.body)\n .catch((err) => {\n // if we get unauthorized, kick out the user\n if (err.status === 401) {\n clearSession();\n // Refresh the whole page to ensure cache is clear\n // and we dont end on an infinite loop\n window.location.href = \"/login\";\n return;\n }\n return this.onError(err);\n });\n }\n\n onError(err: any) {\n if (err.status) {\n const errMessage = get(\n err.response,\n \"body.message\",\n err.status.toString()\n );\n\n const throwMessage =\n errMessage.charAt(0).toUpperCase() + errMessage.slice(1);\n\n return Promise.reject(throwMessage);\n } else {\n clearSession();\n window.location.href = \"/login\";\n }\n }\n}\n\nconst api = new API();\nexport default api;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport request from \"superagent\";\nimport { connect } from \"react-redux\";\nimport ErrorIcon from \"@material-ui/icons/Error\";\nimport Button from \"@material-ui/core/Button\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {\n CircularProgress,\n LinearProgress,\n Paper,\n TextFieldProps,\n} from \"@material-ui/core\";\nimport {\n createStyles,\n makeStyles,\n Theme,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { SystemState } from \"../../types\";\nimport { userLoggedIn } from \"../../actions\";\nimport api from \"../../common/api\";\nimport { ILoginDetails, loginStrategyType } from \"./types\";\nimport history from \"../../history\";\nimport { OutlinedInputProps } from \"@material-ui/core/OutlinedInput\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n \"@global\": {\n body: {\n backgroundColor: \"#FAFAFA\",\n },\n },\n paper: {\n borderRadius: 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n width: 800,\n height: 424,\n margin: \"auto\",\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n marginLeft: -400,\n marginTop: -212,\n \"&.MuiPaper-root\": {\n borderRadius: 8,\n },\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n },\n submit: {\n margin: \"30px 0px 16px\",\n height: 40,\n boxShadow: \"none\",\n padding: \"16px 30px\",\n },\n errorBlock: {\n backgroundColor: \"#C72C48\",\n width: 800,\n height: 64,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n marginLeft: -400,\n marginTop: -290,\n color: \"#fff\",\n fontWeight: 700,\n fontSize: 14,\n borderRadius: 8,\n padding: 10,\n boxSizing: \"border-box\",\n },\n mainContainer: {\n position: \"relative\",\n height: 424,\n },\n theOcean: {\n borderTopLeftRadius: 8,\n borderBottomLeftRadius: 8,\n background:\n \"transparent linear-gradient(to bottom, #073052 0%,#05122b 100%); 0% 0% no-repeat padding-box;\",\n },\n oceanBg: {\n backgroundImage: \"url(/images/BG_Illustration.svg)\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"bottom left\",\n height: \"100%\",\n width: 324,\n },\n theLogin: {\n padding: \"40px 45px 20px 45px\",\n },\n loadingLoginStrategy: {\n textAlign: \"center\",\n },\n headerTitle: {\n marginBottom: 10,\n },\n submitContainer: {\n textAlign: \"right\",\n },\n disclaimer: {\n fontSize: 12,\n marginTop: 30,\n },\n jwtInput: {\n marginTop: 45,\n },\n linearPredef: {\n height: 10,\n },\n errorIconStyle: {\n marginRight: 3,\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n disabled: {\n \"&.MuiInput-underline::before\": {\n borderColor: \"#eaeaea\",\n borderBottomStyle: \"solid\",\n },\n },\n })\n);\n\nfunction LoginField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst mapState = (state: SystemState) => ({\n loggedIn: state.loggedIn,\n});\n\nconst connector = connect(mapState, { userLoggedIn });\n\n// The inferred type will look like:\n// {isOn: boolean, toggleOn: () => void}\n\ninterface ILoginProps {\n userLoggedIn: typeof userLoggedIn;\n classes: any;\n}\n\ninterface LoginStrategyRoutes {\n [key: string]: string;\n}\n\ninterface LoginStrategyPayload {\n [key: string]: any;\n}\n\nconst Login = ({ classes, userLoggedIn }: ILoginProps) => {\n const [accessKey, setAccessKey] = useState(\"\");\n const [jwt, setJwt] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [error, setError] = useState(\"\");\n const [loginStrategy, setLoginStrategy] = useState({\n loginStrategy: loginStrategyType.unknown,\n redirect: \"\",\n });\n const [loginSending, setLoginSending] = useState(false);\n\n const loginStrategyEndpoints: LoginStrategyRoutes = {\n form: \"/api/v1/login\",\n \"service-account\": \"/api/v1/login/operator\",\n };\n const loginStrategyPayload: LoginStrategyPayload = {\n form: { accessKey, secretKey },\n \"service-account\": { jwt },\n };\n\n const fetchConfiguration = () => {\n api\n .invoke(\"GET\", \"/api/v1/login\")\n .then((loginDetails: ILoginDetails) => {\n setLoginStrategy(loginDetails);\n setError(\"\");\n if (\n loginDetails.loginStrategy === \"redirect\" &&\n loginDetails.redirect !== \"\"\n ) {\n //location.href = loginDetails.redirect;\n }\n })\n .catch((err: any) => {\n setError(err);\n });\n };\n\n const formSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setLoginSending(true);\n request\n .post(\n loginStrategyEndpoints[loginStrategy.loginStrategy] || \"/api/v1/login\"\n )\n .send(loginStrategyPayload[loginStrategy.loginStrategy])\n .then((res: any) => {\n const bodyResponse = res.body;\n if (bodyResponse.error) {\n setLoginSending(false);\n // throw will be moved to catch block once bad login returns 403\n throw bodyResponse.error;\n }\n })\n .then(() => {\n // We set the state in redux\n userLoggedIn(true);\n if (loginStrategy.loginStrategy === loginStrategyType.form) {\n localStorage.setItem(\"userLoggedIn\", btoa(accessKey));\n }\n\n history.push(\"/\");\n })\n .catch((err) => {\n setLoginSending(false);\n setError(err.message);\n });\n };\n\n useEffect(() => {\n fetchConfiguration();\n }, []);\n\n let loginComponent = null;\n\n switch (loginStrategy.loginStrategy) {\n case loginStrategyType.form: {\n loginComponent = (\n \n \n Console Login\n \n
\n \n \n ) =>\n setAccessKey(e.target.value)\n }\n label=\"Enter Access Key\"\n name=\"accessKey\"\n autoComplete=\"username\"\n disabled={loginSending}\n />\n \n \n ) =>\n setSecretKey(e.target.value)\n }\n name=\"secretKey\"\n label=\"Enter Secret Key\"\n type=\"password\"\n id=\"secretKey\"\n autoComplete=\"current-password\"\n disabled={loginSending}\n />\n \n \n \n \n Login\n \n \n \n {loginSending && }\n \n \n Don't have an access key?\n
\n
\n Contact your administrator to have one made\n
\n
\n
\n );\n break;\n }\n case loginStrategyType.redirect: {\n loginComponent = (\n \n \n Login\n \n \n Welcome\n \n \n );\n break;\n }\n case loginStrategyType.serviceAccount: {\n loginComponent = (\n \n \n Operator Login\n \n
\n \n \n ) =>\n setJwt(e.target.value)\n }\n label=\"JWT\"\n name=\"jwt\"\n autoComplete=\"off\"\n disabled={loginSending}\n />\n \n \n \n \n Login\n \n \n \n {loginSending && }\n \n \n Don't have an access key?\n
\n Contact your administrator to have one made\n
\n
\n
\n );\n break;\n }\n default:\n loginComponent = (\n \n );\n }\n\n return (\n \n {error !== \"\" && (\n
\n {\" \"}\n {error}\n
\n )}\n \n \n \n
\n \n \n {loginComponent}\n \n \n \n \n );\n};\n\nexport default connector(withStyles(styles)(Login));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// This object contains variables that will be used across form components.\n\nexport const fieldBasic = {\n inputLabel: {\n fontWeight: 600,\n marginRight: 10,\n fontSize: 15,\n color: \"#000\",\n textAlign: \"left\" as const,\n overflow: \"hidden\",\n \"& span\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n display: \"flex\",\n },\n fieldLabelError: {\n paddingBottom: 22,\n },\n fieldContainer: {\n marginBottom: 20,\n position: \"relative\" as const,\n maxWidth: 840,\n margin: \"0px auto\",\n },\n tooltipContainer: {\n marginLeft: 5,\n display: \"flex\",\n alignItems: \"center\",\n },\n};\n\nexport const modalBasic = {\n formScrollable: {\n maxHeight: \"calc(100vh - 300px)\" as const,\n overflowY: \"auto\" as const,\n marginBottom: 25,\n },\n formSlider: {\n marginLeft: 0,\n },\n clearButton: {\n fontFamily: \"Lato, sans-serif\",\n border: \"0\",\n backgroundColor: \"transparent\",\n color: \"#393939\",\n fontWeight: 600,\n fontSize: 14,\n marginRight: 10,\n outline: \"0\",\n padding: \"16px 25px 16px 25px\",\n cursor: \"pointer\",\n },\n floatingEnabled: {\n position: \"absolute\" as const,\n right: 58,\n zIndex: 1000,\n marginTop: -38,\n },\n configureString: {\n border: \"#EAEAEA 1px solid\",\n borderRadius: 4,\n padding: \"24px 50px\",\n overflowY: \"auto\" as const,\n height: 170,\n maxWidth: 840,\n margin: \"0 auto\",\n },\n};\n\nexport const tooltipHelper = {\n tooltip: {\n fontSize: 16,\n },\n};\n\nconst checkBoxBasic = {\n width: 14,\n height: 14,\n borderRadius: 2,\n};\n\nexport const checkboxIcons = {\n unCheckedIcon: { ...checkBoxBasic, border: \"1px solid #c3c3c3\" },\n checkedIcon: {\n ...checkBoxBasic,\n border: \"1px solid #081C42\",\n backgroundColor: \"#081C42\",\n },\n};\n\nconst radioBasic = {\n width: 12,\n height: 12,\n borderRadius: \"100%\",\n \"input:disabled ~ &\": {\n border: \"1px solid #9C9C9C\",\n },\n};\n\nexport const radioIcons = {\n radioUnselectedIcon: { ...radioBasic, border: \"1px solid #000\" },\n radioSelectedIcon: {\n ...radioBasic,\n border: \"1px solid #000\",\n backgroundColor: \"#000\",\n },\n};\n\nexport const containerForHeader = (bottomSpacing: any) => ({\n container: {\n padding: \"110px 33px 0\",\n \"& h6\": {\n color: \"#777777\",\n fontSize: 14,\n },\n \"& p\": {\n \"& span:not(*[class*='smallUnit'])\": {\n fontSize: 16,\n },\n },\n },\n});\n\nexport const actionsTray = {\n label: {\n color: \"#393939\",\n fontWeight: 600,\n fontSize: 13,\n alignSelf: \"center\" as const,\n whiteSpace: \"nowrap\" as const,\n \"&:not(:first-of-type)\": {\n marginLeft: 10,\n },\n },\n timeContainers: {\n height: 40,\n },\n actionsTray: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n \"& button\": {\n flexGrow: 0,\n marginLeft: 15,\n },\n },\n};\n\nexport const searchField = {\n searchField: {\n flexGrow: 1,\n height: 40,\n background: \"#FFFFFF\",\n borderRadius: 5,\n border: \"#EAEDEE 1px solid\",\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"0 16px\",\n \"& input\": {\n fontSize: 12,\n fontWeight: 700,\n color: \"#000\",\n \"&::placeholder\": {\n color: \"#393939\",\n opacity: 1,\n },\n },\n \"&:hover\": {\n borderColor: \"#000\",\n },\n },\n};\n\nexport const predefinedList = {\n prefinedContainer: {\n maxWidth: 840,\n width: \"100%\",\n margin: \"0 auto\",\n },\n predefinedTitle: {\n fontSize: 16,\n fontWeight: 600,\n color: \"#000\",\n margin: \"10px 0\",\n },\n predefinedList: {\n backgroundColor: \"#eaeaea\",\n padding: \"12px 10px\",\n color: \"#393939\",\n fontSize: 12,\n fontWeight: 600,\n minHeight: 41,\n },\n innerContent: {\n width: \"100%\",\n overflowX: \"auto\" as const,\n whiteSpace: \"nowrap\" as const,\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n innerContentMultiline: {\n width: \"100%\",\n maxHeight: 100,\n overflowY: \"auto\" as const,\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n};\n\nexport const objectBrowserCommon = {\n obTitleSection: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n marginBottom: 20,\n },\n sectionTitle: {\n fontSize: 22,\n color: \"#000\",\n fontWeight: 600,\n height: 40,\n lineHeight: \"40px\",\n },\n breadcrumbs: {\n fontSize: 10,\n color: \"#000\",\n marginTop: 2,\n \"& a\": {\n textDecoration: \"none\",\n color: \"#000\",\n \"&:hover\": {\n textDecoration: \"underline\",\n },\n },\n },\n};\n\nexport const selectorsCommon = {\n multiSelectTable: {\n height: 200,\n },\n};\n\nexport const settingsCommon = {\n customTitle: {\n fontSize: 18,\n color: \"#000\",\n fontWeight: 600,\n padding: \"12px 0\",\n borderBottom: \"#eaedee 1px solid\",\n marginBottom: 10,\n margin: \"15px 38px 27px\",\n },\n settingsFormContainer: {\n height: \"calc(100vh - 421px)\",\n padding: \"15px 38px\",\n overflowY: \"auto\" as const,\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n settingsButtonContainer: {\n borderTop: \"1px solid #EAEAEA\",\n padding: \"15px 38px\",\n textAlign: \"right\" as const,\n },\n settingsOptionsContainer: {\n height: \"calc(100vh - 244px)\",\n backgroundColor: \"#fff\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n marginTop: 15,\n },\n backButton: {\n cursor: \"pointer\",\n fontSize: 10,\n fontWeight: 600,\n color: \"#000\",\n backgroundColor: \"transparent\",\n border: 0,\n padding: 0,\n display: \"flex\",\n alignItems: \"center\",\n \"&:active, &:focus\": {\n outline: 0,\n },\n \"& svg\": {\n width: 10,\n marginRight: 4,\n },\n },\n backContainer: {\n margin: \"20px 38px 0\",\n },\n};\n\nexport const logsCommon = {\n logsSubContainer: {\n height: \"calc(100vh - 230px)\",\n padding: \"15px 0\",\n },\n};\n\nexport const widgetCommon = {\n singleValueContainer: {\n position: \"relative\" as const,\n flexGrow: 1,\n width: \"100%\",\n height: \"100%\",\n border: \"#EAEAEA 1px solid\",\n borderRadius: 5,\n backgroundColor: \"#fff\",\n },\n titleContainer: {\n color: \"#393939\",\n fontWeight: 600,\n height: 15,\n textAlign: \"center\" as const,\n fontSize: 10,\n },\n contentContainer: {\n flexGrow: 2,\n justifyContent: \"center\" as const,\n alignItems: \"center\" as const,\n display: \"flex\" as const,\n position: \"absolute\" as const,\n width: \"100%\",\n height: \"calc(100% - 15px)\",\n },\n contentContainerWithLabel: {\n height: \"calc(100% - 25px)\",\n },\n legendBlock: {\n position: \"absolute\" as const,\n bottom: 5,\n display: \"flex\" as const,\n width: \"100%\",\n height: 15,\n flexWrap: \"wrap\" as const,\n overflowY: \"auto\" as const,\n },\n singleLegendContainer: {\n display: \"flex\",\n alignItems: \"center\",\n padding: \"0 10px\",\n maxWidth: \"100%\",\n },\n colorContainer: {\n width: 8,\n height: 8,\n minWidth: 8,\n borderRadius: \"100%\",\n marginRight: 5,\n },\n legendLabel: {\n fontSize: \"80%\",\n color: \"#393939\",\n whiteSpace: \"nowrap\" as const,\n overflow: \"hidden\" as const,\n textOverflow: \"ellipsis\" as const,\n },\n};\n\nexport const tooltipCommon = {\n customTooltip: {\n backgroundColor: \"rgba(255, 255, 255, 0.90)\",\n border: \"#eaeaea 1px solid\",\n borderRadius: 3,\n padding: \"5px 10px\",\n maxHeight: 300,\n overflowY: \"auto\" as const,\n },\n labelContainer: {\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n },\n labelColor: {\n width: 6,\n height: 6,\n display: \"block\" as const,\n borderRadius: \"100%\",\n marginRight: 5,\n },\n itemValue: {\n fontSize: \"75%\",\n color: \"#393939\",\n },\n valueContainer: {\n fontWeight: 600,\n },\n timeStampTitle: {\n fontSize: \"80%\",\n color: \"#9c9c9c\",\n textAlign: \"center\" as const,\n marginBottom: 6,\n },\n};\n\nexport const snackBarCommon = {\n snackBar: {\n backgroundColor: \"#081F44\",\n fontWeight: 400,\n fontFamily: \"Lato, sans-serif\",\n fontSize: 14,\n padding: \"0px 20px 0px 20px;\",\n boxShadow: \"none\" as const,\n \"&.MuiPaper-root.MuiSnackbarContent-root\": {\n borderRadius: \"0px 0px 5px 5px\",\n },\n \"& div\": {\n textAlign: \"center\" as const,\n padding: \"6px 30px\",\n width: \"100%\",\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n },\n errorSnackBar: {\n backgroundColor: \"#C72C48\",\n color: \"#fff\",\n },\n snackBarExternal: {\n top: \"-17px\",\n position: \"absolute\" as const,\n minWidth: \"348px\",\n whiteSpace: \"nowrap\" as const,\n height: \"33px\",\n },\n snackDiv: {\n top: \"17px\",\n left: \"50%\",\n position: \"absolute\" as const,\n },\n snackBarModal: {\n top: 0,\n position: \"absolute\" as const,\n minWidth: \"348px\",\n whiteSpace: \"nowrap\" as const,\n height: \"33px\",\n maxWidth: \"calc(100% - 140px)\",\n },\n};\n\nexport const wizardCommon = {\n multiContainer: {\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n alignSelf: \"flex-start\" as const,\n },\n headerElement: {\n position: \"sticky\" as const,\n top: 0,\n paddingTop: 5,\n marginBottom: 10,\n zIndex: 500,\n backgroundColor: \"#fff\",\n },\n tableTitle: {\n fontWeight: 700,\n width: \"30%\",\n },\n poolError: {\n color: \"#dc1f2e\",\n fontSize: \"0.75rem\",\n paddingLeft: 120,\n },\n error: {\n color: \"#dc1f2e\",\n fontSize: \"0.75rem\",\n },\n h3Section: {\n marginTop: 0,\n },\n descriptionText: {\n fontSize: 13,\n color: \"#777777\",\n },\n container: {\n padding: \"77px 0 0 0\",\n \"& h6\": {\n color: \"#777777\",\n fontSize: 14,\n },\n \"& p\": {\n \"& span:not(*[class*='smallUnit'])\": {\n fontSize: 16,\n },\n },\n },\n};\n","import React from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Link from \"@material-ui/core/Link\";\n\nexport default function Copyright() {\n return (\n \n {\"Copyright © \"}\n \n MinIO\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n \n );\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Box from \"@material-ui/core/Box\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Container from \"@material-ui/core/Container\";\nimport Copyright from \"../common/Copyright\";\n\nconst useStyles = makeStyles((theme) => ({\n \"@global\": {\n body: {\n backgroundColor: theme.palette.common.white,\n },\n },\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n}));\nconst NotFound: React.FC = () => {\n const classes = useStyles();\n return (\n \n \n
\n \n 404 Not Found\n \n
\n \n \n \n
\n );\n};\n\nexport default NotFound;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst CopyIcon = () => {\n return (\n \n \n ic_h_copy-new_sl\n \n \n \n \n \n \n \n );\n};\n\nexport default CopyIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst CreateIcon = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default CreateIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst DeleteIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default DeleteIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst DashboardIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default DashboardIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst BucketsIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default BucketsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst UsersIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default UsersIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst ServiceAccountsIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ServiceAccountsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst GroupsIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default GroupsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst BucketsIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default BucketsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst TraceIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TraceIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst ConfigurationsListIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ConfigurationsListIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst ClustersIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ClustersIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst MirroringIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default MirroringIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst WarpIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default WarpIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst WatchIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default WatchIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const ADD_BUCKET_OPEN = \"ADD_BUCKET_OPEN\";\nexport const ADD_BUCKET_NAME = \"ADD_BUCKET_NAME\";\nexport const ADD_BUCKET_VERSIONED = \"ADD_BUCKET_VERSIONED\";\nexport const ADD_BUCKET_LOCKING = \"ADD_BUCKET_LOCKING\";\nexport const ADD_BUCKET_QUOTA = \"ADD_BUCKET_QUOTA\";\nexport const ADD_BUCKET_QUOTA_TYPE = \"ADD_BUCKET_QUOTA_TYPE\";\nexport const ADD_BUCKET_QUOTA_SIZE = \"ADD_BUCKET_QUOTA_SIZE\";\nexport const ADD_BUCKET_QUOTA_UNIT = \"ADD_BUCKET_QUOTA_UNIT\";\nexport const ADD_BUCKET_RESET = \"ADD_BUCKET_RESET\";\nexport const ADD_BUCKET_RETENTION = \"ADD_BUCKET_RETENTION\";\nexport const ADD_BUCKET_RETENTION_MODE = \"ADD_BUCKET_RETENTION_MODE\";\nexport const ADD_BUCKET_RETENTION_UNIT = \"ADD_BUCKET_RETENTION_UNIT\";\nexport const ADD_BUCKET_RETENTION_VALIDITY = \"ADD_BUCKET_RETENTION_VALIDITY\";\n\ninterface AddBucketOpenAction {\n type: typeof ADD_BUCKET_OPEN;\n open: boolean;\n}\n\ninterface AddBucketNameAction {\n type: typeof ADD_BUCKET_NAME;\n name: string;\n}\n\ninterface AddBucketVersionedAction {\n type: typeof ADD_BUCKET_VERSIONED;\n versioned: boolean;\n}\n\ninterface AddBucketLockingAction {\n type: typeof ADD_BUCKET_LOCKING;\n locking: boolean;\n}\n\ninterface AddBucketQuotaAction {\n type: typeof ADD_BUCKET_QUOTA;\n quota: boolean;\n}\n\ninterface AddBucketQuotaTypeAction {\n type: typeof ADD_BUCKET_QUOTA_TYPE;\n quotaType: string;\n}\n\ninterface AddBucketQuotaSizeAction {\n type: typeof ADD_BUCKET_QUOTA_SIZE;\n quotaSize: string;\n}\n\ninterface AddBucketQuotaUnitAction {\n type: typeof ADD_BUCKET_QUOTA_UNIT;\n quotaUnit: string;\n}\ninterface AddBucketResetAction {\n type: typeof ADD_BUCKET_RESET;\n}\n\ninterface AddBucketRetentionAction {\n type: typeof ADD_BUCKET_RETENTION;\n retention: boolean;\n}\n\ninterface AddBucketRetentionModeAction {\n type: typeof ADD_BUCKET_RETENTION_MODE;\n retentionMode: string;\n}\n\ninterface AddBucketRetentionUnitAction {\n type: typeof ADD_BUCKET_RETENTION_UNIT;\n retentionUnit: string;\n}\ninterface AddBucketRetentionValidityAction {\n type: typeof ADD_BUCKET_RETENTION_VALIDITY;\n retentionValidity: number;\n}\n\nexport type BucketActionTypes =\n | AddBucketOpenAction\n | AddBucketNameAction\n | AddBucketVersionedAction\n | AddBucketLockingAction\n | AddBucketQuotaAction\n | AddBucketQuotaTypeAction\n | AddBucketQuotaSizeAction\n | AddBucketQuotaUnitAction\n | AddBucketResetAction\n | AddBucketRetentionAction\n | AddBucketRetentionModeAction\n | AddBucketRetentionUnitAction\n | AddBucketRetentionValidityAction;\n\nexport function addBucketOpen(open: boolean) {\n return {\n type: ADD_BUCKET_OPEN,\n open: open,\n };\n}\nexport function addBucketName(name: string) {\n return {\n type: ADD_BUCKET_NAME,\n name: name,\n };\n}\n\nexport function addBucketVersioning(versioned: boolean) {\n return {\n type: ADD_BUCKET_VERSIONED,\n versioned: versioned,\n };\n}\n\nexport function addBucketEnableObjectLocking(locking: boolean) {\n return {\n type: ADD_BUCKET_LOCKING,\n locking: locking,\n };\n}\n\nexport function addBucketQuota(quota: boolean) {\n return {\n type: ADD_BUCKET_QUOTA,\n quota: quota,\n };\n}\n\nexport function addBucketQuotaType(quotaType: string) {\n return {\n type: ADD_BUCKET_QUOTA_TYPE,\n quotaType: quotaType,\n };\n}\n\nexport function addBucketQuotaSize(quotaSize: string) {\n return {\n type: ADD_BUCKET_QUOTA_SIZE,\n quotaSize: quotaSize,\n };\n}\n\nexport function addBucketQuotaUnit(quotaUnit: string) {\n return {\n type: ADD_BUCKET_QUOTA_UNIT,\n quotaUnit: quotaUnit,\n };\n}\n\nexport function addBucketReset() {\n return {\n type: ADD_BUCKET_RESET,\n };\n}\n\nexport function addBucketRetention(retention: boolean) {\n return {\n type: ADD_BUCKET_RETENTION,\n retention: retention,\n };\n}\n\nexport function addBucketRetentionMode(mode: string) {\n return {\n type: ADD_BUCKET_RETENTION_MODE,\n retentionMode: mode,\n };\n}\n\nexport function addBucketRetentionUnit(unit: string) {\n return {\n type: ADD_BUCKET_RETENTION_UNIT,\n retentionUnit: unit,\n };\n}\n\nexport function addBucketRetentionValidity(validity: number) {\n return {\n type: ADD_BUCKET_RETENTION_VALIDITY,\n retentionValidity: validity,\n };\n}\n","export interface IIcon {\n active: boolean;\n}\n\nexport const unSelected = \"#081C42\";\nexport const selected = \"#081C42\";\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ViewIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default ViewIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst PencilIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default PencilIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ShareIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n \n );\n};\n\nexport default ShareIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DeleteIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default DeleteIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DescriptionIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default DescriptionIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst CloudIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default CloudIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst ConsoleIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default ConsoleIcon;\n","import React from \"react\";\nimport { IIcon, selected, unSelected } from \"./common\";\n\nconst DeleteIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n \n );\n};\n\nexport default DeleteIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport isString from \"lodash/isString\";\nimport { IconButton } from \"@material-ui/core\";\nimport ViewIcon from \"./TableActionIcons/ViewIcon\";\nimport PencilIcon from \"./TableActionIcons/PencilIcon\";\nimport ShareIcon from \"./TableActionIcons/ShareIcon\";\nimport DeleteIcon from \"./TableActionIcons/DeleteIcon\";\nimport DescriptionIcon from \"./TableActionIcons/DescriptionIcon\";\nimport CloudIcon from \"./TableActionIcons/CloudIcon\";\nimport ConsoleIcon from \"./TableActionIcons/ConsoleIcon\";\nimport DownloadIcon from \"./TableActionIcons/DownloadIcon\";\nimport { Link } from \"react-router-dom\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\n\nconst styles = () =>\n createStyles({\n spacing: {\n margin: \"0 8px\",\n },\n });\n\ninterface IActionButton {\n type: string;\n onClick?: (id: string) => any;\n to?: string;\n valueToSend: any;\n selected: boolean;\n sendOnlyId?: boolean;\n idField: string;\n classes: any;\n}\n\nconst defineIcon = (type: string, selected: boolean) => {\n switch (type) {\n case \"view\":\n return ;\n case \"edit\":\n return ;\n case \"delete\":\n return ;\n case \"description\":\n return ;\n case \"share\":\n return ;\n case \"cloud\":\n return ;\n case \"console\":\n return ;\n case \"download\":\n return ;\n }\n\n return null;\n};\n\nconst TableActionButton = ({\n type,\n onClick,\n valueToSend,\n idField,\n selected,\n to,\n sendOnlyId = false,\n classes,\n}: IActionButton) => {\n const valueClick = sendOnlyId ? valueToSend[idField] : valueToSend;\n\n const buttonElement = (\n {\n e.stopPropagation();\n onClick(valueClick);\n }\n : () => null\n }\n className={classes.spacing}\n >\n {defineIcon(type, selected)}\n \n );\n\n if (onClick) {\n return buttonElement;\n }\n\n if (isString(to)) {\n return (\n {\n e.stopPropagation();\n }}\n >\n {buttonElement}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(TableActionButton);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst HelpIcon = (props: any) => {\n return (\n \n \n \n \n );\n};\n\nexport default HelpIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { Checkbox, Grid, InputLabel, Tooltip } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n checkboxIcons,\n fieldBasic,\n tooltipHelper,\n} from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface CheckBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n index?: number;\n checked: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n ...checkboxIcons,\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n margin: \"15px 0\",\n marginBottom: 0,\n flexBasis: \"initial\",\n },\n });\n\nconst CheckboxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n tooltip = \"\",\n classes,\n}: CheckBoxProps) => {\n return (\n \n \n
\n }\n icon={}\n disabled={disabled}\n />\n
\n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n
\n
\n );\n};\n\nexport default withStyles(styles)(CheckboxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { Fragment, useState } from \"react\";\nimport get from \"lodash/get\";\nimport isString from \"lodash/isString\";\nimport {\n Checkbox,\n Grid,\n IconButton,\n LinearProgress,\n Paper,\n Popover,\n Typography,\n} from \"@material-ui/core\";\nimport { AutoSizer, Column, InfiniteLoader, Table } from \"react-virtualized\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport ViewColumnIcon from \"@material-ui/icons/ViewColumn\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport ArrowDropUpIcon from \"@material-ui/icons/ArrowDropUp\";\nimport TableActionButton from \"./TableActionButton\";\nimport history from \"../../../../history\";\nimport {\n checkboxIcons,\n radioIcons,\n} from \"../FormComponents/common/styleLibrary\";\nimport CheckboxWrapper from \"../FormComponents/CheckboxWrapper/CheckboxWrapper\";\n\n//Interfaces for table Items\n\ninterface ItemActions {\n type: string;\n to?: string;\n sendOnlyId?: boolean;\n hideButtonFunction?: (itemValue: any) => boolean;\n showLoaderFunction?: (itemValue: any) => boolean;\n\n onClick?(valueToSend: any): any;\n}\n\ninterface IColumns {\n label: string;\n elementKey: string;\n renderFunction?: (input: any) => any;\n renderFullObject?: boolean;\n globalClass?: any;\n rowClass?: any;\n width?: number;\n headerTextAlign?: string;\n contentTextAlign?: string;\n enableSort?: boolean;\n}\n\ninterface IInfiniteScrollConfig {\n loadMoreRecords: (indexElements: {\n startIndex: number;\n stopIndex: number;\n }) => Promise;\n recordsCount: number;\n}\n\ninterface ISortConfig {\n triggerSort: (val: any) => any;\n currentSort: string;\n currentDirection: \"ASC\" | \"DESC\" | undefined;\n}\n\ninterface TableWrapperProps {\n itemActions?: ItemActions[] | null;\n columns: IColumns[];\n onSelect?: (e: React.ChangeEvent) => any;\n idField: string;\n isLoading: boolean;\n loadingMessage?: React.ReactNode;\n records: any[];\n classes: any;\n entityName: string;\n selectedItems?: string[];\n radioSelection?: boolean;\n customEmptyMessage?: string;\n customPaperHeight?: string;\n noBackground?: boolean;\n columnsSelector?: boolean;\n textSelectable?: boolean;\n columnsShown?: string[];\n onColumnChange?: (column: string, state: boolean) => any;\n autoScrollToBottom?: boolean;\n infiniteScrollConfig?: IInfiniteScrollConfig;\n sortConfig?: ISortConfig;\n}\n\nconst borderColor = \"#9c9c9c80\";\n\nconst rowText = {\n fontWeight: 400,\n fontSize: 14,\n borderColor: borderColor,\n borderWidth: \"0.5px\",\n height: 40,\n transitionDuration: \"0.3s\",\n padding: \"initial\",\n paddingRight: 6,\n paddingLeft: 6,\n};\n\nconst styles = () =>\n createStyles({\n dialogContainer: {\n padding: \"12px 26px 22px\",\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n padding: \"19px 38px\",\n boxShadow: \"none\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n minHeight: 200,\n overflowY: \"scroll\",\n position: \"relative\",\n \"&::-webkit-scrollbar\": {\n width: 3,\n height: 3,\n },\n },\n noBackground: {\n backgroundColor: \"transparent\",\n border: 0,\n },\n defaultPaperHeight: {\n height: \"calc(100vh - 205px)\",\n },\n allTableSettings: {\n \"& .MuiTableCell-sizeSmall:last-child\": {\n paddingRight: \"initial\",\n },\n \"& .MuiTableCell-body.MuiTableCell-sizeSmall:last-child\": {\n paddingRight: 6,\n },\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: 700,\n fontSize: 14,\n borderColor: \"#39393980\",\n borderWidth: \"0.5px\",\n padding: \"6px 0 10px\",\n },\n },\n },\n rowUnselected: {\n ...rowText,\n color: \"#393939\",\n },\n rowSelected: {\n ...rowText,\n color: \"#081C42\",\n fontWeight: 600,\n },\n paginatorContainer: {\n display: \"flex\",\n justifyContent: \"flex-end\",\n padding: \"5px 38px\",\n },\n checkBoxHeader: {\n width: 50,\n textAlign: \"left\",\n paddingRight: 10,\n \"&.MuiTableCell-paddingCheckbox\": {\n paddingBottom: 4,\n paddingLeft: 0,\n },\n },\n actionsContainer: {\n width: 150,\n borderColor: borderColor,\n },\n paginatorComponent: {\n borderBottom: 0,\n },\n checkBoxRow: {\n borderColor: borderColor,\n padding: \"0 10px 0 0\",\n },\n loadingBox: {\n paddingTop: \"100px\",\n paddingBottom: \"100px\",\n },\n overlayColumnSelection: {\n position: \"absolute\",\n right: 0,\n top: 0,\n },\n popoverContainer: {\n position: \"relative\",\n },\n popoverContent: {\n maxHeight: 250,\n overflowY: \"auto\",\n padding: \"0 10px 10px\",\n },\n shownColumnsLabel: {\n color: \"#9c9c9c\",\n fontSize: 12,\n padding: 10,\n borderBottom: \"#eaeaea 1px solid\",\n width: \"100%\",\n },\n \"@global\": {\n \".rowLine\": {\n borderBottom: `1px solid ${borderColor}`,\n height: 40,\n color: \"#393939\",\n fontSize: 14,\n transitionDuration: 0.3,\n \"&:focus\": {\n outline: \"initial\",\n },\n \"&:hover:not(.ReactVirtualized__Table__headerRow)\": {\n userSelect: \"none\",\n backgroundColor: \"#ececec\",\n fontWeight: 600,\n \"&.canClick\": {\n cursor: \"pointer\",\n },\n \"&.canSelectText\": {\n userSelect: \"text\",\n },\n },\n \"& .selected\": {\n color: \"#081C42\",\n fontWeight: 600,\n },\n },\n \".headerItem\": {\n userSelect: \"none\",\n fontWeight: 700,\n fontSize: 14,\n fontStyle: \"initial\",\n display: \"flex\",\n alignItems: \"center\",\n outline: \"none\",\n },\n \".ReactVirtualized__Table__headerRow\": {\n fontWeight: 700,\n fontSize: 14,\n borderColor: \"#39393980\",\n textTransform: \"initial\",\n },\n \".optionsAlignment\": {\n textAlign: \"center\",\n },\n \".text-center\": {\n textAlign: \"center\",\n },\n \".text-right\": {\n textAlign: \"right\",\n },\n \".progress-enabled\": {\n paddingTop: 3,\n display: \"inline-block\",\n margin: \"0 10px\",\n position: \"relative\",\n width: 18,\n height: 18,\n },\n \".progress-enabled > .MuiCircularProgress-root\": {\n position: \"absolute\",\n left: 0,\n top: 3,\n },\n },\n ...checkboxIcons,\n ...radioIcons,\n });\n\nconst selectWidth = 45;\n\n// Function to render elements in table\nconst subRenderFunction = (\n rowData: any,\n column: IColumns,\n isSelected: boolean\n) => {\n const itemElement = isString(rowData)\n ? rowData\n : get(rowData, column.elementKey, null); // If the element is just a string, we render it as it is\n const renderConst = column.renderFullObject ? rowData : itemElement;\n\n const renderElement = column.renderFunction\n ? column.renderFunction(renderConst)\n : renderConst; // If render function is set, we send the value to the function.\n\n return (\n \n {renderElement}\n \n );\n};\n\n// Function to calculate common column width for elements with no with size\nconst calculateColumnRest = (\n columns: IColumns[],\n containerWidth: number,\n actionsWidth: number,\n hasSelect: boolean,\n hasActions: boolean,\n columnsSelector: boolean,\n columnsShown: string[]\n) => {\n let colsItems = [...columns];\n\n if (columnsSelector) {\n colsItems = columns.filter((column) =>\n columnsShown.includes(column.elementKey)\n );\n }\n\n let initialValue = containerWidth;\n\n if (hasSelect) {\n initialValue -= selectWidth;\n }\n\n if (hasActions) {\n initialValue -= actionsWidth;\n }\n\n let freeSpacing = colsItems.reduce((total, currValue) => {\n return currValue.width ? total - currValue.width : total;\n }, initialValue);\n\n return freeSpacing / colsItems.filter((el) => !el.width).length;\n};\n\n// Function that renders Columns in table\nconst generateColumnsMap = (\n columns: IColumns[],\n containerWidth: number,\n actionsWidth: number,\n hasSelect: boolean,\n hasActions: boolean,\n selectedItems: string[],\n idField: string,\n columnsSelector: boolean,\n columnsShown: string[],\n sortColumn: string,\n sortDirection: \"ASC\" | \"DESC\" | undefined\n) => {\n const commonRestWidth = calculateColumnRest(\n columns,\n containerWidth,\n actionsWidth,\n hasSelect,\n hasActions,\n columnsSelector,\n columnsShown\n );\n return columns.map((column: IColumns, index: number) => {\n if (columnsSelector && !columnsShown.includes(column.elementKey)) {\n return null;\n }\n\n const disableSort = column.enableSort ? !column.enableSort : true;\n\n return (\n (\n \n {sortColumn === column.elementKey && (\n \n {sortDirection === \"ASC\" ? (\n \n ) : (\n \n )}\n \n )}\n {column.label}\n \n )}\n className={\n column.contentTextAlign ? `text-${column.contentTextAlign}` : \"\"\n }\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField]\n )\n : false;\n return subRenderFunction(rowData, column, isSelected);\n }}\n width={column.width || commonRestWidth}\n disableSort={disableSort}\n defaultSortDirection={\"ASC\"}\n />\n );\n });\n};\n\n// Function to render the action buttons\nconst elementActions = (\n actions: ItemActions[],\n valueToSend: any,\n selected: boolean,\n idField: string\n) => {\n return actions.map((action: ItemActions, index: number) => {\n if (action.type === \"view\") {\n return null;\n }\n\n const vlSend =\n typeof valueToSend === \"string\" ? valueToSend : valueToSend[idField];\n\n if (action.hideButtonFunction) {\n if (action.hideButtonFunction(vlSend)) {\n return null;\n }\n }\n\n if (action.showLoaderFunction) {\n if (action.showLoaderFunction(vlSend)) {\n return (\n
\n \n
\n );\n }\n }\n\n return (\n \n );\n });\n};\n\n// Function to calculate the options column width according elements inside\nconst calculateOptionsSize = (containerWidth: number, totalOptions: number) => {\n const minContainerSize = 80;\n const sizeOptions = totalOptions * 45;\n\n if (sizeOptions < minContainerSize) {\n return minContainerSize;\n }\n\n if (sizeOptions > containerWidth) {\n return containerWidth;\n }\n\n return sizeOptions;\n};\n\n// Main function to render the Table Wrapper\nconst TableWrapper = ({\n itemActions,\n columns,\n onSelect,\n records,\n isLoading,\n loadingMessage = Loading...,\n entityName,\n selectedItems,\n idField,\n classes,\n radioSelection = false,\n customEmptyMessage = \"\",\n customPaperHeight = \"\",\n noBackground = false,\n columnsSelector = false,\n textSelectable = false,\n columnsShown = [],\n onColumnChange = (column: string, state: boolean) => {},\n infiniteScrollConfig,\n sortConfig,\n autoScrollToBottom = false,\n}: TableWrapperProps) => {\n const [columnSelectorOpen, setColumnSelectorOpen] = useState(false);\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const findView = itemActions\n ? itemActions.find((el) => el.type === \"view\")\n : null;\n\n const clickAction = (rowItem: any) => {\n if (findView) {\n const valueClick = findView.sendOnlyId ? rowItem[idField] : rowItem;\n if (findView.to) {\n history.push(`${findView.to}/${valueClick}`);\n return;\n }\n\n if (findView.onClick) {\n findView.onClick(valueClick);\n }\n }\n };\n\n const openColumnsSelector = (event: { currentTarget: any }) => {\n setColumnSelectorOpen(!columnSelectorOpen);\n setAnchorEl(event.currentTarget);\n };\n\n const closeColumnSelector = () => {\n setColumnSelectorOpen(false);\n setAnchorEl(null);\n };\n\n const columnsSelection = (columns: IColumns[]) => {\n return (\n \n \n \n \n \n
Shown Columns
\n
\n {columns.map((column: IColumns) => {\n return (\n {\n onColumnChange(column.elementKey, e.target.checked);\n }}\n id={`chbox-${column.label}`}\n name={`chbox-${column.label}`}\n value={column.label}\n />\n );\n })}\n
\n \n
\n );\n };\n\n return (\n \n \n {isLoading && (\n \n \n {loadingMessage}\n \n \n \n \n \n )}\n {columnsSelector && !isLoading && records.length > 0 && (\n
\n {columnsSelection(columns)}\n
\n )}\n {records && !isLoading && records.length > 0 ? (\n !!records[index]}\n loadMoreRows={\n infiniteScrollConfig\n ? infiniteScrollConfig.loadMoreRecords\n : () => new Promise(() => true)\n }\n rowCount={\n infiniteScrollConfig\n ? infiniteScrollConfig.recordsCount\n : records.length\n }\n >\n {({ onRowsRendered, registerChild }) => (\n \n {({ width, height }: any) => {\n const optionsWidth = calculateOptionsSize(\n width,\n itemActions\n ? itemActions.filter((el) => el.type !== \"view\").length\n : 0\n );\n const hasSelect: boolean = !!(onSelect && selectedItems);\n const hasOptions: boolean = !!(\n (itemActions && itemActions.length > 1) ||\n (itemActions &&\n itemActions.length === 1 &&\n itemActions[0].type !== \"view\")\n );\n return (\n (\n \n {customEmptyMessage !== \"\"\n ? customEmptyMessage\n : `There are no ${entityName} yet.`}\n \n )}\n overscanRowCount={10}\n rowHeight={40}\n width={width}\n rowCount={records.length}\n rowGetter={({ index }) => records[index]}\n onRowClick={({ rowData }) => {\n clickAction(rowData);\n }}\n rowClassName={`rowLine ${findView ? \"canClick\" : \"\"} ${\n !findView && textSelectable ? \"canSelectText\" : \"\"\n }`}\n onRowsRendered={onRowsRendered}\n sort={sortConfig ? sortConfig.triggerSort : undefined}\n sortBy={sortConfig ? sortConfig.currentSort : undefined}\n sortDirection={\n sortConfig ? sortConfig.currentDirection : undefined\n }\n scrollToIndex={\n autoScrollToBottom ? records.length - 1 : -1\n }\n >\n {hasSelect && (\n Select}\n dataKey={idField}\n width={selectWidth}\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField]\n )\n : false;\n\n return (\n {\n e.stopPropagation();\n }}\n checkedIcon={\n \n }\n icon={\n \n }\n />\n );\n }}\n />\n )}\n {generateColumnsMap(\n columns,\n width,\n optionsWidth,\n hasSelect,\n hasOptions,\n selectedItems || [],\n idField,\n columnsSelector,\n columnsShown,\n sortConfig ? sortConfig.currentSort : \"\",\n sortConfig ? sortConfig.currentDirection : undefined\n )}\n {hasOptions && (\n Options}\n dataKey={idField}\n width={optionsWidth}\n headerClassName=\"optionsAlignment\"\n className=\"optionsAlignment\"\n cellRenderer={({ rowData }) => {\n const isSelected = selectedItems\n ? selectedItems.includes(\n isString(rowData) ? rowData : rowData[idField]\n )\n : false;\n return elementActions(\n itemActions || [],\n rowData,\n isSelected,\n idField\n );\n }}\n />\n )}\n \n );\n }}\n \n )}\n \n ) : (\n \n {!isLoading && (\n
\n {customEmptyMessage !== \"\"\n ? customEmptyMessage\n : `There are no ${entityName} yet.`}\n
\n )}\n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(TableWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport { Dialog, DialogContent, DialogTitle } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { snackBarCommon } from \"../FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { snackBarMessage } from \"../../../../types\";\nimport { setModalSnackMessage } from \"../../../../actions\";\n\ninterface IModalProps {\n classes: any;\n onClose: () => void;\n modalOpen: boolean;\n title: string;\n children: any;\n wideLimit?: boolean;\n modalSnackMessage?: snackBarMessage;\n setModalSnackMessage: typeof setModalSnackMessage;\n}\n\nconst baseCloseLine = {\n content: '\" \"',\n borderLeft: \"2px solid #9C9C9C\",\n height: 33,\n width: 1,\n position: \"absolute\",\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n dialogContainer: {\n padding: \"8px 15px 22px\",\n },\n closeContainer: {\n textAlign: \"right\",\n },\n closeButton: {\n width: 45,\n height: 45,\n padding: 0,\n backgroundColor: \"initial\",\n \"&:hover\": {\n backgroundColor: \"initial\",\n },\n \"&:active\": {\n backgroundColor: \"initial\",\n },\n },\n modalCloseIcon: {\n fontSize: 35,\n color: \"#9C9C9C\",\n fontWeight: 300,\n \"&:hover\": {\n color: \"#9C9C9C\",\n },\n },\n closeIcon: {\n \"&::before\": {\n ...baseCloseLine,\n transform: \"rotate(45deg)\",\n },\n \"&::after\": {\n ...baseCloseLine,\n transform: \"rotate(-45deg)\",\n },\n \"&:hover::before, &:hover::after\": {\n borderColor: \"#9C9C9C\",\n },\n width: 24,\n height: 24,\n display: \"block\",\n position: \"relative\",\n },\n titleClass: {\n padding: \"0px 50px 12px\",\n \"& h2\": {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 22,\n },\n },\n modalContent: {\n padding: \"0 50px\",\n },\n customDialogSize: {\n width: \"100%\",\n maxWidth: 765,\n },\n ...snackBarCommon,\n });\n\nconst ModalWrapper = ({\n onClose,\n modalOpen,\n title,\n children,\n classes,\n wideLimit = true,\n modalSnackMessage,\n setModalSnackMessage,\n}: IModalProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n useEffect(() => {\n if (modalSnackMessage) {\n if (modalSnackMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n setOpenSnackbar(true);\n }\n }, [modalSnackMessage]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setModalSnackMessage(\"\");\n };\n\n const customSize = wideLimit\n ? {\n classes: {\n paper: classes.customDialogSize,\n },\n }\n : { maxWidth: \"md\" as const, fullWidth: true };\n\n return (\n \n
\n {\n closeSnackBar();\n }}\n message={modalSnackMessage ? modalSnackMessage.message : \"\"}\n ContentProps={{\n className: `${classes.snackBar} ${\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n autoHideDuration={\n modalSnackMessage && modalSnackMessage.type === \"error\"\n ? 10000\n : 5000\n }\n />\n
\n \n \n \n
\n \n {title}\n \n \n {children}\n \n
\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n modalSnackMessage: state.system.modalSnackBar,\n});\n\nconst connector = connect(mapState, {\n setModalSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ModalWrapper));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport {\n Grid,\n IconButton,\n InputLabel,\n TextField,\n TextFieldProps,\n Tooltip,\n} from \"@material-ui/core\";\nimport { OutlinedInputProps } from \"@material-ui/core/OutlinedInput\";\nimport {\n createStyles,\n makeStyles,\n Theme,\n withStyles,\n} from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n multiline?: boolean;\n type?: string;\n tooltip?: string;\n autoComplete?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n min?: string;\n max?: string;\n overlayIcon?: any;\n overlayAction?: () => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n },\n textBoxWithIcon: {\n position: \"relative\",\n paddingRight: 25,\n },\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n position: \"absolute\",\n top: 7,\n right: 7,\n },\n overlayAction: {\n position: \"absolute\",\n right: 0,\n top: 15,\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n borderRadius: 0,\n \"&::before\": {\n borderColor: \"#9c9c9c\",\n },\n },\n disabled: {\n \"&.MuiInput-underline::before\": {\n borderColor: \"#eaeaea\",\n borderBottomStyle: \"solid\",\n },\n },\n input: {\n padding: \"15px 30px 10px 5px\",\n color: \"#393939\",\n fontSize: 13,\n fontWeight: 600,\n \"&:placeholder\": {\n color: \"#393939\",\n opacity: 1,\n },\n },\n error: {\n color: \"#b53b4b\",\n },\n })\n);\n\nfunction InputField(props: TextFieldProps) {\n const classes = inputStyles();\n\n return (\n }\n {...props}\n />\n );\n}\n\nconst InputBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n type = \"text\",\n autoComplete = \"off\",\n disabled = false,\n multiline = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n min,\n max,\n overlayIcon = null,\n overlayAction,\n classes,\n}: InputBoxProps) => {\n let inputProps: any = { \"data-index\": index };\n\n if (type === \"number\" && min) {\n inputProps[\"min\"] = min;\n }\n\n if (type === \"number\" && max) {\n inputProps[\"max\"] = max;\n }\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n\n
\n \n
\n {overlayIcon && (\n
\n {\n overlayAction();\n }\n : () => null\n }\n size={\"small\"}\n disableFocusRipple={false}\n disableRipple={false}\n disableTouchRipple={false}\n >\n {overlayIcon}\n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(InputBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n FormControl,\n InputLabel,\n MenuItem,\n Select,\n InputBase,\n Tooltip,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface selectorTypes {\n label: string;\n value: string;\n}\n\ninterface SelectProps {\n options: selectorTypes[];\n value: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n onChange: (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => void;\n disabled?: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n lineHeight: 1,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n },\n input: {\n position: \"relative\",\n color: \"#393939\",\n fontSize: 13,\n fontWeight: 600,\n padding: \"15px 20px 10px 10px\",\n borderBottom: \"1px solid #9c9c9c\",\n display: \"flex\",\n alignItems: \"center\",\n \"&:hover\": {\n borderColor: \"#393939\",\n },\n \"&:focus\": {\n backgroundColor: \"#fff\",\n },\n },\n })\n)(InputBase);\n\nconst SelectWrapper = ({\n classes,\n id,\n name,\n onChange,\n options,\n label,\n tooltip = \"\",\n value,\n disabled = false,\n}: SelectProps) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n \n }\n disabled={disabled}\n >\n {options.map((option) => (\n \n {option.label}\n \n ))}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(SelectWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Radio, { RadioProps } from \"@material-ui/core/Radio\";\nimport { InputLabel, Tooltip } from \"@material-ui/core\";\nimport {\n createStyles,\n Theme,\n withStyles,\n makeStyles,\n} from \"@material-ui/core/styles\";\nimport { fieldBasic, radioIcons, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\nexport interface SelectorTypes {\n label: string;\n value: string;\n}\n\ninterface RadioGroupProps {\n selectorOptions: SelectorTypes[];\n currentSelection: string;\n label: string;\n id: string;\n name: string;\n tooltip?: string;\n disableOptions?: boolean;\n onChange: (e: React.ChangeEvent) => void;\n classes: any;\n displayInColumn?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n radioBoxContainer: {},\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n justifyContent: \"space-between\",\n borderBottom: \"#9c9c9c 1px solid\",\n paddingBottom: 10,\n marginTop: 11,\n },\n optionLabel: {\n \"&.Mui-disabled\": {\n \"& .MuiFormControlLabel-label\": {\n color: \"#9c9c9c\",\n },\n },\n \"&:last-child\": {\n marginRight: 0,\n },\n \"& .MuiFormControlLabel-label\": {\n fontSize: 12,\n color: \"#000\",\n },\n },\n checkedOption: {\n \"& .MuiFormControlLabel-label\": {\n fontSize: 12,\n color: \"#000\",\n fontWeight: 700,\n },\n },\n });\n\nconst radioStyles = makeStyles({\n root: {\n \"&:hover\": {\n backgroundColor: \"transparent\",\n },\n },\n ...radioIcons,\n});\n\nconst RadioButton = (props: RadioProps) => {\n const classes = radioStyles();\n\n return (\n }\n icon={}\n {...props}\n />\n );\n};\n\nexport const RadioGroupSelector = ({\n selectorOptions = [],\n currentSelection,\n label,\n id,\n name,\n onChange,\n tooltip = \"\",\n disableOptions = false,\n classes,\n displayInColumn = false,\n}: RadioGroupProps) => {\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n\n
\n \n {selectorOptions.map((selectorOption) => {\n return (\n }\n label={selectorOption.label}\n disabled={disableOptions}\n className={clsx(classes.optionLabel, {\n [classes.checkedOption]:\n selectorOption.value === currentSelection,\n })}\n />\n );\n })}\n \n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(RadioGroupSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { InputLabel, Switch, Tooltip, Typography } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { actionsTray, fieldBasic } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface IFormSwitch {\n label?: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n description?: string;\n index?: number;\n indicatorLabels?: string[];\n checked: boolean;\n switchOnly?: boolean;\n containerClass?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#081C42\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#081C42\",\n },\n },\n },\n divContainer: {\n borderBottom: \"#9c9c9c 1px solid\",\n paddingBottom: 14,\n marginBottom: 20,\n },\n wrapperContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n maxWidth: 840,\n margin: \"0px auto\",\n },\n indicatorLabel: {\n fontSize: 12,\n fontWeight: 600,\n color: \"#081C42\",\n margin: \"0 8px 0 10px\",\n },\n switchContainer: {\n display: \"flex\",\n },\n fieldDescription: {\n marginTop: 4,\n color: \"#999999\",\n },\n ...actionsTray,\n ...fieldBasic,\n });\n\nconst StyledSwitch = withStyles({\n root: {\n alignItems: \"flex-start\",\n height: 18,\n padding: \"0 12px\",\n display: \"flex\",\n position: \"relative\",\n },\n switchBase: {\n color: \"#fff\",\n padding: 0,\n top: \"initial\",\n \"&$checked\": {\n color: \"#fff\",\n },\n \"&$checked + $track\": {\n backgroundColor: \"#081C42\",\n opacity: 1,\n height: 15,\n },\n \"&:hover\": {\n backgroundColor: \"#fff\",\n },\n },\n checked: {},\n track: {\n height: 15,\n backgroundColor: \"#9C9C9C\",\n border: \"#081C42 1px solid\",\n opacity: 1,\n padding: 0,\n marginTop: 1.5,\n \"&$checked\": {\n backgroundColor: \"#081C42\",\n },\n },\n thumb: {\n backgroundColor: \"#fff\",\n border: \"#081C42 1px solid\",\n boxShadow: \"none\",\n width: 18,\n height: 18,\n padding: 0,\n marginLeft: 10,\n },\n})(Switch);\n\nconst FormSwitchWrapper = ({\n label = \"\",\n onChange,\n value,\n id,\n name,\n checked = false,\n disabled = false,\n switchOnly = false,\n tooltip = \"\",\n description = \"\",\n indicatorLabels = [],\n containerClass = \"\",\n classes,\n}: IFormSwitch) => {\n const switchComponent = (\n \n
\n \n {indicatorLabels.length === 2 && (\n \n {checked ? indicatorLabels[0] : indicatorLabels[1]}\n \n )}\n
\n
\n );\n\n if (switchOnly) {\n return switchComponent;\n }\n\n return (\n
\n \n {label !== \"\" && (\n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n {switchComponent}\n
\n {description !== \"\" && (\n \n \n {description}\n \n \n )}\n
\n );\n};\n\nexport default withStyles(styles)(FormSwitchWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress, Typography } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { factorForDropdown, getBytes } from \"../../../../common/utils\";\nimport { AppState } from \"../../../../store\";\nimport { connect } from \"react-redux\";\nimport {\n addBucketEnableObjectLocking,\n addBucketName,\n addBucketQuota,\n addBucketQuotaSize,\n addBucketQuotaType,\n addBucketQuotaUnit,\n addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n addBucketVersioning,\n} from \"../actions\";\nimport { useDebounce } from \"use-debounce\";\nimport { MakeBucketRequest } from \"../types\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n quotaSizeContainer: {\n flexGrow: 1,\n },\n sizeFactorContainer: {\n flexGrow: 0,\n maxWidth: 80,\n marginLeft: 8,\n alignSelf: \"flex-start\" as const,\n },\n ...modalBasic,\n });\n\ninterface IAddBucketProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => void;\n addBucketName: typeof addBucketName;\n addBucketVersioned: typeof addBucketVersioning;\n enableObjectLocking: typeof addBucketEnableObjectLocking;\n addBucketQuota: typeof addBucketQuota;\n addBucketQuotaType: typeof addBucketQuotaType;\n addBucketQuotaSize: typeof addBucketQuotaSize;\n addBucketQuotaUnit: typeof addBucketQuotaUnit;\n addBucketRetention: typeof addBucketRetention;\n addBucketRetentionMode: typeof addBucketRetentionMode;\n addBucketRetentionUnit: typeof addBucketRetentionUnit;\n addBucketRetentionValidity: typeof addBucketRetentionValidity;\n setModalError: typeof setModalErrorSnackMessage;\n bucketName: string;\n versioningEnabled: boolean;\n lockingEnabled: boolean;\n quotaEnabled: boolean;\n quotaType: string;\n quotaSize: string;\n quotaUnit: string;\n retentionEnabled: boolean;\n retentionMode: string;\n retentionUnit: string;\n retentionValidity: number;\n}\n\nconst AddBucket = ({\n classes,\n open,\n closeModalAndRefresh,\n addBucketName,\n addBucketVersioned,\n enableObjectLocking,\n addBucketQuota,\n addBucketQuotaType,\n addBucketQuotaSize,\n addBucketQuotaUnit,\n addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n setModalError,\n bucketName,\n versioningEnabled,\n lockingEnabled,\n quotaEnabled,\n quotaType,\n quotaSize,\n quotaUnit,\n retentionEnabled,\n retentionMode,\n retentionUnit,\n retentionValidity,\n}: IAddBucketProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [sendEnabled, setSendEnabled] = useState(false);\n const [lockingFieldDisabled, setLockingFieldDisabled] = useState(\n false\n );\n\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n\n let request: MakeBucketRequest = {\n name: bucketName,\n versioning: versioningEnabled,\n locking: lockingEnabled,\n };\n\n if (quotaEnabled) {\n const amount = getBytes(quotaSize, quotaUnit, false);\n request.quota = {\n enabled: true,\n quota_type: quotaType,\n amount: parseInt(amount),\n };\n }\n\n if (retentionEnabled) {\n request.retention = {\n mode: retentionMode,\n unit: retentionUnit,\n validity: retentionValidity,\n };\n }\n\n api\n .invoke(\"POST\", \"/api/v1/buckets\", request)\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh(true);\n })\n .catch((err) => {\n setAddLoading(false);\n setModalError(err);\n });\n\n resetForm();\n };\n\n const [value] = useDebounce(bucketName, 1000);\n\n useEffect(() => {\n addBucketName(value);\n }, [value, addBucketName]);\n\n const resetForm = () => {\n addBucketName(\"\");\n addBucketVersioned(false);\n enableObjectLocking(false);\n addBucketQuota(false);\n addBucketQuotaType(\"hard\");\n addBucketQuotaSize(\"1\");\n addBucketQuotaUnit(\"TiB\");\n addBucketRetention(false);\n addBucketRetentionMode(\"compliance\");\n addBucketRetentionUnit(\"days\");\n addBucketRetentionValidity(1);\n };\n\n useEffect(() => {\n let valid = false;\n\n if (bucketName.trim() !== \"\") {\n valid = true;\n }\n\n if (quotaEnabled && valid) {\n if (quotaSize.trim() === \"\" || parseInt(quotaSize) === 0) {\n valid = false;\n }\n }\n\n if (!versioningEnabled || !retentionEnabled) {\n addBucketRetention(false);\n addBucketRetentionMode(\"compliance\");\n addBucketRetentionUnit(\"days\");\n addBucketRetentionValidity(1);\n }\n\n if (retentionEnabled) {\n // if retention is enabled, then objec locking should be enabled as well\n enableObjectLocking(true);\n setLockingFieldDisabled(true);\n } else {\n setLockingFieldDisabled(false);\n }\n\n if (\n retentionEnabled &&\n (Number.isNaN(retentionValidity) || retentionValidity < 1)\n ) {\n valid = false;\n }\n\n setSendEnabled(valid);\n }, [\n bucketName,\n retentionEnabled,\n lockingEnabled,\n quotaType,\n quotaSize,\n quotaUnit,\n quotaEnabled,\n retentionEnabled,\n addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n retentionValidity,\n ]);\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n addBucketName(event.target.value);\n }}\n label=\"Bucket Name\"\n value={bucketName}\n />\n \n \n \n Features\n \n
\n
\n \n ) => {\n addBucketVersioned(event.target.checked);\n }}\n description={\n \"Allows to keep multiple versions of the same object under the same key.\"\n }\n label={\"Versioning\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n \n ) => {\n enableObjectLocking(event.target.checked);\n }}\n label={\"Object Locking\"}\n description={\n \"Required to support retention and legal hold. Can only be enabled at bucket creation.\"\n }\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n \n ) => {\n addBucketQuota(event.target.checked);\n }}\n label={\"Quota\"}\n description={\"Limit the amount of data in the bucket.\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n {quotaEnabled && (\n \n \n ) => {\n addBucketQuotaType(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"hard\", label: \"Hard\" },\n { value: \"fifo\", label: \"FIFO\" },\n ]}\n />\n \n \n
\n
\n ) => {\n addBucketQuotaSize(e.target.value);\n }}\n label=\"Quota\"\n value={quotaSize}\n required\n min=\"1\"\n />\n
\n
\n \n ) => {\n addBucketQuotaUnit(e.target.value as string);\n }}\n options={factorForDropdown()}\n />\n
\n
\n
\n
\n )}\n {versioningEnabled && (\n \n ) => {\n addBucketRetention(event.target.checked);\n }}\n label={\"Retention\"}\n description={\n \"Impose rules to prevent object deletion for a period of time.\"\n }\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n )}\n {retentionEnabled && (\n \n \n ) => {\n addBucketRetentionMode(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"compliance\", label: \"Compliance\" },\n { value: \"governance\", label: \"Governance\" },\n ]}\n />\n \n \n ) => {\n addBucketRetentionUnit(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"days\", label: \"Days\" },\n { value: \"years\", label: \"Years\" },\n ]}\n />\n \n \n ) => {\n addBucketRetentionValidity(e.target.valueAsNumber);\n }}\n label=\"Retention Validity\"\n value={String(retentionValidity)}\n required\n min=\"1\"\n />\n \n \n )}\n
\n \n \n Clear\n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n addBucketModalOpen: state.buckets.open,\n bucketName: state.buckets.addBucketName,\n versioningEnabled: state.buckets.addBucketVersioningEnabled,\n lockingEnabled: state.buckets.addBucketLockingEnabled,\n quotaEnabled: state.buckets.addBucketQuotaEnabled,\n quotaType: state.buckets.addBucketQuotaType,\n quotaSize: state.buckets.addBucketQuotaSize,\n quotaUnit: state.buckets.addBucketQuotaUnit,\n retentionEnabled: state.buckets.addBucketRetentionEnabled,\n retentionMode: state.buckets.addBucketRetentionMode,\n retentionUnit: state.buckets.addBucketRetentionUnit,\n retentionValidity: state.buckets.addBucketRetentionValidity,\n});\n\nconst connector = connect(mapState, {\n addBucketName: addBucketName,\n addBucketVersioned: addBucketVersioning,\n enableObjectLocking: addBucketEnableObjectLocking,\n addBucketQuota: addBucketQuota,\n addBucketQuotaType: addBucketQuotaType,\n addBucketQuotaSize: addBucketQuotaSize,\n addBucketQuotaUnit: addBucketQuotaUnit,\n addBucketRetention: addBucketRetention,\n addBucketRetentionMode: addBucketRetentionMode,\n addBucketRetentionUnit: addBucketRetentionUnit,\n addBucketRetentionValidity: addBucketRetentionValidity,\n setModalError: setModalErrorSnackMessage,\n});\n\nexport default connector(withStyles(styles)(AddBucket));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { BucketList } from \"../types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\n\ninterface IDeleteBucketProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedBucket: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteBucket = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n setErrorSnackMessage,\n}: IDeleteBucketProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (!deleteLoading) {\n setDeleteLoading(true);\n\n api\n .invoke(\"DELETE\", `/api/v1/buckets/${selectedBucket}`, {\n name: selectedBucket,\n })\n .then((res: BucketList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n }\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Bucket\n \n {deleteLoading && }\n \n Are you sure you want to delete bucket {selectedBucket}?
\n A bucket can only be deleted if it's empty.\n
\n
\n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteBucket);\n","import React from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\n\ninterface IPageHeader {\n classes: any;\n label: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerContainer: {\n position: \"absolute\",\n width: \"100%\",\n height: 77,\n display: \"flex\",\n backgroundColor: \"#fff\",\n borderBottom: \"#E3E3E3 1px solid\",\n left: 0,\n },\n label: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n },\n labelStyle: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 700,\n marginLeft: 55,\n marginTop: 8,\n },\n });\n\nconst PageHeader = ({ classes, label }: IPageHeader) => {\n return (\n \n \n \n {label}\n \n \n \n );\n};\n\nexport default withStyles(styles)(PageHeader);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport Moment from \"react-moment\";\nimport { Bucket, BucketList, HasPermissionResponse } from \"../types\";\nimport { CreateIcon } from \"../../../../icons\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { AppState } from \"../../../../store\";\nimport { addBucketOpen, addBucketReset } from \"../actions\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddBucket from \"./AddBucket\";\nimport DeleteBucket from \"./DeleteBucket\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IListBucketsProps {\n classes: any;\n addBucketOpen: typeof addBucketOpen;\n addBucketModalOpen: boolean;\n addBucketReset: typeof addBucketReset;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst ListBuckets = ({\n classes,\n addBucketOpen,\n addBucketModalOpen,\n addBucketReset,\n setErrorSnackMessage,\n}: IListBucketsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedBucket, setSelectedBucket] = useState(\"\");\n const [filterBuckets, setFilterBuckets] = useState(\"\");\n const [loadingPerms, setLoadingPerms] = useState(true);\n const [canCreateBucket, setCanCreateBucket] = useState(false);\n\n // check the permissions for creating bucket\n useEffect(() => {\n if (loadingPerms) {\n const fetchPerms = () => {\n api\n .invoke(\"POST\", `/api/v1/has-permission`, {\n actions: [\n {\n id: \"createBucket\",\n action: \"s3:CreateBucket\",\n },\n ],\n })\n .then((res: HasPermissionResponse) => {\n setLoadingPerms(false);\n if (!res.permissions) {\n return;\n }\n const actions = res.permissions ? res.permissions : [];\n\n let canCreate = actions.find((s) => s.id == \"createBucket\");\n if (canCreate && canCreate.can) {\n setCanCreateBucket(true);\n } else {\n setCanCreateBucket(false);\n }\n\n setLoadingPerms(false);\n })\n .catch((err: any) => {\n setLoadingPerms(false);\n setErrorSnackMessage(err);\n });\n };\n fetchPerms();\n }\n }, [loadingPerms, setErrorSnackMessage]);\n\n useEffect(() => {\n if (loading) {\n const fetchRecords = () => {\n setLoading(true);\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n setLoading(false);\n setRecords(res.buckets || []);\n })\n .catch((err: any) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n };\n fetchRecords();\n }\n }, [loading, setErrorSnackMessage]);\n\n const closeAddModalAndRefresh = (refresh: boolean) => {\n addBucketOpen(false);\n addBucketReset();\n\n if (refresh) {\n setLoading(true);\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n setLoading(true);\n }\n };\n\n const confirmDeleteBucket = (bucket: string) => {\n setDeleteOpen(true);\n setSelectedBucket(bucket);\n };\n\n const tableActions = [\n { type: \"view\", to: `/buckets`, sendOnlyId: true },\n { type: \"delete\", onClick: confirmDeleteBucket, sendOnlyId: true },\n ];\n\n const displayParsedDate = (date: string) => {\n return {date};\n };\n\n const filteredRecords = records.filter((b: Bucket) => {\n if (filterBuckets === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterBuckets) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n return (\n \n {addBucketModalOpen && (\n \n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n \n \n \n \n {\n setFilterBuckets(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n {canCreateBucket && (\n }\n onClick={() => {\n addBucketOpen(true);\n }}\n >\n Create Bucket\n \n )}\n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n addBucketModalOpen: state.buckets.open,\n});\n\nconst connector = connect(mapState, {\n addBucketOpen,\n addBucketReset,\n setErrorSnackMessage,\n});\n\nexport default connector(withStyles(styles)(ListBuckets));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\ninterface ISetAccessPolicyProps {\n classes: any;\n open: boolean;\n bucketName: string;\n actualPolicy: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst SetAccessPolicy = ({\n classes,\n open,\n bucketName,\n actualPolicy,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: ISetAccessPolicyProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [accessPolicy, setAccessPolicy] = useState(\"\");\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"PUT\", `/api/v1/buckets/${bucketName}/set-policy`, {\n access: accessPolicy,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n setAccessPolicy(actualPolicy);\n }, [setAccessPolicy, actualPolicy]);\n\n return (\n {\n closeModalAndRefresh();\n }}\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n setAccessPolicy(e.target.value as string);\n }}\n options={[\n { value: \"PRIVATE\", label: \"Private\" },\n { value: \"PUBLIC\", label: \"Public\" },\n ]}\n />\n \n \n \n \n Set\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SetAccessPolicy));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\ninterface ISetRetentionConfigProps {\n classes: any;\n open: boolean;\n bucketName: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst SetRetentionConfig = ({\n classes,\n open,\n bucketName,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: ISetRetentionConfigProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [retentionMode, setRetentionMode] = useState(\"compliance\");\n const [retentionUnit, setRetentionUnit] = useState(\"days\");\n const [retentionValidity, setRetentionValidity] = useState(1);\n const [valid, setValid] = useState(false);\n\n const setRetention = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"PUT\", `/api/v1/buckets/${bucketName}/retention`, {\n mode: retentionMode,\n unit: retentionUnit,\n validity: retentionValidity,\n })\n .then(() => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n if (Number.isNaN(retentionValidity) || retentionValidity < 1) {\n setValid(false);\n return;\n }\n setValid(true);\n }, [retentionValidity]);\n\n return (\n {\n closeModalAndRefresh();\n }}\n >\n ) => {\n setRetention(e);\n }}\n >\n \n \n \n ) => {\n setRetentionMode(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"compliance\", label: \"Compliance\" },\n { value: \"governance\", label: \"Governance\" },\n ]}\n />\n \n \n ) => {\n setRetentionUnit(e.target.value as string);\n }}\n selectorOptions={[\n { value: \"days\", label: \"Days\" },\n { value: \"years\", label: \"Years\" },\n ]}\n />\n \n \n ) => {\n setRetentionValidity(e.target.valueAsNumber);\n }}\n label=\"Retention Validity\"\n value={String(retentionValidity)}\n required\n min=\"1\"\n />\n \n \n \n \n Set\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(SetRetentionConfig));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { ChangeEvent, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport api from \"../../../../common/api\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Table from \"@material-ui/core/Table\";\nimport { ArnList } from \"../types\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface IAddEventProps {\n classes: any;\n open: boolean;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddEvent = ({\n classes,\n open,\n selectedBucket,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IAddEventProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [prefix, setPrefix] = useState(\"\");\n const [suffix, setSuffix] = useState(\"\");\n const [arn, setArn] = useState(\"\");\n const [selectedEvents, setSelectedEvents] = useState([]);\n const [arnList, setArnList] = useState([]);\n\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"POST\", `/api/v1/buckets/${selectedBucket}/events`, {\n configuration: {\n arn: arn,\n events: selectedEvents,\n prefix: prefix,\n suffix: suffix,\n },\n ignoreExisting: true,\n })\n .then(() => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const fetchArnList = useCallback(() => {\n setAddLoading(true);\n api\n .invoke(\"GET\", `/api/v1/admin/arns`)\n .then((res: ArnList) => {\n let arns: string[] = [];\n if (res.arns !== null) {\n arns = res.arns;\n }\n setAddLoading(false);\n setArnList(arns);\n })\n .catch((err: any) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [setModalErrorSnackMessage]);\n\n useEffect(() => {\n fetchArnList();\n }, [fetchArnList]);\n\n const events = [\n { label: \"PUT - Object Uploaded\", value: \"put\" },\n { label: \"GET - Object accessed\", value: \"get\" },\n { label: \"DELETE - Object Deleted\", value: \"delete\" },\n ];\n\n const handleClick = (\n event: React.MouseEvent | ChangeEvent,\n name: string\n ) => {\n const selectedIndex = selectedEvents.indexOf(name);\n let newSelected: string[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(selectedEvents, name);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(selectedEvents.slice(1));\n } else if (selectedIndex === selectedEvents.length - 1) {\n newSelected = newSelected.concat(selectedEvents.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(\n selectedEvents.slice(0, selectedIndex),\n selectedEvents.slice(selectedIndex + 1)\n );\n }\n setSelectedEvents(newSelected);\n };\n\n const arnValues = arnList.map((arnConstant) => ({\n label: arnConstant,\n value: arnConstant,\n }));\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Subscribe To Event\"\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n setArn(e.target.value as string);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"ARN\"}\n value={arn}\n options={arnValues}\n />\n \n \n \n \n \n Select\n Event\n \n \n \n {events.map((row) => (\n handleClick(event, row.value)}\n >\n \n handleClick(event, row.value)}\n checked={selectedEvents.includes(row.value)}\n />\n \n \n {row.label}\n \n \n ))}\n \n
\n
\n \n
\n
\n \n ) => {\n setPrefix(e.target.value);\n }}\n />\n \n \n ) => {\n setSuffix(e.target.value);\n }}\n />\n \n \n
\n
\n
\n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(AddEvent));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { BucketEvent, BucketList } from \"../types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\n\ninterface IDeleteEventProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedBucket: string;\n bucketEvent: BucketEvent | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteEvent = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n bucketEvent,\n setErrorSnackMessage,\n}: IDeleteEventProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n if (bucketEvent == null) {\n return;\n }\n\n setDeleteLoading(true);\n\n const events = get(bucketEvent, \"events\", []);\n const prefix = get(bucketEvent, \"prefix\", \"\");\n const suffix = get(bucketEvent, \"suffix\", \"\");\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${selectedBucket}/events/${bucketEvent.arn}`,\n {\n events,\n prefix,\n suffix,\n }\n )\n .then((res: BucketList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Event\n \n {deleteLoading && }\n \n Are you sure you want to delete the this event?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(DeleteEvent);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { IRemoteBucket } from \"../types\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IReplicationModal {\n open: boolean;\n closeModalAndRefresh: () => any;\n classes: any;\n bucketName: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst AddReplicationModal = ({\n open,\n closeModalAndRefresh,\n classes,\n bucketName,\n setModalErrorSnackMessage,\n}: IReplicationModal) => {\n const [addLoading, setAddLoading] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [targetURL, setTargetURL] = useState(\"\");\n const [targetBucket, setTargetBucket] = useState(\"\");\n const [region, setRegion] = useState(\"\");\n\n const addRecord = () => {\n const remoteBucketInfo = {\n accessKey: accessKey,\n secretKey: secretKey,\n sourceBucket: bucketName,\n targetURL: targetURL,\n targetBucket: targetBucket,\n region: region,\n };\n\n api\n .invoke(\"POST\", \"/api/v1/remote-buckets\", remoteBucketInfo)\n .then(() => {\n api\n .invoke(\"GET\", \"/api/v1/remote-buckets\")\n .then((res: any) => {\n const remoteBuckets = get(res, \"buckets\", []);\n const remoteBucket = remoteBuckets.find(\n (itemRemote: IRemoteBucket) => {\n return itemRemote.sourceBucket === bucketName;\n }\n );\n if (remoteBucket && remoteBucket.remoteARN) {\n const remoteARN = remoteBucket.remoteARN;\n const replicationInfo = {\n destination_bucket: targetBucket,\n arn: remoteARN,\n };\n api\n .invoke(\n \"POST\",\n `/api/v1/buckets/${bucketName}/replication`,\n replicationInfo\n )\n .then(() => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n });\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Set Bucket Replication\"\n >\n ) => {\n e.preventDefault();\n setAddLoading(true);\n addRecord();\n }}\n >\n \n \n \n ) => {\n setAccessKey(e.target.value);\n }}\n label=\"Access Key\"\n value={accessKey}\n />\n \n \n ) => {\n setSecretKey(e.target.value);\n }}\n label=\"Secret Key\"\n value={secretKey}\n />\n \n \n ) => {\n setTargetURL(e.target.value);\n }}\n placeholder=\"https://play.min.io:9000\"\n label=\"Target URL\"\n value={targetURL}\n />\n \n \n ) => {\n setTargetBucket(e.target.value);\n }}\n label=\"Target Bucket\"\n value={targetBucket}\n />\n \n \n ) => {\n setRegion(e.target.value);\n }}\n label=\"Region\"\n value={region}\n />\n \n \n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(AddReplicationModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface IEnableBucketEncryptionProps {\n classes: any;\n open: boolean;\n selectedBucket: string;\n closeModalAndRefresh: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst EnableBucketEncryption = ({\n classes,\n open,\n selectedBucket,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IEnableBucketEncryptionProps) => {\n const [loading, setLoading] = useState(false);\n const [kmsKeyID, setKmsKeyID] = useState(\"\");\n const [encryptionType, setEncryptionType] = useState(\"sse-s3\");\n\n const enableBucketEncryption = (event: React.FormEvent) => {\n event.preventDefault();\n if (loading) {\n return;\n }\n api\n .invoke(\"POST\", `/api/v1/buckets/${selectedBucket}/encryption/enable`, {\n encType: encryptionType,\n kmsKeyID: kmsKeyID,\n })\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: any) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeModalAndRefresh();\n }}\n title=\"Enable Bucket Encryption\"\n >\n ) => {\n enableBucketEncryption(e);\n }}\n >\n \n \n \n ) => {\n setEncryptionType(e.target.value as string);\n }}\n id=\"select-encryption-type\"\n name=\"select-encryption-type\"\n label={\"Encryption Type\"}\n value={encryptionType}\n options={[\n {\n label: \"SSE-S3\",\n value: \"sse-s3\",\n },\n {\n label: \"SSE-KMS\",\n value: \"sse-kms\",\n },\n ]}\n />\n \n \n
\n
\n {encryptionType === \"sse-kms\" && (\n \n ) => {\n setKmsKeyID(e.target.value);\n }}\n />\n \n )}\n \n
\n
\n
\n \n \n Save\n \n \n {loading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(EnableBucketEncryption));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\n\ninterface IVersioningEventProps {\n closeVersioningModalAndRefresh: (refresh: boolean) => void;\n modalOpen: boolean;\n selectedBucket: string;\n versioningCurrentState: boolean;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst EnableVersioningModal = ({\n closeVersioningModalAndRefresh,\n modalOpen,\n selectedBucket,\n versioningCurrentState,\n setErrorSnackMessage,\n}: IVersioningEventProps) => {\n const [versioningLoading, setVersioningLoading] = useState(false);\n\n const enableVersioning = () => {\n if (versioningLoading) {\n return;\n }\n setVersioningLoading(true);\n\n api\n .invoke(\"PUT\", `/api/v1/buckets/${selectedBucket}/versioning`, {\n versioning: !versioningCurrentState,\n })\n .then(() => {\n setVersioningLoading(false);\n closeVersioningModalAndRefresh(true);\n })\n .catch((err) => {\n setVersioningLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeVersioningModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Edit Versioning\n \n {versioningLoading && }\n \n Are you sure you want to{\" \"}\n {versioningCurrentState ? \"disable\" : \"enable\"}{\" \"}\n versioning for this bucket?\n {versioningCurrentState && (\n \n
\n
\n File versions won't be automatically deleted\n
\n )}\n
\n
\n \n {\n closeVersioningModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={versioningLoading}\n >\n Cancel\n \n {\n enableVersioning();\n }}\n color=\"secondary\"\n autoFocus\n >\n {versioningCurrentState ? \"Disable\" : \"Enable\"}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(EnableVersioningModal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst UsageIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default UsageIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, IconButton } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport api from \"../../../../common/api\";\nimport {\n BucketEncryptionInfo,\n BucketEvent,\n BucketEventList,\n BucketInfo,\n BucketList,\n BucketObjectLocking,\n BucketReplication,\n BucketReplicationDestination,\n BucketReplicationRule,\n BucketReplicationRuleDeleteMarker,\n BucketVersioning,\n HasPermissionResponse,\n} from \"../types\";\nimport { CreateIcon } from \"../../../../icons\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { containerForHeader } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport SetAccessPolicy from \"./SetAccessPolicy\";\nimport SetRetentionConfig from \"./SetRetentionConfig\";\nimport AddEvent from \"./AddEvent\";\nimport DeleteEvent from \"./DeleteEvent\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddReplicationModal from \"./AddReplicationModal\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport EnableBucketEncryption from \"./EnableBucketEncryption\";\nimport PencilIcon from \"../../Common/TableWrapper/TableActionIcons/PencilIcon\";\nimport EnableVersioningModal from \"./EnableVersioningModal\";\nimport Typography from \"@material-ui/core/Typography\";\nimport UsageIcon from \"../../../../icons/UsageIcon\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n actionsTray: {\n textAlign: \"right\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n searchField: {\n background: \"#FFFFFF\",\n padding: 12,\n borderRadius: 5,\n boxShadow: \"0px 3px 6px #00000012\",\n },\n noRecords: {\n lineHeight: \"24px\",\n textAlign: \"center\",\n padding: \"20px\",\n },\n gridWrapper: {\n width: 320,\n },\n gridContainer: {\n display: \"grid\",\n gridTemplateColumns: \"auto auto\",\n gridGap: 8,\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n \"& div:not(.MuiCircularProgress-root)\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& div:nth-child(odd)\": {\n justifyContent: \"flex-end\",\n fontWeight: 700,\n },\n \"& div:nth-child(2n)\": {\n minWidth: 150,\n },\n },\n masterActions: {\n width: \"25%\",\n minWidth: \"120px\",\n \"& div\": {\n margin: \"5px 0px\",\n },\n },\n paperContainer: {\n padding: 15,\n paddingLeft: 23,\n },\n headerContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n capitalizeFirst: {\n textTransform: \"capitalize\",\n },\n doubleElement: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n encCheckbox: {\n margin: 0,\n padding: 0,\n },\n tabPan: {\n marginTop: \"5px\",\n },\n fixedHeight: {\n height: 165,\n minWidth: 247,\n padding: \"25px 28px\",\n \"& svg\": {\n maxHeight: 18,\n },\n },\n elementTitle: {\n fontWeight: 500,\n color: \"#777777\",\n fontSize: 14,\n marginTop: -9,\n },\n consumptionValue: {\n color: \"#000000\",\n fontSize: \"60px\",\n fontWeight: \"bold\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IViewBucketProps {\n classes: any;\n match: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n index: any;\n value: any;\n}\n\nfunction TabPanel(props: TabPanelProps) {\n const { children, value, index, ...other } = props;\n\n return (\n
\n );\n}\n\nfunction a11yProps(index: any) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n}\n\nconst ViewBucket = ({\n classes,\n match,\n setErrorSnackMessage,\n}: IViewBucketProps) => {\n const [info, setInfo] = useState(null);\n const [records, setRecords] = useState([]);\n const [replicationRules, setReplicationRules] = useState<\n BucketReplicationRule[]\n >([]);\n const [loadingBucket, setLoadingBucket] = useState(true);\n const [loadingEvents, setLoadingEvents] = useState(true);\n const [loadingVersioning, setLoadingVersioning] = useState(true);\n const [loadingObjectLocking, setLoadingLocking] = useState(true);\n const [loadingReplication, setLoadingReplication] = useState(true);\n const [loadingSize, setLoadingSize] = useState(true);\n const [loadingEncryption, setLoadingEncryption] = useState(true);\n const [accessPolicyScreenOpen, setAccessPolicyScreenOpen] = useState(\n false\n );\n const [curTab, setCurTab] = useState(0);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [\n enableEncryptionScreenOpen,\n setEnableEncryptionScreenOpen,\n ] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedEvent, setSelectedEvent] = useState(null);\n const [bucketSize, setBucketSize] = useState(\"0\");\n const [openSetReplication, setOpenSetReplication] = useState(false);\n const [isVersioned, setIsVersioned] = useState(false);\n const [hasObjectLocking, setHasObjectLocking] = useState(false);\n const [encryptionEnabled, setEncryptionEnabled] = useState(false);\n const [retentionConfigOpen, setRetentionConfigOpen] = useState(\n false\n );\n const [enableVersioningOpen, setEnableVersioningOpen] = useState(\n false\n );\n const [loadingPerms, setLoadingPerms] = useState(true);\n const [canPutReplication, setCanPutReplication] = useState(false);\n const [canGetReplication, setCanGetReplication] = useState(false);\n\n // check the permissions for creating bucket\n useEffect(() => {\n if (loadingPerms) {\n const fetchPerms = () => {\n api\n .invoke(\"POST\", `/api/v1/has-permission`, {\n actions: [\n {\n id: \"PutReplicationConfiguration\",\n action: \"s3:PutReplicationConfiguration\",\n bucket_name: bucketName,\n },\n {\n id: \"GetReplicationConfiguration\",\n action: \"s3:GetReplicationConfiguration\",\n bucket_name: bucketName,\n },\n ],\n })\n .then((res: HasPermissionResponse) => {\n setLoadingPerms(false);\n if (!res.permissions) {\n return;\n }\n const actions = res.permissions ? res.permissions : [];\n\n let canPutReplication = actions.find(\n (s) => s.id == \"PutReplicationConfiguration\"\n );\n\n if (canPutReplication && canPutReplication.can) {\n setCanPutReplication(true);\n } else {\n setCanPutReplication(false);\n }\n let canGetReplication = actions.find(\n (s) => s.id == \"GetReplicationConfiguration\"\n );\n\n if (canGetReplication && canGetReplication.can) {\n setCanGetReplication(true);\n } else {\n setCanGetReplication(false);\n }\n\n setLoadingPerms(false);\n })\n .catch((err: any) => {\n setLoadingPerms(false);\n setErrorSnackMessage(err);\n });\n };\n fetchPerms();\n }\n }, [loadingPerms, setErrorSnackMessage]);\n\n const bucketName = match.params[\"bucketName\"];\n\n useEffect(() => {\n if (loadingEvents) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/events`)\n .then((res: BucketEventList) => {\n const events = get(res, \"events\", []);\n setLoadingEvents(false);\n setRecords(events || []);\n })\n .catch((err: any) => {\n setLoadingEvents(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingEvents, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingVersioning) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/versioning`)\n .then((res: BucketVersioning) => {\n setIsVersioned(res.is_versioned);\n setLoadingVersioning(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n setLoadingVersioning(false);\n });\n }\n }, [loadingVersioning, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingVersioning) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/object-locking`)\n .then((res: BucketObjectLocking) => {\n setHasObjectLocking(res.object_locking_enabled);\n setLoadingLocking(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n setLoadingLocking(false);\n });\n }\n }, [loadingObjectLocking, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingReplication) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/replication`)\n .then((res: BucketReplication) => {\n const r = res.rules ? res.rules : [];\n setReplicationRules(r);\n setLoadingReplication(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n setLoadingReplication(false);\n });\n }\n }, [loadingReplication, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingSize) {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n const resBuckets = get(res, \"buckets\", []);\n\n const bucketInfo = resBuckets.find(\n (bucket) => bucket.name === bucketName\n );\n const size = get(bucketInfo, \"size\", \"0\");\n\n setLoadingSize(false);\n setBucketSize(size);\n })\n .catch((err: any) => {\n setLoadingSize(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingSize, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingBucket) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}`)\n .then((res: BucketInfo) => {\n setLoadingBucket(false);\n setInfo(res);\n })\n .catch((err) => {\n setLoadingBucket(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingBucket, setErrorSnackMessage, bucketName]);\n\n useEffect(() => {\n if (loadingEncryption) {\n api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/encryption/info`)\n .then((res: BucketEncryptionInfo) => {\n if (res.algorithm) {\n setEncryptionEnabled(true);\n }\n setLoadingEncryption(false);\n })\n .catch((err) => {\n console.error(err);\n setLoadingEncryption(false);\n });\n }\n }, [loadingEncryption, bucketName]);\n\n const setBucketVersioning = () => {\n setEnableVersioningOpen(true);\n };\n\n const loadAllBucketData = () => {\n setLoadingBucket(true);\n setLoadingSize(true);\n setLoadingReplication(true);\n setLoadingVersioning(true);\n setLoadingEvents(true);\n setLoadingEncryption(true);\n };\n\n const closeAddEventAndRefresh = () => {\n setAddScreenOpen(false);\n loadAllBucketData();\n };\n\n const closeEnableBucketEncryption = () => {\n setEnableEncryptionScreenOpen(false);\n loadAllBucketData();\n };\n\n const closeSetAccessPolicy = () => {\n setAccessPolicyScreenOpen(false);\n loadAllBucketData();\n };\n\n const closeRetentionConfig = () => {\n setRetentionConfigOpen(false);\n loadAllBucketData();\n };\n\n const closeAddReplication = () => {\n setOpenReplicationOpen(false);\n loadAllBucketData();\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n loadAllBucketData();\n }\n };\n\n const confirmDeleteEvent = (evnt: BucketEvent) => {\n setDeleteOpen(true);\n setSelectedEvent(evnt);\n };\n\n const closeEnableVersioning = (refresh: boolean) => {\n setEnableVersioningOpen(false);\n if (refresh) {\n loadAllBucketData();\n }\n };\n\n let accessPolicy = \"n/a\";\n\n if (info !== null) {\n accessPolicy = info.access;\n }\n\n const eventsDisplay = (events: string[]) => {\n return {events.join(\", \")};\n };\n\n const ruleDestDisplay = (events: BucketReplicationDestination) => {\n return {events.bucket.replace(\"arn:aws:s3:::\", \"\")};\n };\n\n const ruleDelDisplay = (events: BucketReplicationRuleDeleteMarker) => {\n return {events.status};\n };\n\n const setOpenReplicationOpen = (open = false) => {\n setOpenSetReplication(open);\n };\n\n const handleEncryptionCheckbox = (\n event: React.ChangeEvent\n ) => {\n if (event.target.checked) {\n setEnableEncryptionScreenOpen(true);\n } else {\n api\n .invoke(\"POST\", `/api/v1/buckets/${bucketName}/encryption/disable`)\n .then(() => {\n setEncryptionEnabled(false);\n })\n .catch((err: any) => {\n setErrorSnackMessage(err);\n });\n }\n };\n\n const tableActions = [{ type: \"delete\", onClick: confirmDeleteEvent }];\n\n return (\n \n {addScreenOpen && (\n \n )}\n {enableEncryptionScreenOpen && (\n \n )}\n {accessPolicyScreenOpen && (\n \n )}\n {retentionConfigOpen && (\n \n )}\n {openSetReplication && (\n \n )}\n {deleteOpen && (\n \n )}\n {enableVersioningOpen && (\n \n )}\n ${match.params[\"bucketName\"]}`} />\n \n \n \n \n \n \n \n \n \n \n \n \n Reported Usage\n \n \n \n \n {niceBytes(bucketSize)}\n \n \n \n \n \n
\n
Access Policy:
\n
\n {loadingBucket ? (\n \n ) : (\n accessPolicy.toLowerCase()\n )}\n \n \n \n
\n
Replication:
\n
\n {replicationRules.length ? \"Yes\" : \"No\"}\n
\n {!hasObjectLocking && (\n \n
Object Locking:
\n
No
\n
\n )}\n
Encryption:
\n
\n handleEncryptionCheckbox(event)}\n checked={encryptionEnabled}\n />\n
\n
\n
\n
\n {hasObjectLocking && (\n \n \n
\n
Object Locking
\n
\n
Versioning:
\n
\n {loadingVersioning ? (\n \n ) : (\n \n {isVersioned && !loadingVersioning ? \"Yes\" : \"No\"}\n  \n {\n setAccessPolicyScreenOpen(true);\n }}\n >\n \n \n \n )}\n
\n
Retention:
\n
\n {loadingVersioning ? (\n \n ) : (\n \n  \n {\n setRetentionConfigOpen(true);\n }}\n >\n \n \n \n )}\n
\n
\n
\n
\n )}\n
\n
\n \n
\n
\n \n \n , newValue: number) => {\n setCurTab(newValue);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n >\n \n {canGetReplication && (\n \n )}\n \n \n \n {curTab === 0 && (\n }\n size=\"medium\"\n onClick={() => {\n setAddScreenOpen(true);\n }}\n >\n Subscribe to Event\n \n )}\n {curTab === 1 && (\n \n {canPutReplication && (\n }\n size=\"medium\"\n onClick={() => {\n setOpenReplicationOpen(true);\n }}\n >\n Add Replication Rule\n \n )}\n \n )}\n \n \n \n \n \n \n {canGetReplication && (\n \n \n \n )}\n \n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ViewBucket));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport history from \"../../../history\";\nimport { Route, Router, Switch, withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../../store\";\nimport { setMenuOpen } from \"../../../actions\";\nimport NotFoundPage from \"../../NotFoundPage\";\nimport ListBuckets from \"./ListBuckets/ListBuckets\";\nimport ViewBucket from \"./ViewBucket/ViewBucket\";\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n});\n\nconst connector = connect(mapState, { setMenuOpen });\n\nconst Buckets = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default withRouter(connector(Buckets));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Controlled as CodeMirror } from \"react-codemirror2\";\nimport { InputLabel, Tooltip } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport { fieldBasic } from \"../common/styleLibrary\";\nimport \"./ConsoleCodeMirror.css\";\n\nrequire(\"codemirror/mode/javascript/javascript\");\n\ninterface ICodeWrapper {\n value: string;\n label?: string;\n tooltip?: string;\n classes: any;\n onChange?: (editor: any, data: any, value: string) => any;\n onBeforeChange: (editor: any, data: any, value: string) => any;\n readOnly?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n });\n\nconst CodeMirrorWrapper = ({\n value,\n label = \"\",\n tooltip = \"\",\n classes,\n onChange = () => {},\n onBeforeChange,\n readOnly = false,\n}: ICodeWrapper) => {\n return (\n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n \n
\n
\n \n \n \n
\n );\n};\n\nexport default withStyles(styles)(CodeMirrorWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n IBarChartConfiguration,\n IBarChartRelation,\n IDataSRep,\n ILinearGraphConfiguration,\n IPieChartConfiguration,\n} from \"./Widgets/types\";\n\nexport enum widgetType {\n singleValue = \"singleValue\",\n linearGraph = \"linearGraph\",\n barChart = \"barChart\",\n pieChart = \"pieChart\",\n singleRep = \"singleRep\",\n}\n\nexport interface IDashboardPanel {\n title: string;\n data: string | object[] | IDataSRep[];\n dataOuter?: string | object[];\n type: widgetType;\n layoutIdentifier: string;\n widgetConfiguration?:\n | ILinearGraphConfiguration[]\n | IBarChartConfiguration[]\n | IPieChartConfiguration;\n color?: string;\n fillColor?: string;\n innerLabel?: string;\n labelDisplayFunction?: (value: string) => any;\n disableYAxis?: boolean;\n xAxisFormatter?: (item: string) => string;\n yAxisFormatter?: (item: string) => string;\n customStructure?: IBarChartRelation[];\n}\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport api from \"../../../common/api\";\nimport { Policy } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport {\n fieldBasic,\n modalBasic,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n jsonPolicyEditor: {\n minHeight: 400,\n width: \"100%\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...fieldBasic,\n });\n\ninterface IAddPolicyProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => void;\n policyEdit: Policy;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddPolicy = ({\n classes,\n open,\n closeModalAndRefresh,\n policyEdit,\n setModalErrorSnackMessage,\n}: IAddPolicyProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [policyName, setPolicyName] = useState(\"\");\n const [policyDefinition, setPolicyDefinition] = useState(\"\");\n\n const addRecord = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"POST\", \"/api/v1/policies\", {\n name: policyName,\n policy: policyDefinition,\n })\n .then((res) => {\n setAddLoading(false);\n\n closeModalAndRefresh(true);\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n if (policyEdit) {\n setPolicyName(policyEdit.name);\n setPolicyDefinition(\n policyEdit ? JSON.stringify(JSON.parse(policyEdit.policy), null, 4) : \"\"\n );\n }\n }, [policyEdit]);\n\n const resetForm = () => {\n setPolicyName(\"\");\n setPolicyDefinition(\"\");\n };\n\n const validSave = policyName.trim() !== \"\";\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n title={`${policyEdit ? \"Info\" : \"Create\"} Policy`}\n >\n ) => {\n addRecord(e);\n }}\n >\n \n \n \n ) => {\n setPolicyName(e.target.value);\n }}\n value={policyName}\n disabled={!!policyEdit}\n />\n \n \n
\n
\n {\n setPolicyDefinition(value);\n }}\n />\n
\n \n {!policyEdit && (\n {\n resetForm();\n }}\n >\n Clear\n \n )}\n\n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddPolicy));\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { PolicyList } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDeletePolicyProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedPolicy: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeletePolicy = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedPolicy,\n setErrorSnackMessage,\n}: IDeletePolicyProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n setDeleteLoading(true);\n api\n .invoke(\"DELETE\", `/api/v1/policy?name=${selectedPolicy}`)\n .then((res: PolicyList) => {\n setDeleteLoading(false);\n\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Policy\n \n {deleteLoading && }\n \n Are you sure you want to delete policy {selectedPolicy}?.\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeletePolicy);\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Policy, PolicyList } from \"./types\";\nimport { CreateIcon } from \"../../../icons\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport AddPolicy from \"./AddPolicy\";\nimport DeletePolicy from \"./DeletePolicy\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport api from \"../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IPoliciesProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst Policies = ({ classes, setErrorSnackMessage }: IPoliciesProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(false);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPolicy, setSelectedPolicy] = useState(\"\");\n const [filterPolicies, setFilterPolicies] = useState(\"\");\n const [policyEdit, setPolicyEdit] = useState(null);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/policies`)\n .then((res: PolicyList) => {\n const policies = get(res, \"policies\", []);\n\n policies.sort((pa, pb) => {\n if (pa.name > pb.name) {\n return 1;\n }\n\n if (pa.name < pb.name) {\n return -1;\n }\n\n return 0;\n });\n\n setLoading(false);\n setRecords(policies);\n })\n .catch((err) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loading, setLoading, setRecords, setErrorSnackMessage]);\n\n const fetchRecords = () => {\n setLoading(true);\n };\n\n const closeAddModalAndRefresh = (refresh: boolean) => {\n setAddScreenOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const confirmDeletePolicy = (policy: string) => {\n setDeleteOpen(true);\n setSelectedPolicy(policy);\n };\n\n const viewAction = (row: any) => {\n setAddScreenOpen(true);\n setPolicyEdit(row);\n };\n\n const tableActions = [\n { type: \"view\", onClick: viewAction },\n { type: \"delete\", onClick: confirmDeletePolicy, sendOnlyId: true },\n ];\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.name.includes(filterPolicies)\n );\n\n return (\n \n {addScreenOpen && (\n \n )}\n {deleteOpen && (\n \n )}\n \n \n \n \n {\n setFilterPolicies(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={() => {\n setAddScreenOpen(true);\n setPolicyEdit(null);\n }}\n >\n Create Policy\n \n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(Policies));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport get from \"lodash/get\";\nimport { Layout } from \"react-grid-layout\";\nimport { IDashboardPanel, widgetType } from \"./types\";\nimport {\n getTimeFromTimestamp,\n niceBytes,\n niceDays,\n textToRGBColor,\n} from \"../../../../common/utils\";\n\nconst dLocalStorageV = \"dashboardConfig\";\n\nexport const defaultWidgetsLayout: Layout[] = [\n {\n w: 1,\n h: 2,\n x: 0,\n y: 0,\n minW: 1,\n i: \"panel-0\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 0,\n minW: 1,\n i: \"panel-1\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 1,\n minW: 1,\n i: \"panel-2\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 2,\n x: 2,\n y: 0,\n minW: 1,\n i: \"panel-3\",\n moved: false,\n static: false,\n },\n {\n w: 2,\n h: 2,\n x: 3,\n y: 0,\n minW: 2,\n i: \"panel-4\",\n moved: false,\n static: false,\n },\n {\n w: 3,\n h: 2,\n x: 5,\n y: 0,\n minW: 2,\n i: \"panel-5\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 0,\n y: 2,\n minW: 1,\n i: \"panel-6\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 0,\n y: 3,\n minW: 1,\n i: \"panel-7\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 2,\n minW: 1,\n i: \"panel-8\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 1,\n y: 3,\n minW: 1,\n i: \"panel-9\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 2,\n y: 2,\n minW: 1,\n i: \"panel-10\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 2,\n y: 3,\n minW: 1,\n i: \"panel-11\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 3,\n y: 2,\n minW: 2,\n i: \"panel-12\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 7,\n y: 2,\n minW: 1,\n i: \"panel-13\",\n moved: false,\n static: false,\n },\n {\n w: 1,\n h: 1,\n x: 7,\n y: 3,\n minW: 1,\n i: \"panel-14\",\n moved: false,\n static: false,\n },\n {\n w: 8,\n h: 2,\n x: 0,\n y: 4,\n minW: 2,\n i: \"panel-15\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 0,\n y: 5,\n minW: 2,\n i: \"panel-16\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 5,\n y: 5,\n minW: 2,\n i: \"panel-17\",\n moved: false,\n static: false,\n },\n {\n w: 8,\n h: 2,\n x: 0,\n y: 7,\n minW: 2,\n i: \"panel-18\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 0,\n y: 9,\n minW: 2,\n i: \"panel-19\",\n moved: false,\n static: false,\n },\n {\n w: 4,\n h: 2,\n x: 5,\n y: 9,\n minW: 2,\n i: \"panel-20\",\n moved: false,\n static: false,\n },\n];\n\nconst colorsMain = [\n \"#6992B7\",\n \"#E2AD17\",\n \"#22B573\",\n \"#F7655E\",\n \"#0071BC\",\n \"#F9E6C5\",\n \"#A6E8C4\",\n \"#F4CECE\",\n \"#ADD5E0\",\n];\n\nexport const panelsConfiguration: IDashboardPanel[] = [\n {\n title: \"Uptime\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-0\",\n labelDisplayFunction: niceDays,\n },\n {\n title: \"Total Online disks\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-1\",\n },\n {\n title: \"Total Offline disks\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-2\",\n },\n {\n title: \"Total Data\",\n data: [],\n dataOuter: [{ name: \"outer\", value: 100 }],\n widgetConfiguration: {\n outerChart: {\n colorList: [\"#9c9c9c\"],\n innerRadius: 51,\n outerRadius: 54,\n startAngle: -15,\n endAngle: 195,\n },\n innerChart: {\n colorList: colorsMain,\n innerRadius: 35,\n outerRadius: 50,\n startAngle: -15,\n endAngle: 195,\n },\n },\n type: widgetType.pieChart,\n layoutIdentifier: \"panel-3\",\n innerLabel: \"N/A\",\n labelDisplayFunction: niceBytes,\n },\n {\n title: \"Data Growth\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-4\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Object size distribution\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"a\",\n color: colorsMain[0],\n background: {\n fill: \"rgba(0,0,0,0.1)\",\n },\n },\n ],\n customStructure: [\n { originTag: \"LESS_THAN_1024_B\", displayTag: \"Less than 1024B\" },\n {\n originTag: \"BETWEEN_1024_B_AND_1_MB\",\n displayTag: \"Between 1024B and 1MB\",\n },\n {\n originTag: \"BETWEEN_1_MB_AND_10_MB\",\n displayTag: \"Between 1MB and 10MB\",\n },\n {\n originTag: \"BETWEEN_10_MB_AND_64_MB\",\n displayTag: \"Between 10MB and 64MB\",\n },\n {\n originTag: \"BETWEEN_64_MB_AND_128_MB\",\n displayTag: \"Between 64MB and 128MB\",\n },\n {\n originTag: \"BETWEEN_128_MB_AND_512_MB\",\n displayTag: \"Between 128MB and 512MB\",\n },\n {\n originTag: \"GREATER_THAN_512_MB\",\n displayTag: \"Greater than 512MB\",\n },\n ],\n type: widgetType.barChart,\n layoutIdentifier: \"panel-5\",\n },\n {\n title: \"Total Online Servers\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-6\",\n },\n {\n title: \"Total Offline Servers\",\n data: \"N/A\",\n type: widgetType.singleValue,\n layoutIdentifier: \"panel-7\",\n },\n {\n title: \"Total S3 Traffic Inbound\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-8\",\n color: \"#22B573\",\n fillColor: \"#A6E8C4\",\n labelDisplayFunction: niceBytes,\n },\n {\n title: \"Total S3 Traffic Outbound\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-9\",\n color: \"#22B573\",\n fillColor: \"#A6E8C4\",\n labelDisplayFunction: niceBytes,\n },\n {\n title: \"Number of Buckets\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#0071BC\",\n fillColor: \"#ADD5E0\",\n layoutIdentifier: \"panel-10\",\n },\n {\n title: \"Number of Objects\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n color: \"#0071BC\",\n fillColor: \"#ADD5E0\",\n layoutIdentifier: \"panel-11\",\n },\n {\n title: \"S3 API Request & Error Rate\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-12\",\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Total Open FDs\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-13\",\n color: \"#F7655E\",\n fillColor: \"#F4CECE\",\n },\n {\n title: \"Total Goroutines\",\n data: [],\n innerLabel: \"N/A\",\n type: widgetType.singleRep,\n layoutIdentifier: \"panel-14\",\n color: \"#F7655E\",\n fillColor: \"#F4CECE\",\n },\n {\n title: \"S3 API Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-15\",\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Total S3 API Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-16\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Active S3 Requests\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-17\",\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Internode Data Transfer\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-18\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Online Disks\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-19\",\n disableYAxis: true,\n xAxisFormatter: getTimeFromTimestamp,\n },\n {\n title: \"Disk Usage\",\n data: [],\n widgetConfiguration: [\n {\n dataKey: \"\",\n keyLabel: \"\",\n lineColor: \"#000\",\n fillColor: \"#000\",\n },\n ],\n type: widgetType.linearGraph,\n layoutIdentifier: \"panel-20\",\n yAxisFormatter: niceBytes,\n xAxisFormatter: getTimeFromTimestamp,\n },\n];\n\nconst calculateMainValue = (elements: any[], metricCalc: string) => {\n if (elements.length === 0) {\n return [\"\", \"0\"];\n }\n\n switch (metricCalc) {\n case \"mean\":\n const sumValues = elements.reduce((accumulator, currValue) => {\n return accumulator + parseFloat(currValue[1]);\n }, 0);\n\n const mean = Math.floor(sumValues / elements.length);\n\n return [\"\", mean.toString()];\n default:\n const sortResult = elements.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n return sortResult[sortResult.length - 1];\n }\n};\n\nconst constructLabelNames = (metrics: any, legendFormat: string) => {\n const keysToReplace = Object.keys(metrics);\n const expToReplace = new RegExp(`{{(${keysToReplace.join(\"|\")})}}`, \"g\");\n\n const replacedLegend = legendFormat.replace(expToReplace, (matchItem) => {\n const nwMatchItem = matchItem.replace(/({{|}})/g, \"\");\n return metrics[nwMatchItem];\n });\n\n // In case not all the legends were replaced, we remove the placeholders.\n return replacedLegend.replace(/{{(.*?)}}/g, \"\");\n};\n\nexport const getWidgetsWithValue = (payload: any[]) => {\n return panelsConfiguration.map((panelItem) => {\n const payloadData = payload.find(\n (panelT) => panelT.title === panelItem.title\n );\n\n if (!payloadData) {\n return panelItem;\n }\n\n const typeOfPayload = payloadData.type;\n\n switch (panelItem.type) {\n case widgetType.singleValue:\n if (typeOfPayload === \"stat\" || typeOfPayload === \"singlestat\") {\n // We sort values & get the last value\n let elements = get(payloadData, \"targets[0].result[0].values\", []);\n\n if (elements === null) {\n elements = [];\n }\n\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valueDisplay = calculateMainValue(elements, metricCalc);\n\n const data = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(valueDisplay[1])\n : valueDisplay[1];\n\n return {\n ...panelItem,\n data,\n };\n }\n break;\n case widgetType.pieChart:\n if (typeOfPayload === \"gauge\") {\n let chartSeries = get(payloadData, \"targets[0].result\", []);\n\n if (chartSeries === null) {\n chartSeries = [];\n }\n\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valuesArray =\n chartSeries.length > 0 ? chartSeries[0].values : [];\n\n const totalValues = calculateMainValue(valuesArray, metricCalc);\n\n const values = chartSeries.map((elementValue: any) => {\n const values = get(elementValue, \"values\", []);\n const metricKeyItem = Object.keys(elementValue.metric);\n\n const sortResult = values.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n const metricName = elementValue.metric[metricKeyItem[0]];\n const value = sortResult[sortResult.length - 1];\n return { name: metricName, value: parseInt(value) };\n });\n\n const innerLabel = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(totalValues[1])\n : totalValues[1];\n\n return {\n ...panelItem,\n data: values,\n innerLabel,\n };\n }\n break;\n case widgetType.linearGraph:\n if (typeOfPayload === \"graph\") {\n let targets = get(payloadData, \"targets\", []);\n if (targets === null) {\n targets = [];\n }\n\n const series: any[] = [];\n const plotValues: any[] = [];\n\n targets.forEach(\n (\n targetMaster: { legendFormat: string; result: any[] },\n index: number\n ) => {\n // Add a new serie to plot variables in case it is not from multiple values\n let results = get(targetMaster, \"result\", []);\n const legendFormat = targetMaster.legendFormat;\n if (results === null) {\n results = [];\n }\n\n results.forEach((itemVals: { metric: object; values: any[] }) => {\n // Label Creation\n const labelName = constructLabelNames(\n itemVals.metric,\n legendFormat\n );\n const keyName = `key_${index}${labelName}`;\n\n // series creation with recently created label\n series.push({\n dataKey: keyName,\n keyLabel: labelName,\n lineColor: \"\",\n fillColor: \"\",\n });\n\n // we iterate over values and create elements\n let values = get(itemVals, \"values\", []);\n if (values === null) {\n values = [];\n }\n\n values.forEach((valInfo: any[]) => {\n const itemIndex = plotValues.findIndex(\n (element) => element.name === valInfo[0]\n );\n\n // Element not exists yet\n if (itemIndex === -1) {\n let itemToPush: any = { name: valInfo[0] };\n itemToPush[keyName] = valInfo[1];\n\n plotValues.push(itemToPush);\n } else {\n plotValues[itemIndex][keyName] = valInfo[1];\n }\n });\n });\n }\n );\n\n const sortedSeries = series.sort((series1: any, series2: any) => {\n if (series1.keyLabel < series2.keyLabel) {\n return -1;\n }\n if (series1.keyLabel > series2.keyLabel) {\n return 1;\n }\n return 0;\n });\n\n const seriesWithColors = sortedSeries.map(\n (serialC: any, index: number) => {\n return {\n ...serialC,\n lineColor:\n colorsMain[index] || textToRGBColor(serialC.keyLabel),\n fillColor:\n colorsMain[index] || textToRGBColor(serialC.keyLabel),\n };\n }\n );\n\n const sortedVals = plotValues.sort(\n (value1: any, value2: any) => value1.name - value2.name\n );\n\n return {\n ...panelItem,\n widgetConfiguration: seriesWithColors,\n data: sortedVals,\n };\n }\n break;\n case widgetType.barChart:\n if (typeOfPayload === \"bargauge\") {\n let chartBars = get(payloadData, \"targets[0].result\", []);\n\n if (chartBars === null) {\n chartBars = [];\n }\n\n const sortFunction = (value1: any[], value2: any[]) =>\n value1[0] - value2[0];\n\n let values = [];\n if (panelItem.customStructure) {\n values = panelItem.customStructure.map((structureItem) => {\n const metricTake = chartBars.find((element: any) => {\n const metricKeyItem = Object.keys(element.metric);\n\n const metricName = element.metric[metricKeyItem[0]];\n\n return metricName === structureItem.originTag;\n });\n\n const elements = get(metricTake, \"values\", []);\n\n const sortResult = elements.sort(sortFunction);\n const lastValue = sortResult[sortResult.length - 1] || [\"\", \"0\"];\n\n return {\n name: structureItem.displayTag,\n a: parseInt(lastValue[1]),\n };\n });\n } else {\n // If no configuration is set, we construct the series for bar chart and return the element\n values = chartBars.map((elementValue: any) => {\n const metricKeyItem = Object.keys(elementValue.metric);\n\n const metricName = elementValue.metric[metricKeyItem[0]];\n\n const elements = get(elementValue, \"values\", []);\n\n const sortResult = elements.sort(sortFunction);\n const lastValue = sortResult[sortResult.length - 1] || [\"\", \"0\"];\n return { name: metricName, a: parseInt(lastValue[1]) };\n });\n }\n\n return {\n ...panelItem,\n data: values,\n };\n }\n break;\n case widgetType.singleRep:\n if (typeOfPayload === \"stat\") {\n // We sort values & get the last value\n let elements = get(payloadData, \"targets[0].result[0].values\", []);\n if (elements === null) {\n elements = [];\n }\n const metricCalc = get(\n payloadData,\n \"options.reduceOptions.calcs[0]\",\n \"lastNotNull\"\n );\n\n const valueDisplay = calculateMainValue(elements, metricCalc);\n\n const sortResult = elements.sort(\n (value1: any[], value2: any[]) => value1[0] - value2[0]\n );\n\n let valuesForBackground = [];\n\n if (sortResult.length === 1) {\n valuesForBackground.push({ value: 0 });\n }\n\n sortResult.forEach((eachVal: any) => {\n valuesForBackground.push({ value: parseInt(eachVal[1]) });\n });\n\n const innerLabel = panelItem.labelDisplayFunction\n ? panelItem.labelDisplayFunction(valueDisplay[1])\n : valueDisplay[1];\n\n return {\n ...panelItem,\n data: valuesForBackground,\n innerLabel,\n };\n }\n break;\n }\n\n return panelItem;\n });\n};\n\nexport const saveDashboardDistribution = (configuration: Layout[]) => {\n localStorage.setItem(dLocalStorageV, btoa(JSON.stringify(configuration)));\n};\n\nexport const getDashboardDistribution = () => {\n const storedConfiguration = localStorage.getItem(dLocalStorageV);\n\n if (!storedConfiguration) {\n return defaultWidgetsLayout;\n }\n\n const parsedConfig = JSON.parse(atob(storedConfiguration));\n\n if (\n parsedConfig.length === 0 ||\n (parsedConfig.length > 0 && !parsedConfig[0].minW)\n ) {\n return defaultWidgetsLayout;\n }\n\n return parsedConfig;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\n\ninterface ISingleValueWidget {\n title: string;\n data: string;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n contentContainer: {\n ...widgetCommon.contentContainer,\n fontWeight: 700,\n color: \"#072045\",\n fontSize: 18,\n textAlign: \"center\" as const,\n },\n });\n\nconst SingleValueWidget = ({ title, data, classes }: ISingleValueWidget) => {\n return (\n
\n
{title}
\n
{data}
\n
\n );\n};\n\nexport default withStyles(styles)(SingleValueWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { getTimeFromTimestamp } from \"../../../../../../common/utils\";\nimport { tooltipCommon } from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tooltipCommon,\n });\n\nconst LineChartTooltip = ({\n active,\n payload,\n label,\n linearConfiguration,\n yAxisFormatter,\n classes,\n}: any) => {\n if (active) {\n return (\n
\n
\n {getTimeFromTimestamp(label, true)}\n
\n {payload &&\n payload.map((pl: any, index: number) => {\n return (\n \n \n
\n \n {linearConfiguration[index].keyLabel}:{\" \"}\n {yAxisFormatter(pl.value)}\n \n
\n
\n );\n })}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(LineChartTooltip);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Area,\n AreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { ILinearGraphConfiguration } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport LineChartTooltip from \"./tooltips/LineChartTooltip\";\n\ninterface ILinearGraphWidget {\n classes: any;\n title: string;\n linearConfiguration: ILinearGraphConfiguration[];\n data: object[];\n hideYAxis?: boolean;\n yAxisFormatter?: (item: string) => string;\n xAxisFormatter?: (item: string) => string;\n panelWidth?: number;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n containerElements: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100% - 18px)\",\n },\n chartCont: {\n position: \"relative\",\n flexGrow: 1,\n minHeight: \"65%\",\n height: 1,\n },\n legendChart: {\n display: \"flex\",\n flexWrap: \"wrap\",\n flex: \"0 1 auto\",\n maxHeight: \"35%\",\n margin: 0,\n overflowY: \"auto\",\n position: \"relative\",\n textAlign: \"center\",\n },\n });\n\nconst LinearGraphWidget = ({\n classes,\n title,\n linearConfiguration,\n data,\n hideYAxis = false,\n yAxisFormatter = (item: string) => item,\n xAxisFormatter = (item: string) => item,\n panelWidth = 0,\n}: ILinearGraphWidget) => {\n let intervalCount = 5;\n\n if (panelWidth !== 0) {\n if (panelWidth > 400) {\n intervalCount = 5;\n } else if (panelWidth > 350) {\n intervalCount = 10;\n } else if (panelWidth > 300) {\n intervalCount = 15;\n } else if (panelWidth > 250) {\n intervalCount = 20;\n } else {\n intervalCount = 30;\n }\n }\n return (\n
\n
{title}
\n
\n
\n \n \n \n xAxisFormatter(value)}\n interval={intervalCount}\n tick={{ fontSize: \"70%\" }}\n tickCount={10}\n />\n dataMax * 4]}\n hide={hideYAxis}\n tickFormatter={(value: any) => yAxisFormatter(value)}\n tick={{ fontSize: \"70%\" }}\n />\n {linearConfiguration.map((section, index) => {\n return (\n \n );\n })}\n \n }\n wrapperStyle={{\n zIndex: 5000,\n }}\n />\n \n \n
\n
\n {linearConfiguration.map((section, index) => {\n return (\n \n \n
{section.keyLabel}
\n
\n );\n })}\n
\n
\n \n );\n};\n\nexport default withStyles(styles)(LinearGraphWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { tooltipCommon } from \"../../../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tooltipCommon,\n });\n\nconst BarChartTooltip = ({\n active,\n payload,\n label,\n barChartConfiguration,\n classes,\n}: any) => {\n if (active) {\n return (\n
\n
{label}
\n {payload &&\n payload.map((pl: any, index: number) => {\n return (\n \n \n
\n {pl.value}\n
\n
\n );\n })}\n \n );\n }\n\n return null;\n};\n\nexport default withStyles(styles)(BarChartTooltip);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport {\n Bar,\n BarChart,\n ResponsiveContainer,\n XAxis,\n YAxis,\n Tooltip,\n} from \"recharts\";\nimport { IBarChartConfiguration } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport BarChartTooltip from \"./tooltips/BarChartTooltip\";\n\ninterface IBarChartWidget {\n classes: any;\n title: string;\n barChartConfiguration: IBarChartConfiguration[];\n data: object[];\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n });\n\nconst CustomizedAxisTick = ({ x, y, payload }: any) => {\n return (\n \n {payload.value}\n \n );\n};\n\nconst BarChartWidget = ({\n classes,\n title,\n barChartConfiguration,\n data,\n}: IBarChartWidget) => {\n return (\n
\n
{title}
\n
\n \n \n \n }\n tickLine={false}\n axisLine={false}\n width={150}\n />\n {barChartConfiguration.map((bar) => (\n \n ))}\n \n }\n />\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(BarChartWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { Cell, Pie, PieChart, ResponsiveContainer } from \"recharts\";\nimport { IPieChartConfiguration } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\n\ninterface IPieChartWidget {\n classes: any;\n title: string;\n pieChartConfiguration: IPieChartConfiguration;\n dataInner: object[];\n dataOuter?: object[];\n middleLabel?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n });\n\nconst PieChartWidget = ({\n classes,\n title,\n pieChartConfiguration,\n dataInner,\n dataOuter,\n middleLabel = \"\",\n}: IPieChartWidget) => {\n const innerColors = get(pieChartConfiguration, \"innerChart.colorList\", []);\n const outerColors = get(pieChartConfiguration, \"outerChart.colorList\", []);\n\n return (\n
\n
{title}
\n
\n \n \n {dataOuter && (\n \n {dataOuter.map((entry, index) => (\n \n ))}\n \n )}\n {dataInner && (\n \n {dataInner.map((entry, index) => {\n return (\n \n );\n })}\n \n )}\n {middleLabel && (\n \n {middleLabel}\n \n )}\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(PieChartWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Area, AreaChart, ResponsiveContainer, YAxis } from \"recharts\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { widgetCommon } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { IDataSRep } from \"./types\";\n\ninterface ISingleRepWidget {\n classes: any;\n title: string;\n data: IDataSRep[];\n color: string;\n fillColor: string;\n label: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...widgetCommon,\n });\n\nconst SingleRepWidget = ({\n classes,\n title,\n data,\n color,\n fillColor,\n label,\n}: ISingleRepWidget) => {\n return (\n
\n
{title}
\n
\n \n \n dataMax * 2]} hide={true} />\n \n \n {label}\n \n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(SingleRepWidget);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport MomentUtils from \"@date-io/moment\";\nimport { DateTimePicker, MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport ScheduleIcon from \"@material-ui/icons/Schedule\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\n\ninterface IDateTimePicker {\n value: any;\n onChange: (value: any) => any;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n dateSelectorOverride: {\n height: 40,\n border: \"#EAEDEE 1px solid\",\n marginLeft: 15,\n backgroundColor: \"#fff\",\n padding: \"0 16px\",\n borderRadius: 5,\n \"&.MuiInput-underline:hover:not(.Mui-disabled):before\": {\n borderBottom: 0,\n },\n \"&:hover\": {\n borderColor: \"#000\",\n \"&:before, &:after\": {\n borderColor: \"transparent\",\n borderBottom: 0,\n },\n },\n \"&:before, &:after\": {\n borderColor: \"transparent\",\n borderBottom: 0,\n },\n \"& input\": {\n fontSize: 12,\n fontWeight: 600,\n color: \"#393939\",\n },\n },\n parentDateOverride: {\n flexGrow: 1,\n },\n });\n\nconst DateTimePickerWrapper = ({\n value,\n onChange,\n classes,\n}: IDateTimePicker) => {\n return (\n \n \n \n \n ),\n className: classes.dateSelectorOverride,\n }}\n label=\"\"\n ampm={false}\n variant={\"inline\"}\n className={classes.parentDateOverride}\n format=\"MMMM Do YYYY, h:mm a\"\n />\n \n );\n};\n\nexport default withStyles(styles)(DateTimePickerWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport ReactGridLayout from \"react-grid-layout\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n} from \"../../Common/FormComponents/common/styleLibrary\";\n\nimport { AutoSizer } from \"react-virtualized\";\nimport {\n IBarChartConfiguration,\n IDataSRep,\n ILinearGraphConfiguration,\n IPieChartConfiguration,\n} from \"./Widgets/types\";\nimport { IDashboardPanel, widgetType } from \"./types\";\nimport {\n getDashboardDistribution,\n getWidgetsWithValue,\n panelsConfiguration,\n saveDashboardDistribution,\n} from \"./utils\";\n\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport SingleValueWidget from \"./Widgets/SingleValueWidget\";\nimport LinearGraphWidget from \"./Widgets/LinearGraphWidget\";\nimport BarChartWidget from \"./Widgets/BarChartWidget\";\nimport PieChartWidget from \"./Widgets/PieChartWidget\";\nimport SingleRepWidget from \"./Widgets/SingleRepWidget\";\nimport DateTimePickerWrapper from \"../../Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IPrDashboard {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n widgetsContainer: {\n height: \"calc(100vh - 250px)\",\n paddingBottom: 235,\n },\n ...actionsTray,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PrDashboard = ({ classes, displayErrorMessage }: IPrDashboard) => {\n const [timeStart, setTimeStart] = useState(null);\n const [timeEnd, setTimeEnd] = useState(null);\n const [loading, setLoading] = useState(true);\n const [panelInformation, setPanelInformation] = useState(\n panelsConfiguration\n );\n\n const minHeight = 600;\n const colsInGrid = 8;\n const xSpacing = 10;\n const ySpacing = 10;\n\n const dashboardDistr = getDashboardDistribution();\n\n const autoSizerStyleProp = {\n width: \"100%\",\n height: \"auto\",\n paddingBottom: 45,\n };\n\n const panels = useCallback(\n (width: number) => {\n const singlePanelWidth = width / colsInGrid + xSpacing / 2;\n\n const componentToUse = (value: IDashboardPanel, index: number) => {\n switch (value.type) {\n case widgetType.singleValue:\n return (\n \n );\n case widgetType.pieChart:\n return (\n \n );\n case widgetType.linearGraph:\n return (\n \n );\n case widgetType.barChart:\n return (\n \n );\n case widgetType.singleRep:\n const fillColor = value.fillColor ? value.fillColor : value.color;\n return (\n \n );\n default:\n return null;\n }\n };\n\n return panelInformation.map((val, index) => {\n return (\n
{componentToUse(val, index)}
\n );\n });\n },\n [panelInformation, dashboardDistr]\n );\n\n const fetchUsage = useCallback(() => {\n let stepCalc = 15;\n\n if (timeStart !== null && timeEnd !== null) {\n const secondsInPeriod = timeEnd.unix() - timeStart.unix();\n const periods = secondsInPeriod / 60;\n\n stepCalc = periods < 1 ? 15 : periods;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/admin/info?step=${stepCalc}&${\n timeStart !== null ? `&start=${timeStart.unix()}` : \"\"\n }${timeStart !== null && timeEnd !== null ? \"&\" : \"\"}${\n timeEnd !== null ? `end=${timeEnd.unix()}` : \"\"\n }`\n )\n .then((res: any) => {\n if (res.widgets) {\n const widgetsWithValue = getWidgetsWithValue(res.widgets);\n setPanelInformation(widgetsWithValue);\n } else {\n displayErrorMessage(\n \"Widget information could not be retrieved at this time. Please try again\"\n );\n }\n\n setLoading(false);\n })\n .catch((err) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }, [timeStart, timeEnd, displayErrorMessage]);\n\n const triggerLoad = () => {\n setLoading(true);\n };\n\n useEffect(() => {\n if (loading) {\n fetchUsage();\n }\n }, [loading, fetchUsage]);\n\n return (\n \n \n Start Time\n \n End Time\n \n \n Get Information\n \n \n \n \n {({ width, height }: any) => {\n let hpanel = height < minHeight ? minHeight : height;\n if (hpanel > 380) {\n hpanel = 480;\n }\n const totalWidth = width > 1920 ? 1920 : width;\n return (\n \n {panels(width)}\n \n );\n }}\n \n \n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PrDashboard));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst AllBucketsIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default AllBucketsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst EgressIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default EgressIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Usage } from \"../types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { containerForHeader } from \"../../Common/FormComponents/common/styleLibrary\";\nimport AllBucketsIcon from \"../../../../icons/AllBucketsIcon\";\nimport UsageIcon from \"../../../../icons/UsageIcon\";\nimport EgressIcon from \"../../../../icons/EgressIcon\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...containerForHeader(theme.spacing(4)),\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n border: \"#eaedee 1px solid\",\n borderRadius: 5,\n boxShadow: \"none\",\n },\n fixedHeight: {\n height: 165,\n minWidth: 247,\n marginRight: 20,\n padding: \"25px 28px\",\n \"& svg\": {\n maxHeight: 18,\n },\n },\n consumptionValue: {\n color: \"#000000\",\n fontSize: \"60px\",\n fontWeight: \"bold\",\n },\n icon: {\n marginRight: 10,\n color: \"#777777\",\n },\n notationContainer: {\n display: \"flex\",\n },\n dashboardBG: {\n width: 390,\n height: 255,\n zIndex: 500,\n position: \"absolute\",\n backgroundSize: \"fill\",\n backgroundImage: \"url(/images/BG_IllustrationDarker.svg)\",\n backgroundPosition: \"right bottom\",\n right: 0,\n bottom: 0,\n backgroundRepeat: \"no-repeat\",\n },\n dashboardContainer: {\n zIndex: 600,\n position: \"absolute\",\n },\n elementTitle: {\n fontWeight: 500,\n color: \"#777777\",\n fontSize: 14,\n marginTop: -9,\n },\n smallUnit: {\n fontSize: 20,\n },\n });\n\ninterface IDashboardProps {\n classes: any;\n usage: Usage | null;\n}\n\nconst BasicDashboard = ({ classes, usage }: IDashboardProps) => {\n const fixedHeightPaper = clsx(classes.paper, classes.fixedHeight);\n\n const prettyUsage = (usage: string | undefined) => {\n if (usage === undefined) {\n return \"0\";\n }\n\n const niceBytesUsage = niceBytes(usage).split(\" \");\n\n if (niceBytesUsage.length !== 2) {\n return niceBytesUsage.join(\" \");\n }\n\n return (\n \n {niceBytesUsage[0]}\n {niceBytesUsage[1]}\n \n );\n };\n\n const prettyNumber = (usage: number | undefined) => {\n if (usage === undefined) {\n return 0;\n }\n\n return usage.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n };\n\n return (\n \n
\n \n \n \n \n \n \n \n \n \n \n All buckets\n \n \n \n \n {usage ? prettyNumber(usage.buckets) : 0}\n \n \n \n \n \n \n \n \n \n Usage\n \n \n \n \n {usage ? prettyUsage(usage.usage + \"\") : 0}\n \n \n \n \n \n \n \n \n \n {\" \"}\n Total Objects\n \n \n \n \n {usage ? prettyNumber(usage.objects) : 0}\n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(BasicDashboard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport PrDashboard from \"./Prometheus/PrDashboard\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport BasicDashboard from \"./BasicDashboard/BasicDashboard\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { Usage } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDashboardSimple {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst Dashboard = ({ classes, displayErrorMessage }: IDashboardSimple) => {\n const [loading, setLoading] = useState(true);\n const [basicResult, setBasicResult] = useState(null);\n\n const fetchUsage = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/admin/info`)\n .then((res: Usage) => {\n setBasicResult(res);\n setLoading(false);\n })\n .catch((err) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }, [setBasicResult, setLoading, displayErrorMessage]);\n\n useEffect(() => {\n if (loading) {\n fetchUsage();\n }\n }, [loading, fetchUsage]);\n\n const widgets = get(basicResult, \"widgets\", null);\n\n return (\n \n \n \n {loading ? (\n \n \n \n ) : (\n \n {widgets !== null ? (\n \n ) : (\n \n )}\n \n )}\n \n \n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(Dashboard));\n","export default __webpack_public_path__ + \"static/media/minio_console_logo.0837460e.svg\";","export default __webpack_public_path__ + \"static/media/minio_operator_logo.1312b7c9.svg\";","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const menuGroups = [\n { label: \"\", group: \"common\", collapsible: false },\n { label: \"User\", group: \"User\", collapsible: true },\n { label: \"Admin\", group: \"Admin\", collapsible: true },\n { label: \"Tools\", group: \"Tools\", collapsible: true },\n { label: \"Operator\", group: \"Operator\", collapsible: false },\n { label: \"\", group: \"License\", collapsible: false },\n];\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst LicenseIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LicenseIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst LogoutIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LogoutIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst ConsoleIcon = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default ConsoleIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst HealIcon = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default HealIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { NavLink } from \"react-router-dom\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport DescriptionIcon from \"@material-ui/icons/Description\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport { Divider, withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme } from \"@material-ui/core/styles\";\nimport history from \"../../../history\";\nimport logo from \"../../../icons/minio_console_logo.svg\";\nimport operator_logo from \"../../../icons/minio_operator_logo.svg\";\nimport { AppState } from \"../../../store\";\nimport { userLoggedIn } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport { menuGroups } from \"./utils\";\nimport { IMenuProps } from \"./types\";\nimport {\n BucketsIcon,\n ClustersIcon,\n ConfigurationsListIcon,\n DashboardIcon,\n GroupsIcon,\n IAMPoliciesIcon,\n MirroringIcon,\n ServiceAccountsIcon,\n TraceIcon,\n UsersIcon,\n WarpIcon,\n} from \"../../../icons\";\nimport { clearSession } from \"../../../common/utils\";\nimport LicenseIcon from \"../../../icons/LicenseIcon\";\nimport LogoutIcon from \"../../../icons/LogoutIcon\";\nimport ConsoleIcon from \"../../../icons/ConsoleIcon\";\nimport HealIcon from \"../../../icons/HealIcon\";\nimport WatchIcon from \"../../../icons/WatchIcon\";\nimport TrackChangesSharpIcon from \"@material-ui/icons/TrackChangesSharp\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logo: {\n paddingTop: 25,\n marginBottom: 30,\n paddingLeft: 45,\n \"& img\": {\n width: 120,\n },\n },\n menuList: {\n \"& .active\": {\n borderTopLeftRadius: 2,\n borderBottomLeftRadius: 2,\n color: \"#fff\",\n backgroundColor: \"rgba(255, 255, 255, .18)\",\n \"& .MuiSvgIcon-root\": {\n color: \"white\",\n },\n \"& .MuiTypography-root\": {\n color: \"#fff\",\n fontWeight: 700,\n },\n },\n \"& .MuiSvgIcon-root\": {\n fontSize: 16,\n color: \"rgba(255, 255, 255, 0.8)\",\n maxWidth: 14,\n },\n \"& .MuiListItemIcon-root\": {\n minWidth: 25,\n },\n \"& .MuiTypography-root\": {\n fontSize: 12,\n color: \"rgba(255, 255, 255, 0.8)\",\n },\n \"& .MuiListItem-gutters\": {\n paddingRight: 0,\n fontWeight: 300,\n },\n \"& .MuiListItem-root\": {\n padding: \"2px 0 2px 16px\",\n marginBottom: 8,\n marginLeft: 30,\n width: \"calc(100% - 30px)\",\n },\n \"& .MuiCollapse-container .MuiCollapse-wrapper .MuiCollapse-wrapperInner .MuiDivider-root\": {\n backgroundColor: \"rgba(112,112,112,0.5)\",\n marginBottom: 12,\n height: 1,\n },\n },\n extraMargin: {\n \"&.MuiListItem-gutters\": {\n marginLeft: 5,\n },\n },\n groupTitle: {\n color: \"#fff\",\n fontSize: 10,\n textTransform: \"uppercase\",\n fontWeight: 700,\n marginBottom: 3,\n cursor: \"pointer\",\n userSelect: \"none\",\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n subTitleMenu: {\n fontWeight: 700,\n marginLeft: 10,\n \"&.MuiTypography-root\": {\n fontSize: 13,\n color: \"#fff\",\n },\n },\n selectorArrow: {\n marginRight: 20,\n marginTop: 1,\n display: \"inline-block\",\n width: 0,\n height: 0,\n borderStyle: \"solid\",\n borderWidth: \"4px 4px 0 4px\",\n borderColor:\n \"rgba(255, 255, 255, .29) transparent transparent transparent\",\n transform: \"rotateZ(0deg)\",\n transitionDuration: \"0.2s\",\n },\n selectorArrowOpen: {\n transform: \"rotateZ(180deg)\",\n },\n });\n\nconst mapState = (state: AppState) => ({\n open: state.system.loggedIn,\n operatorMode: state.system.operatorMode,\n});\n\nconst connector = connect(mapState, { userLoggedIn });\n\n// Menu State builder for groups\nconst menuStateBuilder = () => {\n let elements: any = [];\n menuGroups.forEach((menuItem) => {\n if (menuItem.collapsible) {\n elements[menuItem.group] = true;\n }\n });\n\n return elements;\n};\n\nconst Menu = ({ userLoggedIn, classes, pages, operatorMode }: IMenuProps) => {\n const [menuOpen, setMenuOpen] = useState(menuStateBuilder());\n\n const logout = () => {\n const deleteSession = () => {\n clearSession();\n userLoggedIn(false);\n localStorage.setItem(\"userLoggedIn\", \"\");\n\n history.push(\"/login\");\n };\n api\n .invoke(\"POST\", `/api/v1/logout`)\n .then(() => {\n deleteSession();\n })\n .catch((err: any) => {\n console.log(err);\n deleteSession();\n });\n };\n\n let menuItems = [\n {\n group: \"common\",\n type: \"item\",\n component: NavLink,\n to: \"/dashboard\",\n name: \"Dashboard\",\n icon: ,\n },\n {\n group: \"User\",\n type: \"item\",\n component: NavLink,\n to: \"/object-browser\",\n name: \"Object Browser\",\n icon: ,\n },\n {\n group: \"User\",\n type: \"item\",\n component: NavLink,\n to: \"/account\",\n name: \"Account\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/buckets\",\n name: \"Buckets\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/users\",\n name: \"Users\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/groups\",\n name: \"Groups\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/policies\",\n name: \"IAM Policies\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/logs\",\n name: \"Logs\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/watch\",\n name: \"Watch\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/trace\",\n name: \"Trace\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/heal\",\n name: \"Heal\",\n icon: ,\n },\n {\n group: \"Tools\",\n type: \"item\",\n component: NavLink,\n to: \"/health-info\",\n name: \"Diagnostic\",\n icon: ,\n },\n {\n group: \"Admin\",\n type: \"item\",\n component: NavLink,\n to: \"/settings\",\n name: \"Settings\",\n icon: ,\n },\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/tenants\",\n name: \"Tenants\",\n icon: ,\n },\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/mirroring\",\n name: \"Mirroring\",\n icon: ,\n },\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/warp\",\n name: \"Warp\",\n icon: ,\n },\n ];\n\n const allowedPages = pages.reduce((result: any, item: any, index: any) => {\n result[item] = true;\n return result;\n }, {});\n\n // Append the license page according to the allowedPages\n if (allowedPages.hasOwnProperty(\"/tenants\")) {\n menuItems.push({\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/license\",\n name: \"License\",\n icon: ,\n });\n } else {\n menuItems.push({\n group: \"License\",\n type: \"item\",\n component: NavLink,\n to: \"/license\",\n name: \"License\",\n icon: ,\n });\n }\n\n const allowedItems = menuItems.filter(\n (item: any) =>\n allowedPages[item.to] || item.forceDisplay || item.type !== \"item\"\n );\n\n const setMenuCollapse = (menuClicked: string) => {\n let newMenu: any = { ...menuOpen };\n\n newMenu[menuClicked] = !newMenu[menuClicked];\n\n setMenuOpen(newMenu);\n };\n\n return (\n \n
\n \"logo\"\n
\n \n {menuGroups.map((groupMember, index) => {\n const filterByGroup = (allowedItems || []).filter(\n (item: any) => item.group === groupMember.group\n );\n\n const countableElements = filterByGroup.filter(\n (menuItem: any) => menuItem.type !== \"title\"\n );\n\n if (countableElements.length === 0) {\n return null;\n }\n\n return (\n \n {groupMember.label !== \"\" && (\n {\n if (groupMember.collapsible) {\n setMenuCollapse(groupMember.group);\n }\n }}\n >\n {groupMember.label}\n {groupMember.collapsible && (\n \n )}\n \n )}\n \n {filterByGroup.map((page: any) => {\n switch (page.type) {\n case \"item\": {\n return (\n \n {page.icon && (\n {page.icon}\n )}\n {page.name && }\n \n );\n }\n case \"title\": {\n return (\n \n {page.name}\n \n );\n }\n default:\n return null;\n }\n })}\n \n \n \n );\n })}\n\n \n \n \n \n \n \n \n
\n );\n};\n\nexport default connector(withStyles(styles)(Menu));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { connect } from \"react-redux\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n jsonPolicyEditor: {\n minHeight: 400,\n width: \"100%\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n infoDetails: {\n color: \"#393939\",\n fontSize: 12,\n fontStyle: \"italic\",\n },\n ...modalBasic,\n });\n\ninterface IAddServiceAccountProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (res: NewServiceAccount | null) => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddServiceAccount = ({\n classes,\n open,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n}: IAddServiceAccountProps) => {\n const [addSending, setAddSending] = useState(false);\n const [policyDefinition, setPolicyDefinition] = useState(\"\");\n\n useEffect(() => {\n if (addSending) {\n api\n .invoke(\"POST\", \"/api/v1/service-accounts\", {\n policy: policyDefinition,\n })\n .then((res) => {\n setAddSending(false);\n closeModalAndRefresh(res);\n })\n .catch((err) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n }\n }, [\n addSending,\n setAddSending,\n setModalErrorSnackMessage,\n policyDefinition,\n closeModalAndRefresh,\n ]);\n\n const addServiceAccount = (e: React.FormEvent) => {\n e.preventDefault();\n setAddSending(true);\n };\n\n const resetForm = () => {\n setPolicyDefinition(\"\");\n };\n\n return (\n {\n closeModalAndRefresh(null);\n }}\n title={`Create Service Account`}\n >\n ) => {\n addServiceAccount(e);\n }}\n >\n \n \n
\n Service Accounts inherit the policy explicitly attached to the\n parent user and the policy attached to each group in which the\n parent user has membership. You can specify an optional\n JSON-formatted policy below to restrict the Service Account access\n to a subset of actions and resources explicitly allowed for the\n parent user. You cannot modify the Service Account optional policy\n after saving.\n
\n {\n setPolicyDefinition(value);\n }}\n />\n
\n \n \n Clear\n \n \n Create\n \n \n {addSending && (\n \n \n \n )}\n
\n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddServiceAccount));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wrapText: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n });\n\ninterface IDeleteServiceAccountProps {\n classes: any;\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedServiceAccount: string | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteServiceAccount = ({\n classes,\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedServiceAccount,\n setErrorSnackMessage,\n}: IDeleteServiceAccountProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n useEffect(() => {\n if (deleteLoading) {\n api\n .invoke(\"DELETE\", `/api/v1/service-accounts/${selectedServiceAccount}`)\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n deleteLoading,\n closeDeleteModalAndRefresh,\n selectedServiceAccount,\n setErrorSnackMessage,\n ]);\n\n const removeRecord = () => {\n if (selectedServiceAccount == null) {\n return;\n }\n\n setDeleteLoading(true);\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete ServiceAccount\n \n {deleteLoading && }\n \n Are you sure you want to delete service account{\" \"}\n {selectedServiceAccount}?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(DeleteServiceAccount));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { NewServiceAccount } from \"./types\";\nimport { Button } from \"@material-ui/core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ModalWrapper from \"../ModalWrapper/ModalWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n });\n\ninterface ICredentialsPromptProps {\n classes: any;\n newServiceAccount: NewServiceAccount | null;\n open: boolean;\n entity: string;\n closeModal: () => void;\n}\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n};\n\nconst CredentialsPrompt = ({\n classes,\n newServiceAccount,\n open,\n closeModal,\n entity,\n}: ICredentialsPromptProps) => {\n if (!newServiceAccount) {\n return null;\n }\n\n const consoleCreds = get(newServiceAccount, \"console\", null);\n\n return (\n {\n closeModal();\n }}\n title={`New ${entity} Created`}\n >\n \n \n \n A new {entity} has been created with the following details:\n {consoleCreds && (\n \n \n Console Credentials\n
    \n
  • \n Access Key: {consoleCreds.accessKey}\n
  • \n
  • \n Secret Key: {consoleCreds.secretKey}\n
  • \n
\n
\n
\n )}\n \n Write these down, as this is the only time the secret will be\n displayed.\n \n
\n \n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n consoleExtras = {\n console: {\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n },\n };\n }\n\n download(\n \"credentials.json\",\n JSON.stringify({\n ...consoleExtras,\n })\n );\n }}\n color=\"primary\"\n >\n Download\n \n {\n closeModal();\n }}\n color=\"secondary\"\n autoFocus\n >\n Done\n \n \n
\n
\n \n );\n};\n\nexport default withStyles(styles)(CredentialsPrompt);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\ninterface userInterface {\n accessKey: string;\n}\n\ninterface policyInterface {\n name: string;\n}\n\nexport const usersSort = (a: userInterface, b: userInterface) => {\n if (a.accessKey > b.accessKey) {\n return 1;\n }\n if (a.accessKey < b.accessKey) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n\nexport const policySort = (a: policyInterface, b: policyInterface) => {\n if (a.name > b.name) {\n return 1;\n }\n if (a.name < b.name) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n\nexport const stringSort = (a: string, b: string) => {\n if (a > b) {\n return 1;\n }\n if (a < b) {\n return -1;\n }\n // a must be equal to b\n return 0;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n modalBasic,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { ChangePasswordRequest } from \"../Buckets/types\";\nimport api from \"../../../common/api\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...actionsTray,\n ...modalBasic,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IChangePasswordProps {\n classes: any;\n open: boolean;\n closeModal: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ChangePassword = ({\n classes,\n open,\n closeModal,\n setModalErrorSnackMessage,\n}: IChangePasswordProps) => {\n const [currentPassword, setCurrentPassword] = useState(\"\");\n const [newPassword, setNewPassword] = useState(\"\");\n const [reNewPassword, setReNewPassword] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const changePassword = (event: React.FormEvent) => {\n event.preventDefault();\n\n if (newPassword !== reNewPassword) {\n setModalErrorSnackMessage(\"New passwords don't match\");\n return;\n }\n\n if (loading) {\n return;\n }\n setLoading(true);\n\n let request: ChangePasswordRequest = {\n current_secret_key: currentPassword,\n new_secret_key: newPassword,\n };\n\n api\n .invoke(\"POST\", \"/api/v1/account/change-password\", request)\n .then((res) => {\n setLoading(false);\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setCurrentPassword(\"\");\n closeModal();\n })\n .catch((err) => {\n setLoading(false);\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setCurrentPassword(\"\");\n setModalErrorSnackMessage(err);\n });\n };\n\n return open ? (\n {\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setCurrentPassword(\"\");\n closeModal();\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n ) => {\n changePassword(e);\n }}\n >\n \n \n \n ) => {\n setCurrentPassword(event.target.value);\n }}\n label=\"Current Password\"\n type=\"password\"\n value={currentPassword}\n />\n \n \n ) => {\n setNewPassword(event.target.value);\n }}\n label=\"New Password\"\n type=\"password\"\n value={newPassword}\n />\n \n \n ) => {\n setReNewPassword(event.target.value);\n }}\n label=\"Type New Password Again\"\n type=\"password\"\n value={reNewPassword}\n />\n \n \n \n 0 &&\n newPassword.length > 0 &&\n reNewPassword.length > 0\n )\n }\n >\n Save\n \n \n {loading && (\n \n \n \n )}\n \n \n \n ) : null;\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ChangePassword));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport api from \"../../../common/api\";\nimport { Button } from \"@material-ui/core\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport AddServiceAccount from \"./AddServiceAccount\";\nimport DeleteServiceAccount from \"./DeleteServiceAccount\";\nimport CredentialsPrompt from \"../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { CreateIcon } from \"../../../icons\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport Divider from \"@material-ui/core/Divider\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport ChangePasswordModal from \"./ChangePasswordModal\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n addSideBar: {\n width: \"480px\",\n minWidth: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n imageIcon: {\n height: \"100%\",\n },\n iconRoot: {\n textAlign: \"center\",\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IServiceAccountsProps {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n changePassword: boolean;\n}\n\nconst Account = ({\n classes,\n displayErrorMessage,\n changePassword,\n}: IServiceAccountsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedServiceAccount, setSelectedServiceAccount] = useState<\n string | null\n >(null);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [\n newServiceAccount,\n setNewServiceAccount,\n ] = useState(null);\n const [\n changePasswordModalOpen,\n setChangePasswordModalOpen,\n ] = useState(false);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/service-accounts`)\n .then((res: string[]) => {\n const serviceAccounts = res.sort(stringSort);\n\n setLoading(false);\n setRecords(serviceAccounts);\n })\n .catch((err) => {\n displayErrorMessage(err);\n setLoading(false);\n });\n }\n }, [loading, setLoading, setRecords, displayErrorMessage]);\n\n const fetchRecords = () => {\n setLoading(true);\n };\n\n const closeAddModalAndRefresh = (res: NewServiceAccount | null) => {\n setAddScreenOpen(false);\n fetchRecords();\n\n if (res !== null) {\n const nsa: NewServiceAccount = {\n console: {\n accessKey: `${res.accessKey}`,\n secretKey: `${res.secretKey}`,\n },\n };\n setNewServiceAccount(nsa);\n setShowNewCredentials(true);\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n fetchRecords();\n }\n };\n\n const closeCredentialsModal = () => {\n setShowNewCredentials(false);\n setNewServiceAccount(null);\n };\n\n const confirmDeleteServiceAccount = (selectedServiceAccount: string) => {\n setSelectedServiceAccount(selectedServiceAccount);\n setDeleteOpen(true);\n };\n\n const tableActions = [\n { type: \"delete\", onClick: confirmDeleteServiceAccount },\n ];\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.toLowerCase().includes(filter.toLowerCase())\n );\n\n return (\n \n {addScreenOpen && (\n {\n closeAddModalAndRefresh(res);\n }}\n />\n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Service Account\"\n />\n )}\n \n \n \n {changePassword && (\n \n \n \n Settings\n \n \n \n
\n
\n \n setChangePasswordModalOpen(false)}\n />\n }\n onClick={() => setChangePasswordModalOpen(true)}\n >\n Change Password\n \n \n \n
\n \n
\n
\n
\n )}\n \n \n Service Accounts\n \n \n \n
\n
\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n }\n onClick={() => {\n setAddScreenOpen(true);\n setSelectedServiceAccount(null);\n }}\n >\n Create service account\n \n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n displayErrorMessage: setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(Account));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TextField from \"@material-ui/core/TextField\";\n\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport { GroupsList } from \"../Groups/types\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\n\ninterface IGroupsProps {\n classes: any;\n selectedGroups: string[];\n setSelectedGroups: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#000\",\n },\n },\n },\n ...actionsTray,\n ...selectorsCommon,\n });\n\nconst GroupsSelectors = ({\n classes,\n selectedGroups,\n setSelectedGroups,\n setModalErrorSnackMessage,\n}: IGroupsProps) => {\n // Local State\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const fetchGroups = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/groups`)\n .then((res: GroupsList) => {\n let groups = get(res, \"groups\", []);\n\n if (!groups) {\n groups = [];\n }\n setRecords(groups.sort(stringSort));\n isLoading(false);\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n isLoading(false);\n });\n }, [setModalErrorSnackMessage]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchGroups();\n }\n }, [loading, fetchGroups]);\n\n const selGroups = !selectedGroups ? [] : selectedGroups;\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selGroups]; // We clone the selectedGroups array\n\n if (checked) {\n // If the user has checked this field we need to push this to selectedGroupsList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n setSelectedGroups(elements);\n\n return elements;\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.includes(filter)\n );\n\n return (\n \n \n \n {loading && }\n {records != null && records.length > 0 ? (\n \n \n Assign Groups\n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n \n \n \n ) : (\n
No Groups Available
\n )}\n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(GroupsSelectors));\n","import React, { Fragment } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { predefinedList } from \"../common/styleLibrary\";\n\ninterface IPredefinedList {\n classes: any;\n label?: string;\n content: any;\n multiLine?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...predefinedList,\n });\n\nconst PredefinedList = ({\n classes,\n label = \"\",\n content,\n multiLine = false,\n}: IPredefinedList) => {\n return (\n \n \n {label !== \"\" && (\n \n {label}\n \n )}\n \n \n {content}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(PredefinedList);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { User } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport GroupsSelectors from \"./GroupsSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface IAddUserContentProps {\n classes: any;\n closeModalAndRefresh: () => void;\n selectedUser: User | null;\n open: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddUser = ({\n classes,\n closeModalAndRefresh,\n selectedUser,\n open,\n setModalErrorSnackMessage,\n}: IAddUserContentProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [enabled, setEnabled] = useState(false);\n const [selectedGroups, setSelectedGroups] = useState([]);\n const [currentGroups, setCurrentGroups] = useState([]);\n\n const getUserInformation = useCallback(() => {\n if (!selectedUser) {\n return null;\n }\n\n api\n .invoke(\"GET\", `/api/v1/users/${selectedUser.accessKey}`)\n .then((res) => {\n setAddLoading(false);\n setAccessKey(res.accessKey);\n setSelectedGroups(res.memberOf || []);\n setCurrentGroups(res.memberOf || []);\n setEnabled(res.status === \"enabled\");\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [selectedUser, setModalErrorSnackMessage]);\n\n useEffect(() => {\n if (selectedUser == null) {\n setAccessKey(\"\");\n setSecretKey(\"\");\n setSelectedGroups([]);\n } else {\n getUserInformation();\n }\n }, [selectedUser, getUserInformation]);\n\n const saveRecord = (event: React.FormEvent) => {\n event.preventDefault();\n\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n if (selectedUser !== null) {\n api\n .invoke(\"PUT\", `/api/v1/users/${selectedUser.accessKey}`, {\n status: enabled ? \"enabled\" : \"disabled\",\n groups: selectedGroups,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n api\n .invoke(\"POST\", \"/api/v1/users\", {\n accessKey,\n secretKey,\n groups: selectedGroups,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n }\n };\n\n const resetForm = () => {\n if (selectedUser !== null) {\n setSelectedGroups([]);\n return;\n }\n setAccessKey(\"\");\n setSecretKey(\"\");\n setSelectedGroups([]);\n };\n\n const sendEnabled =\n accessKey.trim() !== \"\" &&\n ((secretKey.trim() !== \"\" && selectedUser === null) ||\n selectedUser !== null);\n return (\n {\n closeModalAndRefresh();\n }}\n modalOpen={open}\n title={selectedUser !== null ? \"Edit User\" : \"Create User\"}\n >\n {selectedUser !== null && (\n
\n {\n setEnabled(e.target.checked);\n }}\n switchOnly\n />\n
\n )}\n\n \n ) => {\n saveRecord(e);\n }}\n >\n \n \n ) => {\n setAccessKey(e.target.value);\n }}\n disabled={selectedUser !== null}\n />\n\n {selectedUser !== null ? (\n \n ) : (\n ) => {\n setSecretKey(e.target.value);\n }}\n autoComplete=\"current-password\"\n />\n )}\n \n {\n setSelectedGroups(elements);\n }}\n />\n \n \n \n {\n resetForm();\n }}\n >\n Clear\n \n \n Save\n \n \n {addLoading && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddUser));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { User, UsersList } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDeleteUserProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedUser: User | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteUser = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedUser,\n setErrorSnackMessage,\n}: IDeleteUserProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n if (selectedUser == null) {\n return;\n }\n setDeleteLoading(true);\n api\n .invoke(\"DELETE\", `/api/v1/users/${selectedUser.accessKey}`, {\n id: selectedUser.id,\n })\n .then((res: UsersList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n if (selectedUser === null) {\n return
;\n }\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete User\n \n {deleteLoading && }\n \n Are you sure you want to delete user {selectedUser.accessKey}?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteUser);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport GroupsSelectors from \"./GroupsSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IAddToGroup {\n open: boolean;\n checkedUsers: any;\n closeModalAndRefresh: any;\n classes: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst AddToGroup = ({\n open,\n checkedUsers,\n closeModalAndRefresh,\n classes,\n setModalErrorSnackMessage,\n}: IAddToGroup) => {\n //Local States\n const [saving, isSaving] = useState(false);\n const [accepted, setAccepted] = useState(false);\n const [selectedGroups, setSelectedGroups] = useState([]);\n\n //Effects\n useEffect(() => {\n if (saving) {\n if (selectedGroups.length > 0) {\n api\n .invoke(\"PUT\", \"/api/v1/users-groups-bulk\", {\n groups: selectedGroups,\n users: checkedUsers,\n })\n .then(() => {\n isSaving(false);\n setAccepted(true);\n })\n .catch((err) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n isSaving(false);\n setModalErrorSnackMessage(\n \"You need to select at least one group to assign\"\n );\n }\n }\n }, [\n saving,\n isSaving,\n closeModalAndRefresh,\n selectedGroups,\n checkedUsers,\n setModalErrorSnackMessage,\n ]);\n\n //Fetch Actions\n const setSaving = (event: React.FormEvent) => {\n event.preventDefault();\n\n isSaving(true);\n };\n\n const resetForm = () => {\n setSelectedGroups([]);\n };\n\n return (\n {\n closeModalAndRefresh(accepted);\n }}\n title={\n accepted\n ? \"The selected users were added to the following groups.\"\n : \"Add Users to Group\"\n }\n >\n {accepted ? (\n \n \n \n \n \n
\n
\n
\n
\n ) : (\n
\n \n \n \n \n
\n
\n \n \n \n
\n \n \n Clear\n \n \n Save\n \n \n {saving && (\n \n \n \n )}\n
\n
\n )}\n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddToGroup));\n","// This file is part of MinIO Kubernetes Cloud\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { policySort } from \"../../../utils/sortFunctions\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { PolicyList } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\n\ninterface ISelectPolicyProps {\n classes: any;\n selectedPolicy?: string[];\n setSelectedPolicy: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#000\",\n },\n },\n },\n ...actionsTray,\n ...selectorsCommon,\n });\n\nconst PolicySelectors = ({\n classes,\n selectedPolicy = [],\n setSelectedPolicy,\n setModalErrorSnackMessage,\n}: ISelectPolicyProps) => {\n // Local State\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const fetchPolicies = useCallback(() => {\n isLoading(true);\n\n api\n .invoke(\"GET\", `/api/v1/policies?limit=1000`)\n .then((res: PolicyList) => {\n const policies = res.policies === null ? [] : res.policies;\n isLoading(false);\n setRecords(policies.sort(policySort));\n })\n .catch((err) => {\n isLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [setModalErrorSnackMessage]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchPolicies();\n }\n }, [loading, fetchPolicies]);\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selectedPolicy]; // We clone the checkedUsers array\n\n if (checked) {\n // If the user has checked this field we need to push this to checkedUsersList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n // remove empty values\n elements = elements.filter((element) => element !== \"\");\n\n setSelectedPolicy(elements);\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.name.includes(filter)\n );\n\n return (\n \n \n \n {loading && }\n {records.length > 0 ? (\n \n \n Assign Policies\n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n \n \n \n ) : (\n
No Policies Available
\n )}\n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PolicySelectors));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { User } from \"../Users/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport PolicySelectors from \"./PolicySelectors\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface ISetPolicyProps {\n classes: any;\n closeModalAndRefresh: () => void;\n selectedUser: User | null;\n selectedGroup: string | null;\n open: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n buttonContainer: {\n textAlign: \"right\",\n },\n });\n\nconst SetPolicy = ({\n classes,\n closeModalAndRefresh,\n selectedUser,\n selectedGroup,\n setModalErrorSnackMessage,\n open,\n}: ISetPolicyProps) => {\n //Local States\n const [loading, setLoading] = useState(false);\n const [actualPolicy, setActualPolicy] = useState([]);\n const [selectedPolicy, setSelectedPolicy] = useState([]);\n\n const setPolicyAction = () => {\n let entity = \"user\";\n let value = null;\n if (selectedGroup !== null) {\n entity = \"group\";\n value = selectedGroup;\n } else {\n if (selectedUser !== null) {\n value = selectedUser.accessKey;\n }\n }\n\n setLoading(true);\n\n api\n .invoke(\"PUT\", `/api/v1/set-policy/${selectedPolicy}`, {\n entityName: value,\n entityType: entity,\n })\n .then(() => {\n setLoading(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const fetchGroupInformation = () => {\n if (selectedGroup) {\n api\n .invoke(\"GET\", `/api/v1/groups/${selectedGroup}`)\n .then((res: any) => {\n const groupPolicy: String = get(res, \"policy\", \"\");\n setActualPolicy(groupPolicy.split(\",\"));\n setSelectedPolicy(groupPolicy.split(\",\"));\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n setLoading(false);\n });\n }\n };\n\n const resetSelection = () => {\n setSelectedPolicy(actualPolicy);\n };\n\n useEffect(() => {\n if (open) {\n if (selectedGroup !== null) {\n fetchGroupInformation();\n return;\n }\n\n const userPolicy: String = get(selectedUser, \"policy\", \"\");\n setActualPolicy(userPolicy.split(\",\"));\n setSelectedPolicy(userPolicy.split(\",\"));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, selectedGroup, selectedUser]);\n\n const userName = get(selectedUser, \"accessKey\", \"\");\n\n return (\n {\n closeModalAndRefresh();\n }}\n modalOpen={open}\n title=\"Set Policies\"\n >\n \n \n \n \n \n \n \n \n
\n
\n \n \n Clear\n \n \n Save\n \n \n {loading && (\n \n \n \n )}\n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(SetPolicy));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport api from \"../../../common/api\";\nimport { Button, Grid, InputAdornment, TextField } from \"@material-ui/core\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport GroupIcon from \"@material-ui/icons/Group\";\nimport { User, UsersList } from \"./types\";\nimport { usersSort } from \"../../../utils/sortFunctions\";\nimport { CreateIcon } from \"../../../icons\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport AddUser from \"./AddUser\";\nimport DeleteUser from \"./DeleteUser\";\nimport AddToGroup from \"./AddToGroup\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SetPolicy from \"../Policies/SetPolicy\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n // padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IUsersProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst Users = ({ classes, setErrorSnackMessage }: IUsersProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(false);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedUser, setSelectedUser] = useState(null);\n const [addGroupOpen, setAddGroupOpen] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const [checkedUsers, setCheckedUsers] = useState([]);\n const [policyOpen, setPolicyOpen] = useState(false);\n\n const fetchRecords = useCallback(() => {\n setLoading(true);\n api\n .invoke(\"GET\", `/api/v1/users`)\n .then((res: UsersList) => {\n const users = res.users === null ? [] : res.users;\n\n setLoading(false);\n setRecords(users.sort(usersSort));\n })\n .catch((err) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n }, [setLoading, setRecords, setErrorSnackMessage]);\n\n const closeAddModalAndRefresh = () => {\n setAddScreenOpen(false);\n fetchRecords();\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n fetchRecords();\n }\n };\n\n const closeAddGroupBulk = (unCheckAll: boolean = false) => {\n setAddGroupOpen(false);\n if (unCheckAll) {\n setCheckedUsers([]);\n }\n };\n\n useEffect(() => {\n fetchRecords();\n }, [fetchRecords]);\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.accessKey.includes(filter)\n );\n\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...checkedUsers]; // We clone the checkedUsers array\n\n if (checked) {\n // If the user has checked this field we need to push this to checkedUsersList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n\n setCheckedUsers(elements);\n\n return elements;\n };\n\n const viewAction = (selectionElement: any): void => {\n setAddScreenOpen(true);\n setSelectedUser(selectionElement);\n };\n\n const setPolicyAction = (selectionElement: any): void => {\n setPolicyOpen(true);\n setSelectedUser(selectionElement);\n };\n\n const deleteAction = (selectionElement: any): void => {\n setDeleteOpen(true);\n setSelectedUser(selectionElement);\n };\n\n const userLoggedIn = atob(localStorage.getItem(\"userLoggedIn\") || \"\");\n\n const tableActions = [\n { type: \"view\", onClick: viewAction },\n { type: \"description\", onClick: setPolicyAction },\n {\n type: \"delete\",\n onClick: deleteAction,\n hideButtonFunction: (topValue: any) => topValue === userLoggedIn,\n },\n ];\n\n return (\n \n {addScreenOpen && (\n {\n closeAddModalAndRefresh();\n }}\n />\n )}\n {policyOpen && (\n {\n setPolicyOpen(false);\n fetchRecords();\n }}\n />\n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n {addGroupOpen && (\n {\n closeAddGroupBulk(close);\n }}\n />\n )}\n \n \n \n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n }\n disabled={checkedUsers.length <= 0}\n onClick={() => {\n if (checkedUsers.length > 0) {\n setAddGroupOpen(true);\n }\n }}\n >\n Add to Group\n \n }\n onClick={() => {\n setAddScreenOpen(true);\n setSelectedUser(null);\n }}\n >\n Create User\n \n \n\n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(Users));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { UsersList } from \"../Users/types\";\nimport { usersSort } from \"../../../utils/sortFunctions\";\nimport api from \"../../../common/api\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { connect } from \"react-redux\";\n\ninterface IGroupsProps {\n classes: any;\n selectedUsers: string[];\n setSelectedUsers: any;\n editMode?: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n paddingTop: 15,\n boxShadow: \"none\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n noFound: {\n textAlign: \"center\",\n padding: \"10px 0\",\n },\n tableContainer: {\n maxHeight: 200,\n },\n stickyHeader: {\n backgroundColor: \"#fff\",\n },\n actionsTitle: {\n fontWeight: 600,\n color: \"#000\",\n fontSize: 16,\n alignSelf: \"center\",\n },\n tableBlock: {\n marginTop: 15,\n },\n filterField: {\n width: 375,\n fontWeight: 600,\n \"& .input\": {\n \"&::placeholder\": {\n fontWeight: 600,\n color: \"#000\",\n },\n },\n },\n ...actionsTray,\n ...selectorsCommon,\n });\n\nconst UsersSelectors = ({\n classes,\n selectedUsers,\n setSelectedUsers,\n editMode = false,\n setModalErrorSnackMessage,\n}: IGroupsProps) => {\n //Local States\n const [records, setRecords] = useState([]);\n const [loading, isLoading] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n const fetchUsers = useCallback(() => {\n api\n .invoke(\"GET\", `/api/v1/users`)\n .then((res: UsersList) => {\n let users = get(res, \"users\", []);\n\n if (!users) {\n users = [];\n }\n\n setRecords(users.sort(usersSort));\n isLoading(false);\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n isLoading(false);\n });\n }, [setModalErrorSnackMessage]);\n\n //Effects\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n fetchUsers();\n }\n }, [loading, fetchUsers]);\n\n const selUsers = !selectedUsers ? [] : selectedUsers;\n\n //Fetch Actions\n const selectionChanged = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selUsers]; // We clone the selectedGroups array\n\n if (checked) {\n // If the user has checked this field we need to push this to selectedGroupsList\n elements.push(value);\n } else {\n // User has unchecked this field, we need to remove it from the list\n elements = elements.filter((element) => element !== value);\n }\n setSelectedUsers(elements);\n\n return elements;\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.accessKey.includes(filter)\n );\n\n return (\n \n \n \n {loading && }\n {records != null && records.length > 0 ? (\n \n \n \n {editMode ? \"Edit Members\" : \"Assign Users\"}\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n \n \n \n ) : (\n
No Users Available
\n )}\n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(UsersSelectors));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport api from \"../../../common/api\";\nimport UsersSelectors from \"./UsersSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IGroupProps {\n open: boolean;\n selectedGroup: any;\n closeModalAndRefresh: any;\n classes: any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\ninterface MainGroupProps {\n members: string[];\n name: string;\n status: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst AddGroup = ({\n open,\n selectedGroup,\n closeModalAndRefresh,\n classes,\n setModalErrorSnackMessage,\n}: IGroupProps) => {\n //Local States\n const [groupName, setGroupName] = useState(\"\");\n const [groupEnabled, setGroupEnabled] = useState(false);\n const [saving, isSaving] = useState(false);\n const [selectedUsers, setSelectedUsers] = useState([]);\n const [loadingGroup, isLoadingGroup] = useState(false);\n const [validGroup, setValidGroup] = useState(false);\n\n //Effects\n useEffect(() => {\n if (selectedGroup !== null) {\n isLoadingGroup(true);\n } else {\n setGroupName(\"\");\n setSelectedUsers([]);\n }\n }, [selectedGroup]);\n\n useEffect(() => {\n setValidGroup(groupName.trim() !== \"\");\n }, [groupName, selectedUsers]);\n\n useEffect(() => {\n if (saving) {\n const saveRecord = () => {\n if (selectedGroup !== null) {\n api\n .invoke(\"PUT\", `/api/v1/groups/${groupName}`, {\n group: groupName,\n members: selectedUsers,\n status: groupEnabled ? \"enabled\" : \"disabled\",\n })\n .then((res) => {\n isSaving(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n api\n .invoke(\"POST\", \"/api/v1/groups\", {\n group: groupName,\n members: selectedUsers,\n })\n .then((res) => {\n isSaving(false);\n closeModalAndRefresh();\n })\n .catch((err) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n }\n };\n saveRecord();\n }\n }, [\n saving,\n groupName,\n selectedUsers,\n groupEnabled,\n selectedGroup,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n ]);\n\n useEffect(() => {\n if (selectedGroup && loadingGroup) {\n const fetchGroupInfo = () => {\n api\n .invoke(\"GET\", `/api/v1/groups/${selectedGroup}`)\n .then((res: MainGroupProps) => {\n setGroupEnabled(res.status === \"enabled\");\n setGroupName(res.name);\n setSelectedUsers(res.members);\n })\n .catch((err) => {\n setModalErrorSnackMessage(err);\n isLoadingGroup(false);\n });\n };\n fetchGroupInfo();\n }\n }, [loadingGroup, selectedGroup, setModalErrorSnackMessage]);\n\n //Fetch Actions\n const setSaving = (event: React.FormEvent) => {\n event.preventDefault();\n\n isSaving(true);\n };\n\n const resetForm = () => {\n if (selectedGroup === null) {\n setGroupName(\"\");\n }\n\n setSelectedUsers([]);\n };\n\n return (\n \n {selectedGroup !== null && (\n
\n {\n setGroupEnabled(e.target.checked);\n }}\n switchOnly\n />\n
\n )}\n
\n \n \n {selectedGroup === null ? (\n \n \n ) => {\n setGroupName(e.target.value);\n }}\n />\n \n \n ) : (\n \n \n \n )}\n \n \n \n \n \n \n Clear\n \n \n Save\n \n \n {saving && (\n \n \n \n )}\n \n
\n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddGroup));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { setErrorSnackMessage } from \"../../../actions\";\n\ninterface IDeleteGroup {\n selectedGroup: string;\n deleteOpen: boolean;\n closeDeleteModalAndRefresh: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteGroup = ({\n selectedGroup,\n deleteOpen,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeleteGroup) => {\n const [isDeleting, setDeleteLoading] = useState(false);\n\n useEffect(() => {\n if (isDeleting) {\n const removeRecord = () => {\n if (!selectedGroup) {\n return;\n }\n\n api\n .invoke(\"DELETE\", `/api/v1/groups/${selectedGroup}`)\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n removeRecord();\n }\n }, [\n isDeleting,\n selectedGroup,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n ]);\n\n const closeNoAction = () => {\n closeDeleteModalAndRefresh(false);\n };\n\n return (\n \n \n Delete User\n \n {isDeleting && }\n \n Are you sure you want to delete group {selectedGroup}?\n \n \n \n \n {\n setDeleteLoading(true);\n }}\n color=\"secondary\"\n autoFocus\n >\n Delete\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteGroup);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Button } from \"@material-ui/core\";\nimport { CreateIcon } from \"../../../icons\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { GroupsList } from \"./types\";\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../common/api\";\nimport AddGroup from \"../Groups/AddGroup\";\nimport DeleteGroup from \"./DeleteGroup\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SetPolicy from \"../Policies/SetPolicy\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\ninterface IGroupsProps {\n classes: any;\n openGroupModal: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n // padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n wrapCell: {\n maxWidth: \"200px\",\n whiteSpace: \"normal\",\n wordWrap: \"break-word\",\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst Groups = ({ classes, setErrorSnackMessage }: IGroupsProps) => {\n const [addGroupOpen, setGroupOpen] = useState(false);\n const [selectedGroup, setSelectedGroup] = useState(null);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [loading, isLoading] = useState(false);\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [policyOpen, setPolicyOpen] = useState(false);\n\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n isLoading(true);\n }, []);\n\n useEffect(() => {\n if (loading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/groups`)\n .then((res: GroupsList) => {\n let resGroups: string[] = [];\n if (res.groups !== null) {\n resGroups = res.groups.sort(stringSort);\n }\n setRecords(resGroups);\n isLoading(false);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n isLoading(false);\n });\n };\n fetchRecords();\n }\n }, [loading, setErrorSnackMessage]);\n\n const closeAddModalAndRefresh = () => {\n setGroupOpen(false);\n isLoading(true);\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n isLoading(true);\n }\n };\n\n const filteredRecords = records.filter((elementItem) =>\n elementItem.includes(filter)\n );\n\n const viewAction = (group: any) => {\n setGroupOpen(true);\n setSelectedGroup(group);\n };\n\n const deleteAction = (group: any) => {\n setDeleteOpen(true);\n setSelectedGroup(group);\n };\n\n const setPolicyAction = (selectionElement: any): void => {\n setPolicyOpen(true);\n setSelectedGroup(selectionElement);\n };\n\n const tableActions = [\n { type: \"view\", onClick: viewAction },\n { type: \"description\", onClick: setPolicyAction },\n { type: \"delete\", onClick: deleteAction },\n ];\n\n return (\n \n {addGroupOpen && (\n \n )}\n {deleteOpen && (\n \n )}\n {setPolicyOpen && (\n {\n setPolicyOpen(false);\n }}\n />\n )}\n \n \n \n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n }\n onClick={() => {\n setSelectedGroup(null);\n setGroupOpen(true);\n }}\n >\n Create Group\n \n \n\n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(Groups));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport { IConfigurationElement, IElementValue } from \"./types\";\n\nexport const notifyPostgres = \"notify_postgres\";\nexport const notifyMysql = \"notify_mysql\";\nexport const notifyKafka = \"notify_kafka\";\nexport const notifyAmqp = \"notify_amqp\";\nexport const notifyMqtt = \"notify_mqtt\";\nexport const notifyRedis = \"notify_redis\";\nexport const notifyNats = \"notify_nats\";\nexport const notifyElasticsearch = \"notify_elasticsearch\";\nexport const notifyWebhooks = \"notify_webhooks\";\nexport const notifyNsq = \"notify_nsq\";\n\nexport const configurationElements: IConfigurationElement[] = [\n {\n configuration_id: \"region\",\n configuration_label: \"Edit Region Configuration\",\n },\n {\n configuration_id: \"cache\",\n configuration_label: \"Edit Cache Configuration\",\n },\n {\n configuration_id: \"compression\",\n configuration_label: \"Edit Compression Configuration\",\n },\n { configuration_id: \"etcd\", configuration_label: \"Edit Etcd Configuration\" },\n {\n configuration_id: \"identity_openid\",\n configuration_label: \"Edit Identity Openid Configuration\",\n },\n {\n configuration_id: \"identity_ldap\",\n configuration_label: \"Edit Identity LDAP Configuration\",\n },\n {\n configuration_id: \"logger_webhook\",\n configuration_label: \"Edit Logger Webhook Configuration\",\n },\n {\n configuration_id: \"audit_webhook\",\n configuration_label: \"Edit Audit Webhook Configuration\",\n },\n];\n\nexport const fieldsConfigurations: any = {\n region: [\n {\n name: \"name\",\n required: true,\n label: \"Server Location\",\n tooltip: 'Name of the location of the server e.g. \"us-west-rack2\"',\n type: \"string\",\n placeholder: \"e.g. us-west-rack-2\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n placeholder: \"Enter Comment\",\n },\n ],\n cache: [\n {\n name: \"drives\",\n required: true,\n label: \"Drives\",\n tooltip:\n 'Mountpoints e.g. \"/optane1\" or \"/optane2\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Mount Point\",\n },\n {\n name: \"expiry\",\n required: false,\n label: \"Expiry\",\n tooltip: 'Cache expiry duration in days e.g. \"90\"',\n type: \"number\",\n placeholder: \"Enter Number of Days\",\n },\n {\n name: \"quota\",\n required: false,\n label: \"Quota\",\n tooltip: 'Limit cache drive usage in percentage e.g. \"90\"',\n type: \"number\",\n placeholder: \"Enter in %\",\n },\n {\n name: \"exclude\",\n required: false,\n label: \"Exclude\",\n tooltip:\n 'Wildcard exclusion patterns e.g. \"bucket/*.tmp\" or \"*.exe\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Wildcard Exclusion Patterns\",\n },\n {\n name: \"after\",\n required: false,\n label: \"After\",\n tooltip: \"Minimum number of access before caching an object\",\n type: \"number\",\n placeholder: \"Enter Number of Attempts\",\n },\n {\n name: \"watermark_low\",\n required: false,\n label: \"Watermark Low\",\n tooltip: \"Watermark Low\",\n type: \"number\",\n placeholder: \"Enter Watermark Low\",\n },\n {\n name: \"watermark_high\",\n required: false,\n label: \"Watermark High\",\n tooltip: \"Watermark High\",\n type: \"number\",\n placeholder: \"Enter Watermark High\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n multiline: true,\n placeholder: \"Enter Comment\",\n },\n ],\n compression: [\n {\n name: \"extensions\",\n required: false,\n label: \"Extensions\",\n tooltip:\n 'Extensions to compress e.g. \".txt\",\".log\" or \".csv\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter an Extension\",\n withBorder: true,\n },\n {\n name: \"mime_types\",\n required: false,\n label: \"Mime Types\",\n tooltip:\n 'Mime types e.g. \"text/*\",\"application/json\" or \"application/xml\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter a Mime Type\",\n withBorder: true,\n },\n ],\n etcd: [\n {\n name: \"endpoints\",\n required: true,\n label: \"Endpoints\",\n tooltip:\n 'List of etcd endpoints e.g. \"http://localhost:2379\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"path_prefix\",\n required: false,\n label: \"Path Prefix\",\n tooltip: 'namespace prefix to isolate tenants e.g. \"customer1/\"',\n type: \"string\",\n placeholder: \"Enter Path Prefix\",\n },\n {\n name: \"coredns_path\",\n required: false,\n label: \"Coredns Path\",\n tooltip: 'Shared bucket DNS records, default is \"/skydns\"',\n type: \"string\",\n placeholder: \"Enter Coredns Path\",\n },\n {\n name: \"client_cert\",\n required: false,\n label: \"Client Cert\",\n tooltip: \"Client cert for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert\",\n },\n {\n name: \"client_cert_key\",\n required: false,\n label: \"Client Cert Key\",\n tooltip: \"Client cert key for mTLS authentication\",\n type: \"string\",\n placeholder: \"Enter Client Cert Key\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"You can add a comment to this setting\",\n type: \"comment\",\n multiline: true,\n placeholder: \"Enter Comment\",\n },\n ],\n identity_openid: [\n {\n name: \"config_url\",\n required: false,\n label: \"Config URL\",\n tooltip: \"Config URL for Client ID configuration\",\n type: \"string\",\n placeholder: \"Enter Config URL\",\n },\n {\n name: \"client_id\",\n required: false,\n label: \"Client ID\",\n type: \"string\",\n placeholder: \"Enter Client ID\",\n },\n {\n name: \"claim_name\",\n required: false,\n label: \"Claim Name\",\n tooltip: \"Claim Name\",\n type: \"string\",\n placeholder: \"Enter Claim Name\",\n },\n {\n name: \"claim_prefix\",\n required: false,\n label: \"Claim Prefix\",\n tooltip: \"Claim Prefix\",\n type: \"string\",\n placeholder: \"Enter Claim Prefix\",\n },\n ],\n identity_ldap: [\n {\n name: \"server_addr\",\n required: true,\n label: \"Server Addr\",\n tooltip: 'AD/LDAP server address e.g. \"myldapserver.com:636\"',\n type: \"string\",\n placeholder: \"Enter Server Address\",\n },\n {\n name: \"username_format\",\n required: true,\n label: \"Username Format\",\n tooltip:\n 'List of username bind DNs e.g. \"uid=%s\",\"cn=accounts\",\"dc=myldapserver\" or \"dc=com\", you can write one per field',\n type: \"csv\",\n placeholder: \"Enter Username Format\",\n },\n {\n name: \"username_search_filter\",\n required: true,\n label: \"Username Search Filter\",\n tooltip:\n 'User search filter, for example \"(cn=%s)\" or \"(sAMAccountName=%s)\" or \"(uid=%s)\"',\n type: \"string\",\n placeholder: \"Enter Username Search Filter\",\n },\n {\n name: \"group_search_filter\",\n required: true,\n label: \"Group Search Filter\",\n tooltip:\n 'Search filter for groups e.g. \"(&(objectclass=groupOfNames)(memberUid=%s))\"',\n type: \"string\",\n placeholder: \"Enter Group Search Filter\",\n },\n {\n name: \"username_search_base_dn\",\n required: false,\n label: \"Username Search Base DN\",\n tooltip: \"List of username search DNs, you can write one per field\",\n type: \"csv\",\n placeholder: \"Enter Username Search Base DN\",\n },\n {\n name: \"group_name_attribute\",\n required: false,\n label: \"Group Name Attribute\",\n tooltip: 'Search attribute for group name e.g. \"cn\"',\n type: \"string\",\n placeholder: \"Enter Group Name Attribute\",\n },\n {\n name: \"sts_expiry\",\n required: false,\n label: \"STS Expiry\",\n tooltip:\n 'temporary credentials validity duration in s,m,h,d. Default is \"1h\"',\n type: \"string\",\n placeholder: \"Enter STS Expiry\",\n },\n {\n name: \"tls_skip_verify\",\n required: false,\n label: \"TLS Skip Verify\",\n tooltip:\n 'Trust server TLS without verification, defaults to \"off\" (verify)',\n type: \"on|off\",\n },\n {\n name: \"server_insecure\",\n required: false,\n label: \"Server Insecure\",\n tooltip:\n 'Allow plain text connection to AD/LDAP server, defaults to \"off\"',\n type: \"on|off\",\n },\n {\n name: \"comment\",\n required: false,\n label: \"Comment\",\n tooltip: \"Optionally add a comment to this setting\",\n type: \"comment\",\n placeholder: \"Enter Comment\",\n },\n ],\n logger_webhook: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n type: \"string\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n required: true,\n label: \"Auth Token\",\n type: \"string\",\n placeholder: \"Enter Auth Token\",\n },\n ],\n audit_webhook: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n type: \"string\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n required: true,\n label: \"Auth Token\",\n type: \"string\",\n placeholder: \"Enter Auth Token\",\n },\n ],\n};\n\nconst commonFields = [\n {\n name: \"queue-dir\",\n label: \"Queue Directory\",\n required: true,\n\n tooltip: \"staging dir for undelivered messages e.g. '/home/events'\",\n type: \"string\",\n placeholder: \"Enter Queue Directory\",\n },\n {\n name: \"queue-limit\",\n label: \"Queue Limit\",\n required: false,\n\n tooltip: \"maximum limit for undelivered messages, defaults to '10000'\",\n type: \"number\",\n placeholder: \"Enter Queue Limit\",\n },\n {\n name: \"comment\",\n label: \"Comment\",\n required: false,\n type: \"comment\",\n placeholder: \"Enter Comment\",\n },\n];\n\nexport const notificationEndpointsFields: any = {\n [notifyKafka]: [\n {\n name: \"brokers\",\n label: \"Brokers\",\n required: true,\n\n tooltip: \"Comma separated list of Kafka broker addresses\",\n type: \"string\",\n placeholder: \"Enter Brokers\",\n },\n {\n name: \"topic\",\n label: \"Topic\",\n tooltip: \"Kafka topic used for bucket notifications\",\n type: \"string\",\n placeholder: \"Enter Topic\",\n },\n {\n name: \"sasl_username\",\n label: \"SASL Username\",\n tooltip: \"Username for SASL/PLAIN or SASL/SCRAM authentication\",\n type: \"string\",\n placeholder: \"Enter SASL Username\",\n },\n {\n name: \"sasl_password\",\n label: \"SASL Password\",\n tooltip: \"Password for SASL/PLAIN or SASL/SCRAM authentication\",\n type: \"string\",\n placeholder: \"Enter SASL Password\",\n },\n {\n name: \"sasl_mechanism\",\n label: \"SASL Mechanism\",\n tooltip: \"SASL authentication mechanism, default 'PLAIN'\",\n type: \"string\",\n },\n {\n name: \"tls_client_auth\",\n label: \"TLS Client Auth\",\n tooltip:\n \"Client Auth determines the Kafka server's policy for TLS client auth\",\n type: \"string\",\n placeholder: \"Enter TLS Client Auth\",\n },\n {\n name: \"sasl\",\n label: \"SASL\",\n tooltip: \"Set to 'on' to enable SASL authentication\",\n type: \"on|off\",\n },\n {\n name: \"tls\",\n label: \"TLS\",\n tooltip: \"Set to 'on' to enable TLS\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n label: \"TLS skip verify\",\n tooltip:\n 'Trust server TLS without verification, defaults to \"on\" (verify)',\n type: \"on|off\",\n },\n {\n name: \"client_tls_cert\",\n label: \"client TLS cert\",\n tooltip: \"Path to client certificate for mTLS auth\",\n type: \"path\",\n placeholder: \"Enter TLS Client Cert\",\n },\n {\n name: \"client_tls_key\",\n label: \"client TLS key\",\n tooltip: \"Path to client key for mTLS auth\",\n type: \"path\",\n placeholder: \"Enter TLS Client Key\",\n },\n {\n name: \"version\",\n label: \"Version\",\n tooltip: \"Specify the version of the Kafka cluster e.g '2.2.0'\",\n type: \"string\",\n placeholder: \"Enter Kafka Version\",\n },\n ...commonFields,\n ],\n [notifyAmqp]: [\n {\n name: \"url\",\n required: true,\n label: \"URL\",\n tooltip:\n \"AMQP server endpoint e.g. `amqp://myuser:mypassword@localhost:5672`\",\n type: \"url\",\n },\n {\n name: \"exchange\",\n label: \"Exchange\",\n tooltip: \"Name of the AMQP exchange\",\n type: \"string\",\n placeholder: \"Enter Exchange\",\n },\n {\n name: \"exchange_type\",\n label: \"Exchange Type\",\n tooltip: \"AMQP exchange type\",\n type: \"string\",\n placeholder: \"Enter Exchange Type\",\n },\n {\n name: \"routing_key\",\n label: \"Routing Key\",\n tooltip: \"Routing key for publishing\",\n type: \"string\",\n placeholder: \"Enter Routing Key\",\n },\n {\n name: \"mandatory\",\n label: \"Mandatory\",\n tooltip:\n \"Quietly ignore undelivered messages when set to 'off', default is 'on'\",\n type: \"on|off\",\n },\n {\n name: \"durable\",\n label: \"Durable\",\n tooltip:\n \"Persist queue across broker restarts when set to 'on', default is 'off'\",\n type: \"on|off\",\n },\n {\n name: \"no_wait\",\n label: \"No Wait\",\n tooltip:\n \"Non-blocking message delivery when set to 'on', default is 'off'\",\n type: \"on|off\",\n },\n {\n name: \"internal\",\n label: \"Internal\",\n tooltip:\n \"Set to 'on' for exchange to be not used directly by publishers, but only when bound to other exchanges\",\n type: \"on|off\",\n },\n {\n name: \"auto_deleted\",\n label: \"Auto Deleted\",\n tooltip:\n \"Auto delete queue when set to 'on', when there are no consumers\",\n type: \"on|off\",\n },\n {\n name: \"delivery_mode\",\n label: \"Delivery Mode\",\n tooltip: \"Set to '1' for non-persistent or '2' for persistent queue\",\n type: \"number\",\n placeholder: \"Enter Delivery Mode\",\n },\n ...commonFields,\n ],\n [notifyRedis]: [\n {\n name: \"address\",\n required: true,\n label: \"Address\",\n tooltip: \"Redis server's address. For example: `localhost:6379`\",\n type: \"address\",\n placeholder: \"Enter Address\",\n },\n {\n name: \"key\",\n required: true,\n label: \"Key\",\n tooltip: \"Redis key to store/update events, key is auto-created\",\n type: \"string\",\n placeholder: \"Enter Key\",\n },\n {\n name: \"password\",\n label: \"Password\",\n tooltip: \"Redis server password\",\n type: \"string\",\n placeholder: \"Enter Password\",\n },\n ...commonFields,\n ],\n [notifyMqtt]: [\n {\n name: \"broker\",\n required: true,\n label: \"Broker\",\n tooltip: \"MQTT server endpoint e.g. `tcp://localhost:1883`\",\n type: \"uri\",\n placeholder: \"Enter Brokers\",\n },\n {\n name: \"topic\",\n required: true,\n label: \"Topic\",\n tooltip: \"name of the MQTT topic to publish\",\n type: \"string\",\n placeholder: \"Enter Topic\",\n },\n {\n name: \"username\",\n label: \"Username\",\n tooltip: \"MQTT username\",\n type: \"string\",\n placeholder: \"Enter Username\",\n },\n {\n name: \"password\",\n label: \"Password\",\n tooltip: \"MQTT password\",\n type: \"string\",\n placeholder: \"Enter Password\",\n },\n {\n name: \"qos\",\n label: \"QOS\",\n tooltip: \"Set the quality of service priority, defaults to '0'\",\n type: \"number\",\n placeholder: \"Enter QOS\",\n },\n {\n name: \"keep_alive_interval\",\n label: \"Keep Alive Interval\",\n tooltip: \"Keep-alive interval for MQTT connections in s,m,h,d\",\n type: \"duration\",\n placeholder: \"Enter Keep Alive Internal\",\n },\n {\n name: \"reconnect_interval\",\n label: \"Reconnect Interval\",\n tooltip: \"Reconnect interval for MQTT connections in s,m,h,d\",\n type: \"duration\",\n placeholder: \"Enter Reconnect Interval\",\n },\n ...commonFields,\n ],\n [notifyNats]: [\n {\n name: \"address\",\n required: true,\n label: \"Address\",\n tooltip: \"NATS server address e.g. '0.0.0.0:4222'\",\n type: \"address\",\n placeholder: \"Enter Address\",\n },\n {\n name: \"subject\",\n required: true,\n label: \"Subject\",\n tooltip: \"NATS subscription subject\",\n type: \"string\",\n placeholder: \"Enter NATS Subject\",\n },\n {\n name: \"username\",\n label: \"Username\",\n tooltip: \"NATS username\",\n type: \"string\",\n placeholder: \"Enter NATS Username\",\n },\n {\n name: \"password\",\n label: \"Password\",\n tooltip: \"NATS password\",\n type: \"string\",\n placeholder: \"Enter NATS password\",\n },\n {\n name: \"token\",\n label: \"Token\",\n tooltip: \"NATS token\",\n type: \"string\",\n placeholder: \"Enter NATS token\",\n },\n {\n name: \"tls\",\n label: \"TLS\",\n tooltip: \"Set to 'on' to enable TLS\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n label: \"TLS Skip Verify\",\n tooltip:\n 'Trust server TLS without verification, defaults to \"on\" (verify)',\n type: \"on|off\",\n },\n {\n name: \"ping_interval\",\n label: \"Ping Interval\",\n tooltip: \"Client ping commands interval in s,m,h,d. Disabled by default\",\n type: \"duration\",\n placeholder: \"Enter Ping Interval\",\n },\n {\n name: \"streaming\",\n label: \"Streaming\",\n tooltip: \"Set to 'on', to use streaming NATS server\",\n type: \"on|off\",\n },\n {\n name: \"streaming_async\",\n label: \"Streaming async\",\n tooltip: \"Set to 'on', to enable asynchronous publish\",\n type: \"on|off\",\n },\n {\n name: \"streaming_max_pub_acks_in_flight\",\n label: \"Streaming max publish ACKS in flight\",\n tooltip: \"Number of messages to publish without waiting for ACKs\",\n type: \"number\",\n placeholder: \"Enter Streaming in flight value\",\n },\n {\n name: \"streaming_cluster_id\",\n label: \"Streaming Cluster ID\",\n tooltip: \"Unique ID for NATS streaming cluster\",\n type: \"string\",\n placeholder: \"Enter Streaming Cluster ID\",\n },\n {\n name: \"cert_authority\",\n label: \"Cert Authority\",\n tooltip: \"Path to certificate chain of the target NATS server\",\n type: \"string\",\n placeholder: \"Enter Cert Authority\",\n },\n {\n name: \"client_cert\",\n label: \"Client Cert\",\n tooltip: \"Client cert for NATS mTLS auth\",\n type: \"string\",\n placeholder: \"Enter Client Cert\",\n },\n {\n name: \"client_key\",\n label: \"Client Key\",\n tooltip: \"Client cert key for NATS mTLS auth\",\n type: \"string\",\n placeholder: \"Enter Client Key\",\n },\n ...commonFields,\n ],\n [notifyElasticsearch]: [\n {\n name: \"url\",\n required: true,\n label: \"URL\",\n tooltip:\n \"Elasticsearch server's address, with optional authentication info\",\n type: \"url\",\n placeholder: \"Enter URL\",\n },\n {\n name: \"index\",\n required: true,\n label: \"Index\",\n tooltip:\n \"Elasticsearch index to store/update events, index is auto-created\",\n type: \"string\",\n placeholder: \"Enter Index\",\n },\n {\n name: \"format\",\n required: true,\n label: \"Format\",\n tooltip:\n \"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\",\n type: \"enum\",\n placeholder: \"Enter Format\",\n },\n ...commonFields,\n ],\n [notifyWebhooks]: [\n {\n name: \"endpoint\",\n required: true,\n label: \"Endpoint\",\n tooltip:\n \"webhook server endpoint e.g. http://localhost:8080/minio/events\",\n type: \"url\",\n placeholder: \"Enter Endpoint\",\n },\n {\n name: \"auth_token\",\n label: \"Auth Token\",\n tooltip: \"opaque string or JWT authorization token\",\n type: \"string\",\n placeholder: \"Enter auth_token\",\n },\n ...commonFields,\n ],\n [notifyNsq]: [\n {\n name: \"nsqd_address\",\n required: true,\n label: \"NSQD Address\",\n tooltip: \"NSQ server address e.g. '127.0.0.1:4150'\",\n type: \"address\",\n placeholder: \"Enter nsqd_address\",\n },\n {\n name: \"topic\",\n required: true,\n label: \"Topic\",\n tooltip: \"NSQ topic\",\n type: \"string\",\n placeholder: \"Enter Topic\",\n },\n {\n name: \"tls\",\n label: \"TLS\",\n tooltip: \"set to 'on' to enable TLS\",\n type: \"on|off\",\n },\n {\n name: \"tls_skip_verify\",\n label: \"TLS Skip Verify\",\n tooltip:\n 'trust server TLS without verification, defaults to \"on\" (verify)',\n type: \"on|off\",\n },\n ...commonFields,\n ],\n};\n\nexport const removeEmptyFields = (formFields: IElementValue[]) => {\n const nonEmptyFields = formFields.filter((field) => field.value !== \"\");\n\n return nonEmptyFields;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nconst AddIcon = () => {\n return (\n \n \n \n );\n};\n\nexport default AddIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, {\n useState,\n useEffect,\n createRef,\n useLayoutEffect,\n ChangeEvent,\n useRef,\n} from \"react\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { InputLabel, Tooltip } from \"@material-ui/core\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport InputBoxWrapper from \"../InputBoxWrapper/InputBoxWrapper\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\n\ninterface ICSVMultiSelector {\n elements: string;\n name: string;\n label: string;\n tooltip?: string;\n commonPlaceholder?: string;\n classes: any;\n withBorder?: boolean;\n onChange: (elements: string) => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n inputWithBorder: {\n border: \"1px solid #EAEAEA\",\n padding: 15,\n height: 150,\n overflowY: \"auto\",\n position: \"relative\",\n marginTop: 15,\n },\n labelContainer: {\n display: \"flex\",\n },\n });\n\nconst CSVMultiSelector = ({\n elements,\n name,\n label,\n tooltip = \"\",\n commonPlaceholder = \"\",\n onChange,\n withBorder = false,\n classes,\n}: ICSVMultiSelector) => {\n const [currentElements, setCurrentElements] = useState([\"\"]);\n const bottomList = createRef();\n\n // Use effect to get the initial values from props\n useEffect(() => {\n if (\n currentElements.length === 1 &&\n currentElements[0] === \"\" &&\n elements &&\n elements !== \"\"\n ) {\n const elementsSplit = elements.split(\",\");\n elementsSplit.push(\"\");\n\n setCurrentElements(elementsSplit);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [elements, currentElements]);\n\n // Use effect to send new values to onChange\n useEffect(() => {\n if (currentElements.length > 1) {\n const refScroll = bottomList.current;\n if (refScroll) {\n refScroll.scrollIntoView(false);\n }\n }\n }, [currentElements, bottomList]);\n\n // We avoid multiple re-renders / hang issue typing too fast\n const firstUpdate = useRef(true);\n useLayoutEffect(() => {\n if (firstUpdate.current) {\n firstUpdate.current = false;\n return;\n }\n debouncedOnChange();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentElements]);\n\n // If the last input is not empty, we add a new one\n const addEmptyLine = (elementsUp: string[]) => {\n if (elementsUp[elementsUp.length - 1].trim() !== \"\") {\n const cpList = [...elementsUp];\n cpList.push(\"\");\n setCurrentElements(cpList);\n }\n };\n\n // Onchange function for input box, we get the dataset-index & only update that value in the array\n const onChangeElement = (e: ChangeEvent) => {\n e.persist();\n\n let updatedElement = [...currentElements];\n const index = get(e.target, \"dataset.index\", 0);\n updatedElement[index] = e.target.value;\n\n setCurrentElements(updatedElement);\n };\n\n // Debounce for On Change\n const debouncedOnChange = debounce(() => {\n const elementsString = currentElements\n .filter((element) => element.trim() !== \"\")\n .join(\",\");\n\n onChange(elementsString);\n }, 500);\n\n const inputs = currentElements.map((element, index) => {\n return (\n : null}\n overlayAction={() => {\n addEmptyLine(currentElements);\n }}\n />\n );\n });\n\n return (\n \n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n \n {inputs}\n
\n \n \n \n );\n};\nexport default withStyles(styles)(CSVMultiSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React from \"react\";\nimport { Grid, InputLabel, TextField, Tooltip } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\n\ninterface CommentBoxProps {\n label: string;\n classes: any;\n onChange: (e: React.ChangeEvent) => void;\n value: string | boolean;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n index?: number;\n error?: string;\n required?: boolean;\n placeholder?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n inputLabel: {\n ...fieldBasic.inputLabel,\n marginBottom: 16,\n fontSize: 14,\n },\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n },\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n position: \"absolute\",\n top: 7,\n right: 7,\n },\n cssOutlinedInput: {\n borderColor: \"#9C9C9C\",\n padding: 16,\n },\n rootContainer: {\n \"& .MuiOutlinedInput-inputMultiline\": {\n ...fieldBasic.inputLabel,\n fontSize: 13,\n minHeight: 150,\n },\n },\n });\n\nconst CommentBoxWrapper = ({\n label,\n onChange,\n value,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n index = 0,\n error = \"\",\n required = false,\n placeholder = \"\",\n classes,\n}: CommentBoxProps) => {\n let inputProps: any = { \"data-index\": index };\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n )}\n\n
\n \n
\n \n
\n );\n};\n\nexport default withStyles(styles)(CommentBoxWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { IElementValue, KVField } from \"./types\";\nimport { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport CSVMultiSelector from \"../Common/FormComponents/CSVMultiSelector/CSVMultiSelector\";\nimport CommentBoxWrapper from \"../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IConfGenericProps {\n onChange: (newValue: IElementValue[]) => void;\n fields: KVField[];\n defaultVals?: IElementValue[];\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\n// Function to get defined values,\n//we make this because the backed sometimes don't return all the keys when there is an initial configuration\nexport const valueDef = (\n key: string,\n type: string,\n defaults: IElementValue[]\n) => {\n let defValue = type === \"on|off\" ? \"false\" : \"\";\n\n if (defaults.length > 0) {\n const storedConfig = defaults.find((element) => element.key === key);\n\n if (storedConfig) {\n defValue = storedConfig.value;\n }\n }\n\n return defValue;\n};\n\nconst ConfTargetGeneric = ({\n onChange,\n fields,\n defaultVals,\n classes,\n}: IConfGenericProps) => {\n const [valueHolder, setValueHolder] = useState([]);\n const fieldsElements = !fields ? [] : fields;\n const defValList = !defaultVals ? [] : defaultVals;\n\n // Effect to create all the values to hold\n useEffect(() => {\n const values: IElementValue[] = [];\n fields.forEach((field) => {\n const stateInsert: IElementValue = {\n key: field.name,\n value: valueDef(field.name, field.type, defValList),\n };\n values.push(stateInsert);\n });\n\n setValueHolder(values);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fields, defaultVals]);\n\n useEffect(() => {\n onChange(valueHolder);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueHolder]);\n\n const setValueElement = (key: string, value: string, index: number) => {\n const valuesDup = [...valueHolder];\n valuesDup[index] = { key, value };\n\n setValueHolder(valuesDup);\n };\n\n const fieldDefinition = (field: KVField, item: number) => {\n switch (field.type) {\n case \"on|off\":\n const value = valueHolder[item] ? valueHolder[item].value : \"false\";\n\n return (\n ) => {\n const value = e.target.checked ? \"true\" : \"false\";\n setValueElement(field.name, value, item);\n }}\n id={field.name}\n name={field.name}\n label={field.label}\n value={\"switch_on\"}\n tooltip={field.tooltip}\n checked={value === \"true\"}\n />\n );\n case \"csv\":\n return (\n \n setValueElement(field.name, value, item)\n }\n tooltip={field.tooltip}\n commonPlaceholder={field.placeholder}\n withBorder={!!field.withBorder}\n />\n );\n case \"comment\":\n return (\n ) =>\n setValueElement(field.name, e.target.value, item)\n }\n placeholder={field.placeholder}\n />\n );\n default:\n return (\n ) =>\n setValueElement(field.name, e.target.value, item)\n }\n multiline={!!field.multiline}\n placeholder={field.placeholder}\n />\n );\n }\n };\n\n return (\n \n \n {fieldsElements.map((field, item) => (\n \n \n {fieldDefinition(field, item)}\n \n \n ))}\n \n \n );\n};\n\nexport default withStyles(styles)(ConfTargetGeneric);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport api from \"../../../../common/api\";\nimport ConfTargetGeneric from \"../ConfTargetGeneric\";\nimport { serverNeedsRestart, setErrorSnackMessage } from \"../../../../actions\";\nimport {\n fieldBasic,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { fieldsConfigurations, removeEmptyFields } from \"../utils\";\nimport { IConfigurationElement, IElementValue } from \"../types\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...settingsCommon,\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n logoButton: {\n height: \"80px\",\n },\n\n customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n });\n\ninterface IAddNotificationEndpointProps {\n closeModalAndRefresh: any;\n serverNeedsRestart: typeof serverNeedsRestart;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n selectedConfiguration: IConfigurationElement;\n classes: any;\n}\n\nconst EditConfiguration = ({\n closeModalAndRefresh,\n serverNeedsRestart,\n selectedConfiguration,\n setErrorSnackMessage,\n classes,\n}: IAddNotificationEndpointProps) => {\n //Local States\n const [valuesObj, setValueObj] = useState([]);\n const [saving, setSaving] = useState(false);\n const [loadingConfig, setLoadingConfig] = useState(true);\n const [configValues, setConfigValues] = useState([]);\n //Effects\n useEffect(() => {\n const configId = get(selectedConfiguration, \"configuration_id\", false);\n\n if (configId) {\n api\n .invoke(\"GET\", `/api/v1/configs/${configId}`)\n .then((res) => {\n const keyVals = get(res, \"key_values\", []);\n setConfigValues(keyVals);\n })\n .catch((err) => {\n setLoadingConfig(false);\n setErrorSnackMessage(err);\n });\n }\n setLoadingConfig(false);\n }, [selectedConfiguration, setErrorSnackMessage]);\n\n useEffect(() => {\n if (saving) {\n const payload = {\n key_values: removeEmptyFields(valuesObj),\n };\n api\n .invoke(\n \"PUT\",\n `/api/v1/configs/${selectedConfiguration.configuration_id}`,\n payload\n )\n .then(() => {\n setSaving(false);\n serverNeedsRestart(true);\n\n closeModalAndRefresh();\n })\n .catch((err) => {\n setSaving(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n saving,\n serverNeedsRestart,\n selectedConfiguration,\n valuesObj,\n closeModalAndRefresh,\n setErrorSnackMessage,\n ]);\n\n //Fetch Actions\n const submitForm = (event: React.FormEvent) => {\n event.preventDefault();\n setSaving(true);\n };\n\n const onValueChange = useCallback(\n (newValue) => {\n setValueObj(newValue);\n },\n [setValueObj]\n );\n\n return (\n \n \n {selectedConfiguration.configuration_label}\n \n \n
\n \n {loadingConfig && (\n \n \n \n )}\n \n \n \n \n Save\n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n serverNeedsRestart,\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(EditConfiguration));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { AutoSizer } from \"react-virtualized\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\n\ninterface ISlideOptions {\n classes: any;\n slideOptions: any;\n currentSlide: number;\n}\n\nconst styles = () =>\n createStyles({\n masterContainer: {\n overflowX: \"hidden\",\n overflowY: \"auto\",\n },\n sliderContainer: {\n width: \"auto\",\n transitionDuration: \"0.3s\",\n position: \"relative\",\n },\n slide: {\n float: \"left\",\n },\n });\n\nconst SlideOptions = ({\n classes,\n slideOptions,\n currentSlide,\n}: ISlideOptions) => {\n return (\n \n {({ width, height }: any) => {\n const currentSliderPosition = currentSlide * width;\n const containerSize = width * slideOptions.length;\n return (\n \n
\n \n {slideOptions.map((block: any, index: number) => {\n return (\n \n {block}\n
\n );\n })}\n
\n
\n \n );\n }}\n \n );\n};\n\nexport default withStyles(styles)(SlideOptions);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst BackSettingsIcon = () => (\n \n \n \n \n \n \n \n);\n\nexport default BackSettingsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment } from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport history from \"../../../../history\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport { configurationElements } from \"../utils\";\nimport { IConfigurationElement } from \"../types\";\nimport EditConfiguration from \"../CustomForms/EditConfiguration\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\n\ninterface IListConfiguration {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n iconText: {\n lineHeight: \"24px\",\n },\n customConfigurationPage: {\n height: \"calc(100vh - 324px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n ...searchField,\n ...actionsTray,\n ...settingsCommon,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst initialConfiguration = {\n configuration_id: \"\",\n configuration_label: \"\",\n};\n\nconst ConfigurationsList = ({ classes }: IListConfiguration) => {\n const [selectedConfiguration, setSelectedConfiguration] = useState(\n initialConfiguration\n );\n const [currentConfiguration, setCurrentConfiguration] = useState(0);\n\n const tableActions = [\n {\n type: \"edit\",\n onClick: (element: IConfigurationElement) => {\n const url = get(element, \"url\", \"\");\n if (url !== \"\") {\n // We redirect Browser\n history.push(url);\n } else {\n setCurrentConfiguration(1);\n setSelectedConfiguration(element);\n }\n },\n },\n ];\n\n const backToInitialConfig = () => {\n setCurrentConfiguration(0);\n setSelectedConfiguration(initialConfiguration);\n };\n\n return (\n \n \n \n \n
\n \n \n Configuration Types\n \n \n ,\n \n \n \n \n Back To Configurations\n \n \n \n {currentConfiguration === 1 ? (\n {\n setCurrentConfiguration(0);\n }}\n selectedConfiguration={selectedConfiguration}\n />\n ) : null}\n \n ,\n ]}\n currentSlide={currentConfiguration}\n />\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(ConfigurationsList);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { NotificationEndpointItem } from \"./types\";\nimport {\n notifyAmqp,\n notifyElasticsearch,\n notifyKafka,\n notifyMqtt,\n notifyMysql,\n notifyNats,\n notifyNsq,\n notifyPostgres,\n notifyRedis,\n notifyWebhooks,\n} from \"../utils\";\n\nexport const notificationTransform = (\n notificationElements: NotificationEndpointItem[]\n) => {\n return notificationElements.map((element) => {\n return {\n service_name: `${element.service}:${element.account_id}`,\n status: element.status,\n };\n });\n};\n\nexport const servicesList = [\n {\n actionTrigger: notifyPostgres,\n targetTitle: \"Postgres SQL\",\n logo: \"/postgres.png\",\n },\n {\n actionTrigger: notifyKafka,\n targetTitle: \"Kafka\",\n logo: \"/kafka.png\",\n },\n {\n actionTrigger: notifyAmqp,\n targetTitle: \"AMQP\",\n logo: \"/amqp.png\",\n },\n {\n actionTrigger: notifyMqtt,\n targetTitle: \"MQTT\",\n logo: \"/mqtt.png\",\n },\n {\n actionTrigger: notifyRedis,\n targetTitle: \"Redis\",\n logo: \"/redis.png\",\n },\n {\n actionTrigger: notifyNats,\n targetTitle: \"NATS\",\n logo: \"/nats.png\",\n },\n {\n actionTrigger: notifyMysql,\n targetTitle: \"Mysql\",\n logo: \"/mysql.png\",\n },\n {\n actionTrigger: notifyElasticsearch,\n targetTitle: \"Elastic Search\",\n logo: \"/elasticsearch.png\",\n },\n {\n actionTrigger: notifyWebhooks,\n targetTitle: \"Webhook\",\n logo: \"\",\n },\n {\n actionTrigger: notifyNsq,\n targetTitle: \"NSQ\",\n logo: \"\",\n },\n];\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { IElementValue } from \"../types\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport CommentBoxWrapper from \"../../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IConfPostgresProps {\n onChange: (newValue: IElementValue[]) => void;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\nconst ConfPostgres = ({ onChange, classes }: IConfPostgresProps) => {\n //Local States\n const [useConnectionString, setUseConnectionString] = useState(\n false\n );\n const [connectionString, setConnectionString] = useState(\"\");\n const [host, setHostname] = useState(\"\");\n const [dbName, setDbName] = useState(\"\");\n const [port, setPort] = useState(\"\");\n const [user, setUser] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [sslMode, setSslMode] = useState(\" \");\n\n const [table, setTable] = useState(\"\");\n const [format, setFormat] = useState(\"namespace\");\n const [queueDir, setQueueDir] = useState(\"\");\n const [queueLimit, setQueueLimit] = useState(\"\");\n const [comment, setComment] = useState(\"\");\n\n // connection_string* (string) Postgres server connection-string e.g. \"host=localhost port=5432 dbname=minio_events user=postgres password=password sslmode=disable\"\n\n // \"host=localhost\n // port=5432\n //dbname=minio_events\n //user=postgres\n //password=password\n //sslmode=disable\"\n\n // table* (string) DB table name to store/update events, table is auto-created\n // format* (namespace*|access) 'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\n // queue_dir (path) staging dir for undelivered messages e.g. '/home/events'\n // queue_limit (number) maximum limit for undelivered messages, defaults to '10000'\n // comment (sentence) optionally add a comment to this setting\n\n const KvSeparator = \"=\";\n const parseConnectionString = (\n input: string,\n keys: string[]\n ): Map => {\n let valueIndexes: number[] = [];\n\n for (const key of keys) {\n const i = input.indexOf(key + KvSeparator);\n if (i === -1) {\n continue;\n }\n valueIndexes.push(i);\n }\n valueIndexes.sort((n1, n2) => n1 - n2);\n\n let kvFields = new Map();\n let fields: string[] = new Array(valueIndexes.length);\n for (let i = 0; i < valueIndexes.length; i++) {\n const j = i + 1;\n if (j < valueIndexes.length) {\n fields[i] = input.substr(\n valueIndexes[i],\n valueIndexes[j] - valueIndexes[i]\n );\n } else {\n fields[i] = input.substr(valueIndexes[i]);\n }\n }\n\n for (let field of fields) {\n if (field === undefined) {\n continue;\n }\n const key = field.substr(0, field.indexOf(\"=\"));\n const value = field.substr(field.indexOf(\"=\") + 1).trim();\n kvFields.set(key, value);\n }\n return kvFields;\n };\n\n const configToString = useCallback((): string => {\n let strValue = \"\";\n if (host !== \"\") {\n strValue = `${strValue} host=${host}`;\n }\n if (dbName !== \"\") {\n strValue = `${strValue} dbname=${dbName}`;\n }\n if (user !== \"\") {\n strValue = `${strValue} user=${user}`;\n }\n if (password !== \"\") {\n strValue = `${strValue} password=${password}`;\n }\n if (port !== \"\") {\n strValue = `${strValue} port=${port}`;\n }\n if (sslMode !== \" \") {\n strValue = `${strValue} sslmode=${sslMode}`;\n }\n\n strValue = `${strValue} `;\n\n return strValue.trim();\n }, [host, dbName, user, password, port, sslMode]);\n\n useEffect(() => {\n if (connectionString !== \"\") {\n const formValues = [\n { key: \"connection_string\", value: connectionString },\n { key: \"table\", value: table },\n { key: \"format\", value: format },\n { key: \"queue_dir\", value: queueDir },\n { key: \"queue_limit\", value: queueLimit },\n { key: \"comment\", value: comment },\n ];\n\n onChange(formValues);\n }\n }, [\n connectionString,\n table,\n format,\n queueDir,\n queueLimit,\n comment,\n onChange,\n ]);\n\n useEffect(() => {\n const cs = configToString();\n setConnectionString(cs);\n }, [\n user,\n dbName,\n password,\n port,\n sslMode,\n host,\n setConnectionString,\n configToString,\n ]);\n\n useEffect(() => {\n if (useConnectionString) {\n // build connection_string\n const cs = configToString();\n setConnectionString(cs);\n\n return;\n }\n // parse connection_string\n const kv = parseConnectionString(connectionString, [\n \"host\",\n \"port\",\n \"dbname\",\n \"user\",\n \"password\",\n \"sslmode\",\n ]);\n setHostname(kv.get(\"host\") ? kv.get(\"host\") + \"\" : \"\");\n setPort(kv.get(\"port\") ? kv.get(\"port\") + \"\" : \"\");\n setDbName(kv.get(\"dbname\") ? kv.get(\"dbname\") + \"\" : \"\");\n setUser(kv.get(\"user\") ? kv.get(\"user\") + \"\" : \"\");\n setPassword(kv.get(\"password\") ? kv.get(\"password\") + \"\" : \"\");\n setSslMode(kv.get(\"sslmode\") ? kv.get(\"sslmode\") + \"\" : \" \");\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [useConnectionString]);\n\n return (\n \n \n {\n setUseConnectionString(e.target.checked);\n }}\n value={\"manualString\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n {useConnectionString ? (\n \n \n ) => {\n setConnectionString(e.target.value);\n }}\n />\n \n \n ) : (\n \n \n \n \n ) => {\n setHostname(e.target.value);\n }}\n />\n \n \n ) => {\n setDbName(e.target.value);\n }}\n />\n \n \n ) => {\n setPort(e.target.value);\n }}\n />\n \n \n {\n if (e.target.value !== undefined) {\n setSslMode(e.target.value + \"\");\n }\n }}\n options={[\n { label: \"Enter SSL Mode\", value: \" \" },\n { label: \"Require\", value: \"require\" },\n { label: \"Disable\", value: \"disable\" },\n { label: \"Verify CA\", value: \"verify-ca\" },\n { label: \"Verify Full\", value: \"verify-full\" },\n ]}\n />\n \n \n ) => {\n setUser(e.target.value);\n }}\n />\n \n \n ) => {\n setPassword(e.target.value);\n }}\n />\n \n \n \n \n \n
\n
\n
\n )}\n \n ) => {\n setTable(e.target.value);\n }}\n />\n \n \n {\n setFormat(e.target.value);\n }}\n tooltip=\"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\"\n selectorOptions={[\n { label: \"Namespace\", value: \"namespace\" },\n { label: \"Access\", value: \"access\" },\n ]}\n />\n \n \n ) => {\n setQueueDir(e.target.value);\n }}\n />\n \n \n ) => {\n setQueueLimit(e.target.value);\n }}\n />\n \n \n ) => {\n setComment(e.target.value);\n }}\n />\n \n
\n );\n};\n\nexport default withStyles(styles)(ConfPostgres);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport RadioGroupSelector from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { IElementValue } from \"../types\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport CommentBoxWrapper from \"../../Common/FormComponents/CommentBoxWrapper/CommentBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport PredefinedList from \"../../Common/FormComponents/PredefinedList/PredefinedList\";\n\ninterface IConfMySqlProps {\n onChange: (newValue: IElementValue[]) => void;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n });\n\nconst ConfMySql = ({ onChange, classes }: IConfMySqlProps) => {\n //Local States\n const [useDsnString, setUseDsnString] = useState(false);\n const [dsnString, setDsnString] = useState(\"\");\n const [host, setHostname] = useState(\"\");\n const [dbName, setDbName] = useState(\"\");\n const [port, setPort] = useState(\"\");\n const [user, setUser] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n\n const [table, setTable] = useState(\"\");\n const [format, setFormat] = useState(\"namespace\");\n const [queueDir, setQueueDir] = useState(\"\");\n const [queueLimit, setQueueLimit] = useState(\"\");\n const [comment, setComment] = useState(\"\");\n\n // dsn_string* (string) MySQL data-source-name connection string e.g. \":@tcp(:)/\"\n // table* (string) DB table name to store/update events, table is auto-created\n // format* (namespace*|access) 'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\n // queue_dir (path) staging dir for undelivered messages e.g. '/home/events'\n // queue_limit (number) maximum limit for undelivered messages, defaults to '100000'\n // comment (sentence) optionally add a comment to this setting\n\n const parseDsnString = (\n input: string,\n keys: string[]\n ): Map => {\n let kvFields: Map = new Map();\n const regex = /(.*?):(.*?)@tcp\\((.*?):(.*?)\\)\\/(.*?)$/gm;\n let m;\n\n while ((m = regex.exec(input)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n\n kvFields.set(\"user\", m[1]);\n kvFields.set(\"password\", m[2]);\n kvFields.set(\"host\", m[3]);\n kvFields.set(\"port\", m[4]);\n kvFields.set(\"dbname\", m[5]);\n }\n\n return kvFields;\n };\n\n const configToDsnString = useCallback((): string => {\n return `${user}:${password}@tcp(${host}:${port})/${dbName}`;\n }, [user, password, host, port, dbName]);\n\n useEffect(() => {\n if (dsnString !== \"\") {\n const formValues = [\n { key: \"dsn_string\", value: dsnString },\n { key: \"table\", value: table },\n { key: \"format\", value: format },\n { key: \"queue_dir\", value: queueDir },\n { key: \"queue_limit\", value: queueLimit },\n { key: \"comment\", value: comment },\n ];\n\n onChange(formValues);\n }\n }, [dsnString, table, format, queueDir, queueLimit, comment, onChange]);\n\n useEffect(() => {\n const cs = configToDsnString();\n setDsnString(cs);\n }, [user, dbName, password, port, host, setDsnString, configToDsnString]);\n\n const switcherChangeEvt = (event: React.ChangeEvent) => {\n if (event.target.checked) {\n // build dsn_string\n const cs = configToDsnString();\n setDsnString(cs);\n } else {\n // parse dsn_string\n const kv = parseDsnString(dsnString, [\n \"host\",\n \"port\",\n \"dbname\",\n \"user\",\n \"password\",\n ]);\n setHostname(kv.get(\"host\") ? kv.get(\"host\") + \"\" : \"\");\n setPort(kv.get(\"port\") ? kv.get(\"port\") + \"\" : \"\");\n setDbName(kv.get(\"dbname\") ? kv.get(\"dbname\") + \"\" : \"\");\n setUser(kv.get(\"user\") ? kv.get(\"user\") + \"\" : \"\");\n setPassword(kv.get(\"password\") ? kv.get(\"password\") + \"\" : \"\");\n }\n\n setUseDsnString(event.target.checked);\n };\n\n return (\n \n \n \n \n {useDsnString ? (\n \n \n ) => {\n setDsnString(e.target.value);\n }}\n />\n \n \n ) : (\n \n \n \n \n ) => {\n setHostname(e.target.value);\n }}\n />\n \n \n ) => {\n setDbName(e.target.value);\n }}\n />\n \n \n ) => {\n setPort(e.target.value);\n }}\n />\n \n\n \n ) => {\n setUser(e.target.value);\n }}\n />\n \n \n ) => {\n setPassword(e.target.value);\n }}\n />\n \n \n \n \n \n
\n
\n
\n )}\n \n ) => {\n setTable(e.target.value);\n }}\n />\n \n \n {\n setFormat(e.target.value);\n }}\n tooltip=\"'namespace' reflects current bucket/object list and 'access' reflects a journal of object operations, defaults to 'namespace'\"\n selectorOptions={[\n { label: \"Namespace\", value: \"namespace\" },\n { label: \"Access\", value: \"access\" },\n ]}\n />\n \n \n ) => {\n setQueueDir(e.target.value);\n }}\n />\n \n \n ) => {\n setQueueLimit(e.target.value);\n }}\n />\n \n \n ) => {\n setComment(e.target.value);\n }}\n />\n \n
\n );\n};\n\nexport default withStyles(styles)(ConfMySql);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport ConfPostgres from \"../CustomForms/ConfPostgres\";\nimport api from \"../../../../common/api\";\nimport { serverNeedsRestart, setErrorSnackMessage } from \"../../../../actions\";\nimport {\n notificationEndpointsFields,\n notifyMysql,\n notifyPostgres,\n removeEmptyFields,\n} from \"../utils\";\nimport { IElementValue } from \"../types\";\nimport {\n modalBasic,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { servicesList } from \"./utils\";\nimport ConfMySql from \"../CustomForms/ConfMySql\";\nimport ConfTargetGeneric from \"../ConfTargetGeneric\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...modalBasic,\n ...settingsCommon,\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n lambdaFormIndicator: {\n display: \"flex\",\n marginBottom: 40,\n },\n customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n settingsFormContainer: {\n ...settingsCommon.settingsFormContainer,\n height: \"calc(100vh - 422px)\",\n },\n });\n\ninterface IAddNotificationEndpointProps {\n service: string;\n saveAndRefresh: any;\n serverNeedsRestart: typeof serverNeedsRestart;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n classes: any;\n}\n\nconst AddNotificationEndpoint = ({\n service,\n saveAndRefresh,\n serverNeedsRestart,\n classes,\n setErrorSnackMessage,\n}: IAddNotificationEndpointProps) => {\n //Local States\n const [valuesArr, setValueArr] = useState([]);\n const [saving, setSaving] = useState(false);\n\n //Effects\n\n useEffect(() => {\n if (saving) {\n const payload = {\n key_values: removeEmptyFields(valuesArr),\n };\n api\n .invoke(\"PUT\", `/api/v1/configs/${service}`, payload)\n .then(() => {\n setSaving(false);\n serverNeedsRestart(true);\n saveAndRefresh();\n })\n .catch((err) => {\n setSaving(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n saving,\n serverNeedsRestart,\n service,\n valuesArr,\n saveAndRefresh,\n setErrorSnackMessage,\n ]);\n\n //Fetch Actions\n const submitForm = (event: React.FormEvent) => {\n event.preventDefault();\n setSaving(true);\n };\n\n const onValueChange = useCallback(\n (newValue) => {\n setValueArr(newValue);\n },\n [setValueArr]\n );\n\n let srvComponent;\n switch (service) {\n case notifyPostgres: {\n srvComponent = ;\n break;\n }\n case notifyMysql: {\n srvComponent = ;\n break;\n }\n default: {\n const fields = get(notificationEndpointsFields, service, []);\n\n srvComponent = (\n \n );\n }\n }\n\n const targetElement = servicesList.find(\n (element) => element.actionTrigger === service\n );\n\n return (\n \n {service !== \"\" && (\n \n
\n \n {targetElement ? targetElement.targetTitle : \"\"} - Add Lambda\n Notification Target\n \n \n {srvComponent}\n \n \n \n Save\n \n \n \n \n
\n )}\n
\n );\n};\n\nconst mapDispatchToProps = {\n serverNeedsRestart,\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(AddNotificationEndpoint));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { servicesList } from \"./utils\";\nimport { settingsCommon } from \"../../Common/FormComponents/common/styleLibrary\";\n\ninterface INotificationTypeSelector {\n classes: any;\n setService: (trigger: string) => any;\n}\n\nconst nonLogos = servicesList.filter((elService) => elService.logo === \"\");\nconst withLogos = servicesList.filter((elService) => elService.logo !== \"\");\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...settingsCommon,\n logoButton: {\n height: \"80px\",\n },\n lambdaNotif: {\n backgroundColor: \"#fff\",\n border: \"#393939 1px solid\",\n borderRadius: 5,\n width: 101,\n height: 91,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: 16,\n cursor: \"pointer\",\n \"& img\": {\n maxWidth: 71,\n maxHeight: 71,\n },\n },\n iconContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n maxWidth: 455,\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n },\n nonIconContainer: {\n marginBottom: 16,\n width: 455,\n marginTop: 15,\n \"& button\": {\n marginRight: 16,\n },\n },\n pickTitle: {\n fontWeight: 600,\n color: \"#393939\",\n fontSize: 14,\n marginBottom: 16,\n },\n centerElements: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n });\n\nconst NotificationTypeSelector = ({\n classes,\n setService,\n}: INotificationTypeSelector) => {\n return (\n \n \n \n \n Pick a supported service\n \n \n
\n {nonLogos.map((item) => {\n return (\n {\n setService(item.actionTrigger);\n }}\n >\n {item.targetTitle.toUpperCase()}\n \n );\n })}\n
\n
\n {withLogos.map((item) => {\n return (\n {\n setService(item.actionTrigger);\n }}\n >\n \n \n );\n })}\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(NotificationTypeSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { TextField } from \"@material-ui/core\";\nimport { red } from \"@material-ui/core/colors\";\nimport Grid from \"@material-ui/core/Grid\";\nimport FiberManualRecordIcon from \"@material-ui/icons/FiberManualRecord\";\nimport Button from \"@material-ui/core/Button\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport {\n NotificationEndpointItem,\n NotificationEndpointsList,\n TransformedEndpointItem,\n} from \"./types\";\nimport { notificationTransform } from \"./utils\";\nimport { CreateIcon } from \"../../../../icons\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddNotificationEndpoint from \"./AddNotificationEndpoint\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport NotificationTypeSelector from \"./NotificationTypeSelector\";\n\ninterface IListNotificationEndpoints {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...settingsCommon,\n ...containerForHeader(theme.spacing(4)),\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n iconText: {\n lineHeight: \"24px\",\n },\n customConfigurationPage: {\n height: \"calc(100vh - 410px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n lambdaContainer: {\n padding: \"15px 0\",\n },\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"0 38px\",\n },\n });\n\nconst ListNotificationEndpoints = ({\n classes,\n setErrorSnackMessage,\n}: IListNotificationEndpoints) => {\n //Local States\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [currentPanel, setCurrentPanel] = useState(0);\n const [service, setService] = useState(\"\");\n\n //Effects\n // load records on mount\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/admin/notification_endpoints`)\n .then((res: NotificationEndpointsList) => {\n let resNotEndList: NotificationEndpointItem[] = [];\n if (res.notification_endpoints !== null) {\n resNotEndList = res.notification_endpoints;\n }\n setRecords(notificationTransform(resNotEndList));\n setIsLoading(false);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, setErrorSnackMessage]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const filteredRecords = records.filter((b: TransformedEndpointItem) => {\n if (filter === \"\") {\n return true;\n }\n return b.service_name.indexOf(filter) >= 0;\n });\n\n const statusDisplay = (status: string) => {\n return (\n \n \n {status}\n
\n );\n };\n\n const openNewLambdaSelector = () => {\n setCurrentPanel(1);\n };\n\n const backClick = () => {\n setService(\"\");\n setCurrentPanel(currentPanel - 1);\n };\n\n const saveAndRefresh = () => {\n setIsLoading(true);\n setCurrentPanel(0);\n setService(\"\");\n };\n\n return (\n \n \n \n \n
\n \n \n Lambda Notification Targets\n \n\n \n \n {\n setFilter(event.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={openNewLambdaSelector}\n >\n Add Notification Target\n \n \n \n
\n
\n \n \n \n
\n ,\n \n \n \n \n Back To Lambda Notifications\n \n \n \n {\n setService(serviceName);\n setCurrentPanel(2);\n }}\n />\n \n ,\n \n \n \n \n Back To Supported Services\n \n \n \n \n \n ,\n ]}\n currentSlide={currentPanel}\n />\n
\n
\n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(ListNotificationEndpoints));\n","import React, { Fragment, useState } from \"react\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport ConfigurationsList from \"./ConfigurationPanels/ConfigurationsList\";\nimport ListNotificationEndpoints from \"./NotificationEndpoints/ListNotificationEndpoints\";\n\ninterface IConfigurationMain {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst ConfigurationMain = ({ classes }: IConfigurationMain) => {\n const [selectedTab, setSelectedTab] = useState(0);\n return (\n \n \n \n \n \n All Settings\n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"tenant-tabs\"\n >\n \n \n \n \n {selectedTab === 0 && (\n \n \n \n )}\n {selectedTab === 1 && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ConfigurationMain);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Button, TextField } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport EditConfiguration from \"../CustomForms/EditConfiguration\";\n\ninterface IMatchParams {\n isExact: boolean;\n params: any;\n path: string;\n}\n\ninterface IWebhookPanel {\n match: IMatchParams;\n classes: any;\n}\n\ninterface IWebhook {\n name: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n strongText: {\n fontWeight: 700,\n },\n keyName: {\n marginLeft: 5,\n },\n actionsTray: {\n textAlign: \"right\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n searchField: {\n background: \"#FFFFFF\",\n padding: 12,\n borderRadius: 5,\n boxShadow: \"0px 3px 6px #00000012\",\n },\n iconText: {\n lineHeight: \"24px\",\n },\n });\n\nconst panels = {\n logger: {\n main: \"logger\",\n title: \"Logger Webhook Configuration\",\n modalTitle: \"Logger Webhook\",\n apiURL: \"\",\n configuration: {\n configuration_id: \"logger_webhook\",\n configuration_label: \"Logger Webhook\",\n },\n },\n audit: {\n main: \"audit\",\n title: \"Audit Webhook Configuration\",\n modalTitle: \"Audit Webhook\",\n apiURL: \"\",\n configuration: {\n configuration_id: \"audit_webhook\",\n configuration_label: \"Audit Webhook\",\n },\n },\n};\n\nconst WebhookPanel = ({ match, classes }: IWebhookPanel) => {\n const [addWebhookOpen, setAddWebhookOpen] = useState(false);\n const [filter, setFilter] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n // const [webhooks, setWebhooks] = useState([]);\n\n const pathIn = get(match, \"path\", \"\");\n const panelToDisplay = pathIn.split(\"/\");\n const panelData = get(panels, panelToDisplay[2], false);\n\n if (!panelData) {\n return null;\n }\n\n const webhooks: IWebhook[] = [];\n\n const filteredRecords: IWebhook[] = webhooks.filter((elementItem) =>\n elementItem.name.toLocaleLowerCase().includes(filter.toLocaleLowerCase())\n );\n\n const tableActions = [\n {\n type: \"edit\",\n onClick: () => {},\n },\n ];\n\n return (\n \n {addWebhookOpen && (\n {\n setIsLoading(true);\n setAddWebhookOpen(false);\n }}\n selectedConfiguration={panelData.configuration}\n />\n )}\n \n \n {panelData.title}\n \n \n
\n
\n \n {\n setFilter(event.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n }\n onClick={() => {\n setAddWebhookOpen(true);\n }}\n >\n Add Webhook Configuration\n \n \n \n
\n
\n \n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(WebhookPanel);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { ITenant } from \"./types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\n\ninterface IDeleteTenant {\n deleteOpen: boolean;\n selectedTenant: ITenant;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteTenant = ({\n deleteOpen,\n selectedTenant,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeleteTenant) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n const [retypeTenant, setRetypeTenant] = useState(\"\");\n\n useEffect(() => {\n if (deleteLoading) {\n api\n .invoke(\n \"DELETE\",\n `/api/v1/namespaces/${selectedTenant.namespace}/tenants/${selectedTenant.name}`\n )\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [deleteLoading]);\n\n const removeRecord = () => {\n if (retypeTenant !== selectedTenant.name) {\n setErrorSnackMessage(\"Tenant name is not correct\");\n return;\n }\n setDeleteLoading(true);\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Tenant\n \n {deleteLoading && }\n \n To continue please type {selectedTenant.name} in the box.\n \n ) => {\n setRetypeTenant(event.target.value);\n }}\n label=\"\"\n value={retypeTenant}\n />\n \n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n Delete\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default connector(DeleteTenant);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IWizardButton, IWizardPage } from \"./types\";\nimport { Button } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wizardStepContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n wizardComponent: {\n overflowY: \"auto\",\n marginBottom: 10,\n height: \"calc(100vh - 435px)\",\n },\n buttonsContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-end\" as const,\n padding: \"10px 0\",\n borderTop: \"#EAEAEA 1px solid\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n });\n\nconst WizardPage = ({ classes, page, pageChange }: IWizardPage) => {\n const buttonAction = (btn: IWizardButton) => {\n switch (btn.type) {\n case \"next\":\n pageChange(\"++\");\n break;\n case \"back\":\n pageChange(\"--\");\n break;\n case \"to\":\n pageChange(btn.toPage || 0);\n break;\n default:\n }\n\n if (btn.action) {\n btn.action();\n }\n };\n\n return (\n
\n
{page.componentRender}
\n
\n {page.buttons.map((btn) => {\n return (\n {\n buttonAction(btn);\n }}\n disabled={!btn.enabled}\n key={`button-${page.label}-${btn.label}`}\n >\n {btn.label}\n \n );\n })}\n
\n
\n );\n};\n\nexport default withStyles(styles)(WizardPage);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IWizardMain } from \"./types\";\nimport WizardPage from \"./WizardPage\";\nimport { Grid } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n wizardMain: {\n display: \"flex\",\n width: \"100%\",\n height: \"100%\",\n flexGrow: 1,\n },\n wizFromContainer: {\n height: \"calc(100vh - 365px)\",\n minHeight: 450,\n padding: \"0 30px\",\n },\n wizardSteps: {\n minWidth: 180,\n marginRight: 10,\n borderRight: \"#eaeaea 1px solid\",\n display: \"flex\",\n flexGrow: 1,\n flexDirection: \"column\",\n height: \"100%\",\n \"& ul\": {\n padding: \"0 15px 0 40px\",\n marginTop: \"0px\",\n\n \"& li\": {\n listStyle: \"lower-roman\",\n marginBottom: 12,\n },\n },\n },\n buttonList: {\n backgroundColor: \"transparent\",\n border: \"none\",\n cursor: \"pointer\",\n \"&:not(:disabled):hover\": {\n textDecoration: \"underline\",\n },\n \"&:selected, &:active, &:focus, &:focus:active\": {\n border: \"none\",\n outline: 0,\n boxShadow: \"none\",\n },\n },\n paddedContentGrid: {\n padding: \"0 10px\",\n },\n stepsLabel: {\n fontSize: 20,\n color: \"#393939\",\n fontWeight: 600,\n margin: \"15px 12px\",\n },\n });\n\nconst GenericWizard = ({ classes, wizardSteps }: IWizardMain) => {\n const [currentStep, setCurrentStep] = useState(0);\n\n const pageChange = (toElement: string | number) => {\n const lastPage = wizardSteps.length - 1;\n\n if (toElement === \"++\") {\n let nextPage = currentStep + 1;\n\n if (nextPage > lastPage) {\n nextPage = lastPage;\n }\n\n setCurrentStep(nextPage);\n }\n\n if (toElement === \"--\") {\n let prevPage = currentStep - 1;\n\n if (prevPage < 0) {\n prevPage = 0;\n }\n\n setCurrentStep(prevPage);\n }\n\n if (typeof toElement === \"number\") {\n let pg = toElement;\n if (toElement < 0) {\n pg = 0;\n }\n\n if (toElement > lastPage) {\n pg = lastPage;\n }\n\n setCurrentStep(pg);\n }\n };\n\n if (wizardSteps.length === 0) {\n return null;\n }\n\n return (\n \n \n
\n Steps\n
    \n {wizardSteps.map((step, index) => {\n return (\n
  • \n pageChange(index)}\n disabled={index > currentStep}\n className={classes.buttonList}\n >\n {step.label}\n \n
  • \n );\n })}\n
\n
\n
\n \n \n
\n
\n );\n};\n\nexport default withStyles(styles)(GenericWizard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport { IAffinityModel } from \"../../../../common/types\";\n\nexport const getHardcodedAffinity = (tenantName: string, poolName: string) => {\n const hardCodedAffinity: IAffinityModel = {\n podAntiAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: [\n {\n labelSelector: {\n matchExpressions: [\n {\n key: \"v1.min.io/tenant\",\n operator: \"In\",\n values: [tenantName],\n },\n {\n key: \"v1.min.io/pool\",\n operator: \"In\",\n values: [poolName],\n },\n ],\n },\n topologyKey: \"kubernetes.io/hostname\",\n },\n ],\n },\n };\n return hardCodedAffinity;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { IErasureCodeCalc } from \"../../../common/types\";\nimport { IMemorySize } from \"./ListTenants/types\";\nimport { KeyPair, Opts } from \"./ListTenants/utils\";\n\nexport const ADD_TENANT_SET_CURRENT_PAGE = \"ADD_TENANT/SET_CURRENT_PAGE\";\nexport const ADD_TENANT_SET_ADVANCED_MODE = \"ADD_TENANT/SET_ADVANCED_MODE\";\nexport const ADD_TENANT_UPDATE_FIELD = \"ADD_TENANT/UPDATE_FIELD\";\nexport const ADD_TENANT_SET_PAGE_VALID = \"ADD_TENANT/SET_PAGE_VALID\";\nexport const ADD_TENANT_RESET_FORM = \"ADD_TENANT/RESET_FORM\";\n\n// Name Tenant\nexport const ADD_TENANT_SET_STORAGE_CLASSES_LIST =\n \"ADD_TENANT/SET_STORAGE_CLASSES_LIST\";\nexport const ADD_TENANT_SET_LIMIT_SIZE = \"ADD_TENANT/SET_LIMIT_SIZE\";\n\n// Security\nexport const ADD_TENANT_ADD_MINIO_KEYPAIR = \"ADD_TENANT/ADD_MINIO_KEYPAIR\";\nexport const ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR =\n \"ADD_TENANT/ADD_FILE_MINIO_KEYPAIR\";\nexport const ADD_TENANT_DELETE_MINIO_KEYPAIR =\n \"ADD_TENANT/DELETE_MINIO_KEYPAIR\";\nexport const ADD_TENANT_ADD_CA_KEYPAIR = \"ADD_TENANT/ADD_CA_KEYPAIR\";\nexport const ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR =\n \"ADD_TENANT/ADD_FILE_TO_CA_KEYPAIR\";\nexport const ADD_TENANT_DELETE_CA_KEYPAIR = \"ADD_TENANT/DELETE_CA_KEYPAIR\";\nexport const ADD_TENANT_ADD_CONSOLE_CERT = \"ADD_TENANT/ADD_CONSOLE_CERT\";\n\n// Encryption\nexport const ADD_TENANT_ENCRYPTION_SERVER_CERT =\n \"ADD_TENANT/ENCRYPTION_SERVER_CERT\";\nexport const ADD_TENANT_ENCRYPTION_CLIENT_CERT =\n \"ADD_TENANT/ENCRYPTION_CLIENT_CERT\";\nexport const ADD_TENANT_ENCRYPTION_VAULT_CERT =\n \"ADD_TENANT/ENCRYPTION_VAULT_CERT\";\nexport const ADD_TENANT_ENCRYPTION_VAULT_CA = \"ADD_TENANT/ENCRYPTION_VAULT_CA\";\nexport const ADD_TENANT_ENCRYPTION_GEMALTO_CA =\n \"ADD_TENANT/ENCRYPTION_GEMALTO_CA\";\n\nexport interface ICreateTenant {\n page: number;\n validPages: string[];\n advancedModeOn: boolean;\n storageClasses: Opts[];\n limitSize: any;\n fields: IFieldStore;\n certificates: ICertificatesItems;\n}\n\nexport interface ICertificatesItems {\n minioCertificates: KeyPair[];\n caCertificates: KeyPair[];\n consoleCertificate: KeyPair;\n serverCertificate: KeyPair;\n clientCertificate: KeyPair;\n vaultCertificate: KeyPair;\n vaultCA: KeyPair;\n gemaltoCA: KeyPair;\n}\n\nexport interface IFieldStore {\n nameTenant: INameTenantFields;\n configure: IConfigureFields;\n identityProvider: IIdentityProviderFields;\n security: ISecurityFields;\n encryption: IEncryptionFields;\n tenantSize: ITenantSizeFields;\n}\n\nexport interface INameTenantFields {\n tenantName: string;\n namespace: string;\n selectedStorageClass: string;\n}\n\nexport interface IConfigureFields {\n customImage: boolean;\n imageName: string;\n consoleImage: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n}\n\nexport interface IIdentityProviderFields {\n idpSelection: string;\n openIDURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameFilter: string;\n ADGroupBaseDN: string;\n ADGroupSearchFilter: string;\n ADNameAttribute: string;\n}\n\nexport interface ISecurityFields {\n enableTLS: boolean;\n enableAutoCert: boolean;\n enableCustomCerts: boolean;\n}\n\nexport interface IEncryptionFields {\n enableEncryption: boolean;\n encryptionType: string;\n gemaltoEndpoint: string;\n gemaltoToken: string;\n gemaltoDomain: string;\n gemaltoRetry: string;\n awsEndpoint: string;\n awsRegion: string;\n awsKMSKey: string;\n awsAccessKey: string;\n awsSecretKey: string;\n awsToken: string;\n vaultEndpoint: string;\n vaultEngine: string;\n vaultNamespace: string;\n vaultPrefix: string;\n vaultAppRoleEngine: string;\n vaultId: string;\n vaultSecret: string;\n vaultRetry: string;\n vaultPing: string;\n gcpProjectID: string;\n gcpEndpoint: string;\n gcpClientEmail: string;\n gcpClientID: string;\n gcpPrivateKeyID: string;\n gcpPrivateKey: string;\n enableCustomCertsForKES: boolean;\n}\n\nexport interface ITenantSizeFields {\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n maxAllocableMemo: number;\n memorySize: IMemorySize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n}\n\nexport interface ITenantState {\n createTenant: ICreateTenant;\n}\n\ninterface SetTenantWizardPage {\n type: typeof ADD_TENANT_SET_CURRENT_PAGE;\n page: number;\n}\n\ninterface SetAdvancedMode {\n type: typeof ADD_TENANT_SET_ADVANCED_MODE;\n state: boolean;\n}\n\ninterface UpdateATField {\n type: typeof ADD_TENANT_UPDATE_FIELD;\n pageName: keyof IFieldStore;\n field: keyof FieldsToHandle;\n value: any;\n}\n\ninterface SetPageValid {\n type: typeof ADD_TENANT_SET_PAGE_VALID;\n pageName: keyof IFieldStore;\n valid: boolean;\n}\n\ninterface SetStorageClassesList {\n type: typeof ADD_TENANT_SET_STORAGE_CLASSES_LIST;\n storageClasses: Opts[];\n}\n\ninterface SetLimitSize {\n type: typeof ADD_TENANT_SET_LIMIT_SIZE;\n limitSize: any;\n}\n\ninterface AddMinioKeyPair {\n type: typeof ADD_TENANT_ADD_MINIO_KEYPAIR;\n}\n\ninterface AddFileToMinioKeyPair {\n type: typeof ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR;\n id: string;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface DeleteMinioKeyPair {\n type: typeof ADD_TENANT_DELETE_MINIO_KEYPAIR;\n id: string;\n}\ninterface AddCAKeyPair {\n type: typeof ADD_TENANT_ADD_CA_KEYPAIR;\n}\n\ninterface AddFileToCAKeyPair {\n type: typeof ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR;\n id: string;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface DeleteCAKeyPair {\n type: typeof ADD_TENANT_DELETE_CA_KEYPAIR;\n id: string;\n}\n\ninterface AddFileConsoleCert {\n type: typeof ADD_TENANT_ADD_CONSOLE_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\n// Encryption Certs\ninterface AddFileServerCert {\n type: typeof ADD_TENANT_ENCRYPTION_SERVER_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface AddFileClientCert {\n type: typeof ADD_TENANT_ENCRYPTION_CLIENT_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface AddFileVaultCert {\n type: typeof ADD_TENANT_ENCRYPTION_VAULT_CERT;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface AddFileVaultCa {\n type: typeof ADD_TENANT_ENCRYPTION_VAULT_CA;\n fileName: string;\n value: string;\n}\n\ninterface AddFileGemaltoCa {\n type: typeof ADD_TENANT_ENCRYPTION_GEMALTO_CA;\n fileName: string;\n value: string;\n}\n\ninterface ResetForm {\n type: typeof ADD_TENANT_RESET_FORM;\n}\n\nexport type FieldsToHandle = INameTenantFields;\n\nexport type TenantsManagementTypes =\n | SetTenantWizardPage\n | SetAdvancedMode\n | UpdateATField\n | SetPageValid\n | SetStorageClassesList\n | SetLimitSize\n | AddMinioKeyPair\n | DeleteMinioKeyPair\n | AddCAKeyPair\n | DeleteCAKeyPair\n | AddFileConsoleCert\n | AddFileToMinioKeyPair\n | AddFileToCAKeyPair\n | AddFileServerCert\n | AddFileClientCert\n | AddFileVaultCert\n | AddFileVaultCa\n | AddFileGemaltoCa\n | ResetForm;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { Opts } from \"./ListTenants/utils\";\nimport {\n ADD_TENANT_SET_ADVANCED_MODE,\n ADD_TENANT_SET_CURRENT_PAGE,\n ADD_TENANT_UPDATE_FIELD,\n ADD_TENANT_SET_PAGE_VALID,\n ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n ADD_TENANT_SET_LIMIT_SIZE,\n ADD_TENANT_ADD_CA_KEYPAIR,\n ADD_TENANT_DELETE_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n ADD_TENANT_ADD_MINIO_KEYPAIR,\n ADD_TENANT_DELETE_MINIO_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CERT,\n ADD_TENANT_ENCRYPTION_SERVER_CERT,\n ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CA,\n ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n ADD_TENANT_RESET_FORM,\n} from \"./types\";\n\n// Basic actions\nexport const setWizardPage = (page: number) => {\n return {\n type: ADD_TENANT_SET_CURRENT_PAGE,\n page,\n };\n};\n\nexport const setAdvancedMode = (state: boolean) => {\n return {\n type: ADD_TENANT_SET_ADVANCED_MODE,\n state,\n };\n};\n\nexport const updateAddField = (\n pageName: string,\n fieldName: string,\n value: any\n) => {\n return {\n type: ADD_TENANT_UPDATE_FIELD,\n pageName,\n field: fieldName,\n value,\n };\n};\n\nexport const isPageValid = (pageName: string, valid: boolean) => {\n return {\n type: ADD_TENANT_SET_PAGE_VALID,\n pageName,\n valid,\n };\n};\n\n// Name Tenant actions\n\nexport const setStorageClassesList = (storageClasses: Opts[]) => {\n return {\n type: ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n storageClasses,\n };\n};\n\nexport const setLimitSize = (limitSize: any) => {\n return {\n type: ADD_TENANT_SET_LIMIT_SIZE,\n limitSize,\n };\n};\n\n// Security actions\n\nexport const addCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CA_KEYPAIR,\n };\n};\n\nexport const deleteCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addKeyPair = () => {\n return {\n type: ADD_TENANT_ADD_MINIO_KEYPAIR,\n };\n};\n\nexport const deleteKeyPair = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_MINIO_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToKeyPair = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n id,\n key,\n fileName,\n value,\n };\n};\n\nexport const addConsoleCertificate = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileServerCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_SERVER_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileClientCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCert = (\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CERT,\n key,\n fileName,\n value,\n };\n};\n\nexport const addFileVaultCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_VAULT_CA,\n fileName,\n value,\n };\n};\n\nexport const addFileGemaltoCa = (fileName: string, value: string) => {\n return {\n type: ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n fileName,\n value,\n };\n};\n\nexport const resetAddTenantForm = () => {\n return {\n type: ADD_TENANT_RESET_FORM,\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport interface IValidation {\n fieldKey: string;\n required: boolean;\n pattern?: RegExp;\n customPatternMessage?: string;\n customValidation?: boolean; // The validation to trigger the error\n customValidationMessage?: string;\n value: string;\n}\n\nexport const commonFormValidation = (fieldsValidate: IValidation[]) => {\n let returnErrors: any = {};\n\n fieldsValidate.forEach((field) => {\n if (field.required && field.value.trim() === \"\") {\n returnErrors[field.fieldKey] = \"Field cannot be empty\";\n return;\n }\n\n if (field.customValidation && field.customValidationMessage) {\n returnErrors[field.fieldKey] = field.customValidationMessage;\n return;\n }\n\n if (field.pattern && field.customPatternMessage) {\n const rgx = new RegExp(field.pattern, \"g\");\n\n if (!field.value.match(rgx)) {\n returnErrors[field.fieldKey] = field.customPatternMessage;\n }\n return;\n }\n });\n\n return returnErrors;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const clearValidationError = (\n validationErrors: any,\n fieldKey: string\n) => {\n const newValidationElement = { ...validationErrors };\n delete newValidationElement[fieldKey];\n\n return newValidationElement;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useMemo, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport get from \"lodash/get\";\nimport debounce from \"lodash/debounce\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../actions\";\nimport {\n setAdvancedMode,\n updateAddField,\n isPageValid,\n setStorageClassesList,\n setLimitSize,\n} from \"../../actions\";\nimport {\n IQuotaElement,\n IQuotas,\n Opts,\n getLimitSizes,\n} from \"../../ListTenants/utils\";\nimport { AppState } from \"../../../../../store\";\nimport { commonFormValidation } from \"../../../../../utils/validationFunctions\";\nimport { clearValidationError } from \"../../utils\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface INameTenantScreen {\n classes: any;\n storageClasses: Opts[];\n setAdvancedMode: typeof setAdvancedMode;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n setStorageClassesList: typeof setStorageClassesList;\n setLimitSize: typeof setLimitSize;\n tenantName: string;\n namespace: string;\n selectedStorageClass: string;\n advancedMode: boolean;\n}\n\nconst NameTenant = ({\n classes,\n storageClasses,\n advancedMode,\n tenantName,\n namespace,\n selectedStorageClass,\n setAdvancedMode,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n}: INameTenantScreen) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: string) => {\n updateAddField(\"nameTenant\", field, value);\n },\n [updateAddField]\n );\n\n // Storage classes retrieval\n const getNamespaceInformation = useCallback(() => {\n updateField(\"selectedStorageClass\", \"\");\n\n setStorageClassesList([]);\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/resourcequotas/${namespace}-storagequota`\n )\n .then((res: IQuotas) => {\n const elements: IQuotaElement[] = get(res, \"elements\", []);\n setLimitSize(getLimitSizes(res));\n\n const newStorage = elements.map((storageClass: any) => {\n const name = get(storageClass, \"name\", \"\").split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n\n return { label: name, value: name };\n });\n\n setStorageClassesList(newStorage);\n if (newStorage.length > 0) {\n updateField(\"selectedStorageClass\", newStorage[0].value);\n }\n })\n .catch((err: any) => {\n console.error(err);\n });\n }, [namespace, setLimitSize, setStorageClassesList, updateField]);\n\n const debounceNamespace = useMemo(\n () => debounce(getNamespaceInformation, 500),\n [getNamespaceInformation]\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n // Validation\n useEffect(() => {\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"tenant-name\",\n required: true,\n pattern: /^[a-z0-9-]{3,63}$/,\n customPatternMessage:\n \"Name only can contain lowercase letters, numbers and '-'. Min. Length: 3\",\n value: tenantName,\n },\n {\n fieldKey: \"namespace\",\n required: true,\n value: namespace,\n customValidation: storageClasses.length < 1,\n customValidationMessage: \"Please enter a valid namespace\",\n },\n ]);\n\n const isValid =\n !(\"tenant-name\" in commonValidation) &&\n !(\"namespace\" in commonValidation) &&\n storageClasses.length > 0;\n\n isPageValid(\"nameTenant\", isValid);\n\n setValidationErrors(commonValidation);\n }, [storageClasses, namespace, tenantName, isPageValid]);\n\n const frmValidationCleanup = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Name Tenant

\n \n How would you like to name this new tenant?\n \n
\n \n ) => {\n updateField(\"tenantName\", e.target.value);\n frmValidationCleanup(\"tenant-name\");\n }}\n label=\"Name\"\n value={tenantName}\n required\n error={validationErrors[\"tenant-name\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"namespace\", e.target.value);\n frmValidationCleanup(\"namespace\");\n }}\n label=\"Namespace\"\n value={namespace}\n error={validationErrors[\"namespace\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"selectedStorageClass\", e.target.value as string);\n }}\n label=\"Storage Class\"\n value={selectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n \n
\n \n Check 'Advanced Mode' for additional configuration options, such as\n configuring an Identity Provider, Encryption at rest, and customized\n TLS/SSL Certificates.\n
\n Leave 'Advanced Mode' unchecked to use the secure default settings for\n the tenant.\n
\n
\n
\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n setAdvancedMode(checked);\n }}\n label={\"Advanced Mode\"}\n />\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n tenantName: state.tenants.createTenant.fields.nameTenant.tenantName,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n storageClasses: state.tenants.createTenant.storageClasses,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n setAdvancedMode,\n updateAddField,\n setStorageClassesList,\n setLimitSize,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(NameTenant));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport get from \"lodash/get\";\n\nexport interface Opts {\n label: string;\n value: string;\n}\n\nexport interface IQuotaElement {\n hard: number;\n name: string;\n}\n\nexport interface IQuotas {\n elements?: IQuotaElement[];\n name: string;\n}\n\nexport const minMemReq = 2147483648;\n\nexport interface KeyPair {\n id: string;\n encoded_cert: string;\n encoded_key: string;\n cert: string;\n key: string;\n}\n\nexport const ecListTransform = (ecList: string[]): Opts[] => {\n return ecList.map((value) => {\n return { label: value, value };\n });\n};\n\nexport const getLimitSizes = (resourceQuotas: IQuotas) => {\n const quotas: IQuotaElement[] = get(resourceQuotas, \"elements\", []);\n\n const returnQuotas: any = {};\n\n quotas.forEach((rsQuota) => {\n const stCName = rsQuota.name.split(\n \".storageclass.storage.k8s.io/requests.storage\"\n )[0];\n const hard = get(rsQuota, \"hard\", 0);\n const used = get(rsQuota, \"used\", 0);\n\n returnQuotas[stCName] = hard - used;\n });\n\n return returnQuotas;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useCallback, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid } from \"@material-ui/core\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { updateAddField, isPageValid } from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\n\ninterface IConfigureProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n classes: any;\n customImage: boolean;\n imageName: string;\n consoleImage: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Configure = ({\n classes,\n customImage,\n imageName,\n consoleImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n updateAddField,\n isPageValid,\n}: IConfigureProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"configure\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: true,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"consoleImage\",\n required: true,\n value: consoleImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/console:VERSION'\",\n },\n ];\n if (customDockerhub) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"registry\",\n required: true,\n value: imageRegistry,\n },\n {\n fieldKey: \"registryUsername\",\n required: true,\n value: imageRegistryUsername,\n },\n {\n fieldKey: \"registryPassword\",\n required: true,\n value: imageRegistryPassword,\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"configure\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n customImage,\n imageName,\n consoleImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n ]);\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n return (\n \n
\n

Configure

\n \n Basic configurations for tenant management\n \n
\n\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"customImage\", checked);\n }}\n label={\"Use custom image\"}\n />\n \n {customImage && (\n \n Please enter the MinIO image from dockerhub to use\n \n ) => {\n updateField(\"imageName\", e.target.value);\n cleanValidation(\"image\");\n }}\n label=\"MinIO's Image\"\n value={imageName}\n error={validationErrors[\"image\"] || \"\"}\n placeholder=\"E.g. minio/minio:RELEASE.2020-05-08T02-40-49Z\"\n required\n />\n \n \n ) => {\n updateField(\"consoleImage\", e.target.value);\n cleanValidation(\"consoleImage\");\n }}\n label=\"Console's Image\"\n value={consoleImage}\n error={validationErrors[\"consoleImage\"] || \"\"}\n placeholder=\"E.g. minio/console:v0.3.13\"\n required\n />\n \n \n )}\n {customImage && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"customDockerhub\", checked);\n }}\n label={\"Set/Update Image Registry\"}\n />\n \n \n )}\n {customDockerhub && (\n \n \n ) => {\n updateField(\"imageRegistry\", e.target.value);\n }}\n label=\"Endpoint\"\n value={imageRegistry}\n error={validationErrors[\"registry\"] || \"\"}\n placeholder=\"E.g. https://index.docker.io/v1/\"\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryUsername\", e.target.value);\n }}\n label=\"Username\"\n value={imageRegistryUsername}\n error={validationErrors[\"registryUsername\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"imageRegistryPassword\", e.target.value);\n }}\n label=\"Password\"\n value={imageRegistryPassword}\n error={validationErrors[\"registryPassword\"] || \"\"}\n required\n />\n \n \n )}\n
\n

Expose Services

\n \n Whether the tenant's services should request an external IP.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeMinIO\", checked);\n }}\n label={\"Expose MiniO Service\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"exposeConsole\", checked);\n }}\n label={\"Expose Console Service\"}\n />\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n consoleImage: state.tenants.createTenant.fields.configure.consoleImage,\n customDockerhub: state.tenants.createTenant.fields.configure.customDockerhub,\n imageRegistry: state.tenants.createTenant.fields.configure.imageRegistry,\n imageRegistryUsername:\n state.tenants.createTenant.fields.configure.imageRegistryUsername,\n imageRegistryPassword:\n state.tenants.createTenant.fields.configure.imageRegistryPassword,\n exposeMinIO: state.tenants.createTenant.fields.configure.exposeMinIO,\n exposeConsole: state.tenants.createTenant.fields.configure.exposeConsole,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Configure));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, useCallback, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, Typography } from \"@material-ui/core\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { updateAddField, isPageValid } from \"../../actions\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IIdentityProviderProps {\n classes: any;\n idpSelection: string;\n openIDURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameFilter: string;\n ADGroupBaseDN: string;\n ADGroupSearchFilter: string;\n ADNameAttribute: string;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst IdentityProvider = ({\n classes,\n idpSelection,\n openIDURL,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADSkipTLS,\n ADServerInsecure,\n ADUserNameFilter,\n ADGroupBaseDN,\n ADGroupSearchFilter,\n ADNameAttribute,\n updateAddField,\n isPageValid,\n}: IIdentityProviderProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"identityProvider\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n\n useEffect(() => {\n let customIDPValidation: IValidation[] = [];\n\n if (idpSelection === \"Built-in\") {\n isPageValid(\"identityProvider\", true);\n setValidationErrors({});\n\n return;\n }\n\n if (idpSelection === \"OpenID\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"openID_URL\",\n required: true,\n value: openIDURL,\n },\n {\n fieldKey: \"openID_clientID\",\n required: true,\n value: openIDClientID,\n },\n {\n fieldKey: \"openID_secretID\",\n required: true,\n value: openIDSecretID,\n },\n ];\n }\n\n if (idpSelection === \"AD\") {\n customIDPValidation = [\n ...customIDPValidation,\n {\n fieldKey: \"AD_URL\",\n required: true,\n value: ADURL,\n },\n {\n fieldKey: \"ad_userNameFilter\",\n required: true,\n value: ADUserNameFilter,\n },\n {\n fieldKey: \"ad_groupBaseDN\",\n required: true,\n value: ADGroupBaseDN,\n },\n {\n fieldKey: \"ad_groupSearchFilter\",\n required: true,\n value: ADGroupSearchFilter,\n },\n {\n fieldKey: \"ad_nameAttribute\",\n required: true,\n value: ADNameAttribute,\n },\n ];\n }\n\n const commonVal = commonFormValidation(customIDPValidation);\n\n isPageValid(\"identityProvider\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n idpSelection,\n openIDURL,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADUserNameFilter,\n ADGroupBaseDN,\n ADGroupSearchFilter,\n ADNameAttribute,\n isPageValid,\n ]);\n\n return (\n \n
\n

Identity Provider

\n \n Access to the tenant can be controlled via an external Identity\n Manager.\n \n
\n \n {\n updateField(\"idpSelection\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Built-in\", value: \"Built-in\" },\n { label: \"OpenID\", value: \"OpenID\" },\n { label: \"Active Directory\", value: \"AD\" },\n ]}\n />\n MinIO supports both OpenID and Active Directory\n \n\n {idpSelection === \"OpenID\" && (\n \n \n ) => {\n updateField(\"openIDURL\", e.target.value);\n cleanValidation(\"openID_URL\");\n }}\n label=\"URL\"\n value={openIDURL}\n error={validationErrors[\"openID_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDClientID\", e.target.value);\n cleanValidation(\"openID_clientID\");\n }}\n label=\"Client ID\"\n value={openIDClientID}\n error={validationErrors[\"openID_clientID\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDSecretID\", e.target.value);\n cleanValidation(\"openID_secretID\");\n }}\n label=\"Secret ID\"\n value={openIDSecretID}\n error={validationErrors[\"openID_secretID\"] || \"\"}\n required\n />\n \n \n )}\n {idpSelection === \"AD\" && (\n \n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"URL\"\n value={ADURL}\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"ADSkipTLS\", checked);\n }}\n label={\"Skip TLS Verification\"}\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"ADServerInsecure\", checked);\n }}\n label={\"Server Insecure\"}\n />\n \n {ADServerInsecure ? (\n \n \n Warning: All traffic with Active Directory will be unencrypted\n \n
\n
\n ) : null}\n \n ) => {\n updateField(\"ADUserNameFilter\", e.target.value);\n cleanValidation(\"ad_userNameFilter\");\n }}\n label=\"User Search Filter\"\n value={ADUserNameFilter}\n error={validationErrors[\"ad_userNameFilter\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADGroupBaseDN\", e.target.value);\n cleanValidation(\"ad_groupBaseDN\");\n }}\n label=\"Group Search Base DN\"\n value={ADGroupBaseDN}\n error={validationErrors[\"ad_groupBaseDN\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n cleanValidation(\"ad_groupSearchFilter\");\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n error={validationErrors[\"ad_groupSearchFilter\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"ADNameAttribute\", e.target.value);\n cleanValidation(\"ad_nameAttribute\");\n }}\n label=\"Group Name Attribute\"\n value={ADNameAttribute}\n error={validationErrors[\"ad_nameAttribute\"] || \"\"}\n required\n />\n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n idpSelection: state.tenants.createTenant.fields.identityProvider.idpSelection,\n openIDURL: state.tenants.createTenant.fields.identityProvider.openIDURL,\n openIDClientID:\n state.tenants.createTenant.fields.identityProvider.openIDClientID,\n openIDSecretID:\n state.tenants.createTenant.fields.identityProvider.openIDSecretID,\n ADURL: state.tenants.createTenant.fields.identityProvider.ADURL,\n ADSkipTLS: state.tenants.createTenant.fields.identityProvider.ADSkipTLS,\n ADServerInsecure:\n state.tenants.createTenant.fields.identityProvider.ADServerInsecure,\n ADUserNameFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserNameFilter,\n ADGroupBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADGroupBaseDN,\n ADGroupSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,\n ADNameAttribute:\n state.tenants.createTenant.fields.identityProvider.ADNameAttribute,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(IdentityProvider));\n","import React from \"react\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: theme.palette.error.main,\n },\n });\n\ninterface IErrorBlockProps {\n classes: any;\n errorMessage: string;\n withBreak?: boolean;\n}\n\nconst ErrorBlock = ({\n classes,\n errorMessage,\n withBreak = true,\n}: IErrorBlockProps) => {\n return (\n \n {withBreak &&
}\n \n {errorMessage}\n \n
\n );\n};\n\nexport default withStyles(styles)(ErrorBlock);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport get from \"lodash/get\";\nimport { Grid, InputLabel, Tooltip } from \"@material-ui/core\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport AttachFileIcon from \"@material-ui/icons/AttachFile\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport { fileProcess } from \"./utils\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport ErrorBlock from \"../../../../shared/ErrorBlock\";\n\ninterface InputBoxProps {\n label: string;\n classes: any;\n onChange: (e: string, i: string) => void;\n id: string;\n name: string;\n disabled?: boolean;\n tooltip?: string;\n required?: boolean;\n error?: string;\n accept?: string;\n value?: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n flexDirection: \"column\",\n },\n errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n position: \"absolute\",\n top: 7,\n right: 7,\n },\n errorText: {\n margin: \"0\",\n fontSize: \"0.75rem\",\n marginTop: 3,\n textAlign: \"left\",\n fontFamily: \"Lato,sans-serif\",\n fontWeight: 400,\n lineHeight: \"1.66\",\n color: \"#dc1f2e\",\n },\n valueString: {\n maxWidth: 350,\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n marginTop: 2,\n },\n fileReselect: {\n display: \"flex\",\n alignItems: \"center\",\n },\n fieldBottom: {\n borderBottom: \"#9c9c9c 1px solid\",\n },\n fileInputField: {\n margin: \"13px 0\",\n },\n });\n\nconst FileSelector = ({\n label,\n classes,\n onChange,\n id,\n name,\n disabled = false,\n tooltip = \"\",\n required,\n error = \"\",\n accept = \"\",\n value = \"\",\n}: InputBoxProps) => {\n const [showFileSelector, setShowSelector] = useState(false);\n\n return (\n \n \n {label !== \"\" && (\n \n \n {label}\n {required ? \"*\" : \"\"}\n \n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n \n )}\n\n {showFileSelector || value === \"\" ? (\n
\n {\n const fileName = get(e, \"target.files[0].name\", \"\");\n fileProcess(e, (data: any) => {\n onChange(data, fileName);\n });\n }}\n accept={accept}\n required={required}\n disabled={disabled}\n className={classes.fileInputField}\n />\n\n {value !== \"\" && (\n {\n setShowSelector(false);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n >\n \n \n )}\n\n {error !== \"\" && }\n
\n ) : (\n
\n
{value}
\n {\n setShowSelector(true);\n }}\n disableRipple={false}\n disableFocusRipple={false}\n >\n \n \n
\n )}\n \n
\n );\n};\n\nexport default withStyles(styles)(FileSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const fileProcess = (evt: any, callback: any) => {\n const file = evt.target.files[0];\n const reader = new FileReader();\n reader.readAsDataURL(file);\n\n reader.onload = () => {\n // reader.readAsDataURL(file) output will be something like: data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSU\n // we care only about the actual base64 part (everything after \"data:application/x-x509-ca-cert;base64,\")\n const fileBase64 = reader.result;\n if (fileBase64) {\n const fileArray = fileBase64.toString().split(\"base64,\");\n\n if (fileArray.length === 2) {\n callback(fileArray[1]);\n }\n }\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useCallback, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Divider, Grid, Typography } from \"@material-ui/core\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n addConsoleCertificate,\n} from \"../../actions\";\nimport { AppState } from \"../../../../../store\";\nimport { KeyPair } from \"../../ListTenants/utils\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\n\ninterface ISecurityProps {\n classes: any;\n enableTLS: boolean;\n enableAutoCert: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n caCertificates: KeyPair[];\n consoleCertificate: KeyPair;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileToCaCertificates: typeof addFileToCaCertificates;\n deleteCaCertificate: typeof deleteCaCertificate;\n addCaCertificate: typeof addCaCertificate;\n addKeyPair: typeof addKeyPair;\n addFileToKeyPair: typeof addFileToKeyPair;\n deleteKeyPair: typeof deleteKeyPair;\n addConsoleCertificate: typeof addConsoleCertificate;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Security = ({\n classes,\n enableTLS,\n enableAutoCert,\n enableCustomCerts,\n minioCertificates,\n caCertificates,\n consoleCertificate,\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n}: ISecurityProps) => {\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"security\", field, value);\n },\n [updateAddField]\n );\n\n // Validation\n\n useEffect(() => {\n if (!enableTLS) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableAutoCert) {\n isPageValid(\"security\", true);\n return;\n }\n if (enableCustomCerts) {\n isPageValid(\"security\", true);\n return;\n }\n isPageValid(\"security\", false);\n }, [enableTLS, enableAutoCert, enableCustomCerts, isPageValid]);\n\n return (\n \n
\n

Security

\n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableTLS\", checked);\n }}\n label={\"Enable TLS\"}\n />\n Enable TLS for the tenant, this is required for Encryption Configuration\n {enableTLS && (\n \n
\n
\n \n AutoCert: MinIO Operator will generate all TLS certificates\n automatically\n \n \n Custom certificates: Allow user to provide your own certificates\n \n
\n
\n )}\n
\n {enableTLS && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableAutoCert\", checked);\n }}\n label={\"Enable AutoCert\"}\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCerts\", checked);\n }}\n label={\"Custom Certificates\"}\n />\n \n {enableCustomCerts && (\n \n \n \n \n MinIO Certificates\n \n \n {minioCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToKeyPair(\n keyPair.id,\n \"key\",\n fileName,\n encodedValue\n );\n }}\n accept=\".key,.pem\"\n id=\"tlsKey\"\n name=\"tlsKey\"\n label=\"Key\"\n value={keyPair.key}\n />\n \n \n {\n addFileToKeyPair(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n {\n deleteKeyPair(keyPair.id);\n }}\n color=\"secondary\"\n >\n Remove\n \n \n \n ))}\n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n CA Certificates\n \n \n {caCertificates.map((keyPair: KeyPair) => (\n \n \n {\n addFileToCaCertificates(\n keyPair.id,\n \"cert\",\n fileName,\n encodedValue\n );\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"tlsCert\"\n name=\"tlsCert\"\n label=\"Cert\"\n value={keyPair.cert}\n />\n \n \n {\n deleteCaCertificate(keyPair.id);\n }}\n color=\"secondary\"\n >\n Remove\n \n \n \n ))}\n \n \n \n \n \n \n
\n \n
\n
\n
\n \n \n \n Console Certificates\n \n \n \n {\n addConsoleCertificate(\"key\", fileName, encodedValue);\n }}\n accept=\".key,.pem\"\n id=\"consoleKey\"\n name=\"consoleKey\"\n label=\"Key\"\n value={consoleCertificate.key}\n />\n \n \n {\n addConsoleCertificate(\"cert\", fileName, encodedValue);\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"consoleCert\"\n name=\"consoleCert\"\n label=\"Cert\"\n value={consoleCertificate.cert}\n />\n \n \n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n caCertificates: state.tenants.createTenant.certificates.caCertificates,\n consoleCertificate:\n state.tenants.createTenant.certificates.consoleCertificate,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\n addConsoleCertificate,\n});\n\nexport default withStyles(styles)(connector(Security));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Typography } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n} from \"../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError } from \"../../utils\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport FileSelector from \"../../../Common/FormComponents/FileSelector/FileSelector\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { KeyPair } from \"../../ListTenants/utils\";\n\ninterface IEncryptionProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n addFileServerCert: typeof addFileServerCert;\n addFileClientCert: typeof addFileClientCert;\n addFileVaultCert: typeof addFileVaultCert;\n addFileVaultCa: typeof addFileVaultCa;\n addFileGemaltoCa: typeof addFileGemaltoCa;\n enableEncryption: boolean;\n encryptionType: string;\n gemaltoEndpoint: string;\n gemaltoToken: string;\n gemaltoDomain: string;\n gemaltoRetry: string;\n awsEndpoint: string;\n awsRegion: string;\n awsKMSKey: string;\n awsAccessKey: string;\n awsSecretKey: string;\n awsToken: string;\n vaultEndpoint: string;\n vaultEngine: string;\n vaultNamespace: string;\n vaultPrefix: string;\n vaultAppRoleEngine: string;\n vaultId: string;\n vaultSecret: string;\n vaultRetry: string;\n vaultPing: string;\n gcpProjectID: string;\n gcpEndpoint: string;\n gcpClientEmail: string;\n gcpClientID: string;\n gcpPrivateKeyID: string;\n gcpPrivateKey: string;\n enableCustomCertsForKES: boolean;\n enableAutoCert: boolean;\n enableTLS: boolean;\n enableCustomCerts: boolean;\n minioCertificates: KeyPair[];\n serverCertificate: KeyPair;\n clientCertificate: KeyPair;\n vaultCertificate: KeyPair;\n vaultCA: KeyPair;\n gemaltoCA: KeyPair;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Encryption = ({\n classes,\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n enableEncryption,\n enableCustomCerts,\n encryptionType,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n awsEndpoint,\n awsRegion,\n awsKMSKey,\n awsAccessKey,\n awsSecretKey,\n awsToken,\n vaultEndpoint,\n vaultEngine,\n vaultNamespace,\n vaultPrefix,\n vaultAppRoleEngine,\n vaultId,\n vaultSecret,\n vaultRetry,\n vaultPing,\n gcpProjectID,\n gcpEndpoint,\n gcpClientEmail,\n gcpClientID,\n gcpPrivateKeyID,\n gcpPrivateKey,\n enableCustomCertsForKES,\n enableAutoCert,\n enableTLS,\n minioCertificates,\n serverCertificate,\n clientCertificate,\n vaultCertificate,\n vaultCA,\n gemaltoCA,\n}: IEncryptionProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n let encryptionAvailable = false;\n if (\n enableTLS &&\n (enableAutoCert ||\n (minioCertificates &&\n minioCertificates.filter(\n (item) => item.encoded_key && item.encoded_cert\n ).length > 0))\n ) {\n encryptionAvailable = true;\n }\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"encryption\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n // Validation\n useEffect(() => {\n let encryptionValidation: IValidation[] = [];\n\n if (enableEncryption) {\n if (enableCustomCerts) {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"serverKey\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_key,\n },\n {\n fieldKey: \"serverCert\",\n required: !enableAutoCert,\n value: serverCertificate.encoded_cert,\n },\n {\n fieldKey: \"clientKey\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_key,\n },\n {\n fieldKey: \"clientCert\",\n required: !enableAutoCert,\n value: clientCertificate.encoded_cert,\n },\n ];\n }\n\n if (encryptionType === \"vault\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"vault_endpoint\",\n required: true,\n value: vaultEndpoint,\n },\n {\n fieldKey: \"vault_id\",\n required: true,\n value: vaultId,\n },\n {\n fieldKey: \"vault_secret\",\n required: true,\n value: vaultSecret,\n },\n {\n fieldKey: \"vault_ping\",\n required: false,\n value: vaultPing,\n customValidation: parseInt(vaultPing) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n {\n fieldKey: \"vault_retry\",\n required: false,\n value: vaultRetry,\n customValidation: parseInt(vaultRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n\n if (encryptionType === \"aws\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"aws_endpoint\",\n required: true,\n value: awsEndpoint,\n },\n {\n fieldKey: \"aws_region\",\n required: true,\n value: awsRegion,\n },\n {\n fieldKey: \"aws_accessKey\",\n required: true,\n value: awsAccessKey,\n },\n {\n fieldKey: \"aws_secretKey\",\n required: true,\n value: awsSecretKey,\n },\n ];\n }\n\n if (encryptionType === \"gemalto\") {\n encryptionValidation = [\n ...encryptionValidation,\n {\n fieldKey: \"gemalto_endpoint\",\n required: true,\n value: gemaltoEndpoint,\n },\n {\n fieldKey: \"gemalto_token\",\n required: true,\n value: gemaltoToken,\n },\n {\n fieldKey: \"gemalto_domain\",\n required: true,\n value: gemaltoDomain,\n },\n {\n fieldKey: \"gemalto_retry\",\n required: false,\n value: gemaltoRetry,\n customValidation: parseInt(gemaltoRetry) < 0,\n customValidationMessage: \"Value needs to be 0 or greater\",\n },\n ];\n }\n }\n\n const commonVal = commonFormValidation(encryptionValidation);\n\n isPageValid(\"encryption\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [\n enableEncryption,\n encryptionType,\n vaultEndpoint,\n vaultEngine,\n vaultId,\n vaultSecret,\n vaultPing,\n vaultRetry,\n awsEndpoint,\n awsRegion,\n awsSecretKey,\n awsAccessKey,\n gemaltoEndpoint,\n gemaltoToken,\n gemaltoDomain,\n gemaltoRetry,\n gcpProjectID,\n isPageValid,\n enableAutoCert,\n enableCustomCerts,\n serverCertificate.encoded_key,\n serverCertificate.encoded_cert,\n clientCertificate.encoded_key,\n clientCertificate.encoded_cert,\n ]);\n\n return (\n \n
\n

Encryption

\n \n How would you like to encrypt the information at rest.\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableEncryption\", checked);\n }}\n label={\"Enable Server Side Encryption\"}\n disabled={!encryptionAvailable}\n />\n \n {enableEncryption && (\n \n \n {\n updateField(\"encryptionType\", e.target.value);\n }}\n selectorOptions={[\n { label: \"Vault\", value: \"vault\" },\n { label: \"AWS\", value: \"aws\" },\n { label: \"Gemalto\", value: \"gemalto\" },\n { label: \"GCP\", value: \"gcp\" },\n ]}\n />\n \n {encryptionType === \"vault\" && (\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"enableCustomCertsForKES\", checked);\n }}\n label={\"Custom Certificates\"}\n disabled={!enableAutoCert}\n />\n \n {(enableCustomCertsForKES || !enableAutoCert) && (\n \n \n \n Encryption Service Certificates\n \n \n \n \n {\n addFileServerCert(\"key\", fileName, encodedValue);\n cleanValidation(\"serverKey\");\n }}\n accept=\".key,.pem\"\n id=\"serverKey\"\n name=\"serverKey\"\n label=\"Key\"\n error={validationErrors[\"serverKey\"] || \"\"}\n value={serverCertificate.key}\n required={!enableAutoCert}\n />\n \n \n {\n addFileServerCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"serverCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"serverCert\"\n name=\"serverCert\"\n label=\"Cert\"\n error={validationErrors[\"serverCert\"] || \"\"}\n value={serverCertificate.cert}\n required={!enableAutoCert}\n />\n \n \n\n \n \n Mutual TLS authentication\n \n \n \n \n {\n addFileClientCert(\"key\", fileName, encodedValue);\n cleanValidation(\"clientKey\");\n }}\n accept=\".key,.pem\"\n id=\"clientKey\"\n name=\"clientKey\"\n label=\"Key\"\n error={validationErrors[\"clientKey\"] || \"\"}\n value={clientCertificate.key}\n required={!enableAutoCert}\n />\n \n \n {\n addFileClientCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"clientCert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"clientCert\"\n name=\"clientCert\"\n label=\"Cert\"\n error={validationErrors[\"clientCert\"] || \"\"}\n value={clientCertificate.cert}\n required={!enableAutoCert}\n />\n \n \n \n )}\n \n ) => {\n updateField(\"vaultEndpoint\", e.target.value);\n cleanValidation(\"vault_endpoint\");\n }}\n label=\"Endpoint\"\n value={vaultEndpoint}\n error={validationErrors[\"vault_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultEngine\", e.target.value);\n cleanValidation(\"vault_engine\");\n }}\n label=\"Engine\"\n value={vaultEngine}\n />\n \n \n ) => {\n updateField(\"vaultNamespace\", e.target.value);\n }}\n label=\"Namespace\"\n value={vaultNamespace}\n />\n \n \n ) => {\n updateField(\"vaultPrefix\", e.target.value);\n }}\n label=\"Prefix\"\n value={vaultPrefix}\n />\n \n
App Role
\n \n ) => {\n updateField(\"vaultAppRoleEngine\", e.target.value);\n }}\n label=\"Engine\"\n value={vaultAppRoleEngine}\n />\n \n \n ) => {\n updateField(\"vaultId\", e.target.value);\n cleanValidation(\"vault_id\");\n }}\n label=\"AppRole ID\"\n value={vaultId}\n error={validationErrors[\"vault_id\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultSecret\", e.target.value);\n cleanValidation(\"vault_secret\");\n }}\n label=\"AppRole Secret\"\n value={vaultSecret}\n error={validationErrors[\"vault_secret\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"vaultRetry\", e.target.value);\n cleanValidation(\"vault_retry\");\n }}\n label=\"Retry (Seconds)\"\n value={vaultRetry}\n error={validationErrors[\"vault_retry\"] || \"\"}\n />\n \n
Mutual TLS authentication (optional)
\n \n \n {\n addFileVaultCert(\"key\", fileName, encodedValue);\n cleanValidation(\"vault_key\");\n }}\n accept=\".key,.pem\"\n id=\"vault_key\"\n name=\"vault_key\"\n label=\"Key\"\n value={vaultCertificate.key}\n />\n \n \n {\n addFileVaultCert(\"cert\", fileName, encodedValue);\n cleanValidation(\"vault_cert\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_cert\"\n name=\"vault_cert\"\n label=\"Cert\"\n value={vaultCertificate.cert}\n />\n \n \n \n {\n addFileVaultCa(fileName, encodedValue);\n cleanValidation(\"vault_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"vault_ca\"\n name=\"vault_ca\"\n label=\"CA\"\n value={vaultCA.cert}\n />\n \n
Status
\n \n ) => {\n updateField(\"vaultPing\", e.target.value);\n cleanValidation(\"vault_ping\");\n }}\n label=\"Ping (Seconds)\"\n value={vaultPing}\n error={validationErrors[\"vault_ping\"] || \"\"}\n />\n \n
\n )}\n {encryptionType === \"gcp\" && (\n \n \n ) => {\n updateField(\"gcpProjectID\", e.target.value);\n }}\n label=\"Project ID\"\n value={gcpProjectID}\n />\n \n \n ) => {\n updateField(\"gcpEndpoint\", e.target.value);\n }}\n label=\"Endpoint\"\n value={gcpEndpoint}\n />\n \n
Credentials
\n \n ) => {\n updateField(\"gcpClientEmail\", e.target.value);\n }}\n label=\"Client Email\"\n value={gcpClientEmail}\n />\n \n \n ) => {\n updateField(\"gcpClientID\", e.target.value);\n }}\n label=\"Client ID\"\n value={gcpClientID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKeyID\", e.target.value);\n }}\n label=\"Private Key ID\"\n value={gcpPrivateKeyID}\n />\n \n \n ) => {\n updateField(\"gcpPrivateKey\", e.target.value);\n }}\n label=\"Private Key\"\n value={gcpPrivateKey}\n />\n \n
\n )}\n {encryptionType === \"aws\" && (\n \n \n ) => {\n updateField(\"awsEndpoint\", e.target.value);\n cleanValidation(\"aws_endpoint\");\n }}\n label=\"Endpoint\"\n value={awsEndpoint}\n error={validationErrors[\"aws_endpoint\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsRegion\", e.target.value);\n cleanValidation(\"aws_region\");\n }}\n label=\"Region\"\n value={awsRegion}\n error={validationErrors[\"aws_region\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsKMSKey\", e.target.value);\n }}\n label=\"KMS Key\"\n value={awsKMSKey}\n />\n \n
Credentials
\n \n ) => {\n updateField(\"awsAccessKey\", e.target.value);\n cleanValidation(\"aws_accessKey\");\n }}\n label=\"Access Key\"\n value={awsAccessKey}\n error={validationErrors[\"aws_accessKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsSecretKey\", e.target.value);\n cleanValidation(\"aws_secretKey\");\n }}\n label=\"Secret Key\"\n value={awsSecretKey}\n error={validationErrors[\"aws_secretKey\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"awsToken\", e.target.value);\n }}\n label=\"Token\"\n value={awsToken}\n />\n \n
\n )}\n {encryptionType === \"gemalto\" && (\n \n \n ) => {\n updateField(\"gemaltoEndpoint\", e.target.value);\n cleanValidation(\"gemalto_endpoint\");\n }}\n label=\"Endpoint\"\n value={gemaltoEndpoint}\n error={validationErrors[\"gemalto_endpoint\"] || \"\"}\n required\n />\n \n
Credentials
\n \n ) => {\n updateField(\"gemaltoToken\", e.target.value);\n cleanValidation(\"gemalto_token\");\n }}\n label=\"Token\"\n value={gemaltoToken}\n error={validationErrors[\"gemalto_token\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoDomain\", e.target.value);\n cleanValidation(\"gemalto_domain\");\n }}\n label=\"Domain\"\n value={gemaltoDomain}\n error={validationErrors[\"gemalto_domain\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"gemaltoRetry\", e.target.value);\n cleanValidation(\"gemalto_retry\");\n }}\n label=\"Retry (seconds)\"\n value={gemaltoRetry}\n error={validationErrors[\"gemalto_retry\"] || \"\"}\n />\n \n
Custom CA Root certificate verification
\n \n {\n addFileGemaltoCa(fileName, encodedValue);\n cleanValidation(\"gemalto_ca\");\n }}\n accept=\".cer,.crt,.cert,.pem\"\n id=\"gemalto_ca\"\n name=\"gemalto_ca\"\n label=\"CA\"\n value={gemaltoCA.cert}\n />\n \n
\n )}\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n enableEncryption:\n state.tenants.createTenant.fields.encryption.enableEncryption,\n encryptionType: state.tenants.createTenant.fields.encryption.encryptionType,\n gemaltoEndpoint: state.tenants.createTenant.fields.encryption.gemaltoEndpoint,\n gemaltoToken: state.tenants.createTenant.fields.encryption.gemaltoToken,\n gemaltoDomain: state.tenants.createTenant.fields.encryption.gemaltoDomain,\n gemaltoRetry: state.tenants.createTenant.fields.encryption.gemaltoRetry,\n awsEndpoint: state.tenants.createTenant.fields.encryption.awsEndpoint,\n awsRegion: state.tenants.createTenant.fields.encryption.awsRegion,\n awsKMSKey: state.tenants.createTenant.fields.encryption.awsKMSKey,\n awsAccessKey: state.tenants.createTenant.fields.encryption.awsAccessKey,\n awsSecretKey: state.tenants.createTenant.fields.encryption.awsSecretKey,\n awsToken: state.tenants.createTenant.fields.encryption.awsToken,\n vaultEndpoint: state.tenants.createTenant.fields.encryption.vaultEndpoint,\n vaultEngine: state.tenants.createTenant.fields.encryption.vaultEngine,\n vaultNamespace: state.tenants.createTenant.fields.encryption.vaultNamespace,\n vaultPrefix: state.tenants.createTenant.fields.encryption.vaultPrefix,\n vaultAppRoleEngine:\n state.tenants.createTenant.fields.encryption.vaultAppRoleEngine,\n vaultId: state.tenants.createTenant.fields.encryption.vaultId,\n vaultSecret: state.tenants.createTenant.fields.encryption.vaultSecret,\n vaultRetry: state.tenants.createTenant.fields.encryption.vaultRetry,\n vaultPing: state.tenants.createTenant.fields.encryption.vaultPing,\n gcpProjectID: state.tenants.createTenant.fields.encryption.gcpProjectID,\n gcpEndpoint: state.tenants.createTenant.fields.encryption.gcpEndpoint,\n gcpClientEmail: state.tenants.createTenant.fields.encryption.gcpClientEmail,\n gcpClientID: state.tenants.createTenant.fields.encryption.gcpClientID,\n gcpPrivateKeyID: state.tenants.createTenant.fields.encryption.gcpPrivateKeyID,\n gcpPrivateKey: state.tenants.createTenant.fields.encryption.gcpPrivateKey,\n enableCustomCertsForKES:\n state.tenants.createTenant.fields.encryption.enableCustomCertsForKES,\n enableAutoCert: state.tenants.createTenant.fields.security.enableAutoCert,\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n minioCertificates: state.tenants.createTenant.certificates.minioCertificates,\n serverCertificate: state.tenants.createTenant.certificates.serverCertificate,\n clientCertificate: state.tenants.createTenant.certificates.clientCertificate,\n vaultCertificate: state.tenants.createTenant.certificates.vaultCertificate,\n vaultCA: state.tenants.createTenant.certificates.vaultCA,\n gemaltoCA: state.tenants.createTenant.certificates.gemaltoCA,\n enableCustomCerts:\n state.tenants.createTenant.fields.security.enableCustomCerts,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileServerCert,\n addFileClientCert,\n addFileVaultCert,\n addFileVaultCa,\n addFileGemaltoCa,\n});\n\nexport default withStyles(styles)(connector(Encryption));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { AppState } from \"../../../../../store\";\nimport { updateAddField, isPageValid } from \"../../actions\";\nimport {\n wizardCommon,\n modalBasic,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport {\n getBytes,\n k8sfactorForDropdown,\n niceBytes,\n calculateDistribution,\n erasureCodeCalc,\n setMemoryResource,\n} from \"../../../../../common/utils\";\nimport { clearValidationError } from \"../../utils\";\nimport { ecListTransform, Opts } from \"../../ListTenants/utils\";\nimport { IMemorySize } from \"../../ListTenants/types\";\nimport { ICapacity, IErasureCodeCalc } from \"../../../../../common/types\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { commonFormValidation } from \"../../../../../utils/validationFunctions\";\n\ninterface ITenantSizeProps {\n classes: any;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n advancedMode: boolean;\n volumeSize: string;\n sizeFactor: string;\n drivesPerServer: string;\n nodes: string;\n memoryNode: string;\n ecParity: string;\n ecParityChoices: Opts[];\n cleanECChoices: string[];\n maxAllocableMemo: number;\n memorySize: IMemorySize;\n distribution: any;\n ecParityCalc: IErasureCodeCalc;\n limitSize: any;\n selectedStorageClass: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst TenantSize = ({\n classes,\n updateAddField,\n isPageValid,\n advancedMode,\n volumeSize,\n sizeFactor,\n drivesPerServer,\n nodes,\n memoryNode,\n ecParity,\n ecParityChoices,\n cleanECChoices,\n maxAllocableMemo,\n memorySize,\n distribution,\n ecParityCalc,\n limitSize,\n selectedStorageClass,\n}: ITenantSizeProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const usableInformation = ecParityCalc.storageFactors.find(\n (element) => element.erasureCode === ecParity\n );\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"tenantSize\", field, value);\n },\n [updateAddField]\n );\n\n const cleanValidation = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n /*Debounce functions*/\n\n // Storage Quotas\n\n const validateMemorySize = useCallback(() => {\n const memSize = parseInt(memoryNode) || 0;\n const clusterSize = volumeSize || 0;\n const maxMemSize = maxAllocableMemo || 0;\n const clusterSizeFactor = sizeFactor;\n\n const clusterSizeBytes = getBytes(\n clusterSize.toString(10),\n clusterSizeFactor\n );\n const memoSize = setMemoryResource(memSize, clusterSizeBytes, maxMemSize);\n\n updateField(\"memorySize\", memoSize);\n }, [maxAllocableMemo, memoryNode, sizeFactor, updateField, volumeSize]);\n\n const getMaxAllocableMemory = (nodes: string) => {\n if (nodes !== \"\" && !isNaN(parseInt(nodes))) {\n api\n .invoke(\n \"GET\",\n `/api/v1/cluster/max-allocatable-memory?num_nodes=${nodes}`\n )\n .then((res: { max_memory: number }) => {\n const maxMemory = res.max_memory ? res.max_memory : 0;\n updateField(\"maxAllocableMemo\", maxMemory);\n })\n .catch((err: any) => {\n updateField(\"maxAllocableMemo\", 0);\n console.error(err);\n });\n }\n };\n\n useEffect(() => {\n validateMemorySize();\n }, [memoryNode, validateMemorySize]);\n\n useEffect(() => {\n validateMemorySize();\n }, [maxAllocableMemo, validateMemorySize]);\n\n useEffect(() => {\n if (ecParityChoices.length > 0 && distribution.error === \"\") {\n const ecCodeValidated = erasureCodeCalc(\n cleanECChoices,\n distribution.persistentVolumes,\n distribution.pvSize,\n distribution.nodes\n );\n\n updateField(\"ecParityCalc\", ecCodeValidated);\n updateField(\"ecParity\", ecCodeValidated.defaultEC);\n }\n }, [ecParityChoices.length, distribution, cleanECChoices, updateField]);\n /*End debounce functions*/\n\n /*Calculate Allocation*/\n useEffect(() => {\n validateClusterSize();\n getECValue();\n getMaxAllocableMemory(nodes);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nodes, volumeSize, sizeFactor, drivesPerServer]);\n\n const validateClusterSize = () => {\n const size = volumeSize;\n const factor = sizeFactor;\n const limitSize = getBytes(\"12\", \"Ti\", true);\n\n const clusterCapacity: ICapacity = {\n unit: factor,\n value: size.toString(),\n };\n\n const distrCalculate = calculateDistribution(\n clusterCapacity,\n parseInt(nodes),\n parseInt(limitSize),\n parseInt(drivesPerServer)\n );\n\n updateField(\"distribution\", distrCalculate);\n };\n\n const getECValue = () => {\n updateField(\"ecParity\", \"\");\n\n if (nodes.trim() !== \"\" && drivesPerServer.trim() !== \"\") {\n api\n .invoke(\"GET\", `/api/v1/get-parity/${nodes}/${drivesPerServer}`)\n .then((ecList: string[]) => {\n updateField(\"ecParityChoices\", ecListTransform(ecList));\n updateField(\"cleanECChoices\", ecList);\n })\n .catch((err: any) => {\n updateField(\"ecparityChoices\", []);\n isPageValid(\"tenantSize\", false);\n updateField(\"ecParity\", \"\");\n });\n }\n };\n /*Calculate Allocation End*/\n\n /* Validations of pages */\n\n useEffect(() => {\n const parsedSize = getBytes(volumeSize, sizeFactor, true);\n\n const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: parseInt(nodes) < 4,\n customValidationMessage: \"Number of nodes cannot be less than 4\",\n },\n {\n fieldKey: \"volume_size\",\n required: true,\n value: volumeSize,\n customValidation:\n parseInt(parsedSize) < 1073741824 ||\n parseInt(parsedSize) > limitSize[selectedStorageClass],\n customValidationMessage: `Volume size must be greater than 1Gi and less than ${niceBytes(\n limitSize[selectedStorageClass],\n true\n )}`,\n },\n {\n fieldKey: \"memory_per_node\",\n required: true,\n value: memoryNode,\n customValidation: parseInt(memoryNode) < 2,\n customValidationMessage: \"Memory size must be greater than 2Gi\",\n },\n {\n fieldKey: \"drivesps\",\n required: true,\n value: drivesPerServer,\n customValidation: parseInt(drivesPerServer) < 1,\n customValidationMessage: \"There must be at least one drive\",\n },\n ]);\n\n isPageValid(\n \"tenantSize\",\n !(\"nodes\" in commonValidation) &&\n !(\"volume_size\" in commonValidation) &&\n !(\"memory_per_node\" in commonValidation) &&\n !(\"drivesps\" in commonValidation) &&\n distribution.error === \"\" &&\n ecParityCalc.error === 0 &&\n memorySize.error === \"\"\n );\n\n setValidationErrors(commonValidation);\n }, [\n nodes,\n volumeSize,\n sizeFactor,\n memoryNode,\n distribution,\n drivesPerServer,\n ecParityCalc,\n memorySize,\n limitSize,\n selectedStorageClass,\n ]);\n\n /* End Validation of pages */\n\n return (\n \n
\n

Tenant Size

\n \n Please select the desired capacity\n \n
\n {distribution.error}\n {memorySize.error}\n \n ) => {\n updateField(\"nodes\", e.target.value);\n cleanValidation(\"nodes\");\n }}\n label=\"Number of Servers\"\n value={nodes}\n min=\"4\"\n required\n error={validationErrors[\"nodes\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"drivesPerServer\", e.target.value);\n cleanValidation(\"drivesps\");\n }}\n label=\"Number of Drives per Server\"\n value={drivesPerServer}\n min=\"1\"\n required\n error={validationErrors[\"drivesps\"] || \"\"}\n />\n \n \n
\n
\n ) => {\n updateField(\"volumeSize\", e.target.value);\n cleanValidation(\"volume_size\");\n }}\n label=\"Total Size\"\n value={volumeSize}\n required\n error={validationErrors[\"volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n ) => {\n updateField(\"sizeFactor\", e.target.value as string);\n }}\n options={k8sfactorForDropdown()}\n />\n
\n
\n
\n {advancedMode && (\n \n \n ) => {\n updateField(\"memoryNode\", e.target.value);\n cleanValidation(\"memory_per_node\");\n }}\n label=\"Memory per Node [Gi]\"\n value={memoryNode}\n required\n error={validationErrors[\"memory_per_node\"] || \"\"}\n min=\"2\"\n />\n \n \n ) => {\n updateField(\"ecParity\", e.target.value as string);\n }}\n label=\"Erasure Code Parity\"\n value={ecParity}\n options={ecParityChoices}\n />\n \n Please select the desired parity. This setting will change the max\n usable capacity in the cluster\n \n \n \n )}\n

Resource Allocation

\n \n \n \n \n Number of Servers\n \n \n {parseInt(nodes) > 0 ? nodes : \"-\"}\n \n \n \n \n Drives per Server\n \n \n {distribution ? distribution.disks : \"-\"}\n \n \n \n \n Drive Capacity\n \n \n {distribution ? niceBytes(distribution.pvSize) : \"-\"}\n \n \n \n \n Total Number of Volumes\n \n \n {distribution ? distribution.persistentVolumes : \"-\"}\n \n \n {!advancedMode && (\n \n \n Memory per Node\n \n {memoryNode} Gi\n \n )}\n \n
\n {ecParityCalc.error === 0 && usableInformation && (\n \n

Erasure Code Configuration

\n \n \n \n \n EC Parity\n \n \n {ecParity !== \"\" ? ecParity : \"-\"}\n \n \n \n \n Raw Capacity\n \n \n {niceBytes(ecParityCalc.rawCapacity)}\n \n \n \n \n Usable Capacity\n \n \n {niceBytes(usableInformation.maxCapacity)}\n \n \n \n \n Number of server failures to tolerate\n \n \n {distribution\n ? Math.floor(\n usableInformation.maxFailureTolerations /\n distribution.disks\n )\n : \"-\"}\n \n \n \n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n drivesPerServer: state.tenants.createTenant.fields.tenantSize.drivesPerServer,\n nodes: state.tenants.createTenant.fields.tenantSize.nodes,\n memoryNode: state.tenants.createTenant.fields.tenantSize.memoryNode,\n ecParity: state.tenants.createTenant.fields.tenantSize.ecParity,\n ecParityChoices: state.tenants.createTenant.fields.tenantSize.ecParityChoices,\n cleanECChoices: state.tenants.createTenant.fields.tenantSize.cleanECChoices,\n maxAllocableMemo:\n state.tenants.createTenant.fields.tenantSize.maxAllocableMemo,\n memorySize: state.tenants.createTenant.fields.tenantSize.memorySize,\n distribution: state.tenants.createTenant.fields.tenantSize.distribution,\n ecParityCalc: state.tenants.createTenant.fields.tenantSize.ecParityCalc,\n limitSize: state.tenants.createTenant.fields.tenantSize.limitSize,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(TenantSize));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport { AppState } from \"../../../../../store\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\n\ninterface IPreviewProps {\n classes: any;\n tenantName: string;\n customImage: boolean;\n imageName: string;\n consoleImage: string;\n namespace: string;\n selectedStorageClass: string;\n volumeSize: string;\n sizeFactor: string;\n advancedMode: boolean;\n enableTLS: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst Preview = ({\n classes,\n tenantName,\n customImage,\n imageName,\n consoleImage,\n namespace,\n selectedStorageClass,\n volumeSize,\n sizeFactor,\n advancedMode,\n enableTLS,\n}: IPreviewProps) => {\n return (\n \n
\n

Review

\n \n Review the details of the new tenant\n \n
\n \n \n \n \n Tenant Name\n \n {tenantName}\n \n\n {customImage && (\n \n \n \n MinIO Image\n \n {imageName}\n \n \n \n Console Image\n \n {consoleImage}\n \n \n )}\n\n {namespace !== \"\" && (\n \n \n Namespace\n \n {namespace}\n \n )}\n\n \n \n Storage Class\n \n {selectedStorageClass}\n \n\n \n \n Total Size\n \n \n {volumeSize} {sizeFactor}\n \n \n {advancedMode && (\n \n \n \n Enable TLS\n \n {enableTLS ? \"Enabled\" : \"Disabled\"}\n \n \n )}\n \n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n enableTLS: state.tenants.createTenant.fields.security.enableTLS,\n tenantName: state.tenants.createTenant.fields.nameTenant.tenantName,\n selectedStorageClass:\n state.tenants.createTenant.fields.nameTenant.selectedStorageClass,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\n consoleImage: state.tenants.createTenant.fields.configure.consoleImage,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n volumeSize: state.tenants.createTenant.fields.tenantSize.volumeSize,\n sizeFactor: state.tenants.createTenant.fields.tenantSize.sizeFactor,\n});\n\nconst connector = connect(mapState, {});\n\nexport default withStyles(styles)(connector(Preview));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { LinearProgress } from \"@material-ui/core\";\n\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n modalBasic,\n settingsCommon,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../../common/api\";\nimport { generatePoolName } from \"../../../../common/utils\";\nimport GenericWizard from \"../../Common/GenericWizard/GenericWizard\";\nimport { IWizardElement } from \"../../Common/GenericWizard/types\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport { IAffinityModel, ITenantCreator } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\n\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { getHardcodedAffinity } from \"../TenantDetails/utils\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport NameTenant from \"./Steps/NameTenant\";\nimport { AppState } from \"../../../../store\";\nimport { ICertificatesItems, IFieldStore } from \"../types\";\nimport { updateAddField } from \"../actions\";\nimport Configure from \"./Steps/Configure\";\nimport IdentityProvider from \"./Steps/IdentityProvider\";\nimport Security from \"./Steps/Security\";\nimport Encryption from \"./Steps/Encryption\";\nimport TenantSize from \"./Steps/TenantSize\";\nimport Preview from \"./Steps/Preview\";\n\ninterface IAddTenantProps {\n closeAndRefresh: (reloadData: boolean) => any;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n fields: IFieldStore;\n certificates: ICertificatesItems;\n namespace: string;\n validPages: string[];\n advancedMode: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n ...wizardCommon,\n ...settingsCommon,\n });\n\nconst AddTenant = ({\n classes,\n advancedMode,\n fields,\n certificates,\n namespace,\n validPages,\n setModalErrorSnackMessage,\n closeAndRefresh,\n}: IAddTenantProps) => {\n // Modals\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [\n createdAccount,\n setCreatedAccount,\n ] = useState(null);\n\n // Fields\n const [addSending, setAddSending] = useState(false);\n\n /* Send Information to backend */\n useEffect(() => {\n const tenantName = fields.nameTenant.tenantName;\n const selectedStorageClass = fields.nameTenant.selectedStorageClass;\n const imageName = fields.configure.imageName;\n const consoleImage = fields.configure.consoleImage;\n const customDockerhub = fields.configure.customDockerhub;\n const imageRegistry = fields.configure.imageRegistry;\n const imageRegistryUsername = fields.configure.imageRegistryUsername;\n const imageRegistryPassword = fields.configure.imageRegistryPassword;\n const exposeMinIO = fields.configure.exposeMinIO;\n const exposeConsole = fields.configure.exposeConsole;\n const idpSelection = fields.identityProvider.idpSelection;\n const openIDURL = fields.identityProvider.openIDURL;\n const openIDClientID = fields.identityProvider.openIDClientID;\n const openIDSecretID = fields.identityProvider.openIDSecretID;\n const ADURL = fields.identityProvider.ADURL;\n const ADSkipTLS = fields.identityProvider.ADSkipTLS;\n const ADServerInsecure = fields.identityProvider.ADServerInsecure;\n const ADUserNameFilter = fields.identityProvider.ADUserNameFilter;\n const ADGroupBaseDN = fields.identityProvider.ADGroupBaseDN;\n const ADGroupSearchFilter = fields.identityProvider.ADGroupSearchFilter;\n const ADNameAttribute = fields.identityProvider.ADNameAttribute;\n const minioCertificates = certificates.minioCertificates;\n const caCertificates = certificates.caCertificates;\n const consoleCertificate = certificates.consoleCertificate;\n const serverCertificate = certificates.serverCertificate;\n const clientCertificate = certificates.clientCertificate;\n const vaultCertificate = certificates.vaultCertificate;\n const vaultCA = certificates.vaultCA;\n const gemaltoCA = certificates.gemaltoCA;\n const enableEncryption = fields.encryption.enableEncryption;\n const encryptionType = fields.encryption.encryptionType;\n const gemaltoEndpoint = fields.encryption.gemaltoEndpoint;\n const gemaltoToken = fields.encryption.gemaltoToken;\n const gemaltoDomain = fields.encryption.gemaltoDomain;\n const gemaltoRetry = fields.encryption.gemaltoRetry;\n const awsEndpoint = fields.encryption.awsEndpoint;\n const awsRegion = fields.encryption.awsRegion;\n const awsKMSKey = fields.encryption.awsKMSKey;\n const awsAccessKey = fields.encryption.awsAccessKey;\n const awsSecretKey = fields.encryption.awsSecretKey;\n const awsToken = fields.encryption.awsToken;\n const vaultEndpoint = fields.encryption.vaultEndpoint;\n const vaultEngine = fields.encryption.vaultEngine;\n const vaultNamespace = fields.encryption.vaultNamespace;\n const vaultPrefix = fields.encryption.vaultPrefix;\n const vaultAppRoleEngine = fields.encryption.vaultAppRoleEngine;\n const vaultId = fields.encryption.vaultId;\n const vaultSecret = fields.encryption.vaultSecret;\n const vaultRetry = fields.encryption.vaultRetry;\n const vaultPing = fields.encryption.vaultPing;\n const gcpProjectID = fields.encryption.gcpProjectID;\n const gcpEndpoint = fields.encryption.gcpEndpoint;\n const gcpClientEmail = fields.encryption.gcpClientEmail;\n const gcpClientID = fields.encryption.gcpClientID;\n const gcpPrivateKeyID = fields.encryption.gcpPrivateKeyID;\n const gcpPrivateKey = fields.encryption.gcpPrivateKey;\n const enableAutoCert = fields.security.enableAutoCert;\n const enableTLS = fields.security.enableTLS;\n const ecParity = fields.tenantSize.ecParity;\n const distribution = fields.tenantSize.distribution;\n const memorySize = fields.tenantSize.memorySize;\n\n if (addSending) {\n const poolName = generatePoolName([]);\n\n const hardCodedAffinity: IAffinityModel = getHardcodedAffinity(\n tenantName,\n poolName\n );\n\n const erasureCode = ecParity.split(\":\")[1];\n\n let dataSend: ITenantCreator = {\n name: tenantName,\n namespace: namespace,\n access_key: \"\",\n secret_key: \"\",\n enable_tls: enableTLS && enableAutoCert,\n enable_console: true,\n enable_prometheus: true,\n service_name: \"\",\n image: imageName,\n console_image: consoleImage,\n expose_minio: exposeMinIO,\n expose_console: exposeConsole,\n pools: [\n {\n name: poolName,\n servers: distribution.nodes,\n volumes_per_server: distribution.disks,\n volume_configuration: {\n size: distribution.pvSize,\n storage_class_name: selectedStorageClass,\n },\n resources: {\n requests: {\n memory: memorySize.request,\n },\n limits: {\n memory: memorySize.limit,\n },\n },\n affinity: hardCodedAffinity,\n },\n ],\n erasureCodingParity: parseInt(erasureCode, 10),\n };\n\n if (customDockerhub) {\n dataSend = {\n ...dataSend,\n image_registry: {\n registry: imageRegistry,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n }\n\n let tenantCerts: any = null;\n let consoleCerts: any = null;\n let caCerts: any = null;\n\n if (caCertificates.length > 0) {\n caCerts = {\n ca_certificates: caCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((keyPair) => keyPair),\n };\n }\n\n if (enableTLS && minioCertificates.length > 0) {\n tenantCerts = {\n minio: minioCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((keyPair) => keyPair.crt && keyPair.key),\n };\n }\n\n if (\n enableTLS &&\n consoleCertificate.encoded_cert !== \"\" &&\n consoleCertificate.encoded_key !== \"\"\n ) {\n consoleCerts = {\n console: {\n crt: consoleCertificate.encoded_cert,\n key: consoleCertificate.encoded_key,\n },\n };\n }\n\n if (tenantCerts || consoleCerts || caCerts) {\n dataSend = {\n ...dataSend,\n tls: {\n ...tenantCerts,\n ...consoleCerts,\n ...caCerts,\n },\n };\n }\n\n if (enableEncryption) {\n let insertEncrypt = {};\n\n switch (encryptionType) {\n case \"gemalto\":\n let gemaltoCAIntroduce = {};\n\n if (gemaltoCA.encoded_cert !== \"\") {\n gemaltoCAIntroduce = {\n ca: gemaltoCA.encoded_cert,\n };\n }\n insertEncrypt = {\n gemalto: {\n keysecure: {\n endpoint: gemaltoEndpoint,\n credentials: {\n token: gemaltoToken,\n domain: gemaltoDomain,\n retry: parseInt(gemaltoRetry),\n },\n tls: {\n ...gemaltoCAIntroduce,\n },\n },\n },\n };\n break;\n case \"aws\":\n insertEncrypt = {\n aws: {\n secretsmanager: {\n endpoint: awsEndpoint,\n region: awsRegion,\n kmskey: awsKMSKey,\n credentials: {\n accesskey: awsAccessKey,\n secretkey: awsSecretKey,\n token: awsToken,\n },\n },\n },\n };\n break;\n case \"gcp\":\n insertEncrypt = {\n gcp: {\n secretmanager: {\n project_id: gcpProjectID,\n endpoint: gcpEndpoint,\n credentials: {\n client_email: gcpClientEmail,\n client_id: gcpClientID,\n private_key_id: gcpPrivateKeyID,\n private_key: gcpPrivateKey,\n },\n },\n },\n };\n break;\n case \"vault\":\n let vaultKeyPair = null;\n let vaultCAInsert = null;\n if (\n vaultCertificate.encoded_key !== \"\" &&\n vaultCertificate.encoded_cert !== \"\"\n ) {\n vaultKeyPair = {\n key: vaultCertificate.encoded_key,\n crt: vaultCertificate.encoded_cert,\n };\n }\n if (vaultCA.encoded_cert !== \"\") {\n vaultCAInsert = {\n ca: vaultCA.encoded_cert,\n };\n }\n let vaultTLS = null;\n if (vaultKeyPair || vaultCA) {\n vaultTLS = {\n tls: {\n ...vaultKeyPair,\n ...vaultCAInsert,\n },\n };\n }\n insertEncrypt = {\n vault: {\n endpoint: vaultEndpoint,\n engine: vaultEngine,\n namespace: vaultNamespace,\n prefix: vaultPrefix,\n approle: {\n engine: vaultAppRoleEngine,\n id: vaultId,\n secret: vaultSecret,\n retry: parseInt(vaultRetry),\n },\n ...vaultTLS,\n status: {\n ping: parseInt(vaultPing),\n },\n },\n };\n break;\n }\n\n let encryptionServerKeyPair: any = {};\n let encryptionClientKeyPair: any = {};\n\n if (\n clientCertificate.encoded_key !== \"\" &&\n clientCertificate.encoded_cert !== \"\"\n ) {\n encryptionClientKeyPair = {\n client: {\n key: clientCertificate.encoded_key,\n crt: clientCertificate.encoded_cert,\n },\n };\n }\n\n if (\n serverCertificate.encoded_key !== \"\" &&\n serverCertificate.encoded_cert !== \"\"\n ) {\n encryptionServerKeyPair = {\n server: {\n key: serverCertificate.encoded_key,\n crt: serverCertificate.encoded_cert,\n },\n };\n }\n\n dataSend = {\n ...dataSend,\n encryption: {\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...insertEncrypt,\n },\n };\n }\n\n if (idpSelection !== \"Built-in\") {\n let dataIDP: any = {};\n\n switch (idpSelection) {\n case \"OpenID\":\n dataIDP = {\n oidc: {\n url: openIDURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n },\n };\n break;\n case \"AD\":\n dataIDP = {\n active_directory: {\n url: ADURL,\n skip_tls_verification: ADSkipTLS,\n server_insecure: ADServerInsecure,\n username_format: \"\",\n user_search_filter: ADUserNameFilter,\n group_search_base_dn: ADGroupBaseDN,\n group_search_filter: ADGroupSearchFilter,\n group_name_attribute: ADNameAttribute,\n },\n };\n break;\n }\n\n dataSend = {\n ...dataSend,\n idp: { ...dataIDP },\n };\n }\n\n api\n .invoke(\"POST\", `/api/v1/tenants`, dataSend)\n .then((res) => {\n const newSrvAcc: NewServiceAccount = {\n console: {\n accessKey: res.console.access_key,\n secretKey: res.console.secret_key,\n },\n };\n\n setAddSending(false);\n\n setShowNewCredentials(true);\n setCreatedAccount(newSrvAcc);\n })\n .catch((err) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [addSending]);\n\n const cancelButton = {\n label: \"Cancel\",\n type: \"other\",\n enabled: true,\n action: () => {\n closeAndRefresh(false);\n },\n };\n\n const wizardSteps: IWizardElement[] = [\n {\n label: \"Name Tenant\",\n componentRender: ,\n buttons: [\n cancelButton,\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"nameTenant\"),\n },\n ],\n },\n {\n label: \"Configure\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"configure\"),\n },\n ],\n },\n {\n label: \"Identity Provider\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"identityProvider\"),\n },\n ],\n },\n {\n label: \"Security\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"security\"),\n },\n ],\n },\n {\n label: \"Encryption\",\n advancedOnly: true,\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"encryption\"),\n },\n ],\n },\n {\n label: \"Tenant Size\",\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Next\",\n type: \"next\",\n enabled: validPages.includes(\"tenantSize\"),\n },\n ],\n },\n {\n label: \"Preview Configuration\",\n componentRender: ,\n buttons: [\n cancelButton,\n { label: \"Back\", type: \"back\", enabled: true },\n {\n label: \"Create\",\n type: \"submit\",\n enabled: !addSending,\n action: () => {\n setAddSending(true);\n },\n },\n ],\n },\n ];\n\n let filteredWizardSteps = wizardSteps;\n\n if (!advancedMode) {\n filteredWizardSteps = wizardSteps.filter((step) => !step.advancedOnly);\n }\n\n const closeCredentialsModal = () => {\n closeAndRefresh(true);\n };\n\n return (\n \n \n Create New Tenant\n \n {addSending && (\n \n \n \n )}\n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n \n \n \n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n advancedMode: state.tenants.createTenant.advancedModeOn,\n namespace: state.tenants.createTenant.fields.nameTenant.namespace,\n validPages: state.tenants.createTenant.validPages,\n fields: state.tenants.createTenant.fields,\n certificates: state.tenants.createTenant.certificates,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n});\n\nexport default withStyles(styles)(connector(AddTenant));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Button, IconButton } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { ITenant, ITenantsResponse } from \"./types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { NewServiceAccount } from \"../../Common/CredentialsPrompt/types\";\nimport {\n actionsTray,\n searchField,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { CreateIcon } from \"../../../../icons\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport DeleteTenant from \"./DeleteTenant\";\nimport AddTenant from \"../AddTenant/AddTenant\";\nimport CredentialsPrompt from \"../../Common/CredentialsPrompt/CredentialsPrompt\";\nimport history from \"../../../../history\";\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport { resetAddTenantForm } from \"../actions\";\n\ninterface ITenantsList {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n resetAddTenantForm: typeof resetAddTenantForm;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...settingsCommon,\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"0 38px\",\n },\n tenantsContainer: {\n padding: \"15px 0\",\n },\n customConfigurationPage: {\n height: \"calc(100vh - 440px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n });\n\nconst ListTenants = ({\n classes,\n setErrorSnackMessage,\n resetAddTenantForm,\n}: ITenantsList) => {\n const [currentPanel, setCurrentPanel] = useState(0);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedTenant, setSelectedTenant] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [filterTenants, setFilterTenants] = useState(\"\");\n const [records, setRecords] = useState([]);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [\n createdAccount,\n setCreatedAccount,\n ] = useState(null);\n\n const closeAddModalAndRefresh = (reloadData: boolean) => {\n setCurrentPanel(0);\n resetAddTenantForm();\n\n if (reloadData) {\n setIsLoading(true);\n }\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n\n if (reloadData) {\n setIsLoading(true);\n }\n };\n\n const confirmDeleteTenant = (tenant: ITenant) => {\n setSelectedTenant(tenant);\n setDeleteOpen(true);\n };\n\n const redirectToTenantDetails = (tenant: ITenant) => {\n history.push(`/namespaces/${tenant.namespace}/tenants/${tenant.name}`);\n return;\n };\n\n const closeCredentialsModal = () => {\n setShowNewCredentials(false);\n setCreatedAccount(null);\n };\n\n const backClick = () => {\n setCurrentPanel(currentPanel - 1);\n resetAddTenantForm();\n };\n\n const tableActions = [\n { type: \"view\", onClick: redirectToTenantDetails },\n { type: \"delete\", onClick: confirmDeleteTenant },\n ];\n\n const filteredRecords = records.filter((b: any) => {\n if (filterTenants === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterTenants) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/tenants`)\n .then((res: ITenantsResponse) => {\n if (res === null) {\n setIsLoading(false);\n return;\n }\n let resTenants: ITenant[] = [];\n if (res.tenants !== null) {\n resTenants = res.tenants;\n }\n\n for (let i = 0; i < resTenants.length; i++) {\n resTenants[i].capacity = niceBytes(resTenants[i].total_size + \"\");\n }\n\n setRecords(resTenants);\n setIsLoading(false);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, setErrorSnackMessage]);\n\n useEffect(() => {\n setIsLoading(true);\n }, []);\n\n const createTenant = () => {\n setCurrentPanel(1);\n };\n\n return (\n \n {deleteOpen && (\n \n )}\n {showNewCredentials && (\n {\n closeCredentialsModal();\n }}\n entity=\"Tenant\"\n />\n )}\n \n \n \n
\n \n \n Tenants List\n \n\n \n \n {\n setFilterTenants(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n {\n setIsLoading(true);\n }}\n >\n \n \n }\n onClick={createTenant}\n >\n Create Tenant\n \n \n \n \n \n \n ,\n \n \n \n \n Back To Tenants List\n \n \n \n {currentPanel === 1 && (\n \n )}\n \n ,\n ]}\n currentSlide={currentPanel}\n />\n
\n
\n
\n
\n
\n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n resetAddTenantForm,\n});\n\nexport default withStyles(styles)(connector(ListTenants));\n","import React, { Fragment, useState } from \"react\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport ListTenants from \"./ListTenants/ListTenants\";\n\ninterface IConfigurationMain {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantsMain = ({ classes }: IConfigurationMain) => {\n const [selectedTab, setSelectedTab] = useState(0);\n return (\n \n \n \n \n \n Tenants Management\n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"tenant-tabs\"\n >\n \n \n \n {selectedTab === 0 && (\n \n \n \n )}\n \n \n \n \n );\n};\n\nexport default withStyles(styles)(TenantsMain);\n","import React, { useState } from \"react\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { generatePoolName, niceBytes } from \"../../../../common/utils\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { IAddPoolRequest, ITenant } from \"../ListTenants/types\";\nimport { IAffinityModel } from \"../../../../common/types\";\nimport { getHardcodedAffinity } from \"./utils\";\n\ninterface IAddPoolProps {\n tenant: ITenant;\n classes: any;\n open: boolean;\n onClosePoolAndReload: (shouldReload: boolean) => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n },\n bottomContainer: {\n display: \"flex\",\n flexGrow: 1,\n alignItems: \"center\",\n \"& div\": {\n flexGrow: 1,\n width: \"100%\",\n },\n },\n factorElements: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n },\n sizeNumber: {\n fontSize: 35,\n fontWeight: 700,\n textAlign: \"center\",\n },\n sizeDescription: {\n fontSize: 14,\n color: \"#777\",\n textAlign: \"center\",\n },\n ...modalBasic,\n });\n\nconst AddPoolModal = ({\n tenant,\n classes,\n open,\n onClosePoolAndReload,\n}: IAddPoolProps) => {\n const [addSending, setAddSending] = useState(false);\n const [numberOfNodes, setNumberOfNodes] = useState(0);\n const [volumeSize, setVolumeSize] = useState(0);\n const [volumesPerServer, setVolumesPerSever] = useState(0);\n\n const instanceCapacity: number = volumeSize * 1073741824 * volumesPerServer;\n const totalCapacity: number = instanceCapacity * numberOfNodes;\n\n return (\n onClosePoolAndReload(false)}\n modalOpen={open}\n title=\"Add Pool\"\n >\n ) => {\n e.preventDefault();\n setAddSending(true);\n\n const poolName = generatePoolName(tenant.pools);\n\n const hardCodedAffinity: IAffinityModel = getHardcodedAffinity(\n tenant.name,\n poolName\n );\n\n const data: IAddPoolRequest = {\n name: poolName,\n servers: numberOfNodes,\n volumes_per_server: volumesPerServer,\n volume_configuration: {\n size: volumeSize * 1073741824,\n storage_class: \"\",\n labels: null,\n },\n affinity: hardCodedAffinity,\n };\n\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant.namespace}/tenants/${tenant.name}/pools`,\n data\n )\n .then(() => {\n setAddSending(false);\n onClosePoolAndReload(true);\n })\n .catch((err) => {\n setAddSending(false);\n // setDeleteError(err);\n });\n }}\n >\n \n ) => {\n setNumberOfNodes(parseInt(e.target.value));\n }}\n label=\"Number o Nodes\"\n value={numberOfNodes.toString(10)}\n />\n \n \n ) => {\n setVolumeSize(parseInt(e.target.value));\n }}\n label=\"Volume Size (Gi)\"\n value={volumeSize.toString(10)}\n />\n \n \n ) => {\n setVolumesPerSever(parseInt(e.target.value));\n }}\n label=\"Volumes per Server\"\n value={volumesPerServer.toString(10)}\n />\n \n \n \n
\n
\n
\n {niceBytes(instanceCapacity.toString(10))}\n
\n
Instance Capacity
\n
\n
\n
\n {niceBytes(totalCapacity.toString(10))}\n
\n
Total Capacity
\n
\n
\n
\n \n Save\n \n
\n
\n {addSending && (\n \n \n \n )}\n
\n \n \n );\n};\n\nexport default withStyles(styles)(AddPoolModal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\n\ninterface IReplicationProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refreshList: boolean) => void;\n}\n\ninterface IDropDownElements {\n label: string;\n value: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n },\n ...modalBasic,\n });\n\nconst ReplicationSetup = ({\n classes,\n open,\n closeModalAndRefresh,\n}: IReplicationProps) => {\n const [addSending, setAddSending] = useState(false);\n const [selectedTab, setSelectedTab] = useState(0);\n const [sourceBucket, setSourceBucket] = useState(\"\");\n const [clusterSelected, setClusterSelected] = useState(\"\");\n const [destinationBucket, setDestinationBucket] = useState(\"\");\n const [address, setAddress] = useState(\"\");\n const [bucket, setBucket] = useState(\"\");\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n\n const clustersList: IDropDownElements[] = [];\n const sourceBuckets: IDropDownElements[] = [];\n const destinationBuckets: IDropDownElements[] = [];\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n >\n ) => {\n e.preventDefault();\n setAddSending(true);\n }}\n >\n \n ) => {\n setSourceBucket(e.target.value as string);\n }}\n value={sourceBucket}\n name=\"source_bucket\"\n id=\"source_bucket\"\n />\n \n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"cluster-tabs\"\n >\n \n \n \n \n \n
\n
\n {selectedTab === 0 && (\n \n \n ) => {\n setClusterSelected(e.target.value as string);\n }}\n value={clusterSelected}\n name=\"cluster\"\n id=\"cluster\"\n />\n \n \n ) => {\n setDestinationBucket(e.target.value as string);\n }}\n value={destinationBucket}\n name=\"destination_bucket\"\n id=\"destination_bucket\"\n />\n \n \n )}\n\n {selectedTab === 1 && (\n \n \n ) => {\n setAddress(e.target.value);\n }}\n label=\"Address\"\n value={address}\n />\n \n \n ) => {\n setBucket(e.target.value);\n }}\n label=\"Bucket\"\n value={bucket}\n />\n \n \n ) => {\n setAccessKey(e.target.value);\n }}\n label=\"Access Key\"\n value={accessKey}\n />\n \n \n ) => {\n setSecretKey(e.target.value);\n }}\n label=\"Secret Key\"\n value={secretKey}\n />\n \n \n )}\n \n \n Save\n \n \n {addSending && (\n \n \n \n )}\n \n \n );\n};\n\nexport default withStyles(styles)(ReplicationSetup);\n","import React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport ErrorBlock from \"../../../shared/ErrorBlock\";\n\ninterface IProgressBar {\n maxValue: number;\n currValue: number;\n label: string;\n renderFunction?: (element: string) => any;\n error: string;\n loading: boolean;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperContainer: {\n padding: 15,\n },\n allValue: {\n fontSize: 16,\n fontWeight: 700,\n marginBottom: 8,\n },\n currentUsage: {\n fontSize: 12,\n marginTop: 8,\n },\n centerItem: {\n textAlign: \"center\",\n },\n });\n\nconst BorderLinearProgress = withStyles((theme) => ({\n root: {\n height: 10,\n borderRadius: 5,\n },\n colorPrimary: {\n backgroundColor: \"#F4F4F4\",\n },\n bar: {\n borderRadius: 5,\n backgroundColor: \"#081C42\",\n },\n}))(LinearProgress);\n\nconst UsageBarWrapper = ({\n classes,\n maxValue,\n currValue,\n label,\n renderFunction,\n loading,\n error,\n}: IProgressBar) => {\n const porcentualValue = (currValue * 100) / maxValue;\n\n const renderComponent = () => {\n if (!loading) {\n return error !== \"\" ? (\n \n ) : (\n \n \n {label}{\" \"}\n {renderFunction ? renderFunction(maxValue.toString()) : maxValue}\n \n \n \n Used:{\" \"}\n {renderFunction ? renderFunction(currValue.toString()) : currValue}\n \n \n );\n }\n\n return null;\n };\n\n return (\n \n \n {loading && (\n \n \n \n \n \n )}\n {renderComponent()}\n \n \n );\n};\n\nexport default withStyles(styles)(UsageBarWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, Fragment, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport { modalBasic } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../common/api\";\n\ninterface IUpdateTenantModal {\n open: boolean;\n closeModalAndRefresh: (update: boolean) => any;\n namespace: string;\n idTenant: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst UpdateTenantModal = ({\n open,\n closeModalAndRefresh,\n namespace,\n idTenant,\n setModalErrorSnackMessage,\n classes,\n}: IUpdateTenantModal) => {\n const [isSending, setIsSending] = useState(false);\n const [minioImage, setMinioImage] = useState(\"\");\n const [consoleImage, setConsoleImage] = useState(\"\");\n const [imageRegistry, setImageRegistry] = useState(false);\n const [imageRegistryEndpoint, setImageRegistryEndpoint] = useState(\n \"\"\n );\n const [imageRegistryUsername, setImageRegistryUsername] = useState(\n \"\"\n );\n const [imageRegistryPassword, setImageRegistryPassword] = useState(\n \"\"\n );\n const [validMinioImage, setValidMinioImage] = useState(true);\n const [validConsoleImage, setValidConsoleImage] = useState(true);\n\n const validateImage = useCallback(\n (fieldToCheck: string) => {\n const pattern = new RegExp(\"^$|^((.*?)/(.*?):(.+))$\");\n\n switch (fieldToCheck) {\n case \"consoleImage\":\n setValidConsoleImage(pattern.test(consoleImage));\n break;\n case \"minioImage\":\n setValidMinioImage(pattern.test(minioImage));\n break;\n }\n },\n [consoleImage, minioImage]\n );\n\n useEffect(() => {\n validateImage(\"minioImage\");\n }, [minioImage, validateImage]);\n\n useEffect(() => {\n validateImage(\"consoleImage\");\n }, [consoleImage, validateImage]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setMinioImage(\"\");\n setConsoleImage(\"\");\n setImageRegistry(false);\n setImageRegistryEndpoint(\"\");\n setImageRegistryUsername(\"\");\n setImageRegistryPassword(\"\");\n };\n\n const updateMinIOImage = () => {\n setIsSending(true);\n\n let payload = {\n image: minioImage,\n console_image: consoleImage,\n enable_prometheus: true,\n };\n\n if (imageRegistry) {\n const registry: any = {\n image_registry: {\n registry: imageRegistryEndpoint,\n username: imageRegistryUsername,\n password: imageRegistryPassword,\n },\n };\n payload = {\n ...payload,\n ...registry,\n };\n }\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/namespaces/${namespace}/tenants/${idTenant}`,\n payload\n )\n .then(() => {\n setIsSending(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSending(false);\n });\n };\n\n return (\n \n \n \n \n Please enter the MinIO image from dockerhub to use. If blank, then\n latest build will be used.\n \n
\n
\n \n {\n setMinioImage(e.target.value);\n }}\n />\n \n \n {\n setConsoleImage(e.target.value);\n }}\n />\n \n \n ) => {\n setImageRegistry(!imageRegistry);\n }}\n label={\"Set Custom Image Registry\"}\n indicatorLabels={[\"Yes\", \"No\"]}\n />\n \n {imageRegistry && (\n \n \n {\n setImageRegistryEndpoint(e.target.value);\n }}\n />\n \n \n {\n setImageRegistryUsername(e.target.value);\n }}\n />\n \n \n {\n setImageRegistryPassword(e.target.value);\n }}\n />\n \n \n )}\n
\n \n \n Clear\n \n \n Save\n \n \n
\n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(UpdateTenantModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n containerForHeader,\n modalBasic,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, Typography } from \"@material-ui/core\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\nimport { CreateIcon } from \"../../../../icons\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport AddPoolModal from \"./AddPoolModal\";\nimport AddBucket from \"../../Buckets/ListBuckets/AddBucket\";\nimport ReplicationSetup from \"./ReplicationSetup\";\nimport api from \"../../../../common/api\";\nimport { IPool, ITenant } from \"../ListTenants/types\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport UsageBarWrapper from \"../../Common/UsageBarWrapper/UsageBarWrapper\";\nimport UpdateTenantModal from \"./UpdateTenantModal\";\nimport PencilIcon from \"../../Common/TableWrapper/TableActionIcons/PencilIcon\";\nimport { LicenseInfo } from \"../../License/types\";\nimport { Link } from \"react-router-dom\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport Moment from \"react-moment\";\n\ninterface ITenantDetailsProps {\n classes: any;\n match: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\ninterface ITenantUsage {\n used: string;\n disk_used: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n multiContainer: {\n display: \"flex\",\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n },\n sizeFactorContainer: {\n marginLeft: 8,\n },\n containerHeader: {\n display: \"flex\",\n justifyContent: \"space-between\",\n },\n paperContainer: {\n padding: \"15px 15px 15px 50px\",\n },\n infoGrid: {\n display: \"grid\",\n gridTemplateColumns: \"auto auto auto auto\",\n gridGap: 8,\n \"& div\": {\n display: \"flex\",\n alignItems: \"center\",\n },\n \"& div:nth-child(odd)\": {\n justifyContent: \"flex-end\",\n fontWeight: 700,\n },\n \"& div:nth-child(2n)\": {\n paddingRight: 35,\n },\n },\n masterActions: {\n width: \"25%\",\n minWidth: \"120px\",\n \"& div\": {\n margin: \"5px 0px\",\n },\n },\n actionsTray: {\n textAlign: \"right\",\n },\n updateButton: {\n backgroundColor: \"transparent\",\n border: 0,\n padding: \"0 6px\",\n cursor: \"pointer\",\n \"&:focus, &:active\": {\n outline: \"none\",\n },\n \"& svg\": {\n height: 12,\n },\n },\n noUnderLine: {\n textDecoration: \"none\",\n },\n poolLabel: {\n color: \"#666666\",\n },\n licenseContainer: {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: \"#032F51\",\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: \"#FFF\",\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: \"#FFFFFF\",\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n licenseInfo: { color: \"#FFFFFF\", position: \"relative\" },\n licenseInfoTitle: {\n textTransform: \"none\",\n color: \"#BFBFBF\",\n fontSize: 11,\n },\n licenseInfoValue: {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n ...modalBasic,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantDetails = ({\n classes,\n match,\n setErrorSnackMessage,\n}: ITenantDetailsProps) => {\n const [selectedTab, setSelectedTab] = useState(0);\n const [capacity, setCapacity] = useState(0);\n const [poolCount, setPoolCount] = useState(0);\n const [pools, setPools] = useState([]);\n const [instances, setInstances] = useState(0);\n const [volumes, setVolumes] = useState(0);\n const [addPoolOpen, setAddPool] = useState(false);\n const [addBucketOpen, setAddBucketOpen] = useState(false);\n const [addReplicationOpen, setAddReplicationOpen] = useState(false);\n const [tenant, setTenant] = useState(null);\n const [loadingUsage, setLoadingUsage] = useState(true);\n const [usageError, setUsageError] = useState(\"\");\n const [usage, setUsage] = useState(0);\n const [updateMinioVersion, setUpdateMinioVersion] = useState(false);\n const [licenseInfo, setLicenseInfo] = useState();\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingActivateProduct, setLoadingActivateProduct] = useState(\n false\n );\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const onClosePoolAndRefresh = (reload: boolean) => {\n setAddPool(false);\n\n if (reload) {\n loadInfo();\n loadUsage();\n }\n };\n\n const closeBucketsAndRefresh = () => {\n setAddBucketOpen(false);\n };\n\n const closeReplicationAndRefresh = (reload: boolean) => {\n setAddReplicationOpen(false);\n\n if (reload) {\n loadInfo();\n loadUsage();\n }\n };\n\n const activateProduct = (namespace: string, tenant: string) => {\n if (loadingActivateProduct) {\n return;\n }\n setLoadingActivateProduct(true);\n api\n .invoke(\n \"POST\",\n `/api/v1/subscription/namespaces/${namespace}/tenants/${tenant}/activate`,\n {}\n )\n .then(() => {\n setLoadingActivateProduct(false);\n loadInfo();\n })\n .catch((err) => {\n setLoadingActivateProduct(false);\n setErrorSnackMessage(err);\n });\n };\n\n const loadInfo = () => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}`\n )\n .then((res: ITenant) => {\n const resPools = !res.pools ? [] : res.pools;\n\n let totalInstances = 0;\n let totalVolumes = 0;\n let poolNamedIndex = 0;\n for (let pool of resPools) {\n const cap =\n pool.volumes_per_server *\n pool.servers *\n pool.volume_configuration.size;\n pool.label = `pool-${poolNamedIndex}`;\n if (pool.name === undefined || pool.name === \"\") {\n pool.name = pool.label;\n }\n pool.capacity = niceBytes(cap + \"\");\n pool.volumes = pool.servers * pool.volumes_per_server;\n totalInstances += pool.servers;\n totalVolumes += pool.volumes;\n poolNamedIndex += 1;\n }\n setCapacity(res.total_size);\n setPoolCount(resPools.length);\n setVolumes(totalVolumes);\n setInstances(totalInstances);\n\n setPools(resPools);\n\n setTenant(res);\n })\n .catch((err) => {\n setErrorSnackMessage(err);\n });\n };\n\n const loadUsage = () => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/usage`\n )\n .then((result: ITenantUsage) => {\n const usage = get(result, \"disk_used\", \"0\");\n setUsage(parseInt(usage));\n setUsageError(\"\");\n setLoadingUsage(false);\n })\n .catch((err) => {\n setUsageError(err);\n setUsage(0);\n setLoadingUsage(false);\n });\n };\n\n const fetchLicenseInfo = () => {\n setLoadingLicenseInfo(true);\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: LicenseInfo) => {\n setLicenseInfo(res);\n setLoadingLicenseInfo(false);\n })\n .catch((err: any) => {\n setLoadingLicenseInfo(false);\n });\n };\n\n useEffect(() => {\n loadInfo();\n loadUsage();\n fetchLicenseInfo();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {addPoolOpen && tenant !== null && (\n \n )}\n {addBucketOpen && (\n \n )}\n {addReplicationOpen && (\n \n )}\n {updateMinioVersion && (\n {\n setUpdateMinioVersion(false);\n }}\n idTenant={tenantName}\n namespace={tenantNamespace}\n />\n )}\n ${match.params[\"tenantName\"]}`} />\n \n \n \n
\n
\n \n \n
\n
Capacity:
\n
{niceBytes(capacity.toString(10))}
\n
Minio:
\n
\n {tenant ? tenant.image : \"\"}{\" \"}\n {\n setUpdateMinioVersion(true);\n }}\n >\n \n \n
\n
Clusters:
\n
{poolCount}
\n
Console:
\n
{tenant ? tenant.console_image : \"\"}
\n
Instances:
\n
{instances}
\n
Volumes:
\n
{volumes}
\n {tenant?.endpoints && (\n \n
Endpoint:
\n
\n \n {tenant?.endpoints.minio}\n \n
\n
Console:
\n
\n \n {tenant?.endpoints.console}\n \n
\n
\n )}\n
\n
\n
\n \n \n \n \n
\n
\n \n {\n setSelectedTab(newValue);\n }}\n aria-label=\"tenant-tabs\"\n >\n \n \n \n \n \n }\n onClick={() => {\n setAddPool(true);\n }}\n >\n Expand Tenant\n \n \n \n
\n
\n \n {selectedTab === 0 && (\n {\n console.log(element);\n },\n sendOnlyId: true,\n },\n ]}\n columns={[\n { label: \"Name\", elementKey: \"name\" },\n { label: \"Capacity\", elementKey: \"capacity\" },\n { label: \"# of Instances\", elementKey: \"servers\" },\n { label: \"# of Drives\", elementKey: \"volumes\" },\n ]}\n isLoading={false}\n records={pools}\n entityName=\"Servers\"\n idField=\"name\"\n />\n )}\n {selectedTab === 1 && (\n \n \n \n \n {tenant && tenant.subnet_license ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {tenant.subnet_license.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (\n tenant.subnet_license.storage_capacity *\n 1099511627776\n ) // 1 Terabyte = 1099511627776 Bytes\n .toString(10)\n )}\n \n \n Expiry Date\n \n \n \n {tenant.subnet_license.expires_at}\n \n \n \n \n \n Subscription Plan\n \n \n {tenant.subnet_license.plan}\n \n \n Requester\n \n \n {tenant.subnet_license.email}\n \n \n \n \n \n ) : (\n !loadingLicenseInfo && (\n \n {!licenseInfo && (\n {\n e.stopPropagation();\n }}\n className={classes.noUnderLine}\n >\n \n Activate Product\n \n \n )}\n {licenseInfo && tenant && (\n \n activateProduct(tenant.namespace, tenant.name)\n }\n >\n Attach License\n \n )}\n \n )\n )}\n
\n \n \n
\n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(TenantDetails));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const OBJECT_BROWSER_ADD_ROUTE = \"OBJECT_BROWSER/ADD_ROUTE\";\nexport const OBJECT_BROWSER_RESET_ROUTES_LIST =\n \"OBJECT_BROWSER/RESET_ROUTES_LIST\";\nexport const OBJECT_BROWSER_REMOVE_ROUTE_LEVEL =\n \"OBJECT_BROWSER/REMOVE_ROUTE_LEVEL\";\nexport const OBJECT_BROWSER_SET_ALL_ROUTES = \"OBJECT_BROWSER/SET_ALL_ROUTES\";\nexport const OBJECT_BROWSER_CREATE_FOLDER = \"OBJECT_BROWSER/CREATE_FOLDER\";\nexport const OBJECT_BROWSER_SET_LAST_AS_FILE =\n \"OBJECT_BROWSER/SET_LAST_AS_FILE\";\nexport const OBJECT_BROWSER_DOWNLOAD_FILE_LOADER =\n \"OBJECT_BROWSER/DOWNLOAD_FILE_LOADER\";\nexport const OBJECT_BROWSER_DOWNLOADED_FILE = \"OBJECT_BROWSER/DOWNLOADED_FILE\";\n\ninterface AddRouteAction {\n type: typeof OBJECT_BROWSER_ADD_ROUTE;\n route: string;\n label: string;\n routeType: string;\n}\n\ninterface ResetRoutesList {\n type: typeof OBJECT_BROWSER_RESET_ROUTES_LIST;\n reset: boolean;\n}\n\ninterface RemoveRouteLevel {\n type: typeof OBJECT_BROWSER_REMOVE_ROUTE_LEVEL;\n toRoute: string;\n}\n\ninterface SetAllRoutes {\n type: typeof OBJECT_BROWSER_SET_ALL_ROUTES;\n currentRoute: string;\n}\n\ninterface CreateFolder {\n type: typeof OBJECT_BROWSER_CREATE_FOLDER;\n newRoute: string;\n}\n\ninterface SetLastAsFile {\n type: typeof OBJECT_BROWSER_SET_LAST_AS_FILE;\n}\n\ninterface SetFileDownload {\n type: typeof OBJECT_BROWSER_DOWNLOAD_FILE_LOADER;\n path: string;\n}\n\ninterface FileDownloaded {\n type: typeof OBJECT_BROWSER_DOWNLOADED_FILE;\n path: string;\n}\n\nexport type ObjectBrowserActionTypes =\n | AddRouteAction\n | ResetRoutesList\n | RemoveRouteLevel\n | SetAllRoutes\n | CreateFolder\n | SetLastAsFile\n | SetFileDownload\n | FileDownloaded;\n\nexport const addRoute = (route: string, label: string, routeType: string) => {\n return {\n type: OBJECT_BROWSER_ADD_ROUTE,\n route,\n label,\n routeType,\n };\n};\n\nexport const resetRoutesList = (reset: boolean) => {\n return {\n type: OBJECT_BROWSER_RESET_ROUTES_LIST,\n reset,\n };\n};\n\nexport const removeRouteLevel = (toRoute: string) => {\n return {\n type: OBJECT_BROWSER_REMOVE_ROUTE_LEVEL,\n toRoute,\n };\n};\n\nexport const setAllRoutes = (currentRoute: string) => {\n return {\n type: OBJECT_BROWSER_SET_ALL_ROUTES,\n currentRoute,\n };\n};\n\nexport const createFolder = (newRoute: string) => {\n return {\n type: OBJECT_BROWSER_CREATE_FOLDER,\n newRoute,\n };\n};\n\nexport const setLastAsFile = () => {\n return {\n type: OBJECT_BROWSER_SET_LAST_AS_FILE,\n };\n};\n\nexport const fileIsBeingPrepared = (path: string) => {\n return {\n type: OBJECT_BROWSER_DOWNLOAD_FILE_LOADER,\n path,\n };\n};\n\nexport const fileDownloadStarted = (path: string) => {\n return {\n type: OBJECT_BROWSER_DOWNLOADED_FILE,\n path,\n };\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport { withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme } from \"@material-ui/core/styles\";\nimport { removeRouteLevel } from \"./actions\";\nimport { ObjectBrowserState, Route } from \"./reducers\";\nimport { objectBrowserCommon } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Link } from \"react-router-dom\";\n\ninterface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\ninterface IObjectBrowser {\n classes: any;\n objectsList: Route[];\n removeRouteLevel: (path: string) => any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...objectBrowserCommon,\n });\n\nconst BrowserBreadcrumbs = ({\n classes,\n objectsList,\n removeRouteLevel,\n}: IObjectBrowser) => {\n const listBreadcrumbs = objectsList.map((objectItem, index) => {\n return (\n \n {\n removeRouteLevel(objectItem.route);\n }}\n >\n {objectItem.label}\n \n {index < objectsList.length - 1 && / }\n \n );\n });\n\n return (\n \n \n
\n {objectsList && objectsList.length > 0\n ? objectsList.slice(-1)[0].label\n : \"\"}\n
\n
\n \n {listBreadcrumbs}\n \n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n objectsList: get(objectBrowser, \"routesList\", []),\n});\n\nconst mapDispatchToProps = {\n removeRouteLevel,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(BrowserBreadcrumbs));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect, Fragment } from \"react\";\nimport { withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { Button } from \"@material-ui/core\";\nimport { CreateIcon } from \"../../../icons\";\nimport { niceBytes } from \"../../../common/utils\";\nimport { Bucket, BucketList, HasPermissionResponse } from \"../Buckets/types\";\nimport {\n actionsTray,\n objectBrowserCommon,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { addRoute, resetRoutesList } from \"./actions\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport BrowserBreadcrumbs from \"./BrowserBreadcrumbs\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport AddBucket from \"../Buckets/ListBuckets/AddBucket\";\nimport api from \"../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n usedSpaceCol: {\n width: 150,\n textAlign: \"right\",\n },\n subTitleLabel: {\n alignItems: \"center\",\n display: \"flex\",\n },\n bucketName: {\n display: \"flex\",\n alignItems: \"center\",\n },\n iconBucket: {\n backgroundImage: \"url(/images/ob_bucket_clear.svg)\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center center\",\n width: 16,\n height: 40,\n marginRight: 10,\n },\n \"@global\": {\n \".rowLine:hover .iconBucketElm\": {\n backgroundImage: \"url(/images/ob_bucket_filled.svg)\",\n },\n },\n browsePaper: {\n height: \"calc(100vh - 280px)\",\n },\n ...actionsTray,\n ...searchField,\n ...objectBrowserCommon,\n });\n\ninterface IBrowseBucketsProps {\n classes: any;\n addRoute: (path: string, label: string, type: string) => any;\n resetRoutesList: (doVar: boolean) => any;\n displayErrorMessage: typeof setErrorSnackMessage;\n match: any;\n}\n\nconst BrowseBuckets = ({\n classes,\n match,\n addRoute,\n resetRoutesList,\n displayErrorMessage,\n}: IBrowseBucketsProps) => {\n const [loading, setLoading] = useState(true);\n const [records, setRecords] = useState([]);\n const [addScreenOpen, setAddScreenOpen] = useState(false);\n const [filterBuckets, setFilterBuckets] = useState(\"\");\n const [loadingPerms, setLoadingPerms] = useState(true);\n const [canCreateBucket, setCanCreateBucket] = useState(false);\n\n // check the permissions for creating bucket\n useEffect(() => {\n if (loadingPerms) {\n const fetchRecords = () => {\n api\n .invoke(\"POST\", `/api/v1/has-permission`, {\n actions: [\n {\n id: \"createBucket\",\n action: \"s3:CreateBucket\",\n },\n ],\n })\n .then((res: HasPermissionResponse) => {\n const canCreate = res.permissions\n .filter((s) => s.id == \"createBucket\")\n .pop();\n if (canCreate && canCreate.can) {\n setCanCreateBucket(true);\n } else {\n setCanCreateBucket(false);\n }\n\n setLoadingPerms(false);\n // setRecords(res.buckets || []);\n })\n .catch((err: any) => {\n setLoadingPerms(false);\n setErrorSnackMessage(err);\n });\n };\n fetchRecords();\n }\n }, [loadingPerms, setErrorSnackMessage]);\n\n useEffect(() => {\n resetRoutesList(true);\n }, [match, resetRoutesList]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n setLoading(false);\n setRecords(res.buckets || []);\n })\n .catch((err: any) => {\n setLoading(false);\n displayErrorMessage(err);\n });\n }\n }, [loading, displayErrorMessage]);\n\n const closeAddModalAndRefresh = (refresh: boolean) => {\n setAddScreenOpen(false);\n\n if (refresh) {\n setLoading(true);\n }\n };\n\n const filteredRecords = records.filter((b: Bucket) => {\n if (filterBuckets === \"\") {\n return true;\n }\n return b.name.indexOf(filterBuckets) >= 0;\n });\n\n const handleViewChange = (idElement: string) => {\n const currentPath = get(match, \"url\", \"/object-browser\");\n const newPath = `${currentPath}/${idElement}`;\n\n addRoute(newPath, idElement, \"path\");\n };\n\n const renderBucket = (bucketName: string) => {\n return (\n
\n
\n {bucketName}\n
\n );\n };\n\n return (\n \n {addScreenOpen && (\n \n )}\n \n \n
\n \n
\n {canCreateBucket && (\n
\n }\n onClick={() => {\n setAddScreenOpen(true);\n }}\n >\n Create Bucket\n \n
\n )}\n
\n \n {\n setFilterBuckets(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n \n \n
\n
\n \n \n \n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n addRoute,\n resetRoutesList,\n displayErrorMessage: setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withRouter(connector(withStyles(styles)(BrowseBuckets)));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid } from \"@material-ui/core\";\nimport BrowseBuckets from \"./BrowseBuckets\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\ninterface IObjectBrowserProps {\n match: any;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n watchList: {\n background: \"white\",\n maxHeight: \"400\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4\",\n padding: \"0\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0\",\n padding: \"0\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n actionsTray: {\n textAlign: \"right\",\n \"& button\": {\n marginLeft: 10,\n },\n },\n inputField: {\n background: \"#FFFFFF\",\n padding: 12,\n borderRadius: 5,\n marginLeft: 10,\n boxShadow: \"0px 3px 6px #00000012\",\n },\n fieldContainer: {\n background: \"#FFFFFF\",\n padding: 0,\n borderRadius: 5,\n marginLeft: 10,\n textAlign: \"left\",\n minWidth: \"206\",\n boxShadow: \"0px 3px 6px #00000012\",\n },\n lastElementWPadding: {\n paddingRight: \"78\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst ObjectBrowser = ({ match, classes }: IObjectBrowserProps) => {\n const pathIn = get(match, \"url\", \"\");\n\n return (\n \n \n \n \n {pathIn === \"/object-browser\" && }\n \n \n \n );\n};\n\nexport default withStyles(styles)(ObjectBrowser);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport api from \"../../../../../../common/api\";\n\ninterface IDeleteObjectProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedObject: string;\n selectedBucket: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteObject = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n selectedObject,\n setErrorSnackMessage,\n}: IDeleteObjectProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n let recursive = false;\n if (selectedObject.endsWith(\"/\")) {\n recursive = true;\n }\n setDeleteLoading(true);\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${selectedBucket}/objects?path=${selectedObject}&recursive=${recursive}`\n )\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n return (\n {\n closeDeleteModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete\n \n {deleteLoading && }\n \n Are you sure you want to delete: {selectedObject}?{\" \"}\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n }}\n color=\"secondary\"\n disabled={deleteLoading}\n >\n Delete\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(DeleteObject);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { connect } from \"react-redux\";\nimport { createFolder } from \"../../../../ObjectBrowser/actions\";\n\ninterface ICreateFolder {\n classes: any;\n modalOpen: boolean;\n folderName: string;\n createFolder: (newFolder: string) => any;\n onClose: () => any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n pathLabel: {\n marginTop: 0,\n marginBottom: 32,\n },\n ...modalBasic,\n });\n\nconst CreateFolderModal = ({\n modalOpen,\n folderName,\n onClose,\n createFolder,\n classes,\n}: ICreateFolder) => {\n const [pathUrl, setPathUrl] = useState(\"\");\n\n const resetForm = () => {\n setPathUrl(\"\");\n };\n\n const createProcess = () => {\n createFolder(pathUrl);\n onClose();\n };\n\n const folderTruncated = folderName.split(\"/\").slice(2).join(\"/\");\n\n return (\n \n \n \n

\n Current Path: {folderTruncated}/\n

\n \n {\n setPathUrl(e.target.value);\n }}\n />\n \n \n \n Clear\n \n \n Save\n \n \n
\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n createFolder,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(CreateFolderModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\n\nconst UploadFile = () => {\n return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default UploadFile;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { isNullOrUndefined } from \"util\";\n\nexport const download = (\n bucketName: string,\n objectPath: string,\n versionID: any,\n callBack?: (objIdentifier: string) => void,\n includeVersionInCallback?: boolean\n) => {\n const anchor = document.createElement(\"a\");\n document.body.appendChild(anchor);\n const xhr = new XMLHttpRequest();\n const allPathData = objectPath.split(\"/\");\n const objectName = allPathData[allPathData.length - 1];\n\n let path = `/api/v1/buckets/${bucketName}/objects/download?prefix=${objectPath}`;\n if (!isNullOrUndefined(versionID) && versionID !== \"null\") {\n path = path.concat(`&version_id=${versionID}`);\n }\n\n xhr.open(\"GET\", path, true);\n xhr.responseType = \"blob\";\n\n xhr.onload = function (e) {\n if (this.status === 200) {\n const blob = new Blob([this.response], {\n type: \"octet/stream\",\n });\n const blobUrl = window.URL.createObjectURL(blob);\n\n anchor.href = blobUrl;\n anchor.download = objectName;\n\n anchor.click();\n window.URL.revokeObjectURL(blobUrl);\n anchor.remove();\n\n if (callBack) {\n callBack(\n `${bucketName}/${objectPath}${\n includeVersionInCallback ? `-${versionID}` : \"\"\n }`\n );\n }\n }\n };\n xhr.send();\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { BucketObject, BucketObjectsList } from \"./types\";\nimport api from \"../../../../../../common/api\";\nimport TableWrapper from \"../../../../Common/TableWrapper/TableWrapper\";\nimport { niceBytes } from \"../../../../../../common/utils\";\nimport DeleteObject from \"./DeleteObject\";\n\nimport {\n actionsTray,\n containerForHeader,\n objectBrowserCommon,\n searchField,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport PageHeader from \"../../../../Common/PageHeader/PageHeader\";\nimport { Button, Input, Typography } from \"@material-ui/core\";\nimport * as reactMoment from \"react-moment\";\nimport { CreateIcon } from \"../../../../../../icons\";\nimport BrowserBreadcrumbs from \"../../../../ObjectBrowser/BrowserBreadcrumbs\";\nimport get from \"lodash/get\";\nimport { withRouter } from \"react-router-dom\";\nimport {\n addRoute,\n setAllRoutes,\n setLastAsFile,\n fileIsBeingPrepared,\n fileDownloadStarted,\n} from \"../../../../ObjectBrowser/actions\";\nimport { connect } from \"react-redux\";\nimport {\n ObjectBrowserReducer,\n Route,\n} from \"../../../../ObjectBrowser/reducers\";\nimport CreateFolderModal from \"./CreateFolderModal\";\nimport UploadFile from \"../../../../../../icons/UploadFile\";\nimport { download } from \"../utils\";\nimport {\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n} from \"../../../../../../actions\";\n\nconst commonIcon = {\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center center\",\n width: 16,\n minWidth: 16,\n height: 40,\n marginRight: 10,\n};\n\nconst styles = (theme: Theme) =>\n createStyles({\n seeMore: {\n marginTop: theme.spacing(3),\n },\n paper: {\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n\n addSideBar: {\n width: \"320px\",\n padding: \"20px\",\n },\n tableToolbar: {\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(0),\n },\n minTableHeader: {\n color: \"#393939\",\n \"& tr\": {\n \"& th\": {\n fontWeight: \"bold\",\n },\n },\n },\n fileName: {\n display: \"flex\",\n alignItems: \"center\",\n },\n fileNameText: {\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n iconFolder: {\n backgroundImage: \"url(/images/ob_folder_clear.svg)\",\n ...commonIcon,\n },\n iconFile: {\n backgroundImage: \"url(/images/ob_file_clear.svg)\",\n ...commonIcon,\n },\n buttonsContainer: {\n \"& .MuiButtonBase-root\": {\n marginLeft: 10,\n },\n },\n browsePaper: {\n height: \"calc(100vh - 280px)\",\n },\n \"@global\": {\n \".rowLine:hover .iconFileElm\": {\n backgroundImage: \"url(/images/ob_file_filled.svg)\",\n },\n \".rowLine:hover .iconFolderElm\": {\n backgroundImage: \"url(/images/ob_folder_filled.svg)\",\n },\n },\n ...actionsTray,\n ...searchField,\n ...objectBrowserCommon,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IListObjectsProps {\n classes: any;\n match: any;\n addRoute: (param1: string, param2: string, param3: string) => any;\n setAllRoutes: (path: string) => any;\n routesList: Route[];\n downloadingFiles: string[];\n setLastAsFile: () => any;\n setLoadingProgress: typeof setLoadingProgress;\n setSnackBarMessage: typeof setSnackBarMessage;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n fileIsBeingPrepared: typeof fileIsBeingPrepared;\n fileDownloadStarted: typeof fileDownloadStarted;\n}\n\nfunction useInterval(callback: any, delay: number) {\n const savedCallback = useRef(null);\n\n // Remember the latest callback.\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval.\n useEffect(() => {\n function tick() {\n if (savedCallback !== undefined && savedCallback.current) {\n savedCallback.current();\n }\n }\n if (delay !== null) {\n let id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n}\n\nconst defLoading = Loading...;\n\nconst ListObjects = ({\n classes,\n match,\n addRoute,\n setAllRoutes,\n routesList,\n downloadingFiles,\n setLastAsFile,\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n}: IListObjectsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [createFolderOpen, setCreateFolderOpen] = useState(false);\n const [selectedObject, setSelectedObject] = useState(\"\");\n const [selectedBucket, setSelectedBucket] = useState(\"\");\n const [filterObjects, setFilterObjects] = useState(\"\");\n const [loadingPromise, setLoadingPromise] = useState | null>(\n null\n );\n const [loadingStartTime, setLoadingStartTime] = useState(0);\n const [loadingMessage, setLoadingMessage] = useState(\n defLoading\n );\n\n const updateMessage = () => {\n let timeDelta = Date.now() - loadingStartTime;\n\n if (timeDelta / 1000 >= 6) {\n setLoadingMessage(\n \n \n This operation is taking longer than expected... (\n {Math.ceil(timeDelta / 1000)}s)\n \n \n );\n } else if (timeDelta / 1000 >= 3) {\n setLoadingMessage(\n \n This operation is taking longer than expected...\n \n );\n }\n };\n\n useInterval(() => {\n // Your custom logic here\n if (loading) {\n updateMessage();\n }\n }, 1000);\n\n useEffect(() => {\n const bucketName = match.params[\"bucket\"];\n const internalPaths = match.params[0];\n\n const verifyIfIsFile = () => {\n const bucketName = match.params[\"bucket\"];\n const internalPaths = match.params[0];\n\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${internalPaths}`\n )\n .then((res: BucketObjectsList) => {\n //It is a file since it has elements in the object, setting file flag and waiting for component mount\n if (res.objects !== null) {\n setLastAsFile();\n } else {\n // It is a folder, we remove loader\n setLoading(false);\n }\n })\n .catch((err: any) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n if (loading) {\n let extraPath = \"\";\n if (internalPaths) {\n extraPath = `?prefix=${internalPaths}/`;\n }\n\n let currentTimestamp = Date.now() + 0;\n setLoadingStartTime(currentTimestamp);\n setLoadingMessage(defLoading);\n\n let p = api\n .invoke(\"GET\", `/api/v1/buckets/${bucketName}/objects${extraPath}`)\n .then((res: BucketObjectsList) => {\n setSelectedBucket(bucketName);\n\n const records: BucketObject[] = res.objects || [];\n const folders: BucketObject[] = [];\n const files: BucketObject[] = [];\n\n records.forEach((record) => {\n // this is a folder\n if (record.name.endsWith(\"/\")) {\n folders.push(record);\n } else {\n // this is a file\n files.push(record);\n }\n });\n\n const recordsInElement = [...folders, ...files];\n\n setRecords(recordsInElement);\n // In case no objects were retrieved, We check if item is a file\n if (!res.objects && extraPath !== \"\") {\n verifyIfIsFile();\n return;\n }\n setLoading(false);\n })\n .catch((err: any) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n setLoadingPromise(p);\n }\n }, [loading, match, setLastAsFile, setErrorSnackMessage]);\n\n useEffect(() => {\n const url = get(match, \"url\", \"/object-browser\");\n if (url !== routesList[routesList.length - 1].route) {\n setAllRoutes(url);\n }\n }, [match, routesList, setAllRoutes]);\n\n useEffect(() => {\n setLoading(true);\n }, [routesList, setLoading]);\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n\n if (refresh) {\n setSnackBarMessage(`Object '${selectedObject}' deleted successfully.`);\n setLoading(true);\n }\n };\n\n const closeAddFolderModal = () => {\n setCreateFolderOpen(false);\n };\n\n const upload = (e: any, bucketName: string, path: string) => {\n if (\n e === null ||\n e === undefined ||\n e.target === null ||\n e.target === undefined\n ) {\n return;\n }\n e.preventDefault();\n let files = e.target.files;\n let uploadUrl = `/api/v1/buckets/${bucketName}/objects/upload`;\n if (path !== \"\") {\n uploadUrl = `${uploadUrl}?prefix=${path}`;\n }\n let xhr = new XMLHttpRequest();\n const areMultipleFiles = files.length > 1 ? true : false;\n const errorMessage = `An error occurred while uploading the file${\n areMultipleFiles ? \"s\" : \"\"\n }.`;\n const okMessage = `Object${\n areMultipleFiles ? \"s\" : ``\n } uploaded successfully.`;\n\n xhr.open(\"POST\", uploadUrl, true);\n\n xhr.withCredentials = false;\n xhr.onload = function (event) {\n if (\n xhr.status === 401 ||\n xhr.status === 403 ||\n xhr.status === 400 ||\n xhr.status === 500\n ) {\n setSnackBarMessage(errorMessage);\n }\n if (xhr.status === 200) {\n setSnackBarMessage(okMessage);\n }\n };\n\n xhr.upload.addEventListener(\"error\", (event) => {\n setSnackBarMessage(errorMessage);\n });\n\n xhr.upload.addEventListener(\"progress\", (event) => {\n setLoadingProgress(Math.floor((event.loaded * 100) / event.total));\n });\n\n xhr.onerror = () => {\n setSnackBarMessage(errorMessage);\n };\n xhr.onloadend = () => {\n setLoading(true);\n setLoadingProgress(100);\n };\n\n const formData = new FormData();\n\n for (let file of files) {\n const fileName = file.name;\n const blobFile = new Blob([file]);\n formData.append(fileName, blobFile);\n }\n\n xhr.send(formData);\n e.target.value = null;\n };\n\n const displayParsedDate = (object: BucketObject) => {\n if (object.name.endsWith(\"/\")) {\n return \"\";\n }\n return {object.last_modified};\n };\n\n const displayNiceBytes = (object: BucketObject) => {\n if (object.name.endsWith(\"/\")) {\n return \"\";\n }\n return niceBytes(String(object.size));\n };\n\n const confirmDeleteObject = (object: string) => {\n setDeleteOpen(true);\n setSelectedObject(object);\n };\n\n const removeDownloadAnimation = (path: string) => {\n fileDownloadStarted(path);\n };\n\n const downloadObject = (object: BucketObject) => {\n fileIsBeingPrepared(`${selectedBucket}/${object.name}`);\n if (object.size > 104857600) {\n // If file is bigger than 100MB we show a notification\n setSnackBarMessage(\n \"Download process started, it may take a few moments to complete\"\n );\n }\n\n download(\n selectedBucket,\n object.name,\n object.version_id,\n removeDownloadAnimation\n );\n };\n\n const openPath = (idElement: string) => {\n const currentPath = get(match, \"url\", \"/object-browser\");\n\n // Element is a folder, we redirect to it\n if (idElement.endsWith(\"/\")) {\n const idElementClean = idElement\n .substr(0, idElement.length - 1)\n .split(\"/\");\n const lastIndex = idElementClean.length - 1;\n const newPath = `${currentPath}/${idElementClean[lastIndex]}`;\n\n addRoute(newPath, idElementClean[lastIndex], \"path\");\n return;\n }\n // Element is a file. we open details here\n const pathInArray = idElement.split(\"/\");\n const fileName = pathInArray[pathInArray.length - 1];\n const newPath = `${currentPath}/${fileName}`;\n\n addRoute(newPath, fileName, \"file\");\n return;\n };\n\n const uploadObject = (e: any): void => {\n // Handle of deeper routes.\n const currentPath = routesList[routesList.length - 1].route;\n const splitPaths = currentPath\n .split(\"/\")\n .filter((item) => item.trim() !== \"\");\n\n let path = \"\";\n\n if (splitPaths.length > 2) {\n path = `${splitPaths.slice(2).join(\"/\")}/`;\n }\n\n upload(e, selectedBucket, path);\n };\n\n const tableActions = [\n { type: \"view\", onClick: openPath, sendOnlyId: true },\n {\n type: \"download\",\n onClick: downloadObject,\n showLoaderFunction: (item: string) =>\n downloadingFiles.includes(`${match.params[\"bucket\"]}/${item}`),\n },\n { type: \"delete\", onClick: confirmDeleteObject, sendOnlyId: true },\n ];\n\n const displayName = (element: string) => {\n let elementString = element;\n let icon = `${classes.iconFile} iconFileElm`;\n // Element is a folder\n if (element.endsWith(\"/\")) {\n icon = `${classes.iconFolder} iconFolderElm`;\n elementString = element.substr(0, element.length - 1);\n }\n\n const splitItem = elementString.split(\"/\");\n\n return (\n
\n
\n \n {splitItem[splitItem.length - 1]}\n \n
\n );\n };\n\n const filteredRecords = records.filter((b: BucketObject) => {\n if (filterObjects === \"\") {\n return true;\n } else {\n if (b.name.indexOf(filterObjects) >= 0) {\n return true;\n } else {\n return false;\n }\n }\n });\n\n return (\n \n {deleteOpen && (\n \n )}\n {createFolderOpen && (\n \n )}\n \n \n \n \n
\n \n
\n
\n }\n component=\"label\"\n onClick={() => {\n setCreateFolderOpen(true);\n }}\n >\n Create Folder\n \n }\n component=\"label\"\n >\n File\n uploadObject(e)}\n id=\"file-input\"\n style={{ display: \"none\" }}\n />\n \n
\n
\n \n {\n setFilterObjects(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n \n \n
\n
\n \n \n \n
\n
\n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n routesList: get(objectBrowser, \"routesList\", []),\n downloadingFiles: get(objectBrowser, \"downloadingFiles\", []),\n});\n\nconst mapDispatchToProps = {\n addRoute,\n setAllRoutes,\n setLastAsFile,\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withRouter(connector(withStyles(styles)(ListObjects)));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const months = [\n { value: \"01\", label: \"January\" },\n { value: \"02\", label: \"February\" },\n { value: \"03\", label: \"March\" },\n { value: \"04\", label: \"April\" },\n { value: \"05\", label: \"May\" },\n { value: \"06\", label: \"June\" },\n { value: \"07\", label: \"July\" },\n { value: \"08\", label: \"August\" },\n { value: \"09\", label: \"September\" },\n { value: \"10\", label: \"October\" },\n { value: \"11\", label: \"November\" },\n { value: \"12\", label: \"December\" },\n];\n\nexport const days = Array.from(Array(31), (_, num) => num + 1);\n\nconst currentYear = new Date().getFullYear();\n\nexport const years = Array.from(\n Array(25),\n (_, numYear) => numYear + currentYear\n);\n\nexport const validDate = (year: string, month: string, day: string): any[] => {\n const currentDate = Date.parse(`${year}-${month}-${day}`);\n\n if (isNaN(currentDate)) {\n return [false, \"\"];\n }\n\n const parsedMonth = parseInt(month);\n const parsedDay = parseInt(day);\n\n const monthForString = parsedMonth < 10 ? `0${parsedMonth}` : parsedMonth;\n const dayForString = parsedDay < 10 ? `0${parsedDay}` : parsedDay;\n\n const parsedDate = new Date(currentDate).toISOString().split(\"T\")[0];\n const dateString = `${year}-${monthForString}-${dayForString}`;\n\n return [parsedDate === dateString, dateString];\n};\n\n// twoDigitDate gets a two digit string number used for months or days\n// returns \"NaN\" if number is NaN\nexport const twoDigitDate = (num: number): string => {\n return num < 10 ? `0${num}` : `${num}`;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, {\n useState,\n forwardRef,\n useImperativeHandle,\n useEffect,\n} from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport InputBase from \"@material-ui/core/InputBase\";\nimport { fieldBasic, tooltipHelper } from \"../common/styleLibrary\";\nimport HelpIcon from \"../../../../../icons/HelpIcon\";\nimport FormSwitchWrapper from \"../FormSwitchWrapper/FormSwitchWrapper\";\nimport { days, months, validDate, years } from \"./utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n dateInput: {\n \"&:not(:last-child)\": {\n marginRight: 22,\n },\n },\n ...fieldBasic,\n ...tooltipHelper,\n labelContainer: {\n flex: 1,\n },\n fieldContainer: {\n ...fieldBasic.fieldContainer,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n paddingBottom: 10,\n marginTop: 11,\n marginBottom: 6,\n },\n fieldContainerBorder: {\n borderBottom: \"#9c9c9c 1px solid\",\n marginBottom: 20,\n },\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n \"& .MuiSelect-icon\": {\n color: \"#000\",\n \"&.Mui-disabled\": {\n color: \"#9c9c9c\",\n },\n },\n },\n input: {\n borderBottom: 0,\n fontSize: 12,\n },\n })\n)(InputBase);\n\ninterface IDateSelectorProps {\n classes: any;\n id: string;\n label: string;\n disableOptions?: boolean;\n addSwitch?: boolean;\n tooltip?: string;\n borderBottom?: boolean;\n value?: string;\n onDateChange: (date: string, isValid: boolean) => any;\n}\n\nconst DateSelector = forwardRef(\n (\n {\n classes,\n id,\n label,\n disableOptions = false,\n addSwitch = false,\n tooltip = \"\",\n borderBottom = false,\n onDateChange,\n value = \"\",\n }: IDateSelectorProps,\n ref: any\n ) => {\n useImperativeHandle(ref, () => ({ resetDate }));\n\n const [dateEnabled, setDateEnabled] = useState(false);\n const [month, setMonth] = useState(\"\");\n const [day, setDay] = useState(\"\");\n const [year, setYear] = useState(\"\");\n\n useEffect(() => {\n // verify if there is a current value\n // assume is in the format \"2021-12-30\"\n if (value !== \"\") {\n const valueSplit = value.split(\"-\");\n setYear(valueSplit[0]);\n setMonth(valueSplit[1]);\n // Turn to single digit to be displayed on dropdown buttons\n setDay(`${parseInt(valueSplit[2])}`);\n }\n }, [value]);\n\n useEffect(() => {\n const [isValid, dateString] = validDate(year, month, day);\n onDateChange(dateString, isValid);\n }, [month, day, year, onDateChange]);\n\n const resetDate = () => {\n setMonth(\"\");\n setDay(\"\");\n setYear(\"\");\n };\n\n const isDateDisabled = () => {\n if (disableOptions) {\n return disableOptions;\n } else if (addSwitch) {\n return !dateEnabled;\n } else {\n return false;\n }\n };\n\n const onMonthChange = (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => {\n setMonth(e.target.value as string);\n };\n\n const onDayChange = (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => {\n setDay(e.target.value as string);\n };\n\n const onYearChange = (\n e: React.ChangeEvent<{ name?: string | undefined; value: unknown }>\n ) => {\n setYear(e.target.value as string);\n };\n\n return (\n \n
\n \n \n {label}\n {tooltip !== \"\" && (\n
\n \n
\n \n
\n
\n
\n )}\n
\n {addSwitch && (\n {\n setDateEnabled(e.target.checked);\n if (!e.target.checked) {\n onDateChange(\"\", true);\n }\n }}\n switchOnly\n />\n )}\n
\n
\n
\n \n }\n >\n \n {\"\"}\n \n {months.map((option) => (\n \n {option.label}\n \n ))}\n \n \n \n }\n >\n \n {\"\"}\n \n {days.map((dayNumber) => (\n \n {dayNumber}\n \n ))}\n \n \n \n }\n >\n \n {\"\"}\n \n {years.map((year) => (\n \n {year}\n \n ))}\n \n \n
\n \n );\n }\n);\n\nexport default withStyles(styles)(DateSelector);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport CopyToClipboard from \"react-copy-to-clipboard\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { CopyIcon } from \"../../../../../../icons\";\nimport { IFileInfo } from \"./types\";\nimport {\n setModalErrorSnackMessage,\n setModalSnackMessage,\n} from \"../../../../../../actions\";\nimport api from \"../../../../../../common/api\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport DateSelector from \"../../../../Common/FormComponents/DateSelector/DateSelector\";\nimport PredefinedList from \"../../../../Common/FormComponents/PredefinedList/PredefinedList\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n copyButtonContainer: {\n paddingLeft: 16,\n },\n modalContent: {\n paddingBottom: 53,\n },\n ...modalBasic,\n });\n\ninterface IShareFileProps {\n classes: any;\n open: boolean;\n bucketName: string;\n dataObject: IFileInfo;\n closeModalAndRefresh: () => void;\n setModalSnackMessage: typeof setModalSnackMessage;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ShareFile = ({\n classes,\n open,\n closeModalAndRefresh,\n bucketName,\n dataObject,\n setModalSnackMessage,\n setModalErrorSnackMessage,\n}: IShareFileProps) => {\n const [shareURL, setShareURL] = useState(\"\");\n const [isLoadingFile, setIsLoadingFile] = useState(false);\n const [selectedDate, setSelectedDate] = useState(\"\");\n const [dateValid, setDateValid] = useState(true);\n\n const dateChanged = (newDate: string, isValid: boolean) => {\n setDateValid(isValid);\n if (isValid) {\n setSelectedDate(newDate);\n return;\n }\n setSelectedDate(\"\");\n };\n\n useEffect(() => {\n if (dateValid) {\n setIsLoadingFile(true);\n setShareURL(\"\");\n\n const slDate = new Date(`${selectedDate}T23:59:59`);\n const currDate = new Date();\n\n const diffDate = slDate.getTime() - currDate.getTime();\n\n if (diffDate < 0) {\n setModalErrorSnackMessage(\n \"Selected date must be greater than current time.\"\n );\n setShareURL(\"\");\n setIsLoadingFile(false);\n\n return;\n }\n\n if (diffDate > 604800000) {\n setModalErrorSnackMessage(\n \"You can share a file only for less than 7 days.\"\n );\n setShareURL(\"\");\n setIsLoadingFile(false);\n\n return;\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects/share?prefix=${\n dataObject.name\n }&version_id=${dataObject.version_id}${\n selectedDate !== \"\" ? `&expires=${diffDate}ms` : \"\"\n }`\n )\n .then((res: string) => {\n setShareURL(res);\n setIsLoadingFile(false);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setShareURL(\"\");\n setIsLoadingFile(false);\n });\n return;\n }\n }, [\n dataObject,\n selectedDate,\n bucketName,\n dateValid,\n setShareURL,\n setModalErrorSnackMessage,\n ]);\n\n return (\n \n {\n closeModalAndRefresh();\n }}\n >\n \n \n \n \n \n \n \n \n \n \n }\n onClick={() => {\n setModalSnackMessage(\"Share URL Copied to clipboard\");\n }}\n disabled={shareURL === \"\" || isLoadingFile}\n >\n Copy\n \n \n \n \n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalSnackMessage,\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(ShareFile));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nconst ShareIcon = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default ShareIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nconst DownloadIcon = () => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default DownloadIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"./types\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport RadioGroupSelector from \"../../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport DateSelector from \"../../../../Common/FormComponents/DateSelector/DateSelector\";\nimport api from \"../../../../../../common/api\";\nimport { twoDigitDate } from \"../../../../Common/FormComponents/DateSelector/utils\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n objectName: {\n fontSize: 18,\n fontWeight: 700,\n marginBottom: 40,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface ISetRetentionProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (updateInfo: boolean) => void;\n objectName: string;\n bucketName: string;\n objectInfo: IFileInfo;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\ninterface IRefObject {\n resetDate: () => void;\n}\n\nconst SetRetention = ({\n classes,\n open,\n closeModalAndRefresh,\n objectName,\n objectInfo,\n bucketName,\n setModalErrorSnackMessage,\n}: ISetRetentionProps) => {\n const [statusEnabled, setStatusEnabled] = useState(true);\n const [type, setType] = useState(\"\");\n const [date, setDate] = useState(\"\");\n const [isDateValid, setIsDateValid] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [alreadyConfigured, setAlreadyConfigured] = useState(false);\n\n useEffect(() => {\n if (objectInfo.retention_mode) {\n setType(objectInfo.retention_mode.toLowerCase());\n setAlreadyConfigured(true);\n }\n // get retention_until_date if defined\n if (objectInfo.retention_until_date) {\n const valueDate = new Date(objectInfo.retention_until_date);\n if (valueDate.toString() !== \"Invalid Date\") {\n const year = valueDate.getFullYear();\n const month = twoDigitDate(valueDate.getMonth() + 1);\n const day = valueDate.getDate();\n if (!isNaN(day) && month !== \"NaN\" && !isNaN(year)) {\n setDate(`${year}-${month}-${day}`);\n }\n }\n setAlreadyConfigured(true);\n }\n }, [objectInfo]);\n\n const dateElement = useRef(null);\n\n const dateFieldDisabled = () => {\n return !(statusEnabled && (type === \"governance\" || type === \"compliance\"));\n };\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n };\n\n const resetForm = () => {\n setStatusEnabled(false);\n setType(\"\");\n if (dateElement.current) {\n dateElement.current.resetDate();\n }\n };\n\n const addRetention = (\n selectedObject: string,\n versionId: string | null,\n expireDate: string\n ) => {\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/retention?prefix=${selectedObject}&version_id=${versionId}`,\n {\n expires: expireDate,\n mode: type,\n }\n )\n .then((res: any) => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSaving(false);\n });\n };\n\n const disableRetention = (\n selectedObject: string,\n versionId: string | null\n ) => {\n api\n .invoke(\n \"DELETE\",\n `/api/v1/buckets/${bucketName}/objects/retention?prefix=${selectedObject}&version_id=${versionId}`\n )\n .then(() => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSaving(false);\n });\n };\n\n const saveNewRetentionPolicy = () => {\n setIsSaving(true);\n const selectedObject = objectInfo.name;\n const versionId = objectInfo.version_id;\n\n const expireDate =\n !statusEnabled && type === \"governance\" ? \"\" : `${date}T23:59:59Z`;\n\n if (!statusEnabled && type === \"governance\") {\n disableRetention(selectedObject, versionId);\n\n return;\n }\n\n addRetention(selectedObject, versionId, expireDate);\n };\n\n const showSwitcher =\n alreadyConfigured && (type === \"governance\" || type === \"\");\n\n return (\n {\n resetForm();\n closeModalAndRefresh(false);\n }}\n >\n \n {objectName}\n \n ) => {\n onSubmit(e);\n }}\n >\n {showSwitcher && (\n \n ) => {\n setStatusEnabled(!statusEnabled);\n }}\n label={\"Status\"}\n indicatorLabels={[\"Enabled\", \"Disabled\"]}\n />\n \n )}\n \n {\n setType(e.target.value);\n }}\n selectorOptions={[\n { label: \"Governance\", value: \"governance\" },\n { label: \"Compliance\", value: \"compliance\" },\n ]}\n />\n \n \n {\n setIsDateValid(isValid);\n if (isValid) {\n setDate(date);\n }\n }}\n />\n \n \n \n Reset\n \n \n Save\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(SetRetention));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport InputBoxWrapper from \"../../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../../../../common/api\";\n\ninterface ITagModal {\n modalOpen: boolean;\n currentTags: any;\n bucketName: string;\n versionId: string | null;\n onCloseAndUpdate: (refresh: boolean) => void;\n selectedObject: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n pathLabel: {\n marginTop: 0,\n marginBottom: 32,\n },\n ...modalBasic,\n });\n\nconst AddTagModal = ({\n modalOpen,\n currentTags,\n selectedObject,\n onCloseAndUpdate,\n bucketName,\n versionId,\n setModalErrorSnackMessage,\n classes,\n}: ITagModal) => {\n const [newKey, setNewKey] = useState(\"\");\n const [newLabel, setNewLabel] = useState(\"\");\n const [isSending, setIsSending] = useState(false);\n\n const resetForm = () => {\n setNewLabel(\"\");\n setNewKey(\"\");\n };\n\n const addTagProcess = () => {\n setIsSending(true);\n const newTag: any = {};\n\n newTag[newKey] = newLabel;\n const newTagList = { ...currentTags, ...newTag };\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/tags?prefix=${selectedObject}&version_id=${versionId}`,\n { tags: newTagList }\n )\n .then((res: any) => {\n setIsSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSending(false);\n });\n };\n\n return (\n \n {\n onCloseAndUpdate(false);\n }}\n >\n \n

\n Selected Object: {selectedObject}\n

\n \n {\n setNewKey(e.target.value);\n }}\n />\n \n \n {\n setNewLabel(e.target.value);\n }}\n />\n \n \n \n Clear\n \n \n Save\n \n \n
\n \n
\n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddTagModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport api from \"../../../../../../common/api\";\n\ninterface IDeleteTagModal {\n deleteOpen: boolean;\n currentTags: any;\n bucketName: string;\n versionId: string | null;\n selectedTag: string[];\n onCloseAndUpdate: (refresh: boolean) => void;\n selectedObject: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n pathLabel: {\n marginTop: 0,\n marginBottom: 32,\n },\n ...modalBasic,\n });\n\nconst DeleteTagModal = ({\n deleteOpen,\n currentTags,\n selectedObject,\n selectedTag,\n onCloseAndUpdate,\n bucketName,\n versionId,\n setErrorSnackMessage,\n classes,\n}: IDeleteTagModal) => {\n const [deleteLoading, setDeleteSending] = useState(false);\n const [tagKey, tagLabel] = selectedTag;\n\n const removeTagProcess = () => {\n setDeleteSending(true);\n const cleanObject = { ...currentTags };\n delete cleanObject[tagKey];\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/tags?prefix=${selectedObject}&version_id=${versionId}`,\n { tags: cleanObject }\n )\n .then((res: any) => {\n setDeleteSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error) => {\n setErrorSnackMessage(error);\n setDeleteSending(false);\n });\n };\n\n return (\n {\n onCloseAndUpdate(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Delete Tag\n \n {deleteLoading && }\n \n Are you sure you want to delete the tag{\" \"}\n \n {tagKey} : {tagLabel}\n {\" \"}\n from {selectedObject}?\n \n \n \n {\n onCloseAndUpdate(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(DeleteTagModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../../../actions\";\nimport { IFileInfo } from \"./types\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../../common/api\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n objectName: {\n fontSize: 18,\n fontWeight: 700,\n marginBottom: 40,\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\ninterface ISetRetentionProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (reload: boolean) => void;\n objectName: string;\n bucketName: string;\n actualInfo: IFileInfo;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst SetLegalHoldModal = ({\n classes,\n open,\n closeModalAndRefresh,\n objectName,\n bucketName,\n actualInfo,\n setModalErrorSnackMessage,\n}: ISetRetentionProps) => {\n const [legalHoldEnabled, setLegalHoldEnabled] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const versionId = actualInfo.version_id;\n\n useEffect(() => {\n const status = get(actualInfo, \"legal_hold_status\", \"OFF\");\n setLegalHoldEnabled(status === \"ON\");\n }, [actualInfo]);\n\n const onSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n setIsSaving(true);\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/legalhold?prefix=${objectName}&version_id=${versionId}`,\n { status: legalHoldEnabled ? \"enabled\" : \"disabled\" }\n )\n .then(() => {\n setIsSaving(false);\n closeModalAndRefresh(true);\n })\n .catch((error) => {\n setModalErrorSnackMessage(error);\n setIsSaving(false);\n });\n };\n\n const resetForm = () => {\n setLegalHoldEnabled(false);\n };\n\n return (\n {\n resetForm();\n closeModalAndRefresh(false);\n }}\n >\n \n {objectName}\n \n ) => {\n onSubmit(e);\n }}\n >\n \n ) => {\n setLegalHoldEnabled(!legalHoldEnabled);\n }}\n label={\"Legal Hold Status\"}\n indicatorLabels={[\"Enabled\", \"Disabled\"]}\n tooltip={\n \"To enable this feature you need to enable versioning on the bucket before creation\"\n }\n />\n \n \n \n Reset\n \n \n Save\n \n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(SetLegalHoldModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport * as reactMoment from \"react-moment\";\nimport clsx from \"clsx\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Chip from \"@material-ui/core/Chip\";\nimport TextField from \"@material-ui/core/TextField\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport ShareFile from \"./ShareFile\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { IFileInfo } from \"./types\";\nimport {\n removeRouteLevel,\n fileIsBeingPrepared,\n fileDownloadStarted,\n} from \"../../../../ObjectBrowser/actions\";\nimport {\n ObjectBrowserReducer,\n Route,\n} from \"../../../../ObjectBrowser/reducers\";\nimport { download } from \"../utils\";\nimport history from \"../../../../../../history\";\nimport api from \"../../../../../../common/api\";\nimport PageHeader from \"../../../../Common/PageHeader/PageHeader\";\nimport ShareIcon from \"../../../../../../icons/ShareIcon\";\nimport DownloadIcon from \"../../../../../../icons/DownloadIcon\";\nimport DeleteIcon from \"../../../../../../icons/DeleteIcon\";\nimport TableWrapper from \"../../../../Common/TableWrapper/TableWrapper\";\nimport PencilIcon from \"../../../../Common/TableWrapper/TableActionIcons/PencilIcon\";\nimport SetRetention from \"./SetRetention\";\nimport BrowserBreadcrumbs from \"../../../../ObjectBrowser/BrowserBreadcrumbs\";\nimport DeleteObject from \"../ListObjects/DeleteObject\";\nimport AddTagModal from \"./AddTagModal\";\nimport DeleteTagModal from \"./DeleteTagModal\";\nimport SetLegalHoldModal from \"./SetLegalHoldModal\";\nimport {\n setSnackBarMessage,\n setErrorSnackMessage,\n} from \"../../../../../../actions\";\nimport { CircularProgress } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n objectNameContainer: {\n marginBottom: 8,\n },\n objectPathContainer: {\n marginBottom: 26,\n fontSize: 10,\n },\n objectPathLink: {\n \"&:visited\": {\n color: \"#000\",\n },\n },\n objectName: {\n fontSize: 24,\n },\n propertiesContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n marginBottom: 15,\n },\n propertiesItem: {\n display: \"flex\",\n flexDirection: \"row\",\n marginRight: 21,\n },\n propertiesItemBold: {\n fontWeight: 700,\n },\n propertiesValue: {\n marginLeft: 8,\n textTransform: \"capitalize\",\n },\n propertiesIcon: {\n marginLeft: 5,\n },\n actionsIconContainer: {\n marginLeft: 12,\n },\n actionsIcon: {\n height: 16,\n width: 16,\n \"& .MuiSvgIcon-root\": {\n height: 16,\n },\n },\n tagsContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n marginBottom: 15,\n },\n tagText: {\n marginRight: 13,\n },\n tag: {\n marginRight: 6,\n fontSize: 10,\n fontWeight: 700,\n \"&.MuiChip-sizeSmall\": {\n height: 18,\n },\n \"& .MuiSvgIcon-root\": {\n height: 10,\n width: 10,\n },\n },\n search: {\n marginBottom: 8,\n \"&.MuiFormControl-root\": {\n marginRight: 0,\n },\n },\n \"@global\": {\n \".progressDetails\": {\n paddingTop: 3,\n display: \"inline-block\",\n position: \"relative\",\n width: 18,\n height: 18,\n },\n \".progressDetails > .MuiCircularProgress-root\": {\n position: \"absolute\",\n left: 0,\n top: 3,\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IObjectDetailsProps {\n classes: any;\n routesList: Route[];\n downloadingFiles: string[];\n removeRouteLevel: (newRoute: string) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n setSnackBarMessage: typeof setSnackBarMessage;\n fileIsBeingPrepared: typeof fileIsBeingPrepared;\n fileDownloadStarted: typeof fileDownloadStarted;\n}\n\nconst emptyFile: IFileInfo = {\n is_latest: true,\n last_modified: \"\",\n legal_hold_status: \"\",\n name: \"\",\n retention_mode: \"\",\n retention_until_date: \"\",\n size: \"0\",\n tags: {},\n version_id: null,\n};\n\nconst ObjectDetails = ({\n classes,\n routesList,\n downloadingFiles,\n removeRouteLevel,\n setErrorSnackMessage,\n setSnackBarMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n}: IObjectDetailsProps) => {\n const [loadObjectData, setLoadObjectData] = useState(true);\n const [shareFileModalOpen, setShareFileModalOpen] = useState(false);\n const [retentionModalOpen, setRetentionModalOpen] = useState(false);\n const [tagModalOpen, setTagModalOpen] = useState(false);\n const [deleteTagModalOpen, setDeleteTagModalOpen] = useState(false);\n const [selectedTag, setSelectedTag] = useState([\"\", \"\"]);\n const [legalholdOpen, setLegalholdOpen] = useState(false);\n const [actualInfo, setActualInfo] = useState(emptyFile);\n const [versions, setVersions] = useState([]);\n const [filterVersion, setFilterVersion] = useState(\"\");\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n const currentItem = routesList[routesList.length - 1];\n const allPathData = currentItem.route.split(\"/\");\n const objectName = allPathData[allPathData.length - 1];\n const bucketName = allPathData[2];\n const pathInBucket = allPathData.slice(3).join(\"/\");\n\n useEffect(() => {\n if (loadObjectData) {\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${pathInBucket}&with_versions=true`\n )\n .then((res: IFileInfo[]) => {\n const result = get(res, \"objects\", []);\n setActualInfo(\n result.find((el: IFileInfo) => el.is_latest) || emptyFile\n );\n setVersions(result.filter((el: IFileInfo) => !el.is_latest));\n setLoadObjectData(false);\n })\n .catch((error) => {\n setErrorSnackMessage(error);\n setLoadObjectData(false);\n });\n }\n }, [loadObjectData, bucketName, pathInBucket, setErrorSnackMessage]);\n\n let tagKeys: string[] = [];\n\n if (actualInfo.tags) {\n tagKeys = Object.keys(actualInfo.tags);\n }\n\n const openRetentionModal = () => {\n setRetentionModalOpen(true);\n };\n\n const closeRetentionModal = (updateInfo: boolean) => {\n setRetentionModalOpen(false);\n if (updateInfo) {\n setLoadObjectData(true);\n }\n };\n\n const shareObject = () => {\n setShareFileModalOpen(true);\n };\n\n const closeShareModal = () => {\n setShareFileModalOpen(false);\n };\n\n const deleteTag = (tagKey: string, tagLabel: string) => {\n setSelectedTag([tagKey, tagLabel]);\n setDeleteTagModalOpen(true);\n };\n\n const removeDownloadAnimation = (path: string) => {\n fileDownloadStarted(path);\n };\n\n const downloadObject = (object: IFileInfo, includeVersion?: boolean) => {\n fileIsBeingPrepared(\n `${bucketName}/${object.name}${\n includeVersion ? `-${object.version_id}` : \"\"\n }`\n );\n if (object.size && parseInt(object.size) > 104857600) {\n // If file is bigger than 100MB we show a notification\n setSnackBarMessage(\n \"Download process started, it may take a few moments to complete\"\n );\n }\n download(\n bucketName,\n pathInBucket,\n object.version_id,\n removeDownloadAnimation,\n includeVersion\n );\n };\n\n const tableActions = [\n { type: \"share\", onClick: shareObject, sendOnlyId: true },\n {\n type: \"download\",\n onClick: (item: IFileInfo) => {\n downloadObject(item, true);\n },\n showLoaderFunction: (version: string) => {\n return downloadingFiles.includes(\n `${bucketName}/${objectName}-${version}`\n );\n },\n },\n ];\n\n const filteredRecords = versions.filter((version) => {\n if (version.version_id) {\n return version.version_id.includes(filterVersion);\n }\n return false;\n });\n\n const displayParsedDate = (date: string) => {\n return {date};\n };\n\n const closeDeleteModal = (redirectBack: boolean) => {\n setDeleteOpen(false);\n\n if (redirectBack) {\n const newPath = allPathData.slice(0, -1).join(\"/\");\n\n removeRouteLevel(newPath);\n history.push(newPath);\n }\n };\n\n const closeAddTagModal = (reloadObjectData: boolean) => {\n setTagModalOpen(false);\n\n if (reloadObjectData) {\n setLoadObjectData(true);\n }\n };\n\n const closeLegalholdModal = (reload: boolean) => {\n setLegalholdOpen(false);\n\n if (reload) {\n setLoadObjectData(true);\n }\n };\n\n const closeDeleteTagModal = (reloadObjectData: boolean) => {\n setDeleteTagModalOpen(false);\n\n if (reloadObjectData) {\n setLoadObjectData(true);\n }\n };\n\n return (\n \n \n {shareFileModalOpen && (\n \n )}\n {retentionModalOpen && (\n \n )}\n {deleteOpen && (\n \n )}\n {tagModalOpen && (\n \n )}\n {deleteTagModalOpen && (\n \n )}\n {legalholdOpen && (\n \n )}\n \n \n \n
\n \n
\n
\n
\n \n {actualInfo.version_id && actualInfo.version_id !== \"null\" && (\n \n
\n
\n \n Legal Hold:\n \n \n {actualInfo.legal_hold_status\n ? actualInfo.legal_hold_status.toLowerCase()\n : \"Off\"}\n \n
\n
\n {\n setLegalholdOpen(true);\n }}\n >\n \n \n
\n
\n
\n
\n \n Retention:\n \n \n {actualInfo.retention_mode\n ? actualInfo.retention_mode.toLowerCase()\n : \"Undefined\"}\n \n
\n
\n {\n openRetentionModal();\n }}\n >\n \n \n
\n
\n
\n )}\n
\n
File Actions:
\n
\n {\n shareObject();\n }}\n >\n \n \n
\n
\n {downloadingFiles.includes(\n `${bucketName}/${actualInfo.name}`\n ) ? (\n
\n \n
\n ) : (\n {\n downloadObject(actualInfo);\n }}\n >\n \n \n )}\n
\n
\n {\n setDeleteOpen(true);\n }}\n >\n \n \n
\n
\n
\n \n
Tags:
\n {tagKeys &&\n tagKeys.map((tagKey, index) => {\n const tag = get(actualInfo, `tags.${tagKey}`, \"\");\n if (tag !== \"\") {\n return (\n }\n onDelete={() => {\n deleteTag(tagKey, tag);\n }}\n />\n );\n }\n return null;\n })}\n }\n clickable\n size=\"small\"\n label=\"Add tag\"\n color=\"primary\"\n variant=\"outlined\"\n onClick={() => {\n setTagModalOpen(true);\n }}\n />\n
\n\n \n {actualInfo.version_id && actualInfo.version_id !== \"null\" && (\n {\n setFilterVersion(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n )}\n \n \n {actualInfo.version_id && actualInfo.version_id !== \"null\" && (\n \n )}\n \n
\n
\n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n downloadingFiles: get(objectBrowser, \"downloadingFiles\", []),\n});\n\nconst mapDispatchToProps = {\n removeRouteLevel,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n setSnackBarMessage,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(ObjectDetails));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport ListObjects from \"./ListObjects\";\nimport ObjectDetails from \"../ObjectDetails/ObjectDetails\";\nimport get from \"lodash/get\";\nimport { setAllRoutes } from \"../../../../ObjectBrowser/actions\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport { ObjectBrowserState, Route } from \"../../../../ObjectBrowser/reducers\";\n\ninterface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\ninterface ObjectRoutingProps {\n routesList: Route[];\n setAllRoutes: (path: string) => any;\n match: any;\n}\n\nconst ObjectRouting = ({\n routesList,\n match,\n setAllRoutes,\n}: ObjectRoutingProps) => {\n const currentItem = routesList[routesList.length - 1];\n\n useEffect(() => {\n const url = get(match, \"url\", \"/object-browser\");\n\n if (url !== routesList[routesList.length - 1].route) {\n setAllRoutes(url);\n }\n }, [match, routesList, setAllRoutes]);\n\n return currentItem.type === \"path\" ? (\n \n ) : (\n \n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n routesList: get(objectBrowser, \"routesList\", []),\n});\n\nconst mapDispatchToProps = {\n setAllRoutes,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withRouter(connector(ObjectRouting));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const planDetails = [\n {\n id: 0,\n title: \"Community\",\n price: \"Open Source\",\n capacityMin: \"\",\n },\n {\n id: 1,\n title: \"Standard\",\n price: \"$10/TB/month\",\n capacityMax: \"Up to 10PB. No additional charges for capacity over 10PB\",\n capacityMin: \"\",\n },\n {\n id: 2,\n title: \"Enterprise\",\n price: \"$20/TB/month\",\n capacityMax: \"Up to 5PB. No additional charges for capacity over 5PB\",\n capacityMin: \"\",\n },\n];\n\nexport const planItems = [\n {\n id: 0,\n field: \"License\",\n community: \"GNU AGPL v3\",\n communityDetail: \"\",\n standard: \"Commercial License\",\n standardDetail: \"\",\n enterprise: \"Commercial License\",\n enterpriseDetail: \"\",\n },\n {\n id: 1,\n field: \"Software Release\",\n community: \"Update to latest\",\n standard: \"1 Year Long Term Support\",\n enterprise: \"5 Years Long Term Support\",\n },\n {\n id: 2,\n field: \"SLA\",\n community: \"No SLA\",\n standard: \"<24 hours\",\n enterprise: \"<1 hour\",\n },\n {\n id: 3,\n field: \"Support\",\n community: \"Community:\",\n communityDetail: \"Public Slack Channel + Github Issues\",\n standard: \"24x7 L4 direct engineering\",\n standardDetail: \"Support via SUBNET\",\n enterprise: \"24x7 L4 direct engineering\",\n enterpriseDetail: \"Support via SUBNET\",\n },\n {\n id: 4,\n field: \"Security Updates & Critical Bugs\",\n community: \"Self Update\",\n standard: \"Guided Update\",\n enterprise: \"Guided Update\",\n },\n {\n id: 5,\n field: \"Panic Button\",\n community: \"N/A\",\n standard: \"1 per year\",\n enterprise: \"Unlimited\",\n },\n {\n id: 6,\n field: \"Annual Architecture Review\",\n community: \"N/A\",\n standard: \"Yes\",\n enterprise: \"Yes\",\n },\n {\n id: 7,\n field: \"Annual Performance Review\",\n community: \"N/A\",\n standard: \"Yes\",\n enterprise: \"Yes\",\n },\n {\n id: 8,\n field: \"Indemnification\",\n community: \"N/A\",\n standard: \"N/A\",\n enterprise: \"Yes\",\n },\n {\n id: 9,\n field: \"Security + Policy Review\",\n community: \"N/A\",\n standard: \"N/A\",\n enterprise: \"Yes\",\n },\n];\n\nexport const planButtons = [\n {\n id: 0,\n text: \"Join Slack\",\n text2: \"\",\n link: \"https://slack.min.io\",\n plan: \"community\",\n },\n {\n id: 1,\n text: \"Subscribe\",\n text2: \"Upgrade\",\n link: \"https://subnet.min.io/subscription\",\n plan: \"standard\",\n },\n {\n id: 2,\n text: \"Subscribe\",\n text2: \"Upgrade\",\n link: \"https://subnet.min.io/subscription\",\n plan: \"enterprise\",\n },\n];\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress, TextField } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Button from \"@material-ui/core/Button\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { SubscriptionActivateRequest } from \"../Buckets/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport api from \"../../../common/api\";\nimport PersonOutlineOutlinedIcon from \"@material-ui/icons/PersonOutlineOutlined\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n errorBlock: {\n color: \"red\",\n },\n subnetLicenseKey: {\n padding: \"10px 10px 10px 0px\",\n borderRight: \"1px solid rgba(0, 0, 0, 0.12)\",\n opacity: 0.5,\n \"&:hover\": { opacity: 1 },\n },\n subnetLoginForm: {\n padding: \"10px 0px 10px 10px\",\n opacity: 0.5,\n \"&:hover\": { opacity: 1 },\n },\n licenseKeyField: {},\n pageTitle: {\n marginBottom: 20,\n },\n button: {\n textTransform: \"none\",\n fontSize: 15,\n fontWeight: 700,\n background:\n \"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box\",\n color: \"#fff\",\n },\n buttonSignup: {\n textTransform: \"none\",\n fontSize: 15,\n fontWeight: 700,\n marginLeft: 15,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IActivationModal {\n classes: any;\n open: boolean;\n closeModal: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ActivationModal = ({\n classes,\n open,\n closeModal,\n setModalErrorSnackMessage,\n}: IActivationModal) => {\n const [license, setLicense] = useState(\"\");\n const [subnetPassword, setSubnetPassword] = useState(\"\");\n const [subnetEmail, setSubnetEmail] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const activateProduct = () => {\n if (loading) {\n return;\n }\n setLoading(true);\n let request: SubscriptionActivateRequest = {\n license: license,\n email: subnetEmail,\n password: subnetPassword,\n };\n api\n .invoke(\"POST\", \"/api/v1/subscription/validate\", request)\n .then(() => {\n setLoading(false);\n setLicense(\"\");\n setSubnetPassword(\"\");\n setSubnetEmail(\"\");\n closeModal();\n })\n .catch((err) => {\n setLoading(false);\n setLicense(\"\");\n setSubnetPassword(\"\");\n setSubnetEmail(\"\");\n setModalErrorSnackMessage(err);\n });\n };\n\n return open ? (\n {\n setLicense(\"\");\n setSubnetPassword(\"\");\n setSubnetEmail(\"\");\n closeModal();\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n \n \n \n Activate SUBNET License\n \n \n \n \n \n Enter your license key here\n \n \n ) =>\n setLicense(event.target.value)\n }\n fullWidth\n className={classes.licenseKeyField}\n variant=\"outlined\"\n />\n
\n
\n activateProduct()}\n disabled={loading || license.trim().length === 0}\n >\n Activate\n \n
\n \n \n \n }\n id=\"subnet-email\"\n name=\"subnet-email\"\n onChange={(event: React.ChangeEvent) => {\n setSubnetEmail(event.target.value);\n }}\n placeholder=\"email\"\n label=\"\"\n type=\"text\"\n value={subnetEmail}\n />\n \n \n }\n id=\"subnet-password\"\n name=\"subnet-password\"\n onChange={(event: React.ChangeEvent) => {\n setSubnetPassword(event.target.value);\n }}\n placeholder=\"password\"\n label=\"\"\n type=\"password\"\n value={subnetPassword}\n />\n \n \n activateProduct()}\n disabled={\n loading ||\n subnetEmail.trim().length === 0 ||\n subnetPassword.trim().length === 0\n }\n variant=\"contained\"\n >\n Activate\n \n {\n e.preventDefault();\n window.open(\"https://min.io/pricing\", \"_blank\");\n }}\n variant=\"outlined\"\n >\n Sign Up\n \n \n \n \n
\n {loading && (\n \n \n \n )}\n \n ) : null;\n};\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(ActivationModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport clsx from \"clsx\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Button from \"@material-ui/core/Button\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { planDetails, planItems, planButtons } from \"./utils\";\nimport ActivationModal from \"./ActivationModal\";\nimport api from \"../../../common/api\";\nimport { LicenseInfo } from \"./types\";\nimport { CircularProgress, LinearProgress } from \"@material-ui/core\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { niceBytes } from \"../../../common/utils\";\nimport Moment from \"react-moment\";\n\nconst mapState = (state: AppState) => ({\n operatorMode: state.system.operatorMode,\n});\n\nconst connector = connect(mapState, null);\n\nconst styles = (theme: Theme) =>\n createStyles({\n pageTitle: {\n fontSize: 18,\n marginBottom: 20,\n },\n paper: {\n padding: \"20px 52px 20px 28px\",\n },\n licenseContainer: {\n position: \"relative\",\n padding: \"20px 52px 0px 28px\",\n background: \"#032F51\",\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: \"#FFF\",\n marginBottom: 67,\n },\n \"& a\": {\n textDecoration: \"none\",\n },\n \"& h3\": {\n color: \"#FFFFFF\",\n marginBottom: \"30px\",\n fontWeight: \"bold\",\n },\n \"& h6\": {\n color: \"#FFFFFF !important\",\n },\n },\n tableContainer: {\n marginLeft: 28,\n },\n detailsContainer: {\n textAlign: \"center\",\n paddingBottom: 12,\n borderRadius: \"3px 3px 0 0\",\n marginLeft: 8,\n maxWidth: \"calc(25% - 8px)\",\n },\n detailsContainerBorder: {\n border: \"1px solid #e2e2e2\",\n borderBottom: 0,\n borderRadius: \"4px 4px 0px 0px\",\n },\n detailsContainerBorderHighlighted: {\n border: \"1px solid #B5B5B5\",\n borderBottom: 0,\n },\n detailsTitle: {\n fontSize: 19,\n fontWeight: 700,\n marginBottom: 26,\n paddingTop: 18,\n },\n activePlanHeader: {\n fontWeight: 700,\n background: \"#D5DDE5\",\n borderRadius: \"3px 3px 0px 0px\",\n color: \"#121212\",\n padding: 8,\n borderTop: \"1px solid #D5DDE5\",\n marginTop: -2,\n },\n planHeader: {\n background: \"#FFFFFF\",\n borderRadius: \"3px 3px 0px 0px\",\n padding: 8,\n borderTop: \"1px solid #D5DDE5\",\n },\n detailsPrice: {\n fontSize: 13,\n fontWeight: 700,\n marginBottom: 8,\n },\n detailsCapacityMax: {\n minHeight: 28,\n fontSize: 10,\n fontWeight: 700,\n marginBottom: 12,\n padding: \"0% 15%\",\n },\n detailsCapacityMin: {\n fontSize: 10,\n },\n itemContainer: {\n height: 36,\n },\n itemContainerDetail: {\n height: 48,\n },\n item: {\n height: \"100%\",\n borderLeft: \"1px solid #e2e2e2\",\n borderRight: \"1px solid #e2e2e2\",\n textAlign: \"center\",\n fontSize: 10,\n fontWeight: 700,\n display: \"flex\",\n alignItems: \"center\",\n alignContent: \"center\",\n marginLeft: 8,\n maxWidth: \"calc(25% - 8px)\",\n borderTop: \"1px solid #e5e5e5\",\n },\n itemFirst: {\n borderLeft: 0,\n borderRight: 0,\n },\n itemHighlighted: {\n borderLeft: \"1px solid #B5B5B5\",\n borderRight: \"1px solid #B5B5B5\",\n },\n field: {\n textAlign: \"left\",\n fontWeight: 400,\n fontSize: 12,\n },\n checkIcon: {\n height: 12,\n color:\n \"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box\",\n },\n buttonContainer: {\n paddingTop: 8,\n paddingBottom: 24,\n height: \"100%\",\n display: \"flex\",\n justifyContent: \"center\",\n borderRadius: \"0 0 3px 3px\",\n border: \"1px solid #e2e2e2\",\n borderTop: 0,\n marginLeft: 8,\n maxWidth: \"calc(25% - 8px)\",\n },\n buttonContainerBlank: {\n border: 0,\n },\n buttonContainerHighlighted: {\n border: \"1px solid #B5B5B5\",\n borderTop: 0,\n },\n button: {\n textTransform: \"none\",\n fontSize: 15,\n fontWeight: 700,\n },\n licenseButton: {\n float: \"right\",\n marginTop: 25,\n marginRight: 25,\n },\n openSourcePolicy: {\n color: \"#1C5A8D\",\n fontWeight: \"bold\",\n },\n activateLink: {\n color: \"#1C5A8D\",\n fontWeight: \"bold\",\n clear: \"both\",\n background: \"none\",\n border: \"none\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n },\n subnetRefreshLicenseLink: {\n color: \"#1C5A8D\",\n fontWeight: \"bold\",\n clear: \"both\",\n background: \"none\",\n border: \"none\",\n textDecoration: \"underline\",\n cursor: \"pointer\",\n fontSize: 13,\n },\n fullWidth: {\n width: \"100%\",\n height: \"100%\",\n },\n midWidth: {\n width: \"70%\",\n float: \"left\",\n height: \"100%\",\n },\n smallWidth: {\n width: \"30%\",\n float: \"right\",\n height: \"100%\",\n borderRadius: \"0px 3px 0px 0px !important\",\n },\n licenseInfo: { color: \"#FFFFFF\", position: \"relative\" },\n licenseInfoTitle: {\n textTransform: \"none\",\n color: \"#BFBFBF\",\n fontSize: 11,\n },\n licenseInfoValue: {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n licenseDescription: {\n background: \"#032F51\",\n padding: \"30px 30px\",\n borderTop: \"1px solid #e2e5e4\",\n borderLeft: \"1px solid #e2e5e4\",\n borderRight: \"1px solid #e2e5e4\",\n bottom: 0,\n left: \"5%\",\n right: \"5%\",\n position: \"absolute\",\n },\n currentPlanBG: {\n background: \"#022A4A 0% 0% no-repeat padding-box\",\n color: \"#FFFFFF\",\n borderTop: \"1px solid #52687d\",\n },\n currentPlanButton: {\n background: \"#FFFFFF\",\n color: \"#022A4A\",\n \"&:hover\": {\n background: \"#FFFFFF\",\n },\n },\n planItemsPadding: {\n padding: \"23px 33px\",\n },\n subnetSubTitle: {\n fontSize: 12,\n },\n verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n loadingLoginStrategy: {\n textAlign: \"center\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ILicenseProps {\n classes: any;\n operatorMode: boolean;\n}\n\nconst License = ({ classes, operatorMode }: ILicenseProps) => {\n const closeModalAndFetchLicenseInfo = () => {\n setActivateProductModal(false);\n fetchLicenseInfo();\n };\n const fetchLicenseInfo = () => {\n setLoadingLicenseInfo(true);\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: LicenseInfo) => {\n if (res) {\n if (res.plan === \"STANDARD\") {\n setCurrentPlanID(1);\n } else if (res.plan === \"ENTERPRISE\") {\n setCurrentPlanID(2);\n } else {\n setCurrentPlanID(1);\n }\n setLicenseInfo(res);\n }\n setLoadingLicenseInfo(false);\n })\n .catch((err: any) => {\n setLoadingLicenseInfo(false);\n });\n };\n const refreshLicense = () => {\n setLoadingRefreshLicense(true);\n api\n .invoke(\"POST\", `/api/v1/subscription/refresh`, {})\n .then((res: LicenseInfo) => {\n if (res) {\n if (res.plan === \"STANDARD\") {\n setCurrentPlanID(1);\n } else if (res.plan === \"ENTERPRISE\") {\n setCurrentPlanID(2);\n } else {\n setCurrentPlanID(1);\n }\n setLicenseInfo(res);\n }\n setLoadingRefreshLicense(false);\n })\n .catch((err: any) => {\n setLoadingRefreshLicense(false);\n });\n };\n\n const [activateProductModal, setActivateProductModal] = useState(\n false\n );\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [currentPlanID, setCurrentPlanID] = useState(0);\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingRefreshLicense, setLoadingRefreshLicense] = useState(\n false\n );\n\n useEffect(() => {\n fetchLicenseInfo();\n }, []);\n\n if (loadingLicenseInfo) {\n return (\n \n \n \n );\n }\n return (\n \n \n \n \n \n \n {licenseInfo ? (\n \n \n \n \n License\n \n \n Commercial License\n \n \n Organization\n \n \n {licenseInfo.organization}\n \n \n Registered Capacity\n \n \n {niceBytes(\n (licenseInfo.storage_capacity * 1099511627776) // 1 Terabyte = 1099511627776 Bytes\n .toString(10)\n )}\n \n \n Expiry Date\n \n \n \n {licenseInfo.expires_at}\n \n \n \n \n \n Subscription Plan\n \n \n {licenseInfo.plan}\n \n \n Requester\n \n \n {licenseInfo.email}\n \n \n \n \n \n ) : (\n \n \"agpl\"\n \n GNU Affero General Public License\n \n \n
\n Version 3\n \n The GNU Affero General Public License is a free,\n copyleft license for software and other kinds of works,\n specifically designed to ensure cooperation with the\n Community in the case of network server software.\n \n
\n \n
\n )}\n \n \n {licenseInfo ? (\n \n {\" \"}\n \n Login to MinIO SUBNET !\n \n \n It combines a commercial license with a support experience\n unlike any other.\n \n
\n \n Login to SUBNET\n \n {operatorMode && (\n \n {\" \"}\n
\n
\n {\n e.preventDefault();\n refreshLicense();\n }}\n >\n Refresh Licence\n \n {loadingRefreshLicense && (\n \n )}\n
\n )}\n
\n ) : (\n \n \n Choosing between GNU AGPL v3 and Commercial License\n \n \n If you are building proprietary applications, you may want\n to choose the commercial license included as part of the\n Standard and Enterprise subscription plans. Applications\n must otherwise comply with all the GNU AGPLv3 License &\n Trademark obligations. Follow the links below to learn more\n about the compliance policy.\n \n
\n \n Open Source Policy Compliance\n \n
\n
\n \n Trademark Policy\n \n
\n )}\n
\n
\n \n \n \n {operatorMode ? (\n closeModalAndFetchLicenseInfo()}\n />\n ) : null}\n \n \n \n {planDetails.map((details: any) => {\n let currentPlan =\n (!licenseInfo && details.title === \"Community\") ||\n (licenseInfo &&\n licenseInfo.plan.toLowerCase() ===\n details.title.toLowerCase());\n return (\n \n \n {currentPlan ? \"Current Plan\" : \"\\u00A0\"}\n \n \n {details.title}\n \n \n {details.price}\n \n \n {details.capacityMax || \"\"}\n \n \n );\n })}\n \n {planItems.map((item: any) => {\n return (\n \n \n {item.field}\n \n \n \n {item.community === \"N/A\" ? (\n \"\"\n ) : item.community === \"Yes\" ? (\n \n ) : (\n item.community\n )}\n \n {item.communityDetail !== undefined && (\n \n {item.communityDetail}\n \n )}\n
\n \n \n {item.standard === \"N/A\" ? (\n \"\"\n ) : item.standard === \"Yes\" ? (\n \n ) : (\n item.standard\n )}\n \n \n \n \n {item.enterprise === \"N/A\" ? (\n \"\"\n ) : item.enterprise === \"Yes\" ? (\n \n ) : (\n item.enterprise\n )}\n \n \n \n );\n })}\n \n \n {planButtons.map((button: any, index: any) => {\n return (\n \n \n {\n e.preventDefault();\n window.open(button.link, \"_blank\");\n }}\n >\n {currentPlanID !== index && index > 0\n ? button.text2\n : button.text}\n \n \n {operatorMode &&\n button.text === \"Subscribe\" &&\n !(\n licenseInfo &&\n licenseInfo.plan.toLowerCase() ===\n button.plan.toLowerCase()\n ) && (\n \n {\n e.preventDefault();\n setActivateProductModal(true);\n }}\n >\n Activate\n \n \n )}\n \n );\n })}\n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default connector(withStyles(styles)(License));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { TraceMessage } from \"./types\";\n\nexport const TRACE_MESSAGE_RECEIVED = \"TRACE_MESSAGE_RECEIVED\";\nexport const TRACE_RESET_MESSAGES = \"TRACE_RESET_MESSAGES\";\n\ninterface TraceMessageReceivedAction {\n type: typeof TRACE_MESSAGE_RECEIVED;\n message: TraceMessage;\n}\n\ninterface TraceResetMessagesAction {\n type: typeof TRACE_RESET_MESSAGES;\n}\n\nexport type TraceActionTypes =\n | TraceMessageReceivedAction\n | TraceResetMessagesAction;\n\nexport function traceMessageReceived(message: TraceMessage) {\n return {\n type: TRACE_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function traceResetMessages() {\n return {\n type: TRACE_RESET_MESSAGES,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\n// Close codes for websockets defined in RFC 6455\nexport const WSCloseNormalClosure = 1000;\nexport const WSCloseCloseGoingAway = 1001;\nexport const WSCloseAbnormalClosure = 1006;\nexport const WSClosePolicyViolation = 1008;\nexport const WSCloseInternalServerErr = 1011;\n\nexport const wsProtocol = (protocol: string): string => {\n let wsProtocol = \"ws\";\n if (protocol === \"https:\") {\n wsProtocol = \"wss\";\n }\n return wsProtocol;\n};\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect } from \"react\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { traceMessageReceived, traceResetMessages } from \"./actions\";\nimport { TraceMessage } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { niceBytes, timeFromDate } from \"../../../common/utils\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { Grid } from \"@material-ui/core\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport moment from \"moment/moment\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logList: {\n background: \"white\",\n height: \"400px\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4px\",\n padding: \"0px\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0px\",\n padding: \"0px\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n sizeItem: {\n width: 150,\n },\n timeItem: {\n width: 100,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ITrace {\n classes: any;\n traceMessageReceived: typeof traceMessageReceived;\n traceResetMessages: typeof traceResetMessages;\n messages: TraceMessage[];\n namespace: string;\n tenant: string;\n}\n\nconst Trace = ({\n classes,\n traceMessageReceived,\n traceResetMessages,\n messages,\n}: ITrace) => {\n useEffect(() => {\n traceResetMessages();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n const c = new W3CWebSocket(`${wsProt}://${url.hostname}:${port}/ws/trace`);\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: TraceMessage = JSON.parse(message.data.toString());\n m.ptime = moment(m.time, \"YYYY-MM-DD HH:mm:s.SSSS +0000 UTC\").toDate();\n m.key = Math.random();\n traceMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n };\n return () => {\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n };\n }\n }, [traceMessageReceived, traceResetMessages]);\n\n return (\n \n \n \n \n {\n const timeParse = new Date(time);\n return timeFromDate(timeParse);\n },\n globalClass: classes.timeItem,\n },\n { label: \"Name\", elementKey: \"api\" },\n {\n label: \"Status\",\n elementKey: \"\",\n renderFunction: (fullElement: TraceMessage) =>\n `${fullElement.statusCode} ${fullElement.statusMsg}`,\n renderFullObject: true,\n },\n {\n label: \"Location\",\n elementKey: \"configuration_id\",\n renderFunction: (fullElement: TraceMessage) =>\n `${fullElement.host} ${fullElement.client}`,\n renderFullObject: true,\n },\n {\n label: \"Load Time\",\n elementKey: \"callStats.duration\",\n globalClass: classes.timeItem,\n },\n {\n label: \"Upload\",\n elementKey: \"callStats.rx\",\n renderFunction: niceBytes,\n globalClass: classes.sizeItem,\n },\n {\n label: \"Download\",\n elementKey: \"callStats.tx\",\n renderFunction: niceBytes,\n globalClass: classes.sizeItem,\n },\n ]}\n isLoading={false}\n records={messages}\n entityName=\"Traces\"\n idField=\"api\"\n customEmptyMessage=\"There are no traced Elements yet\"\n autoScrollToBottom\n />\n \n \n \n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.trace.messages,\n});\n\nconst connector = connect(mapState, {\n traceMessageReceived: traceMessageReceived,\n traceResetMessages: traceResetMessages,\n});\n\nexport default connector(withStyles(styles)(Trace));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { LogMessage } from \"./types\";\n\nexport const LOG_MESSAGE_RECEIVED = \"LOG_MESSAGE_RECEIVED\";\nexport const LOG_RESET_MESSAGES = \"LOG_RESET_MESSAGES\";\n\ninterface LogMessageReceivedAction {\n type: typeof LOG_MESSAGE_RECEIVED;\n message: LogMessage;\n}\n\ninterface LogResetMessagesAction {\n type: typeof LOG_RESET_MESSAGES;\n}\n\nexport type LogActionTypes = LogMessageReceivedAction | LogResetMessagesAction;\n\nexport function logMessageReceived(message: LogMessage) {\n return {\n type: LOG_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function logResetMessages() {\n return {\n type: LOG_RESET_MESSAGES,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { Fragment, useState, useEffect } from \"react\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { connect } from \"react-redux\";\nimport { Grid } from \"@material-ui/core\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport moment from \"moment/moment\";\nimport { AppState } from \"../../../../store\";\nimport { logMessageReceived, logResetMessages } from \"../actions\";\nimport { LogMessage } from \"../types\";\nimport { timeFromDate } from \"../../../../common/utils\";\nimport { wsProtocol } from \"../../../../utils/wsUtils\";\nimport {\n actionsTray,\n logsCommon,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logList: {\n background: \"#fff\",\n minHeight: 400,\n height: \"calc(100vh - 304px)\",\n overflow: \"auto\",\n fontSize: 13,\n padding: \"25px 45px 0\",\n border: \"1px solid #EAEDEE\",\n borderRadius: 4,\n },\n tab: {\n paddingLeft: 25,\n },\n logerror: {\n color: \"#A52A2A\",\n },\n logerror_tab: {\n color: \"#A52A2A\",\n paddingLeft: 25,\n },\n ansidefault: {\n color: \"#000\",\n },\n highlight: {\n \"& span\": {\n backgroundColor: \"#082F5238\",\n },\n },\n ...actionsTray,\n ...searchField,\n ...logsCommon,\n });\n\ninterface ILogs {\n classes: any;\n logMessageReceived: typeof logMessageReceived;\n logResetMessages: typeof logResetMessages;\n messages: LogMessage[];\n}\n\nconst ErrorLogs = ({\n classes,\n logMessageReceived,\n logResetMessages,\n messages,\n}: ILogs) => {\n const [highlight, setHighlight] = useState(\"\");\n\n useEffect(() => {\n logResetMessages();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/console`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n // console.log(message.data.toString())\n // FORMAT: 00:35:17 UTC 01/01/2021\n let m: LogMessage = JSON.parse(message.data.toString());\n m.time = moment(m.time, \"HH:mm:s UTC MM/DD/YYYY\").toDate();\n m.key = Math.random();\n logMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n };\n return () => {\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n };\n }\n }, [logMessageReceived, logResetMessages]);\n\n const renderError = (logElement: LogMessage) => {\n let errorElems = [];\n if (logElement.error !== null && logElement.error !== undefined) {\n if (logElement.api && logElement.api.name) {\n const errorText = `API: ${logElement.api.name}`;\n\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n\n errorElems.push(\n \n
\n {errorText}\n
\n );\n }\n if (logElement.time) {\n const errorText = `Time: ${timeFromDate(logElement.time)}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n
\n );\n }\n if (logElement.deploymentid) {\n const errorText = `DeploymentID: ${logElement.deploymentid}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.requestID) {\n const errorText = `RequestID: ${logElement.requestID}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.remotehost) {\n const errorText = `RemoteHost: ${logElement.remotehost}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.host) {\n const errorText = `Host: ${logElement.host}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.userAgent) {\n const errorText = `UserAgent: ${logElement.userAgent}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.error.message) {\n const errorText = `Error: ${logElement.error.message}`;\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n if (logElement.error.source) {\n // for all sources add padding\n for (let s in logElement.error.source) {\n const errorText = logElement.error.source[s];\n const highlightedLine =\n highlight !== \"\"\n ? errorText.toLowerCase().includes(highlight.toLowerCase())\n : false;\n errorElems.push(\n \n {errorText}\n \n );\n }\n }\n }\n return errorElems;\n };\n\n const renderLog = (logElement: LogMessage) => {\n let logMessage = logElement.ConsoleMsg;\n // remove any non ascii characters, exclude any control codes\n logMessage = logMessage.replace(/([^\\x20-\\x7F])/g, \"\");\n\n // regex for terminal colors like e.g. `[31;4m `\n const tColorRegex = /((\\[[0-9;]+m))/g;\n\n // get substring if there was a match for to split what\n // is going to be colored and what not, here we add color\n // only to the first match.\n let substr = logMessage.replace(tColorRegex, \"\");\n\n // in case highlight is set, we select the line that contains the requested string\n let highlightedLine =\n highlight !== \"\"\n ? logMessage.toLowerCase().includes(highlight.toLowerCase())\n : false;\n\n // if starts with multiple spaces add padding\n if (substr.startsWith(\" \")) {\n return (\n \n {substr}\n \n );\n } else if (logElement.error !== null && logElement.error !== undefined) {\n // list error message and all sources and error elems\n return renderError(logElement);\n } else {\n // for all remaining set default class\n return (\n \n {substr}\n \n );\n }\n };\n\n const renderLines = messages.map((m) => {\n return renderLog(m);\n });\n\n return (\n \n \n \n {\n setHighlight(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n startAdornment: (\n \n \n \n ),\n }}\n />\n \n \n
\n
\n \n
{renderLines}
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.logs.messages,\n});\n\nconst connector = connect(mapState, {\n logMessageReceived: logMessageReceived,\n logResetMessages: logResetMessages,\n});\n\nexport default withStyles(styles)(connector(ErrorLogs));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport { searchField } from \"../common/styleLibrary\";\n\ninterface IFilterInputWrapper {\n classes: any;\n value: string;\n onChange: (txtVar: string) => any;\n label: string;\n placeholder?: string;\n id: string;\n name: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n searchField: {\n ...searchField.searchField,\n height: 30,\n padding: 0,\n \"& input\": {\n padding: \"0 12px\",\n height: 28,\n fontSize: 12,\n fontWeight: 600,\n color: \"#393939\",\n },\n \"&.isDisabled\": {\n \"&:hover\": {\n borderColor: \"#EAEDEE\",\n },\n },\n \"& input.Mui-disabled\": {\n backgroundColor: \"#EAEAEA\",\n },\n },\n labelStyle: {\n color: \"#393939\",\n fontSize: 12,\n marginBottom: 4,\n },\n buttonKit: {\n display: \"flex\",\n alignItems: \"center\",\n },\n toggleButton: {\n marginRight: 10,\n },\n fieldContainer: {\n flexGrow: 1,\n margin: \"0 15px\",\n },\n });\n\nconst FilterInputWrapper = ({\n classes,\n label,\n onChange,\n value,\n placeholder = \"\",\n id,\n name,\n}: IFilterInputWrapper) => {\n return (\n \n
\n
{label}
\n
\n {\n onChange(val.target.value);\n }}\n InputProps={{\n disableUnderline: true,\n }}\n className={classes.searchField}\n value={value}\n />\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(FilterInputWrapper);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Grid } from \"@material-ui/core\";\nimport { ArrowDropUp } from \"@material-ui/icons\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport {\n actionsTray,\n containerForHeader,\n logsCommon,\n searchField,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { IReqInfoSearchResults, ISearchResponse } from \"./types\";\nimport { niceBytes, nsToSeconds } from \"../../../../common/utils\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport FilterInputWrapper from \"../../Common/FormComponents/FilterInputWrapper/FilterInputWrapper\";\nimport DateTimePickerWrapper from \"../../Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper\";\n\ninterface ILogSearchProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n inputBar: {\n flexGrow: 1,\n marginLeft: 15,\n },\n advancedLabel: {\n display: \"flex\",\n alignItems: \"center\",\n color: \"#091C42\",\n border: 0,\n backgroundColor: \"transparent\",\n cursor: \"pointer\",\n \"&:focus, &:active\": {\n outline: \"none\",\n },\n },\n advancedLabelContainer: {\n marginTop: 10,\n },\n getInformationContainer: {\n textAlign: \"right\",\n },\n orderButton: {\n width: 93,\n },\n recordsLabel: {\n alignSelf: \"center\",\n marginLeft: 15,\n },\n blockCollapsed: {\n height: 0,\n overflowY: \"hidden\",\n transitionDuration: \"0.3s\",\n },\n filterOpen: {\n height: 200,\n marginBottom: 12,\n },\n endLineAction: {\n marginBottom: 15,\n },\n filtersContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n marginBottom: 12,\n },\n innerContainer: {\n backgroundColor: \"#fff\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n padding: 10,\n marginBottom: 15,\n },\n noticeLabel: {\n marginLeft: 15,\n marginBottom: 15,\n fontSize: 12,\n color: \"#9C9C9C\",\n },\n\n tableFOpen: {\n height: \"calc(100vh - 561px)\",\n },\n tableFClosed: {\n height: \"calc(100vh - 349px)\",\n },\n \"@global\": {\n \".overrideMargin\": {\n marginLeft: 0,\n },\n },\n ...searchField,\n ...actionsTray,\n ...logsCommon,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst LogsSearchMain = ({ classes, setErrorSnackMessage }: ILogSearchProps) => {\n const [loading, setLoading] = useState(true);\n const [timeStart, setTimeStart] = useState(null);\n const [timeEnd, setTimeEnd] = useState(null);\n const [filterOpen, setFilterOpen] = useState(false);\n const [records, setRecords] = useState([]);\n const [bucket, setBucket] = useState(\"\");\n const [apiName, setApiName] = useState(\"\");\n const [userAgent, setUserAgent] = useState(\"\");\n const [object, setObject] = useState(\"\");\n const [requestID, setRequestID] = useState(\"\");\n const [responseStatus, setResponseStatus] = useState(\"\");\n const [sortOrder, setSortOrder] = useState<\"ASC\" | \"DESC\" | undefined>(\n \"DESC\"\n );\n const [columnsShown, setColumnsShown] = useState([\n \"time\",\n \"api_name\",\n \"bucket\",\n \"object\",\n \"remote_host\",\n \"request_id\",\n \"user_agent\",\n \"response_status\",\n ]);\n const [nextPage, setNextPage] = useState(0);\n const [alreadyFetching, setAlreadyFetching] = useState(false);\n\n let recordsResp: any = null;\n\n const fetchRecords = useCallback(() => {\n if (!alreadyFetching) {\n setAlreadyFetching(true);\n let queryParams = `${bucket !== \"\" ? `&fp=bucket:${bucket}` : \"\"}${\n object !== \"\" ? `&fp=object:${object}` : \"\"\n }${apiName !== \"\" ? `&fp=api_name:${apiName}` : \"\"}${\n requestID !== \"\" ? `&fp=request_id:${requestID}` : \"\"\n }${userAgent !== \"\" ? `&fp=user_agent:${userAgent}` : \"\"}${\n responseStatus !== \"\" ? `&fp=response_status:${responseStatus}` : \"\"\n }`;\n\n queryParams = queryParams.trim();\n\n if (queryParams.endsWith(\",\")) {\n queryParams = queryParams.slice(0, -1);\n }\n\n api\n .invoke(\n \"GET\",\n `/api/v1/logs/search?q=reqinfo${\n queryParams !== \"\" ? `${queryParams}` : \"\"\n }&pageSize=100&pageNo=${nextPage}&order=${\n sortOrder === \"DESC\" ? \"timeDesc\" : \"timeAsc\"\n }${\n timeStart !== null ? `&timeStart=${timeStart.toISOString()}` : \"\"\n }${timeEnd !== null ? `&timeEnd=${timeEnd.toISOString()}` : \"\"}`\n )\n .then((res: ISearchResponse) => {\n const fetchedResults = res.results || [];\n const newResultSet = [...records, ...fetchedResults];\n\n setLoading(false);\n setAlreadyFetching(false);\n setRecords(newResultSet);\n setNextPage(nextPage + 1);\n\n if (recordsResp !== null) {\n recordsResp();\n }\n })\n .catch((err: any) => {\n setLoading(false);\n setAlreadyFetching(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n bucket,\n object,\n apiName,\n requestID,\n userAgent,\n responseStatus,\n nextPage,\n sortOrder,\n timeStart,\n timeEnd,\n alreadyFetching,\n records,\n recordsResp,\n setErrorSnackMessage,\n ]);\n\n useEffect(() => {\n if (loading) {\n setRecords([]);\n fetchRecords();\n }\n }, [loading, sortOrder, fetchRecords]);\n\n const triggerLoad = () => {\n setNextPage(0);\n setLoading(true);\n };\n\n const selectColumn = (colName: string, active: boolean) => {\n let newArray = [...columnsShown];\n\n if (!active) {\n newArray = columnsShown.filter((element) => element !== colName);\n } else {\n if (!newArray.includes(colName)) {\n newArray.push(colName);\n }\n }\n setColumnsShown(newArray);\n };\n\n const sortChange = (sortData: any) => {\n const newSortDirection = get(sortData, \"sortDirection\", \"DESC\");\n setSortOrder(newSortDirection);\n setNextPage(0);\n setLoading(true);\n };\n\n const loadMoreRecords = (_: { startIndex: number; stopIndex: number }) => {\n fetchRecords();\n return new Promise((resolve) => {\n recordsResp = resolve;\n });\n };\n\n return (\n \n \n \n Start Time\n \n End Time\n \n \n \n \n
\n
\n Enable your preferred options to get filtered records.\n
\n You can use '*' to match any character, '.' to signify a single\n character or '\\' to scape an special character (E.g. mybucket-*)\n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n
\n \n
\n {\n setFilterOpen(!filterOpen);\n }}\n >\n Advanced Filters{\" \"}\n {filterOpen ? : }\n \n
\n \n Get Information\n \n \n \n (\n \n \n {element.response_status_code} ({element.response_status})\n \n \n ),\n renderFullObject: true,\n },\n {\n label: \"Request Content Length\",\n elementKey: \"request_content_length\",\n renderFunction: niceBytes,\n },\n {\n label: \"Response Content Length\",\n elementKey: \"response_content_length\",\n renderFunction: niceBytes,\n },\n {\n label: \"Time to Response NS\",\n elementKey: \"time_to_response_ns\",\n renderFunction: nsToSeconds,\n contentTextAlign: \"right\",\n },\n ]}\n isLoading={loading}\n records={records}\n entityName=\"Logs\"\n customEmptyMessage={\"There is no information with this criteria\"}\n idField=\"request_id\"\n columnsSelector\n columnsShown={columnsShown}\n onColumnChange={selectColumn}\n customPaperHeight={\n filterOpen ? classes.tableFOpen : classes.tableFClosed\n }\n sortConfig={{\n currentSort: \"time\",\n currentDirection: sortOrder,\n triggerSort: sortChange,\n }}\n infiniteScrollConfig={{\n recordsCount: 1000000,\n loadMoreRecords: loadMoreRecords,\n }}\n textSelectable\n />\n \n \n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(LogsSearchMain));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect } from \"react\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid, LinearProgress } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport Tab from \"@material-ui/core/Tab\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport ErrorLogs from \"./ErrorLogs/ErrorLogs\";\nimport LogsSearchMain from \"./LogSearch/LogsSearchMain\";\nimport api from \"../../../common/api\";\n\ninterface ILogsMainProps {\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst LogsMain = ({ classes }: ILogsMainProps) => {\n const [currentTab, setCurrentTab] = useState(0);\n const [loading, setLoading] = useState(true);\n const [showLogSearch, setShowLogSearch] = useState(false);\n\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/logs/search?q=reqinfo&pageSize=10&pageNo=0`)\n .then(() => {\n setShowLogSearch(true);\n setLoading(false);\n })\n .catch((err: any) => {\n setLoading(false);\n console.info(\"Log Search API not available.\");\n });\n }, [loading]);\n\n return (\n \n \n \n \n {!loading ? (\n \n \n All Logs\n \n , newValue: number) => {\n setCurrentTab(newValue);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n >\n \n {showLogSearch && }\n \n \n {currentTab === 0 && (\n \n \n \n )}\n {currentTab === 1 && showLogSearch && (\n \n \n \n )}\n \n \n ) : (\n \n )}\n \n \n \n );\n};\n\nexport default withStyles(styles)(LogsMain);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { HorizontalBar } from \"react-chartjs-2\";\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Grid, TextField, InputBase } from \"@material-ui/core\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport api from \"../../../common/api\";\nimport { FormControl, MenuItem, Select } from \"@material-ui/core\";\nimport { BucketList, Bucket } from \"../Watch/types\";\nimport { HealStatus, colorH } from \"./types\";\nimport { niceBytes } from \"../../../common/utils\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport CheckboxWrapper from \"../Common/FormComponents/CheckboxWrapper/CheckboxWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n watchList: {\n background: \"white\",\n maxHeight: \"400\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4\",\n padding: \"0\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0\",\n padding: \"0\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n graphContainer: {\n backgroundColor: \"#fff\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n padding: \"19px 38px\",\n },\n scanInfo: {\n marginTop: 20,\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n },\n scanData: {\n fontSize: 13,\n },\n inlineCheckboxes: {\n display: \"flex\",\n justifyContent: \"flex-start\",\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IHeal {\n classes: any;\n}\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n width: 450,\n lineHeight: \"50px\",\n marginRight: 15,\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n \"& .MuiSelect-select:focus\": {\n backgroundColor: \"transparent\",\n },\n },\n input: {\n height: 50,\n fontSize: 13,\n lineHeight: \"50px\",\n width: 450,\n },\n })\n)(InputBase);\n\nconst Heal = ({ classes }: IHeal) => {\n const [start, setStart] = useState(false);\n const [bucketName, setBucketName] = useState(\"\");\n const [bucketList, setBucketList] = useState([]);\n const [prefix, setPrefix] = useState(\"\");\n const [recursive, setRecursive] = useState(false);\n const [forceStart, setForceStart] = useState(false);\n const [forceStop, setForceStop] = useState(false);\n // healStatus states\n const [hStatus, setHStatus] = useState({\n beforeHeal: [0, 0, 0, 0],\n afterHeal: [0, 0, 0, 0],\n objectsHealed: 0,\n objectsScanned: 0,\n healDuration: 0,\n sizeScanned: \"\",\n });\n\n const fetchBucketList = () => {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n let buckets: Bucket[] = [];\n if (res.buckets !== null) {\n buckets = res.buckets;\n }\n setBucketList(buckets);\n })\n .catch((err: any) => {\n console.log(err);\n });\n };\n\n useEffect(() => {\n fetchBucketList();\n }, []);\n\n // forceStart and forceStop need to be mutually exclusive\n useEffect(() => {\n if (forceStart === true) {\n setForceStop(false);\n }\n }, [forceStart]);\n\n useEffect(() => {\n if (forceStop === true) {\n setForceStart(false);\n }\n }, [forceStop]);\n\n const colorHealthArr = (color: colorH) => {\n return [color.Green, color.Yellow, color.Red, color.Grey];\n };\n\n useEffect(() => {\n // begin watch if bucketName in bucketList and start pressed\n if (start) {\n // values stored here to update chart\n const cB: colorH = { Green: 0, Yellow: 0, Red: 0, Grey: 0 };\n const cA: colorH = { Green: 0, Yellow: 0, Red: 0, Grey: 0 };\n\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/heal/${bucketName}?prefix=${prefix}&recursive=${recursive}&force-start=${forceStart}&force-stop=${forceStop}`\n );\n\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: HealStatus = JSON.parse(message.data.toString());\n // Store percentage per health color\n for (const [key, value] of Object.entries(m.healthAfterCols)) {\n cA[key] = (value * 100) / m.itemsScanned;\n }\n for (const [key, value] of Object.entries(m.healthBeforeCols)) {\n cB[key] = (value * 100) / m.itemsScanned;\n }\n setHStatus({\n beforeHeal: colorHealthArr(cB),\n afterHeal: colorHealthArr(cA),\n objectsHealed: m.objectsHealed,\n objectsScanned: m.objectsScanned,\n healDuration: m.healDuration,\n sizeScanned: niceBytes(m.bytesScanned.toString()),\n });\n };\n c.onclose = () => {\n setStart(false);\n console.log(\"connection closed by server\");\n };\n return () => {\n // close websocket on useEffect cleanup\n c.close(1000);\n console.log(\"closing websockets\");\n };\n }\n }\n }, [start, bucketName, forceStart, forceStop, prefix, recursive]);\n\n let data = {\n labels: [\"Green\", \"Yellow\", \"Red\", \"Grey\"],\n datasets: [\n {\n label: \"After Healing\",\n data: hStatus.afterHeal,\n backgroundColor: \"rgba(0, 0, 255, 0.2)\",\n borderColor: \"rgba(54, 162, 235, 1)\",\n borderWidth: 1,\n },\n {\n label: \"Before Healing\",\n data: hStatus.beforeHeal,\n backgroundColor: \"rgba(153, 102, 255, 0.2)\",\n borderColor: \"rgba(153, 102, 255, 1)\",\n borderWidth: 1,\n },\n ],\n };\n const bucketNames = bucketList.map((bucketName) => ({\n label: bucketName.name,\n value: bucketName.name,\n }));\n return (\n \n \n \n \n \n \n {\n setBucketName(e.target.value as string);\n }}\n className={classes.searchField}\n input={}\n displayEmpty\n >\n \n Select Bucket\n \n {bucketNames.map((option) => (\n \n {option.label}\n \n ))}\n \n \n {\n setPrefix(e.target.value);\n }}\n />\n setStart(true)}\n >\n Start\n \n \n \n {\n setRecursive(e.target.checked);\n }}\n disabled={false}\n label=\"Recursive\"\n />\n {\n setForceStart(e.target.checked);\n }}\n disabled={false}\n label=\"Force Start\"\n />\n {\n setForceStop(e.target.checked);\n }}\n disabled={false}\n label=\"Force Stop\"\n />\n \n \n
\n
\n \n \n \n
\n Size scanned: {hStatus.sizeScanned}\n
\n
\n Objects healed: {hStatus.objectsHealed} /{\" \"}\n {hStatus.objectsScanned}\n
\n
\n Healing time: {hStatus.healDuration}s\n
\n
\n
\n
\n
\n
\n );\n};\n\nexport default withStyles(styles)(Heal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { EventInfo } from \"./types\";\n\nexport const WATCH_MESSAGE_RECEIVED = \"WATCH_MESSAGE_RECEIVED\";\nexport const WATCH_RESET_MESSAGES = \"WATCH_RESET_MESSAGES\";\n\ninterface WatchMessageReceivedAction {\n type: typeof WATCH_MESSAGE_RECEIVED;\n message: EventInfo;\n}\n\ninterface WatchResetMessagesAction {\n type: typeof WATCH_RESET_MESSAGES;\n}\n\nexport type WatchActionTypes =\n | WatchMessageReceivedAction\n | WatchResetMessagesAction;\n\nexport function watchMessageReceived(message: EventInfo) {\n return {\n type: WATCH_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function watchResetMessages() {\n return {\n type: WATCH_RESET_MESSAGES,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useEffect, useState } from \"react\";\nimport { Button, Grid, TextField, InputBase } from \"@material-ui/core\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { watchMessageReceived, watchResetMessages } from \"./actions\";\nimport { EventInfo, BucketList, Bucket } from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { niceBytes, timeFromDate } from \"../../../common/utils\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport api from \"../../../common/api\";\nimport { FormControl, MenuItem, Select } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n watchList: {\n background: \"white\",\n height: \"400px\",\n overflow: \"auto\",\n \"& ul\": {\n margin: \"4px\",\n padding: \"0px\",\n },\n \"& ul li\": {\n listStyle: \"none\",\n margin: \"0px\",\n padding: \"0px\",\n borderBottom: \"1px solid #dedede\",\n },\n },\n searchPrefix: {\n flexGrow: 1,\n marginLeft: 15,\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst SelectStyled = withStyles((theme: Theme) =>\n createStyles({\n root: {\n width: 450,\n lineHeight: \"50px\",\n \"label + &\": {\n marginTop: theme.spacing(3),\n },\n \"& .MuiSelect-select:focus\": {\n backgroundColor: \"transparent\",\n },\n },\n input: {\n height: 50,\n fontSize: 13,\n lineHeight: \"50px\",\n width: 450,\n },\n })\n)(InputBase);\n\ninterface IWatch {\n classes: any;\n watchMessageReceived: typeof watchMessageReceived;\n watchResetMessages: typeof watchResetMessages;\n messages: EventInfo[];\n}\n\nconst Watch = ({\n classes,\n watchMessageReceived,\n watchResetMessages,\n messages,\n}: IWatch) => {\n const [start, setStart] = useState(false);\n const [bucketName, setBucketName] = useState(\"Select Bucket\");\n const [prefix, setPrefix] = useState(\"\");\n const [suffix, setSuffix] = useState(\"\");\n const [bucketList, setBucketList] = useState([]);\n\n const fetchBucketList = () => {\n api\n .invoke(\"GET\", `/api/v1/buckets`)\n .then((res: BucketList) => {\n let buckets: Bucket[] = [];\n if (res.buckets !== null) {\n buckets = res.buckets;\n }\n setBucketList(buckets);\n })\n .catch((err: any) => {\n console.log(err);\n });\n };\n useEffect(() => {\n fetchBucketList();\n }, []);\n\n useEffect(() => {\n watchResetMessages();\n // begin watch if bucketName in bucketList and start pressed\n if (start && bucketList.some((bucket) => bucket.name === bucketName)) {\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/watch/${bucketName}?prefix=${prefix}&suffix=${suffix}`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: EventInfo = JSON.parse(message.data.toString());\n m.Time = new Date(m.Time.toString());\n m.key = Math.random();\n watchMessageReceived(m);\n };\n c.onclose = () => {\n clearInterval(interval);\n console.log(\"connection closed by server\");\n // reset start status\n setStart(false);\n };\n return () => {\n // close websocket on useEffect cleanup\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n };\n }\n } else {\n // reset start status\n setStart(false);\n }\n }, [\n watchMessageReceived,\n start,\n bucketList,\n bucketName,\n prefix,\n suffix,\n watchResetMessages,\n ]);\n\n const bucketNames = bucketList.map((bucketName) => ({\n label: bucketName.name,\n value: bucketName.name,\n }));\n\n return (\n \n \n \n \n \n \n {\n setBucketName(e.target.value as string);\n }}\n className={classes.searchField}\n disabled={start}\n input={}\n >\n \n Select Bucket\n \n {bucketNames.map((option) => (\n \n {option.label}\n \n ))}\n \n \n {\n setPrefix(e.target.value);\n }}\n />\n {\n setSuffix(e.target.value);\n }}\n />\n setStart(true)}\n >\n Start\n \n \n \n
\n
\n \n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.watch.messages,\n});\n\nconst connector = connect(mapState, {\n watchMessageReceived: watchMessageReceived,\n watchResetMessages: watchResetMessages,\n});\n\nexport default connector(withStyles(styles)(Watch));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { HealthInfoMessage } from \"./types\";\n\nexport const HEALTH_INFO_MESSAGE_RECEIVED = \"HEALTH_INFO_MESSAGE_RECEIVED\";\nexport const HEALTH_INFO_RESET_MESSAGE = \"HEALTH_INFO_RESET_MESSAGE\";\n\ninterface HealthInfoMessageReceivedAction {\n type: typeof HEALTH_INFO_MESSAGE_RECEIVED;\n message: HealthInfoMessage;\n}\n\ninterface HealthInfoResetMessagesAction {\n type: typeof HEALTH_INFO_RESET_MESSAGE;\n}\n\nexport type HealthInfoActionTypes =\n | HealthInfoMessageReceivedAction\n | HealthInfoResetMessagesAction;\n\nexport function healthInfoMessageReceived(message: HealthInfoMessage) {\n return {\n type: HEALTH_INFO_MESSAGE_RECEIVED,\n message: message,\n };\n}\n\nexport function healthInfoResetMessage() {\n return {\n type: HEALTH_INFO_RESET_MESSAGE,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nexport const DiagStatError = \"error\";\nexport const DiagStatSuccess = \"success\";\nexport const DiagStatInProgress = \"inProgress\";\nexport interface HealthInfoMessage {\n timestamp: Date;\n error: string;\n perf: perfInfo;\n minio: minioHealthInfo;\n sys: sysHealthInfo;\n}\n\nexport interface perfInfo {\n drives: serverDrivesInfo[];\n net: serverNetHealthInfo[];\n net_parallel: serverNetHealthInfo;\n error: string;\n}\n\nexport interface serverDrivesInfo {\n addr: string;\n serial: drivePerfInfo[];\n parallel: drivePerfInfo[];\n error: string;\n}\n\nexport interface drivePerfInfo {\n endpoint: string;\n latency: diskLatency;\n throughput: diskThroughput;\n error: string;\n}\nexport interface diskLatency {\n avg_secs: number;\n percentile50_secs: number;\n percentile90_secs: number;\n percentile99_secs: number;\n min_secs: number;\n max_secs: number;\n}\n\nexport interface diskThroughput {\n avg_bytes_per_sec: number;\n percentile50_bytes_per_sec: number;\n percentile90_bytes_per_sec: number;\n percentile99_bytes_per_sec: number;\n min_bytes_per_sec: number;\n max_bytes_per_sec: number;\n}\n\nexport interface serverNetHealthInfo {\n addr: string;\n net: netPerfInfo[];\n error: string;\n}\n\nexport interface netPerfInfo {\n remote: string;\n latency: netLatency;\n throughput: netThroughput;\n error: string;\n}\n\nexport interface netLatency {\n avg_secs: number;\n percentile50_secs: number;\n percentile90_secs: number;\n percentile99_secs: number;\n min_secs: number;\n max_secs: number;\n}\nexport interface netThroughput {\n avg_bytes_per_sec: number;\n percentile50_bytes_per_sec: number;\n percentile90_bytes_per_sec: number;\n percentile99_bytes_per_sec: number;\n min_bytes_per_sec: number;\n max_bytes_per_sec: number;\n}\n\nexport interface minioHealthInfo {\n info: infoMessage;\n config: any;\n error: string;\n}\n\nexport interface infoMessage {\n mode: string;\n domain: string[];\n region: string;\n sqsARN: string[];\n deploymentID: string;\n buckets: buckets;\n objects: objects;\n usage: usage;\n services: services;\n backend: any;\n servers: serverProperties[];\n}\n\nexport interface buckets {\n count: number;\n}\n\nexport interface objects {\n count: number;\n}\n\nexport interface usage {\n size: number;\n}\n\nexport interface services {\n vault: vault;\n ldap: ldap;\n logger: Map[];\n audit: Map[];\n notifications: Map[]>;\n}\n\nexport interface vault {\n status: string;\n encrypt: string;\n decrypt: string;\n}\n\nexport interface ldap {\n status: string;\n}\n\nexport interface status {\n status: string;\n}\n\nexport interface serverProperties {\n state: string;\n endpoint: string;\n uptime: number;\n version: string;\n commitID: string;\n network: Map;\n drives: disk[];\n}\n\nexport interface disk {\n endpoint: string;\n rootDisk: boolean;\n path: string;\n healing: boolean;\n state: string;\n uuid: string;\n model: string;\n totalspace: number;\n usedspace: number;\n availspace: number;\n readthroughput: number;\n writethroughput: number;\n readlatency: number;\n writelatency: number;\n utilization: number;\n}\n\nexport interface sysHealthInfo {\n cpus: serverCpuInfo[];\n drives: serverDiskHwInfo[];\n osinfos: serverOsInfo[];\n meminfos: serverMemInfo[];\n procinfos: serverProcInfo[];\n error: string;\n}\n\nexport interface serverCpuInfo {\n addr: string;\n cpu: cpuInfoStat[];\n time: cpuTimeStat[];\n error: string;\n}\n\nexport interface cpuInfoStat {\n cpu: number;\n vendorId: string;\n family: string;\n model: string;\n stepping: number;\n physicalId: string;\n coreId: string;\n cores: number;\n modelName: string;\n mhz: number;\n cacheSize: number;\n flags: string[];\n microcode: string;\n}\n\nexport interface cpuTimeStat {\n cpu: string;\n user: number;\n system: number;\n idle: number;\n nice: number;\n iowait: number;\n irq: number;\n softirq: number;\n steal: number;\n guest: number;\n guestNice: number;\n}\n\nexport interface serverDiskHwInfo {\n addr: string;\n usages: diskUsageStat[];\n partitions: partitionStat[];\n counters: Map;\n error: string;\n}\n\nexport interface diskUsageStat {\n path: string;\n fstype: string;\n total: number;\n free: number;\n used: number;\n usedPercent: number;\n inodesTotal: number;\n inodesUsed: number;\n inodesFree: number;\n inodesUsedPercent: number;\n}\n\nexport interface partitionStat {\n device: string;\n mountpoint: string;\n fstype: string;\n opts: string;\n smartInfo: smartInfo;\n}\n\nexport interface smartInfo {\n device: string;\n scsi: scsiInfo;\n nvme: nvmeInfo;\n ata: ataInfo;\n error: string;\n}\n\nexport interface scsiInfo {\n scsiCapacityBytes: number;\n scsiModeSenseBuf: string;\n scsirespLen: number;\n scsiBdLen: number;\n scsiOffset: number;\n sciRpm: number;\n}\n\nexport interface nvmeInfo {\n serialNum: string;\n vendorId: string;\n firmwareVersion: string;\n modelNum: string;\n spareAvailable: string;\n spareThreshold: string;\n temperature: string;\n criticalWarning: string;\n maxDataTransferPages: number;\n controllerBusyTime: number;\n powerOnHours: number;\n powerCycles: number;\n unsafeShutdowns: number;\n mediaAndDataIntgerityErrors: number;\n dataUnitsReadBytes: number;\n dataUnitsWrittenBytes: number;\n hostReadCommands: number;\n hostWriteCommands: number;\n}\n\nexport interface ataInfo {\n scsiLuWWNDeviceID: string;\n serialNum: string;\n modelNum: string;\n firmwareRevision: string;\n RotationRate: string;\n MajorVersion: string;\n MinorVersion: string;\n smartSupportAvailable: boolean;\n smartSupportEnabled: boolean;\n smartErrorLog: string;\n transport: string;\n}\n\nexport interface diskIOCountersStat {\n readCount: number;\n mergedReadCount: number;\n DriteCount: number;\n mergedWriteCount: number;\n readBytes: number;\n writeBytes: number;\n readTime: number;\n writeTime: number;\n iopsInProgress: number;\n ioTime: number;\n weightedIO: number;\n name: string;\n serialNumber: string;\n label: string;\n}\n\nexport interface serverOsInfo {\n addr: string;\n info: infoStat;\n sensors: temperatureStat[];\n users: userStat[];\n error: string;\n}\n\nexport interface infoStat {\n hostname: string;\n uptime: number;\n bootTime: number;\n procs: number;\n os: string;\n platform: string;\n platformFamily: string;\n platformVersion: string;\n kernelVersion: string;\n kernelArch: string;\n virtualizationSystem: string;\n virtualizationRole: string;\n hostid: string;\n}\n\nexport interface temperatureStat {\n sensorKey: string;\n sensorTemperature: number;\n}\n\nexport interface userStat {\n user: string;\n terminal: string;\n host: string;\n started: number;\n}\n\nexport interface serverMemInfo {\n addr: string;\n swap: swapMemoryStat;\n virtualmem: virtualMemoryStat;\n error: string;\n}\n\nexport interface swapMemoryStat {\n total: number;\n used: number;\n free: number;\n usedPercent: number;\n sin: number;\n sout: number;\n pgin: number;\n pgout: number;\n pgfault: number;\n pgmajfault: number;\n}\n\nexport interface virtualMemoryStat {\n total: number;\n available: number;\n used: number;\n usedPercent: number;\n free: number;\n active: number;\n inactive: number;\n wired: number;\n laundry: number;\n buffers: number;\n cached: number;\n writeback: number;\n dirty: number;\n writebacktmp: number;\n shared: number;\n slab: number;\n sreclaimable: number;\n sunreclaim: number;\n pagetables: number;\n swapcached: number;\n commitlimit: number;\n committedas: number;\n hightotal: number;\n highfree: number;\n lowtotal: number;\n lowfree: number;\n swaptotal: number;\n swapfree: number;\n mapped: number;\n vmalloctotal: number;\n vmallocused: number;\n vmallocchunk: number;\n hugepagestotal: number;\n hugepagesfree: number;\n hugepagesize: number;\n}\n\nexport interface serverProcInfo {\n addr: string;\n processes: sysProcess[];\n error: string;\n}\n\nexport interface sysProcess {\n pid: number;\n background: boolean;\n cpupercent: number;\n children: number[];\n cmd: string;\n connections: nethwConnectionStat[];\n createtime: number;\n cwd: string;\n exe: string;\n gids: number[];\n iocounters: processIOCountersStat;\n isrunning: boolean;\n meminfo: memoryInfoStat;\n memmaps: any[];\n mempercent: number;\n name: string;\n netiocounters: nethwIOCounterStat[];\n nice: number;\n numctxswitches: processNmCtxSwitchesStat;\n numfds: number;\n numthreads: number;\n pagefaults: processPageFaultsStat;\n parent: number;\n ppid: number;\n rlimit: processRLimitStat[];\n status: string;\n tgid: number;\n cputimes: cpuTimeStat;\n uids: number[];\n username: string;\n}\n\nexport interface nethwConnectionStat {\n fd: number;\n family: number;\n type: number;\n localaddr: netAddr;\n remoteaddr: netAddr;\n status: string;\n uids: number[];\n pid: number;\n}\n\nexport interface netAddr {\n ip: string;\n port: number;\n}\n\nexport interface processIOCountersStat {\n readCount: number;\n writeCount: number;\n readBytes: number;\n writeBytes: number;\n}\n\nexport interface memoryInfoStat {\n rss: number;\n vms: number;\n hwm: number;\n data: number;\n stack: number;\n locked: number;\n swap: number;\n}\n\nexport interface nethwIOCounterStat {\n name: string;\n bytesSent: number;\n bytesRecv: number;\n packetsSent: number;\n packetsRecv: number;\n errin: number;\n errout: number;\n dropin: number;\n dropout: number;\n fifoin: number;\n fifoout: number;\n}\n\nexport interface processNmCtxSwitchesStat {\n voluntary: number;\n involuntary: number;\n}\n\nexport interface processPageFaultsStat {\n minorFaults: number;\n majorFaults: number;\n childMinorFaults: number;\n childMajorFaults: number;\n}\n\nexport interface processRLimitStat {\n resource: number;\n soft: number;\n hard: number;\n used: number;\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport React, { useState, useEffect } from \"react\";\nimport {\n IMessageEvent,\n w3cwebsocket as W3CWebSocket,\n ICloseEvent,\n} from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { healthInfoMessageReceived, healthInfoResetMessage } from \"./actions\";\nimport {\n HealthInfoMessage,\n DiagStatInProgress,\n DiagStatSuccess,\n DiagStatError,\n} from \"./types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n wsProtocol,\n WSCloseInternalServerErr,\n WSClosePolicyViolation,\n WSCloseAbnormalClosure,\n} from \"../../../utils/wsUtils\";\nimport {\n actionsTray,\n containerForHeader,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { Grid, Button } from \"@material-ui/core\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { setSnackBarMessage, setServerDiagStat } from \"../../../actions\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n logList: {\n background: \"#fff\",\n minHeight: 400,\n height: \"calc(100vh - 270px)\",\n overflow: \"auto\",\n fontSize: 13,\n padding: \"25px 45px\",\n border: \"1px solid #EAEDEE\",\n borderRadius: 4,\n },\n loading: {\n paddingTop: 8,\n paddingLeft: 40,\n },\n buttons: {\n justifyContent: \"flex-start\",\n gap: 20,\n },\n ...actionsTray,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:text/plain;charset=utf-8,\" + encodeURIComponent(text)\n );\n element.setAttribute(\"download\", filename);\n\n element.style.display = \"none\";\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n};\n\ninterface IHealthInfo {\n classes: any;\n healthInfoMessageReceived: typeof healthInfoMessageReceived;\n healthInfoResetMessage: typeof healthInfoResetMessage;\n message: HealthInfoMessage;\n namespace: string;\n tenant: string;\n setSnackBarMessage: typeof setSnackBarMessage;\n setServerDiagStat: typeof setServerDiagStat;\n serverDiagnosticStatus: string;\n}\n\nconst HealthInfo = ({\n classes,\n healthInfoMessageReceived,\n healthInfoResetMessage,\n message,\n setSnackBarMessage,\n setServerDiagStat,\n serverDiagnosticStatus,\n}: IHealthInfo) => {\n const [startDiagnostic, setStartDiagnostic] = useState(false);\n const [downloadDisabled, setDownloadDisabled] = useState(true);\n\n useEffect(() => {\n if (\n serverDiagnosticStatus === DiagStatSuccess &&\n message !== ({} as HealthInfoMessage)\n ) {\n // Allow download of diagnostics file only when\n // it succeded fetching all the results and info is not empty.\n setDownloadDisabled(false);\n }\n if (serverDiagnosticStatus === DiagStatInProgress) {\n // Disable Start Diagnotic and Disable Download buttons\n // if a Diagnosis is in progress.\n setDownloadDisabled(true);\n }\n setStartDiagnostic(false);\n }, [serverDiagnosticStatus, message]);\n\n useEffect(() => {\n if (startDiagnostic) {\n healthInfoResetMessage();\n const url = new URL(window.location.toString());\n const isDev = process.env.NODE_ENV === \"development\";\n const port = isDev ? \"9090\" : url.port;\n\n const wsProt = wsProtocol(url.protocol);\n\n const c = new W3CWebSocket(\n `${wsProt}://${url.hostname}:${port}/ws/health-info?deadline=1h`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n c.send(\"ok\");\n interval = setInterval(() => {\n c.send(\"ok\");\n }, 10 * 1000);\n setSnackBarMessage(\n \"Diagnostic started. Please do not refresh page during diagnosis.\"\n );\n setServerDiagStat(DiagStatInProgress);\n };\n c.onmessage = (message: IMessageEvent) => {\n let m: HealthInfoMessage = JSON.parse(message.data.toString());\n m.timestamp = new Date(m.timestamp.toString());\n healthInfoMessageReceived(m);\n };\n c.onerror = (error: Error) => {\n console.log(\"error closing websocket:\", error.message);\n c.close(1000);\n clearInterval(interval);\n setServerDiagStat(DiagStatError);\n };\n c.onclose = (event: ICloseEvent) => {\n clearInterval(interval);\n if (\n event.code === WSCloseInternalServerErr ||\n event.code === WSClosePolicyViolation ||\n event.code === WSCloseAbnormalClosure\n ) {\n // handle close with error\n console.log(\"connection closed by server with code:\", event.code);\n setSnackBarMessage(\n \"An error occurred while getting Diagnostic file.\"\n );\n setServerDiagStat(DiagStatError);\n } else {\n console.log(\"connection closed by server\");\n setSnackBarMessage(\"Diagnostic file is ready to be downloaded.\");\n setServerDiagStat(DiagStatSuccess);\n }\n };\n }\n } else {\n // reset start status\n setStartDiagnostic(false);\n }\n }, [\n healthInfoMessageReceived,\n healthInfoResetMessage,\n startDiagnostic,\n setSnackBarMessage,\n setServerDiagStat,\n ]);\n\n return (\n \n \n\n \n \n \n \n setStartDiagnostic(true)}\n >\n Start Diagnostic\n \n \n \n {serverDiagnosticStatus === DiagStatInProgress ? (\n
\n \n
\n ) : (\n {\n download(\n \"diagnostic.json\",\n JSON.stringify(message, null, 2)\n );\n }}\n disabled={downloadDisabled}\n >\n Download\n \n )}\n
\n
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n message: state.healthInfo.message,\n serverDiagnosticStatus: state.system.serverDiagnosticStatus,\n});\n\nconst connector = connect(mapState, {\n healthInfoMessageReceived: healthInfoMessageReceived,\n healthInfoResetMessage: healthInfoResetMessage,\n setSnackBarMessage,\n setServerDiagStat,\n});\n\nexport default connector(withStyles(styles)(HealthInfo));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { Fragment, useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, LinearProgress } from \"@material-ui/core\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport Container from \"@material-ui/core/Container\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport history from \"../../history\";\nimport { Redirect, Route, Router, Switch } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../store\";\nimport {\n serverIsLoading,\n serverNeedsRestart,\n setMenuOpen,\n setSnackBarMessage,\n} from \"../../actions\";\nimport { ISessionResponse } from \"./types\";\nimport { snackBarMessage } from \"../../types\";\nimport { snackBarCommon } from \"./Common/FormComponents/common/styleLibrary\";\nimport Buckets from \"./Buckets/Buckets\";\nimport Policies from \"./Policies/Policies\";\nimport Dashboard from \"./Dashboard/Dashboard\";\nimport Menu from \"./Menu/Menu\";\nimport api from \"../../common/api\";\nimport Account from \"./Account/Account\";\nimport Users from \"./Users/Users\";\nimport Groups from \"./Groups/Groups\";\nimport ConfigurationMain from \"./Configurations/ConfigurationMain\";\nimport WebhookPanel from \"./Configurations/ConfigurationPanels/WebhookPanel\";\nimport TenantsMain from \"./Tenants/TenantsMain\";\nimport TenantDetails from \"./Tenants/TenantDetails/TenantDetails\";\nimport ObjectBrowser from \"./ObjectBrowser/ObjectBrowser\";\nimport ObjectRouting from \"./Buckets/ListBuckets/Objects/ListObjects/ObjectRouting\";\nimport License from \"./License/License\";\nimport Trace from \"./Trace/Trace\";\nimport LogsMain from \"./Logs/LogsMain\";\nimport Heal from \"./Heal/Heal\";\nimport Watch from \"./Watch/Watch\";\nimport HealthInfo from \"./HealthInfo/HealthInfo\";\n\nconst drawerWidth = 245;\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n display: \"flex\",\n \"& .MuiPaper-root.MuiSnackbarContent-root\": {\n borderRadius: \"0px 0px 5px 5px\",\n boxShadow: \"none\",\n },\n },\n toolbar: {\n background: theme.palette.background.default,\n color: \"black\",\n paddingRight: 24, // keep right padding when drawer closed\n },\n toolbarIcon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n padding: \"0 8px\",\n ...theme.mixins.toolbar,\n },\n appBar: {\n zIndex: theme.zIndex.drawer + 1,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n },\n appBarShift: {\n marginLeft: drawerWidth,\n width: `calc(100% - ${drawerWidth}px)`,\n transition: theme.transitions.create([\"width\", \"margin\"], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n },\n menuButton: {\n marginRight: 36,\n },\n menuButtonHidden: {\n display: \"none\",\n },\n title: {\n flexGrow: 1,\n },\n drawerPaper: {\n position: \"relative\",\n whiteSpace: \"nowrap\",\n width: drawerWidth,\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.enteringScreen,\n }),\n overflowX: \"hidden\",\n background:\n \"transparent linear-gradient(90deg, #073052 0%, #081C42 100%) 0% 0% no-repeat padding-box\",\n boxShadow: \"0px 3px 7px #00000014\",\n },\n drawerPaperClose: {\n overflowX: \"hidden\",\n transition: theme.transitions.create(\"width\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n width: theme.spacing(7),\n [theme.breakpoints.up(\"sm\")]: {\n width: theme.spacing(9),\n },\n },\n content: {\n flexGrow: 1,\n height: \"100vh\",\n overflow: \"auto\",\n position: \"relative\",\n },\n container: {\n paddingBottom: theme.spacing(4),\n margin: 0,\n width: \"100%\",\n maxWidth: \"initial\",\n },\n paper: {\n padding: theme.spacing(2),\n display: \"flex\",\n overflow: \"auto\",\n flexDirection: \"column\",\n },\n fixedHeight: {\n minHeight: 240,\n },\n warningBar: {\n background: theme.palette.primary.main,\n color: \"white\",\n heigh: \"60px\",\n widht: \"100%\",\n lineHeight: \"60px\",\n textAlign: \"center\",\n },\n progress: {\n height: \"3px\",\n backgroundColor: \"#eaeaea\",\n },\n ...snackBarCommon,\n });\n\ninterface IConsoleProps {\n open: boolean;\n needsRestart: boolean;\n isServerLoading: boolean;\n title: string;\n classes: any;\n setMenuOpen: typeof setMenuOpen;\n serverNeedsRestart: typeof serverNeedsRestart;\n serverIsLoading: typeof serverIsLoading;\n session: ISessionResponse;\n loadingProgress: number;\n snackBarMessage: snackBarMessage;\n setSnackBarMessage: typeof setSnackBarMessage;\n}\n\nconst Console = ({\n classes,\n open,\n needsRestart,\n isServerLoading,\n serverNeedsRestart,\n serverIsLoading,\n session,\n loadingProgress,\n snackBarMessage,\n setSnackBarMessage,\n}: IConsoleProps) => {\n const [openSnackbar, setOpenSnackbar] = useState(false);\n\n const restartServer = () => {\n serverIsLoading(true);\n api\n .invoke(\"POST\", \"/api/v1/service/restart\", {})\n .then((res) => {\n console.log(\"success restarting service\");\n console.log(res);\n serverIsLoading(false);\n serverNeedsRestart(false);\n })\n .catch((err) => {\n serverIsLoading(false);\n console.log(\"failure restarting service\");\n console.log(err);\n });\n };\n\n const allowedPages = session.pages.reduce(\n (result: any, item: any, index: any) => {\n result[item] = true;\n return result;\n },\n {}\n );\n const routes = [\n {\n component: Dashboard,\n path: \"/dashboard\",\n },\n {\n component: Buckets,\n path: \"/buckets\",\n },\n {\n component: Buckets,\n path: \"/buckets/:bucketName\",\n },\n {\n component: ObjectBrowser,\n path: \"/object-browser\",\n },\n {\n component: ObjectRouting,\n path: \"/object-browser/:bucket\",\n },\n {\n component: ObjectRouting,\n path: \"/object-browser/:bucket/*\",\n },\n {\n component: Watch,\n path: \"/watch\",\n },\n {\n component: Users,\n path: \"/users\",\n },\n {\n component: Groups,\n path: \"/groups\",\n },\n {\n component: Policies,\n path: \"/policies\",\n },\n {\n component: Heal,\n path: \"/heal\",\n },\n {\n component: Trace,\n path: \"/trace\",\n },\n {\n component: LogsMain,\n path: \"/logs\",\n },\n {\n component: HealthInfo,\n path: \"/health-info\",\n },\n {\n component: ConfigurationMain,\n path: \"/settings\",\n },\n {\n component: Account,\n path: \"/account\",\n props: {\n changePassword: session.pages.includes(\"/account/change-password\"),\n },\n },\n {\n component: WebhookPanel,\n path: \"/webhook/logger\",\n },\n {\n component: WebhookPanel,\n path: \"/webhook/audit\",\n },\n {\n component: TenantsMain,\n path: \"/tenants\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName\",\n },\n {\n component: License,\n path: \"/license\",\n },\n ];\n const allowedRoutes = routes.filter((route: any) => allowedPages[route.path]);\n\n const closeSnackBar = () => {\n setOpenSnackbar(false);\n setSnackBarMessage(\"\");\n };\n\n useEffect(() => {\n if (snackBarMessage.message === \"\") {\n setOpenSnackbar(false);\n return;\n }\n // Open SnackBar\n setOpenSnackbar(true);\n }, [snackBarMessage]);\n\n return (\n \n {session.status === \"ok\" ? (\n
\n \n \n \n \n\n
\n {needsRestart && (\n
\n {isServerLoading ? (\n \n The server is restarting.\n \n \n ) : (\n \n The instance needs to be restarted for configuration changes\n to take effect.{\" \"}\n {\n restartServer();\n }}\n >\n Restart\n \n \n )}\n
\n )}\n {loadingProgress < 100 && (\n \n )}\n
\n {\n closeSnackBar();\n }}\n autoHideDuration={\n snackBarMessage.type === \"error\" ? 10000 : 5000\n }\n message={snackBarMessage.message}\n className={classes.snackBarExternal}\n ContentProps={{\n className: `${classes.snackBar} ${\n snackBarMessage.type === \"error\"\n ? classes.errorSnackBar\n : \"\"\n }`,\n }}\n />\n
\n \n \n \n {allowedRoutes.map((route: any) => (\n (\n \n )}\n />\n ))}\n {allowedRoutes.length > 0 ? (\n \n ) : null}\n \n \n \n
\n
\n ) : null}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n needsRestart: state.system.serverNeedsRestart,\n isServerLoading: state.system.serverIsLoading,\n session: state.console.session,\n loadingProgress: state.system.loadingProgress,\n snackBarMessage: state.system.snackBar,\n});\n\nconst connector = connect(mapState, {\n setMenuOpen,\n serverNeedsRestart,\n serverIsLoading,\n setSnackBarMessage,\n});\n\nexport default withStyles(styles)(connector(Console));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { FC, useEffect } from \"react\"; // eslint-disable-line @typescript-eslint/no-unused-vars\nimport { RouteComponentProps } from \"react-router\";\nimport storage from \"local-storage-fallback\";\nimport api from \"../../common/api\";\n\nconst LoginCallback: FC = ({ location }) => {\n useEffect(() => {\n const code = (location.search.match(/code=([^&]+)/) || [])[1];\n const state = (location.search.match(/state=([^&]+)/) || [])[1];\n api\n .invoke(\"POST\", \"/api/v1/login/oauth2/auth\", { code, state })\n .then((res: any) => {\n if (res && res.sessionId) {\n // store the jwt token\n storage.setItem(\"token\", res.sessionId);\n // We push to history the new URL.\n window.location.href = \"/\";\n }\n })\n .catch((res: any) => {\n window.location.href = \"/login\";\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return null;\n};\n\nexport default LoginCallback;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ISessionResponse } from \"./types\";\n\nexport const SESSION_RESPONSE = \"SESSION_RESPONSE\";\n\ninterface SessionAction {\n type: typeof SESSION_RESPONSE;\n message: ISessionResponse;\n}\nexport type SessionActionTypes = SessionAction;\n\nexport function saveSessionResponse(message: ISessionResponse) {\n return {\n type: SESSION_RESPONSE,\n message: message,\n };\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React, { useEffect, useState } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"./store\";\nimport { consoleOperatorMode, userLoggedIn } from \"./actions\";\nimport api from \"./common/api\";\nimport { saveSessionResponse } from \"./screens/Console/actions\";\nimport { ISessionResponse } from \"./screens/Console/types\";\n\nconst mapState = (state: AppState) => ({\n loggedIn: state.system.loggedIn,\n});\n\nconst connector = connect(mapState, {\n userLoggedIn,\n consoleOperatorMode,\n saveSessionResponse,\n});\n\ninterface ProtectedRouteProps {\n loggedIn: boolean;\n Component: any;\n userLoggedIn: typeof userLoggedIn;\n consoleOperatorMode: typeof consoleOperatorMode;\n saveSessionResponse: typeof saveSessionResponse;\n}\n\nconst ProtectedRoute = ({\n Component,\n loggedIn,\n userLoggedIn,\n consoleOperatorMode,\n saveSessionResponse,\n}: ProtectedRouteProps) => {\n const [sessionLoading, setSessionLoading] = useState(true);\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/session`)\n .then((res: ISessionResponse) => {\n saveSessionResponse(res);\n userLoggedIn(true);\n setSessionLoading(false);\n // check for tenants presence, that indicates we are in operator mode\n if (res.operator) {\n consoleOperatorMode(true);\n document.title = \"MinIO Operator\";\n }\n })\n .catch(() => setSessionLoading(false));\n }, [saveSessionResponse, consoleOperatorMode, userLoggedIn]);\n\n // if we still trying to retrieve user session render nothing\n if (sessionLoading) {\n return null;\n }\n // redirect user to the right page based on session status\n return loggedIn ? : ;\n};\n\nexport default connector(ProtectedRoute);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport { Route, Router, Switch } from \"react-router-dom\";\nimport history from \"./history\";\nimport Login from \"./screens/LoginPage/LoginPage\";\nimport Console from \"./screens/Console/Console\";\nimport LoginCallback from \"./screens/LoginPage/LoginCallback\";\nimport { hot } from \"react-hot-loader/root\";\nimport ProtectedRoute from \"./ProtectedRoutes\";\n\nconst Routes = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default hot(Routes);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n MENU_OPEN,\n OPERATOR_MODE,\n SERVER_IS_LOADING,\n SERVER_NEEDS_RESTART,\n SystemActionTypes,\n SystemState,\n USER_LOGGED,\n SET_LOADING_PROGRESS,\n SET_SNACK_BAR_MESSAGE,\n SET_ERROR_SNACK_MESSAGE,\n SET_SERVER_DIAG_STAT,\n SET_SNACK_MODAL_MESSAGE,\n SET_MODAL_ERROR_MESSAGE,\n} from \"./types\";\n\nconst initialState: SystemState = {\n loggedIn: false,\n operatorMode: false,\n session: \"\",\n userName: \"\",\n sidebarOpen: true,\n serverNeedsRestart: false,\n serverIsLoading: false,\n loadingProgress: 100,\n snackBar: {\n message: \"\",\n type: \"message\",\n },\n modalSnackBar: {\n message: \"\",\n type: \"message\",\n },\n serverDiagnosticStatus: \"\",\n};\n\nexport function systemReducer(\n state = initialState,\n action: SystemActionTypes\n): SystemState {\n switch (action.type) {\n case USER_LOGGED:\n return {\n ...state,\n loggedIn: action.logged,\n };\n case OPERATOR_MODE:\n return {\n ...state,\n operatorMode: action.operatorMode,\n };\n case MENU_OPEN:\n return {\n ...state,\n sidebarOpen: action.open,\n };\n case SERVER_NEEDS_RESTART:\n return {\n ...state,\n serverNeedsRestart: action.needsRestart,\n };\n\n case SERVER_IS_LOADING:\n return {\n ...state,\n serverIsLoading: action.isLoading,\n };\n case SET_LOADING_PROGRESS:\n return {\n ...state,\n loadingProgress: action.loadingProgress,\n };\n case SET_SNACK_BAR_MESSAGE:\n return {\n ...state,\n snackBar: { message: action.message, type: \"message\" },\n };\n case SET_ERROR_SNACK_MESSAGE:\n return {\n ...state,\n snackBar: { message: action.message, type: \"error\" },\n };\n case SET_SNACK_MODAL_MESSAGE:\n return {\n ...state,\n modalSnackBar: { message: action.message, type: \"message\" },\n };\n case SET_MODAL_ERROR_MESSAGE:\n return {\n ...state,\n modalSnackBar: { message: action.message, type: \"error\" },\n };\n case SET_SERVER_DIAG_STAT:\n return {\n ...state,\n serverDiagnosticStatus: action.serverDiagnosticStatus,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n TRACE_MESSAGE_RECEIVED,\n TRACE_RESET_MESSAGES,\n TraceActionTypes,\n} from \"./actions\";\nimport { TraceMessage } from \"./types\";\n\nexport interface TraceState {\n messages: TraceMessage[];\n}\n\nconst initialState: TraceState = {\n messages: [],\n};\n\nexport function traceReducer(\n state = initialState,\n action: TraceActionTypes\n): TraceState {\n switch (action.type) {\n case TRACE_MESSAGE_RECEIVED:\n return {\n ...state,\n messages: [...state.messages, action.message],\n };\n case TRACE_RESET_MESSAGES:\n return {\n ...state,\n messages: [],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n LOG_MESSAGE_RECEIVED,\n LOG_RESET_MESSAGES,\n LogActionTypes,\n} from \"./actions\";\nimport { LogMessage } from \"./types\";\n\nexport interface LogState {\n messages: LogMessage[];\n}\n\nconst initialState: LogState = {\n messages: [],\n};\n\nexport function logReducer(\n state = initialState,\n action: LogActionTypes\n): LogState {\n switch (action.type) {\n case LOG_MESSAGE_RECEIVED:\n return {\n ...state,\n messages: [...state.messages, action.message],\n };\n case LOG_RESET_MESSAGES:\n return {\n ...state,\n messages: [],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n HEALTH_INFO_MESSAGE_RECEIVED,\n HEALTH_INFO_RESET_MESSAGE,\n HealthInfoActionTypes,\n} from \"./actions\";\nimport { HealthInfoMessage } from \"./types\";\n\nexport interface HealthInfoState {\n message: HealthInfoMessage;\n}\n\nconst initialState: HealthInfoState = {\n message: {} as HealthInfoMessage,\n};\n\nexport function healthInfoReducer(\n state = initialState,\n action: HealthInfoActionTypes\n): HealthInfoState {\n switch (action.type) {\n case HEALTH_INFO_MESSAGE_RECEIVED:\n return {\n ...state,\n message: action.message,\n };\n case HEALTH_INFO_RESET_MESSAGE:\n return {\n ...state,\n message: {} as HealthInfoMessage,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n WATCH_MESSAGE_RECEIVED,\n WATCH_RESET_MESSAGES,\n WatchActionTypes,\n} from \"./actions\";\nimport { EventInfo } from \"./types\";\n\nexport interface WatchState {\n messages: EventInfo[];\n}\n\nconst initialState: WatchState = {\n messages: [],\n};\n\nexport function watchReducer(\n state = initialState,\n action: WatchActionTypes\n): WatchState {\n switch (action.type) {\n case WATCH_MESSAGE_RECEIVED:\n return {\n ...state,\n messages: [...state.messages, action.message],\n };\n case WATCH_RESET_MESSAGES:\n return {\n ...state,\n messages: [],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ISessionResponse } from \"./types\";\nimport { SessionActionTypes, SESSION_RESPONSE } from \"./actions\";\n\nexport interface ConsoleState {\n session: ISessionResponse;\n}\n\nconst initialState: ConsoleState = {\n session: {\n operator: false,\n status: \"\",\n pages: [],\n },\n};\n\nexport function consoleReducer(\n state = initialState,\n action: SessionActionTypes\n): ConsoleState {\n switch (action.type) {\n case SESSION_RESPONSE:\n return {\n ...state,\n session: action.message,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport {\n ADD_BUCKET_NAME,\n ADD_BUCKET_OPEN,\n ADD_BUCKET_QUOTA,\n ADD_BUCKET_QUOTA_SIZE,\n ADD_BUCKET_QUOTA_TYPE,\n ADD_BUCKET_QUOTA_UNIT,\n ADD_BUCKET_RESET,\n ADD_BUCKET_VERSIONED,\n ADD_BUCKET_RETENTION,\n ADD_BUCKET_RETENTION_MODE,\n ADD_BUCKET_RETENTION_UNIT,\n ADD_BUCKET_RETENTION_VALIDITY,\n BucketActionTypes,\n ADD_BUCKET_LOCKING,\n} from \"./actions\";\n\nexport interface BucketsState {\n open: boolean;\n addBucketName: string;\n addBucketVersioningEnabled: boolean;\n addBucketLockingEnabled: boolean;\n addBucketQuotaEnabled: boolean;\n addBucketQuotaType: string;\n addBucketQuotaSize: string;\n addBucketQuotaUnit: string;\n addBucketRetentionEnabled: boolean;\n addBucketRetentionMode: string;\n addBucketRetentionUnit: string;\n addBucketRetentionValidity: number;\n}\n\nconst initialState: BucketsState = {\n open: false,\n addBucketName: \"\",\n addBucketVersioningEnabled: false,\n addBucketLockingEnabled: false,\n addBucketQuotaEnabled: false,\n addBucketQuotaType: \"hard\",\n addBucketQuotaSize: \"1\",\n addBucketQuotaUnit: \"TiB\",\n addBucketRetentionEnabled: false,\n addBucketRetentionMode: \"compliance\",\n addBucketRetentionUnit: \"days\",\n addBucketRetentionValidity: 1,\n};\n\nexport function bucketsReducer(\n state = initialState,\n action: BucketActionTypes\n): BucketsState {\n switch (action.type) {\n case ADD_BUCKET_OPEN:\n return {\n ...state,\n open: action.open,\n };\n case ADD_BUCKET_NAME:\n return {\n ...state,\n addBucketName: action.name,\n };\n case ADD_BUCKET_VERSIONED:\n return {\n ...state,\n addBucketVersioningEnabled: action.versioned,\n };\n case ADD_BUCKET_LOCKING:\n return {\n ...state,\n addBucketLockingEnabled: action.locking,\n };\n case ADD_BUCKET_QUOTA:\n return {\n ...state,\n addBucketQuotaEnabled: action.quota,\n };\n case ADD_BUCKET_QUOTA_TYPE:\n return {\n ...state,\n addBucketQuotaType: action.quotaType,\n };\n case ADD_BUCKET_QUOTA_SIZE:\n return {\n ...state,\n addBucketQuotaSize: action.quotaSize,\n };\n case ADD_BUCKET_QUOTA_UNIT:\n return {\n ...state,\n addBucketQuotaUnit: action.quotaUnit,\n };\n case ADD_BUCKET_RETENTION:\n return {\n ...state,\n addBucketRetentionEnabled: action.retention,\n };\n case ADD_BUCKET_RETENTION_MODE:\n return {\n ...state,\n addBucketRetentionMode: action.retentionMode,\n };\n case ADD_BUCKET_RETENTION_UNIT:\n return {\n ...state,\n addBucketRetentionUnit: action.retentionUnit,\n };\n case ADD_BUCKET_RETENTION_VALIDITY:\n return {\n ...state,\n addBucketRetentionValidity: action.retentionValidity,\n };\n\n case ADD_BUCKET_RESET:\n return {\n ...state,\n addBucketName: \"\",\n addBucketVersioningEnabled: false,\n addBucketLockingEnabled: false,\n addBucketQuotaEnabled: false,\n addBucketQuotaType: \"hard\",\n addBucketQuotaSize: \"1\",\n addBucketQuotaUnit: \"TiB\",\n addBucketRetentionEnabled: false,\n addBucketRetentionMode: \"compliance\",\n addBucketRetentionUnit: \"days\",\n addBucketRetentionValidity: 1,\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\nimport history from \"../../../history\";\n\nimport {\n OBJECT_BROWSER_ADD_ROUTE,\n OBJECT_BROWSER_CREATE_FOLDER,\n OBJECT_BROWSER_REMOVE_ROUTE_LEVEL,\n OBJECT_BROWSER_RESET_ROUTES_LIST,\n OBJECT_BROWSER_SET_ALL_ROUTES,\n OBJECT_BROWSER_SET_LAST_AS_FILE,\n OBJECT_BROWSER_DOWNLOAD_FILE_LOADER,\n OBJECT_BROWSER_DOWNLOADED_FILE,\n ObjectBrowserActionTypes,\n} from \"./actions\";\n\nexport interface Route {\n route: string;\n label: string;\n type: string;\n}\n\nexport interface ObjectBrowserState {\n routesList: Route[];\n downloadingFiles: string[];\n}\n\nexport interface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\nconst initialRoute = [\n { route: \"/object-browser\", label: \"All Buckets\", type: \"path\" },\n];\n\nconst initialState: ObjectBrowserState = {\n routesList: initialRoute,\n downloadingFiles: [],\n};\n\nexport function objectBrowserReducer(\n state = initialState,\n action: ObjectBrowserActionTypes\n): ObjectBrowserState {\n switch (action.type) {\n case OBJECT_BROWSER_ADD_ROUTE:\n const newRouteList = [\n ...state.routesList,\n { route: action.route, label: action.label, type: action.routeType },\n ];\n history.push(action.route);\n\n return { ...state, routesList: newRouteList };\n case OBJECT_BROWSER_RESET_ROUTES_LIST:\n return {\n ...state,\n routesList: [...initialRoute],\n };\n case OBJECT_BROWSER_REMOVE_ROUTE_LEVEL:\n const indexOfTopPath =\n state.routesList.findIndex(\n (element) => element.route === action.toRoute\n ) + 1;\n const newRouteLevels = state.routesList.slice(0, indexOfTopPath);\n\n return {\n ...state,\n routesList: newRouteLevels,\n };\n case OBJECT_BROWSER_SET_ALL_ROUTES:\n const splitRoutes = action.currentRoute.split(\"/\");\n const routesArray: Route[] = [];\n let initRoute = initialRoute[0].route;\n\n splitRoutes.forEach((route) => {\n if (route !== \"\" && route !== \"object-browser\") {\n initRoute = `${initRoute}/${route}`;\n\n routesArray.push({\n route: initRoute,\n label: route,\n type: \"path\",\n });\n }\n });\n\n const newSetOfRoutes = [...initialRoute, ...routesArray];\n\n return {\n ...state,\n routesList: newSetOfRoutes,\n };\n case OBJECT_BROWSER_CREATE_FOLDER:\n const newFoldersRoutes = [...state.routesList];\n let lastRoute = state.routesList[state.routesList.length - 1].route;\n\n const splitElements = action.newRoute.split(\"/\");\n\n splitElements.forEach((element) => {\n const folderTrim = element.trim();\n if (folderTrim !== \"\") {\n lastRoute = `${lastRoute}/${folderTrim}`;\n\n const newItem = { route: lastRoute, label: folderTrim, type: \"path\" };\n newFoldersRoutes.push(newItem);\n }\n });\n\n history.push(lastRoute);\n\n return {\n ...state,\n routesList: newFoldersRoutes,\n };\n case OBJECT_BROWSER_SET_LAST_AS_FILE:\n const currentList = state.routesList;\n const lastItem = currentList.slice(-1)[0];\n\n if (lastItem.type === \"path\") {\n lastItem.type = \"file\";\n }\n\n const newList = [...currentList.slice(0, -1), lastItem];\n\n return {\n ...state,\n routesList: newList,\n };\n case OBJECT_BROWSER_DOWNLOAD_FILE_LOADER:\n const actualFiles = [...state.downloadingFiles];\n\n actualFiles.push(action.path);\n\n return {\n ...state,\n downloadingFiles: [...actualFiles],\n };\n case OBJECT_BROWSER_DOWNLOADED_FILE:\n const downloadingFiles = state.downloadingFiles.filter(\n (item) => item !== action.path\n );\n\n return {\n ...state,\n downloadingFiles: [...downloadingFiles],\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport has from \"lodash/has\";\nimport get from \"lodash/get\";\nimport {\n TenantsManagementTypes,\n ITenantState,\n ADD_TENANT_SET_CURRENT_PAGE,\n ADD_TENANT_SET_ADVANCED_MODE,\n ADD_TENANT_UPDATE_FIELD,\n ADD_TENANT_SET_PAGE_VALID,\n ADD_TENANT_SET_STORAGE_CLASSES_LIST,\n ADD_TENANT_ADD_MINIO_KEYPAIR,\n ADD_TENANT_DELETE_MINIO_KEYPAIR,\n ADD_TENANT_ADD_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR,\n ADD_TENANT_DELETE_CA_KEYPAIR,\n ADD_TENANT_ADD_CONSOLE_CERT,\n ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR,\n ADD_TENANT_ENCRYPTION_SERVER_CERT,\n ADD_TENANT_ENCRYPTION_CLIENT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CERT,\n ADD_TENANT_ENCRYPTION_VAULT_CA,\n ADD_TENANT_ENCRYPTION_GEMALTO_CA,\n ADD_TENANT_RESET_FORM,\n} from \"./types\";\nimport { KeyPair } from \"./ListTenants/utils\";\n\nconst initialState: ITenantState = {\n createTenant: {\n page: 0,\n validPages: [],\n advancedModeOn: false,\n storageClasses: [],\n limitSize: {},\n fields: {\n nameTenant: {\n tenantName: \"\",\n namespace: \"\",\n selectedStorageClass: \"\",\n },\n configure: {\n customImage: false,\n imageName: \"\",\n consoleImage: \"\",\n customDockerhub: false,\n imageRegistry: \"\",\n imageRegistryUsername: \"\",\n imageRegistryPassword: \"\",\n exposeMinIO: true,\n exposeConsole: true,\n },\n identityProvider: {\n idpSelection: \"Built-in\",\n openIDURL: \"\",\n openIDClientID: \"\",\n openIDSecretID: \"\",\n ADURL: \"\",\n ADSkipTLS: false,\n ADServerInsecure: false,\n ADUserNameFilter: \"\",\n ADGroupBaseDN: \"\",\n ADGroupSearchFilter: \"\",\n ADNameAttribute: \"\",\n },\n security: {\n enableAutoCert: true,\n enableCustomCerts: false,\n enableTLS: true,\n },\n encryption: {\n enableEncryption: false,\n encryptionType: \"vault\",\n gemaltoEndpoint: \"\",\n gemaltoToken: \"\",\n gemaltoDomain: \"\",\n gemaltoRetry: \"0\",\n awsEndpoint: \"\",\n awsRegion: \"\",\n awsKMSKey: \"\",\n awsAccessKey: \"\",\n awsSecretKey: \"\",\n awsToken: \"\",\n vaultEndpoint: \"\",\n vaultEngine: \"\",\n vaultNamespace: \"\",\n vaultPrefix: \"\",\n vaultAppRoleEngine: \"\",\n vaultId: \"\",\n vaultSecret: \"\",\n vaultRetry: \"0\",\n vaultPing: \"0\",\n gcpProjectID: \"\",\n gcpEndpoint: \"\",\n gcpClientEmail: \"\",\n gcpClientID: \"\",\n gcpPrivateKeyID: \"\",\n gcpPrivateKey: \"\",\n enableCustomCertsForKES: false,\n },\n tenantSize: {\n volumeSize: \"100\",\n sizeFactor: \"Gi\",\n drivesPerServer: \"1\",\n nodes: \"4\",\n memoryNode: \"2\",\n ecParity: \"\",\n ecParityChoices: [],\n cleanECChoices: [],\n maxAllocableMemo: 0,\n memorySize: {\n error: \"\",\n limit: 0,\n request: 0,\n },\n distribution: {\n error: \"\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n },\n ecParityCalc: {\n error: 0,\n defaultEC: \"\",\n erasureCodeSet: 0,\n maxEC: \"\",\n rawCapacity: \"0\",\n storageFactors: [],\n },\n limitSize: {},\n },\n },\n certificates: {\n minioCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n caCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n consoleCertificate: {\n id: \"console_cert_pair\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n serverCertificate: {\n id: \"encryptionServerCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n clientCertificate: {\n id: \"encryptionClientCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCertificate: {\n id: \"encryptionVaultCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCA: {\n id: \"encryptionVaultCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n gemaltoCA: {\n id: \"encryptionGemaltoCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n },\n },\n};\n\nexport function tenantsReducer(\n state = initialState,\n action: TenantsManagementTypes\n): ITenantState {\n let newState: ITenantState = { ...state };\n\n switch (action.type) {\n case ADD_TENANT_SET_CURRENT_PAGE:\n newState.createTenant.page = action.page;\n\n return { ...newState };\n case ADD_TENANT_SET_ADVANCED_MODE:\n newState.createTenant.advancedModeOn = action.state;\n\n return { ...newState };\n case ADD_TENANT_UPDATE_FIELD:\n if (\n has(newState.createTenant.fields, `${action.pageName}.${action.field}`)\n ) {\n const originPageNameItems = get(\n newState.createTenant.fields,\n `${action.pageName}`,\n {}\n );\n\n let newValue: typeof originPageNameItems = {};\n newValue[action.field] = action.value;\n\n const joinValue = { ...originPageNameItems, ...newValue };\n\n newState.createTenant.fields[action.pageName] = { ...joinValue };\n\n return { ...newState };\n }\n return state;\n case ADD_TENANT_SET_PAGE_VALID:\n let originValidPages = state.createTenant.validPages;\n\n if (action.valid) {\n if (!originValidPages.includes(action.pageName)) {\n originValidPages.push(action.pageName);\n\n newState.createTenant.validPages = [...originValidPages];\n }\n } else {\n const newSetOfPages = originValidPages.filter(\n (elm) => elm !== action.pageName\n );\n\n newState.createTenant.validPages = [...newSetOfPages];\n }\n\n return { ...newState };\n case ADD_TENANT_SET_STORAGE_CLASSES_LIST:\n const changeCL = {\n ...state,\n createTenant: {\n ...state.createTenant,\n storageClasses: action.storageClasses,\n },\n };\n return { ...changeCL };\n case ADD_TENANT_ADD_MINIO_KEYPAIR:\n const minioCerts = [\n ...state.createTenant.certificates.minioCertificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n newState.createTenant.certificates.minioCertificates = [...minioCerts];\n return { ...newState };\n case ADD_TENANT_ADD_FILE_TO_MINIO_KEYPAIR:\n const minioCertificates =\n state.createTenant.certificates.minioCertificates;\n\n const NCertList = minioCertificates.map((item: KeyPair) => {\n if (item.id === action.id) {\n return {\n ...item,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n }\n return item;\n });\n newState.createTenant.certificates.minioCertificates = [...NCertList];\n return { ...newState };\n case ADD_TENANT_DELETE_MINIO_KEYPAIR:\n const minioCertsList = state.createTenant.certificates.minioCertificates;\n\n if (minioCertsList.length > 1) {\n const cleanMinioCertsList = minioCertsList.filter(\n (item: KeyPair) => item.id !== action.id\n );\n newState.createTenant.certificates.minioCertificates = [\n ...cleanMinioCertsList,\n ];\n return { ...newState };\n }\n return { ...state };\n case ADD_TENANT_ADD_CA_KEYPAIR:\n const CACerts = [\n ...state.createTenant.certificates.caCertificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n newState.createTenant.certificates.caCertificates = [...CACerts];\n return { ...newState };\n case ADD_TENANT_ADD_FILE_TO_CA_KEYPAIR:\n const caCertificates = state.createTenant.certificates.caCertificates;\n\n const NACList = caCertificates.map((item: KeyPair) => {\n if (item.id === action.id) {\n return {\n ...item,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n }\n return item;\n });\n newState.createTenant.certificates.caCertificates = [...NACList];\n return { ...newState };\n case ADD_TENANT_DELETE_CA_KEYPAIR:\n const CACertsList = state.createTenant.certificates.minioCertificates;\n\n if (CACertsList.length > 1) {\n const cleanMinioCertsList = CACertsList.filter(\n (item: KeyPair) => item.id !== action.id\n );\n newState.createTenant.certificates.caCertificates = [\n ...cleanMinioCertsList,\n ];\n return { ...newState };\n }\n return { ...state };\n case ADD_TENANT_ADD_CONSOLE_CERT:\n const consoleCert = state.createTenant.certificates.consoleCertificate;\n\n newState.createTenant.certificates.consoleCertificate = {\n ...consoleCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_SERVER_CERT:\n const encServerCert = state.createTenant.certificates.serverCertificate;\n\n newState.createTenant.certificates.serverCertificate = {\n ...encServerCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_CLIENT_CERT:\n const encClientCert = state.createTenant.certificates.clientCertificate;\n\n newState.createTenant.certificates.clientCertificate = {\n ...encClientCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_VAULT_CERT:\n const encVaultCert = state.createTenant.certificates.vaultCertificate;\n\n newState.createTenant.certificates.vaultCertificate = {\n ...encVaultCert,\n [action.key]: action.fileName,\n [`encoded_${action.key}`]: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_VAULT_CA:\n const encVaultCA = state.createTenant.certificates.vaultCA;\n\n newState.createTenant.certificates.vaultCA = {\n ...encVaultCA,\n cert: action.fileName,\n encoded_cert: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_ENCRYPTION_GEMALTO_CA:\n const encGemaltoCA = state.createTenant.certificates.gemaltoCA;\n\n newState.createTenant.certificates.gemaltoCA = {\n ...encGemaltoCA,\n cert: action.fileName,\n encoded_cert: action.value,\n };\n\n return { ...newState };\n case ADD_TENANT_RESET_FORM:\n return {\n ...state,\n createTenant: {\n page: 0,\n validPages: [],\n advancedModeOn: false,\n storageClasses: [],\n limitSize: {},\n fields: {\n nameTenant: {\n tenantName: \"\",\n namespace: \"\",\n selectedStorageClass: \"\",\n },\n configure: {\n customImage: false,\n imageName: \"\",\n consoleImage: \"\",\n customDockerhub: false,\n imageRegistry: \"\",\n imageRegistryUsername: \"\",\n imageRegistryPassword: \"\",\n exposeMinIO: true,\n exposeConsole: true,\n },\n identityProvider: {\n idpSelection: \"Built-in\",\n openIDURL: \"\",\n openIDClientID: \"\",\n openIDSecretID: \"\",\n ADURL: \"\",\n ADSkipTLS: false,\n ADServerInsecure: false,\n ADUserNameFilter: \"\",\n ADGroupBaseDN: \"\",\n ADGroupSearchFilter: \"\",\n ADNameAttribute: \"\",\n },\n security: {\n enableAutoCert: true,\n enableCustomCerts: false,\n enableTLS: true,\n },\n encryption: {\n enableEncryption: false,\n encryptionType: \"vault\",\n gemaltoEndpoint: \"\",\n gemaltoToken: \"\",\n gemaltoDomain: \"\",\n gemaltoRetry: \"0\",\n awsEndpoint: \"\",\n awsRegion: \"\",\n awsKMSKey: \"\",\n awsAccessKey: \"\",\n awsSecretKey: \"\",\n awsToken: \"\",\n vaultEndpoint: \"\",\n vaultEngine: \"\",\n vaultNamespace: \"\",\n vaultPrefix: \"\",\n vaultAppRoleEngine: \"\",\n vaultId: \"\",\n vaultSecret: \"\",\n vaultRetry: \"0\",\n vaultPing: \"0\",\n gcpProjectID: \"\",\n gcpEndpoint: \"\",\n gcpClientEmail: \"\",\n gcpClientID: \"\",\n gcpPrivateKeyID: \"\",\n gcpPrivateKey: \"\",\n enableCustomCertsForKES: false,\n },\n tenantSize: {\n volumeSize: \"100\",\n sizeFactor: \"Gi\",\n drivesPerServer: \"1\",\n nodes: \"4\",\n memoryNode: \"2\",\n ecParity: \"\",\n ecParityChoices: [],\n cleanECChoices: [],\n maxAllocableMemo: 0,\n memorySize: {\n error: \"\",\n limit: 0,\n request: 0,\n },\n distribution: {\n error: \"\",\n nodes: 0,\n persistentVolumes: 0,\n disks: 0,\n volumePerDisk: 0,\n },\n ecParityCalc: {\n error: 0,\n defaultEC: \"\",\n erasureCodeSet: 0,\n maxEC: \"\",\n rawCapacity: \"0\",\n storageFactors: [],\n },\n limitSize: {},\n },\n },\n certificates: {\n minioCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n caCertificates: [\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ],\n consoleCertificate: {\n id: \"console_cert_pair\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n serverCertificate: {\n id: \"encryptionServerCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n clientCertificate: {\n id: \"encryptionClientCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCertificate: {\n id: \"encryptionVaultCertificate\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n vaultCA: {\n id: \"encryptionVaultCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n gemaltoCA: {\n id: \"encryptionGemaltoCA\",\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n },\n },\n };\n default:\n return state;\n }\n}\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { applyMiddleware, combineReducers, compose, createStore } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { systemReducer } from \"./reducer\";\nimport { traceReducer } from \"./screens/Console/Trace/reducers\";\nimport { logReducer } from \"./screens/Console/Logs/reducers\";\nimport { healthInfoReducer } from \"./screens/Console/HealthInfo/reducers\";\nimport { watchReducer } from \"./screens/Console/Watch/reducers\";\nimport { consoleReducer } from \"./screens/Console/reducer\";\nimport { bucketsReducer } from \"./screens/Console/Buckets/reducers\";\nimport { objectBrowserReducer } from \"./screens/Console/ObjectBrowser/reducers\";\nimport { tenantsReducer } from \"./screens/Console/Tenants/reducer\";\n\nconst globalReducer = combineReducers({\n system: systemReducer,\n trace: traceReducer,\n logs: logReducer,\n watch: watchReducer,\n console: consoleReducer,\n buckets: bucketsReducer,\n objectBrowser: objectBrowserReducer,\n healthInfo: healthInfoReducer,\n tenants: tenantsReducer,\n});\n\ndeclare global {\n interface Window {\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;\n }\n}\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nexport type AppState = ReturnType;\n\nexport default function configureStore() {\n return createStore(globalReducer, composeEnhancers(applyMiddleware(thunk)));\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n \"New content is available and will be used when all \" +\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log(\"Content is cached for offline use.\");\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get(\"content-type\");\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf(\"javascript\") === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import { createMuiTheme } from \"@material-ui/core\";\n\nconst theme = createMuiTheme({\n palette: {\n primary: {\n light: \"#073052\",\n main: \"#081C42\",\n dark: \"#05122B\",\n contrastText: \"#fff\",\n },\n secondary: {\n light: \"#ff7961\",\n main: \"#f44336\",\n dark: \"#ba000d\",\n contrastText: \"#000\",\n },\n error: {\n light: \"#e03a48\",\n main: \"#dc1f2e\",\n contrastText: \"#ffffff\",\n },\n grey: {\n 100: \"#f0f0f0\",\n 200: \"#e6e6e6\",\n 300: \"#cccccc\",\n 400: \"#999999\",\n 500: \"#8c8c8c\",\n 600: \"#737373\",\n 700: \"#666666\",\n 800: \"#4d4d4d\",\n 900: \"#333333\",\n },\n background: {\n default: \"#F4F4F4\",\n },\n },\n typography: {\n fontFamily: [\"Lato\", \"sans-serif\"].join(\",\"),\n h1: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h2: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h3: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h4: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h5: {\n fontWeight: \"bold\",\n color: \"#081C42\",\n },\n h6: {\n fontWeight: \"bold\",\n color: \"#000000\",\n },\n },\n overrides: {\n MuiButton: {\n root: {\n borderRadius: 3,\n color: \"white\",\n height: 40,\n padding: \"0 20px\",\n fontSize: 14,\n fontWeight: 600,\n boxShadow: \"none\",\n \"& .MuiSvgIcon-root\": {\n maxHeight: 18,\n },\n \"&.MuiButton-contained.Mui-disabled\": {\n backgroundColor: \"#EAEDEE\",\n fontWeight: 600,\n color: \"#767676\",\n },\n \"& .MuiButton-iconSizeMedium > *:first-child\": {\n fontSize: 12,\n },\n },\n },\n },\n});\n\nexport default theme;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport Routes from \"./Routes\";\nimport configureStore from \"./store\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport { ThemeProvider, withStyles } from \"@material-ui/core/styles\";\nimport \"react-virtualized/styles.css\";\nimport \"react-grid-layout/css/styles.css\";\nimport \"react-resizable/css/styles.css\";\n\nimport \"./index.css\";\nimport theme from \"./theme/main\";\n\nconst GlobalCss = withStyles({\n // @global is handled by jss-plugin-global.\n \"@global\": {\n // You should target [class*=\"MuiButton-root\"] instead if you nest themes.\n \".MuiButton-contained\": {\n fontSize: \"14px\",\n textTransform: \"capitalize\",\n padding: \"16px 25px 16px 25px\",\n borderRadius: 3,\n },\n \".MuiButton-sizeSmall\": {\n padding: \"4px 10px\",\n fontSize: \"0.8125rem\",\n },\n \".MuiTableCell-head\": {\n borderRadius: \"3px 3px 0px 0px\",\n fontSize: 13,\n },\n \".MuiPaper-root\": {\n borderRadius: 3,\n },\n \".MuiDrawer-paperAnchorDockedLeft\": {\n borderRight: 0,\n },\n \".MuiDrawer-root\": {\n \"& .MuiPaper-root\": {\n borderRadius: 0,\n },\n },\n },\n})(() => null);\n\nReactDOM.render(\n \n \n \n {/**/}\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx b/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx index ba5d5e6a4..14cf23e96 100644 --- a/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx +++ b/portal-ui/src/screens/Console/Buckets/ListBuckets/ListBuckets.tsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, Fragment } from "react"; import { connect } from "react-redux"; import { createStyles, Theme, withStyles } from "@material-ui/core/styles"; import { Button } from "@material-ui/core"; @@ -23,7 +23,7 @@ import TextField from "@material-ui/core/TextField"; import InputAdornment from "@material-ui/core/InputAdornment"; import SearchIcon from "@material-ui/icons/Search"; import Moment from "react-moment"; -import { Bucket, BucketList } from "../types"; +import { Bucket, BucketList, HasPermissionResponse } from "../types"; import { CreateIcon } from "../../../../icons"; import { niceBytes } from "../../../../common/utils"; import { AppState } from "../../../../store"; @@ -92,6 +92,43 @@ const ListBuckets = ({ const [deleteOpen, setDeleteOpen] = useState(false); const [selectedBucket, setSelectedBucket] = useState(""); const [filterBuckets, setFilterBuckets] = useState(""); + const [loadingPerms, setLoadingPerms] = useState(true); + const [canCreateBucket, setCanCreateBucket] = useState(false); + + // check the permissions for creating bucket + useEffect(() => { + if (loadingPerms) { + api + .invoke("POST", `/api/v1/has-permission`, { + actions: [ + { + id: "createBucket", + action: "s3:CreateBucket", + }, + ], + }) + .then((res: HasPermissionResponse) => { + setLoadingPerms(false); + if (!res.permissions) { + return; + } + const actions = res.permissions ? res.permissions : []; + + let canCreate = actions.find((s) => s.id == "createBucket"); + if (canCreate && canCreate.can) { + setCanCreateBucket(true); + } else { + setCanCreateBucket(false); + } + + setLoadingPerms(false); + }) + .catch((err: any) => { + setLoadingPerms(false); + setErrorSnackMessage(err); + }); + } + }, [loadingPerms, setErrorSnackMessage]); useEffect(() => { if (loading) { @@ -155,7 +192,7 @@ const ListBuckets = ({ }); return ( - + {addBucketModalOpen && ( - + {canCreateBucket && ( + + )}
@@ -232,7 +271,7 @@ const ListBuckets = ({
-
+ ); }; diff --git a/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx b/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx index cd52bb746..df3ce6c10 100644 --- a/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx +++ b/portal-ui/src/screens/Console/Buckets/ViewBucket/ViewBucket.tsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, Fragment } from "react"; import { connect } from "react-redux"; import { createStyles, Theme, withStyles } from "@material-ui/core/styles"; import { Button, IconButton } from "@material-ui/core"; @@ -38,6 +38,7 @@ import { BucketReplicationRule, BucketReplicationRuleDeleteMarker, BucketVersioning, + HasPermissionResponse, } from "../types"; import { CreateIcon } from "../../../../icons"; import { niceBytes } from "../../../../common/utils"; @@ -196,7 +197,7 @@ function TabPanel(props: TabPanelProps) { style={{ marginTop: "5px" }} {...other} > - {value === index && {children}} + {value === index && {children}} ); } @@ -247,6 +248,62 @@ const ViewBucket = ({ const [enableVersioningOpen, setEnableVersioningOpen] = useState( false ); + const [loadingPerms, setLoadingPerms] = useState(true); + const [canPutReplication, setCanPutReplication] = useState(false); + const [canGetReplication, setCanGetReplication] = useState(false); + + // check the permissions for creating bucket + useEffect(() => { + if (loadingPerms) { + api + .invoke("POST", `/api/v1/has-permission`, { + actions: [ + { + id: "PutReplicationConfiguration", + action: "s3:PutReplicationConfiguration", + bucket_name: bucketName, + }, + { + id: "GetReplicationConfiguration", + action: "s3:GetReplicationConfiguration", + bucket_name: bucketName, + }, + ], + }) + .then((res: HasPermissionResponse) => { + setLoadingPerms(false); + if (!res.permissions) { + return; + } + const actions = res.permissions ? res.permissions : []; + + let canPutReplication = actions.find( + (s) => s.id == "PutReplicationConfiguration" + ); + + if (canPutReplication && canPutReplication.can) { + setCanPutReplication(true); + } else { + setCanPutReplication(false); + } + let canGetReplication = actions.find( + (s) => s.id == "GetReplicationConfiguration" + ); + + if (canGetReplication && canGetReplication.can) { + setCanGetReplication(true); + } else { + setCanGetReplication(false); + } + + setLoadingPerms(false); + }) + .catch((err: any) => { + setLoadingPerms(false); + setErrorSnackMessage(err); + }); + } + }, [loadingPerms, setErrorSnackMessage]); const bucketName = match.params["bucketName"]; @@ -430,19 +487,15 @@ const ViewBucket = ({ } const eventsDisplay = (events: string[]) => { - return {events.join(", ")}; + return {events.join(", ")}; }; const ruleDestDisplay = (events: BucketReplicationDestination) => { - return ( - - {events.bucket.replace("arn:aws:s3:::", "")} - - ); + return {events.bucket.replace("arn:aws:s3:::", "")}; }; const ruleDelDisplay = (events: BucketReplicationRuleDeleteMarker) => { - return {events.status}; + return {events.status}; }; const setOpenReplicationOpen = (open = false) => { @@ -469,7 +522,7 @@ const ViewBucket = ({ const tableActions = [{ type: "delete", onClick: confirmDeleteEvent }]; return ( - + {addScreenOpen && ( {replicationRules.length ? "Yes" : "No"} {!hasObjectLocking && ( - +
Object Locking:
No
-
+
)}
Encryption:
@@ -608,7 +661,7 @@ const ViewBucket = ({ variant="indeterminate" /> ) : ( - + {isVersioned && !loadingVersioning ? "Yes" : "No"}   - + )}
Retention:
@@ -634,7 +687,7 @@ const ViewBucket = ({ variant="indeterminate" /> ) : ( - +   - + )} @@ -671,7 +724,9 @@ const ViewBucket = ({ aria-label="cluster-tabs" > - + {canGetReplication && ( + + )} @@ -689,17 +744,21 @@ const ViewBucket = ({ )} {curTab === 1 && ( - + + {canPutReplication && ( + + )} + )} @@ -723,37 +782,39 @@ const ViewBucket = ({ idField="id" /> - - - + {canGetReplication && ( + + + + )} -
+ ); }; diff --git a/portal-ui/src/screens/Console/Buckets/types.tsx b/portal-ui/src/screens/Console/Buckets/types.tsx index 786463da9..6f0053bdc 100644 --- a/portal-ui/src/screens/Console/Buckets/types.tsx +++ b/portal-ui/src/screens/Console/Buckets/types.tsx @@ -118,3 +118,12 @@ export interface IRemoteBucket { status: string; service: string; } + +export interface PermissionAction { + id: string; + can: boolean; +} + +export interface HasPermissionResponse { + permissions: PermissionAction[]; +} diff --git a/portal-ui/src/screens/Console/ObjectBrowser/BrowseBuckets.tsx b/portal-ui/src/screens/Console/ObjectBrowser/BrowseBuckets.tsx index c59b2e515..9ba3a441d 100644 --- a/portal-ui/src/screens/Console/ObjectBrowser/BrowseBuckets.tsx +++ b/portal-ui/src/screens/Console/ObjectBrowser/BrowseBuckets.tsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, Fragment } from "react"; import { withRouter } from "react-router-dom"; import { connect } from "react-redux"; import get from "lodash/get"; @@ -26,7 +26,7 @@ import SearchIcon from "@material-ui/icons/Search"; import { Button } from "@material-ui/core"; import { CreateIcon } from "../../../icons"; import { niceBytes } from "../../../common/utils"; -import { Bucket, BucketList } from "../Buckets/types"; +import { Bucket, BucketList, HasPermissionResponse } from "../Buckets/types"; import { actionsTray, objectBrowserCommon, @@ -118,6 +118,40 @@ const BrowseBuckets = ({ const [records, setRecords] = useState([]); const [addScreenOpen, setAddScreenOpen] = useState(false); const [filterBuckets, setFilterBuckets] = useState(""); + const [loadingPerms, setLoadingPerms] = useState(true); + const [canCreateBucket, setCanCreateBucket] = useState(false); + + // check the permissions for creating bucket + useEffect(() => { + if (loadingPerms) { + api + .invoke("POST", `/api/v1/has-permission`, { + actions: [ + { + id: "createBucket", + action: "s3:CreateBucket", + }, + ], + }) + .then((res: HasPermissionResponse) => { + const canCreate = res.permissions + .filter((s) => s.id == "createBucket") + .pop(); + if (canCreate && canCreate.can) { + setCanCreateBucket(true); + } else { + setCanCreateBucket(false); + } + + setLoadingPerms(false); + // setRecords(res.buckets || []); + }) + .catch((err: any) => { + setLoadingPerms(false); + setErrorSnackMessage(err); + }); + } + }, [loadingPerms, setErrorSnackMessage]); useEffect(() => { resetRoutesList(true); @@ -170,7 +204,7 @@ const BrowseBuckets = ({ }; return ( - + {addScreenOpen && ( -
- -
+ {canCreateBucket && ( +
+ +
+ )} -
+ ); }; diff --git a/restapi/embedded_spec.go b/restapi/embedded_spec.go index 52415d41a..8d9e95999 100644 --- a/restapi/embedded_spec.go +++ b/restapi/embedded_spec.go @@ -1724,6 +1724,39 @@ func init() { } } }, + "/has-permission": { + "post": { + "tags": [ + "UserAPI" + ], + "summary": "Checks whether the user can perform a series of actions", + "operationId": "HasPermissionTo", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hasPermissionRequest" + } + } + ], + "responses": { + "201": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/hasPermissionResponse" + } + }, + "default": { + "description": "Generic error response.", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, "/login": { "get": { "security": [], @@ -4094,6 +4127,28 @@ func init() { } } }, + "hasPermissionRequest": { + "type": "object", + "properties": { + "actions": { + "type": "array", + "items": { + "$ref": "#/definitions/policyArgs" + } + } + } + }, + "hasPermissionResponse": { + "type": "object", + "properties": { + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/permissionAction" + } + } + } + }, "iamEntity": { "type": "string", "pattern": "^[\\w+=,.@-]{1,64}$" @@ -4704,6 +4759,17 @@ func init() { "type": "string" } }, + "permissionAction": { + "type": "object", + "properties": { + "can": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, "podAffinityTerm": { "description": "Required. A pod affinity term, associated with the corresponding weight.", "type": "object", @@ -4777,6 +4843,20 @@ func init() { } } }, + "policyArgs": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "bucket_name": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, "policyEntity": { "type": "string", "default": "user", @@ -7483,6 +7563,39 @@ func init() { } } }, + "/has-permission": { + "post": { + "tags": [ + "UserAPI" + ], + "summary": "Checks whether the user can perform a series of actions", + "operationId": "HasPermissionTo", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/hasPermissionRequest" + } + } + ], + "responses": { + "201": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/hasPermissionResponse" + } + }, + "default": { + "description": "Generic error response.", + "schema": { + "$ref": "#/definitions/error" + } + } + } + } + }, "/login": { "get": { "security": [], @@ -10462,6 +10575,28 @@ func init() { } } }, + "hasPermissionRequest": { + "type": "object", + "properties": { + "actions": { + "type": "array", + "items": { + "$ref": "#/definitions/policyArgs" + } + } + } + }, + "hasPermissionResponse": { + "type": "object", + "properties": { + "permissions": { + "type": "array", + "items": { + "$ref": "#/definitions/permissionAction" + } + } + } + }, "iamEntity": { "type": "string", "pattern": "^[\\w+=,.@-]{1,64}$" @@ -11028,6 +11163,17 @@ func init() { "type": "string" } }, + "permissionAction": { + "type": "object", + "properties": { + "can": { + "type": "boolean" + }, + "id": { + "type": "string" + } + } + }, "podAffinityTerm": { "description": "Required. A pod affinity term, associated with the corresponding weight.", "type": "object", @@ -11079,6 +11225,20 @@ func init() { } } }, + "policyArgs": { + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "bucket_name": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, "policyEntity": { "type": "string", "default": "user", diff --git a/restapi/operations/console_api.go b/restapi/operations/console_api.go index 0036027b2..2fc51bd0c 100644 --- a/restapi/operations/console_api.go +++ b/restapi/operations/console_api.go @@ -184,6 +184,9 @@ func NewConsoleAPI(spec *loads.Document) *ConsoleAPI { AdminAPIGroupInfoHandler: admin_api.GroupInfoHandlerFunc(func(params admin_api.GroupInfoParams, principal *models.Principal) middleware.Responder { return middleware.NotImplemented("operation admin_api.GroupInfo has not yet been implemented") }), + UserAPIHasPermissionToHandler: user_api.HasPermissionToHandlerFunc(func(params user_api.HasPermissionToParams, principal *models.Principal) middleware.Responder { + return middleware.NotImplemented("operation user_api.HasPermissionTo has not yet been implemented") + }), AdminAPIListAllTenantsHandler: admin_api.ListAllTenantsHandlerFunc(func(params admin_api.ListAllTenantsParams, principal *models.Principal) middleware.Responder { return middleware.NotImplemented("operation admin_api.ListAllTenants has not yet been implemented") }), @@ -475,6 +478,8 @@ type ConsoleAPI struct { AdminAPIGetUserInfoHandler admin_api.GetUserInfoHandler // AdminAPIGroupInfoHandler sets the operation handler for the group info operation AdminAPIGroupInfoHandler admin_api.GroupInfoHandler + // UserAPIHasPermissionToHandler sets the operation handler for the has permission to operation + UserAPIHasPermissionToHandler user_api.HasPermissionToHandler // AdminAPIListAllTenantsHandler sets the operation handler for the list all tenants operation AdminAPIListAllTenantsHandler admin_api.ListAllTenantsHandler // UserAPIListBucketEventsHandler sets the operation handler for the list bucket events operation @@ -777,6 +782,9 @@ func (o *ConsoleAPI) Validate() error { if o.AdminAPIGroupInfoHandler == nil { unregistered = append(unregistered, "admin_api.GroupInfoHandler") } + if o.UserAPIHasPermissionToHandler == nil { + unregistered = append(unregistered, "user_api.HasPermissionToHandler") + } if o.AdminAPIListAllTenantsHandler == nil { unregistered = append(unregistered, "admin_api.ListAllTenantsHandler") } @@ -1198,6 +1206,10 @@ func (o *ConsoleAPI) initHandlerCache() { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/groups/{name}"] = admin_api.NewGroupInfo(o.context, o.AdminAPIGroupInfoHandler) + if o.handlers["POST"] == nil { + o.handlers["POST"] = make(map[string]http.Handler) + } + o.handlers["POST"]["/has-permission"] = user_api.NewHasPermissionTo(o.context, o.UserAPIHasPermissionToHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } diff --git a/restapi/operations/user_api/has_permission_to.go b/restapi/operations/user_api/has_permission_to.go new file mode 100644 index 000000000..721c1cb15 --- /dev/null +++ b/restapi/operations/user_api/has_permission_to.go @@ -0,0 +1,90 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package user_api + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime/middleware" + + "github.com/minio/console/models" +) + +// HasPermissionToHandlerFunc turns a function with the right signature into a has permission to handler +type HasPermissionToHandlerFunc func(HasPermissionToParams, *models.Principal) middleware.Responder + +// Handle executing the request and returning a response +func (fn HasPermissionToHandlerFunc) Handle(params HasPermissionToParams, principal *models.Principal) middleware.Responder { + return fn(params, principal) +} + +// HasPermissionToHandler interface for that can handle valid has permission to params +type HasPermissionToHandler interface { + Handle(HasPermissionToParams, *models.Principal) middleware.Responder +} + +// NewHasPermissionTo creates a new http.Handler for the has permission to operation +func NewHasPermissionTo(ctx *middleware.Context, handler HasPermissionToHandler) *HasPermissionTo { + return &HasPermissionTo{Context: ctx, Handler: handler} +} + +/*HasPermissionTo swagger:route POST /has-permission UserAPI hasPermissionTo + +Checks whether the user can perform a series of actions + +*/ +type HasPermissionTo struct { + Context *middleware.Context + Handler HasPermissionToHandler +} + +func (o *HasPermissionTo) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + r = rCtx + } + var Params = NewHasPermissionToParams() + + uprinc, aCtx, err := o.Context.Authorize(r, route) + if err != nil { + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + if aCtx != nil { + r = aCtx + } + var principal *models.Principal + if uprinc != nil { + principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise + } + + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params, principal) // actually handle the request + + o.Context.Respond(rw, r, route.Produces, route, res) + +} diff --git a/restapi/operations/user_api/has_permission_to_parameters.go b/restapi/operations/user_api/has_permission_to_parameters.go new file mode 100644 index 000000000..a532ee2d4 --- /dev/null +++ b/restapi/operations/user_api/has_permission_to_parameters.go @@ -0,0 +1,94 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package user_api + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "io" + "net/http" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/runtime/middleware" + + "github.com/minio/console/models" +) + +// NewHasPermissionToParams creates a new HasPermissionToParams object +// no default values defined in spec. +func NewHasPermissionToParams() HasPermissionToParams { + + return HasPermissionToParams{} +} + +// HasPermissionToParams contains all the bound params for the has permission to operation +// typically these are obtained from a http.Request +// +// swagger:parameters HasPermissionTo +type HasPermissionToParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` + + /* + Required: true + In: body + */ + Body *models.HasPermissionRequest +} + +// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface +// for simple values it will use straight method calls. +// +// To ensure default values, the struct must have been initialized with NewHasPermissionToParams() beforehand. +func (o *HasPermissionToParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + if runtime.HasBody(r) { + defer r.Body.Close() + var body models.HasPermissionRequest + if err := route.Consumer.Consume(r.Body, &body); err != nil { + if err == io.EOF { + res = append(res, errors.Required("body", "body", "")) + } else { + res = append(res, errors.NewParseError("body", "body", "", err)) + } + } else { + // validate body object + if err := body.Validate(route.Formats); err != nil { + res = append(res, err) + } + + if len(res) == 0 { + o.Body = &body + } + } + } else { + res = append(res, errors.Required("body", "body", "")) + } + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/restapi/operations/user_api/has_permission_to_responses.go b/restapi/operations/user_api/has_permission_to_responses.go new file mode 100644 index 000000000..4093499eb --- /dev/null +++ b/restapi/operations/user_api/has_permission_to_responses.go @@ -0,0 +1,133 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package user_api + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" + + "github.com/minio/console/models" +) + +// HasPermissionToCreatedCode is the HTTP code returned for type HasPermissionToCreated +const HasPermissionToCreatedCode int = 201 + +/*HasPermissionToCreated A successful response. + +swagger:response hasPermissionToCreated +*/ +type HasPermissionToCreated struct { + + /* + In: Body + */ + Payload *models.HasPermissionResponse `json:"body,omitempty"` +} + +// NewHasPermissionToCreated creates HasPermissionToCreated with default headers values +func NewHasPermissionToCreated() *HasPermissionToCreated { + + return &HasPermissionToCreated{} +} + +// WithPayload adds the payload to the has permission to created response +func (o *HasPermissionToCreated) WithPayload(payload *models.HasPermissionResponse) *HasPermissionToCreated { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the has permission to created response +func (o *HasPermissionToCreated) SetPayload(payload *models.HasPermissionResponse) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *HasPermissionToCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(201) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} + +/*HasPermissionToDefault Generic error response. + +swagger:response hasPermissionToDefault +*/ +type HasPermissionToDefault struct { + _statusCode int + + /* + In: Body + */ + Payload *models.Error `json:"body,omitempty"` +} + +// NewHasPermissionToDefault creates HasPermissionToDefault with default headers values +func NewHasPermissionToDefault(code int) *HasPermissionToDefault { + if code <= 0 { + code = 500 + } + + return &HasPermissionToDefault{ + _statusCode: code, + } +} + +// WithStatusCode adds the status to the has permission to default response +func (o *HasPermissionToDefault) WithStatusCode(code int) *HasPermissionToDefault { + o._statusCode = code + return o +} + +// SetStatusCode sets the status to the has permission to default response +func (o *HasPermissionToDefault) SetStatusCode(code int) { + o._statusCode = code +} + +// WithPayload adds the payload to the has permission to default response +func (o *HasPermissionToDefault) WithPayload(payload *models.Error) *HasPermissionToDefault { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the has permission to default response +func (o *HasPermissionToDefault) SetPayload(payload *models.Error) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *HasPermissionToDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(o._statusCode) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} diff --git a/restapi/operations/user_api/has_permission_to_urlbuilder.go b/restapi/operations/user_api/has_permission_to_urlbuilder.go new file mode 100644 index 000000000..a222bf3e2 --- /dev/null +++ b/restapi/operations/user_api/has_permission_to_urlbuilder.go @@ -0,0 +1,104 @@ +// Code generated by go-swagger; DO NOT EDIT. + +// This file is part of MinIO Console Server +// Copyright (c) 2021 MinIO, Inc. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . +// + +package user_api + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "errors" + "net/url" + golangswaggerpaths "path" +) + +// HasPermissionToURL generates an URL for the has permission to operation +type HasPermissionToURL struct { + _basePath string +} + +// WithBasePath sets the base path for this url builder, only required when it's different from the +// base path specified in the swagger spec. +// When the value of the base path is an empty string +func (o *HasPermissionToURL) WithBasePath(bp string) *HasPermissionToURL { + o.SetBasePath(bp) + return o +} + +// SetBasePath sets the base path for this url builder, only required when it's different from the +// base path specified in the swagger spec. +// When the value of the base path is an empty string +func (o *HasPermissionToURL) SetBasePath(bp string) { + o._basePath = bp +} + +// Build a url path and query string +func (o *HasPermissionToURL) Build() (*url.URL, error) { + var _result url.URL + + var _path = "/has-permission" + + _basePath := o._basePath + if _basePath == "" { + _basePath = "/api/v1" + } + _result.Path = golangswaggerpaths.Join(_basePath, _path) + + return &_result, nil +} + +// Must is a helper function to panic when the url builder returns an error +func (o *HasPermissionToURL) Must(u *url.URL, err error) *url.URL { + if err != nil { + panic(err) + } + if u == nil { + panic("url can't be nil") + } + return u +} + +// String returns the string representation of the path with query string +func (o *HasPermissionToURL) String() string { + return o.Must(o.Build()).String() +} + +// BuildFull builds a full url with scheme, host, path and query string +func (o *HasPermissionToURL) BuildFull(scheme, host string) (*url.URL, error) { + if scheme == "" { + return nil, errors.New("scheme is required for a full url on HasPermissionToURL") + } + if host == "" { + return nil, errors.New("host is required for a full url on HasPermissionToURL") + } + + base, err := o.Build() + if err != nil { + return nil, err + } + + base.Scheme = scheme + base.Host = host + return base, nil +} + +// StringFull returns the string representation of a complete url +func (o *HasPermissionToURL) StringFull(scheme, host string) string { + return o.Must(o.BuildFull(scheme, host)).String() +} diff --git a/restapi/user_account.go b/restapi/user_account.go index a387dbba3..959df8f4a 100644 --- a/restapi/user_account.go +++ b/restapi/user_account.go @@ -21,6 +21,8 @@ import ( "net/http" "time" + iampolicy "github.com/minio/minio/pkg/iam/policy" + "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/minio/console/models" @@ -42,6 +44,15 @@ func registerAccountHandlers(api *operations.ConsoleAPI) { user_api.NewLoginCreated().WithPayload(changePasswordResponse).WriteResponse(w, p) }) }) + // Checks if user can perform an action + api.UserAPIHasPermissionToHandler = user_api.HasPermissionToHandlerFunc(func(params user_api.HasPermissionToParams, session *models.Principal) middleware.Responder { + hasPermissionRespose, err := getUserHasPermissionsResponse(session, params) + if err != nil { + return user_api.NewHasPermissionToDefault(500).WithPayload(err) + } + // Custom response writer to update the session cookies + return user_api.NewHasPermissionToCreated().WithPayload(hasPermissionRespose) + }) } // changePassword validate current current user password and if it's correct set the new password @@ -92,3 +103,48 @@ func getChangePasswordResponse(session *models.Principal, params user_api.Accoun } return loginResponse, nil } + +func getUserHasPermissionsResponse(session *models.Principal, params user_api.HasPermissionToParams) (*models.HasPermissionResponse, *models.Error) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*20) + defer cancel() + + mAdmin, err := newMAdminClient(session) + if err != nil { + return nil, prepareError(err) + } + // create a minioClient interface implementation + // defining the client to be used + adminClient := adminClient{client: mAdmin} + + userPolicy, err := getAccountPolicy(ctx, adminClient) + if err != nil { + return nil, prepareError(err) + } + + var perms []*models.PermissionAction + + for _, p := range params.Body.Actions { + canPerform := userCanDo(iampolicy.Args{ + Action: iampolicy.Action(p.Action), + BucketName: p.BucketName, + }, userPolicy) + perms = append(perms, &models.PermissionAction{ + Can: canPerform, + ID: p.ID, + }) + } + + return &models.HasPermissionResponse{ + Permissions: perms, + }, nil +} + +func userCanDo(arg iampolicy.Args, userPolicy *iampolicy.Policy) bool { + // check in all the statements if any allows the passed action + for _, stmt := range userPolicy.Statements { + if stmt.IsAllowed(arg) { + return true + } + } + return false +} diff --git a/restapi/user_account_test.go b/restapi/user_account_test.go index d75171dc7..3fcd2b8dd 100644 --- a/restapi/user_account_test.go +++ b/restapi/user_account_test.go @@ -18,9 +18,12 @@ package restapi import ( "context" + "encoding/json" "errors" "testing" + iampolicy "github.com/minio/minio/pkg/iam/policy" + "github.com/minio/console/models" ) @@ -106,3 +109,152 @@ func Test_changePassword(t *testing.T) { }) } } + +func Test_useCanDo(t *testing.T) { + type args struct { + arg iampolicy.Args + userPolicy string + } + tests := []struct { + name string + args args + want bool + }{ + { + name: "Create Bucket", + args: args{ + arg: iampolicy.Args{ + Action: "s3:CreateBucket", + }, + userPolicy: `{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "admin:*" + ] + }, + { + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::*" + ] + } + ] + }`, + }, + want: true, + }, + { + name: "Create Bucket, No Admin", + args: args{ + arg: iampolicy.Args{ + Action: "s3:CreateBucket", + }, + userPolicy: `{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::*" + ] + } + ] + }`, + }, + want: true, + }, + { + name: "Create Bucket, By Prefix", + args: args{ + arg: iampolicy.Args{ + Action: "s3:CreateBucket", + }, + userPolicy: `{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::bucket1" + ] + } + ] + }`, + }, + want: false, + }, + { + name: "Create Bucket, With Bucket Name", + args: args{ + arg: iampolicy.Args{ + Action: "s3:CreateBucket", + BucketName: "bucket2", + }, + userPolicy: `{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "s3:*" + ], + "Resource": [ + "arn:aws:s3:::bucket1" + ] + } + ] + }`, + }, + want: false, + }, + { + name: "Can't Create Bucket", + args: args{ + arg: iampolicy.Args{ + Action: "s3:CreateBucket", + BucketName: "bucket2", + }, + userPolicy: `{ + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VisualEditor1", + "Effect": "Allow", + "Action": "s3:ListBucket", + "Resource": [ + "arn:aws:s3:::bucket1", + "arn:aws:s3:::bucket1/*", + "arn:aws:s3:::lkasdkljasd090901", + "arn:aws:s3:::lkasdkljasd090901/*" + ] + } + ] + }`, + }, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + var pol iampolicy.Policy + if err := json.Unmarshal([]byte(tt.args.userPolicy), &pol); err != nil { + t.Errorf("Policy can't be parsed: %s", err) + } + if got := userCanDo(tt.args.arg, &pol); got != tt.want { + t.Errorf("userCanDo() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/restapi/user_buckets.go b/restapi/user_buckets.go index 8c73d7aaf..26831a0d6 100644 --- a/restapi/user_buckets.go +++ b/restapi/user_buckets.go @@ -324,6 +324,7 @@ func getAccountInfo(ctx context.Context, client MinioAdmin) ([]*models.Bucket, e if err != nil { return []*models.Bucket{}, err } + var bucketInfos []*models.Bucket for _, bucket := range info.Buckets { bucketElem := &models.Bucket{Name: swag.String(bucket.Name), CreationDate: bucket.Created.Format(time.RFC3339), Size: int64(bucket.Size)} diff --git a/swagger.yml b/swagger.yml index 328c585bd..65d7cfe8e 100644 --- a/swagger.yml +++ b/swagger.yml @@ -946,6 +946,28 @@ paths: tags: - UserAPI + /has-permission: + post: + summary: Checks whether the user can perform a series of actions + operationId: HasPermissionTo + parameters: + - name: body + in: body + required: true + schema: + $ref: "#/definitions/hasPermissionRequest" + responses: + 201: + description: A successful response. + schema: + $ref: "#/definitions/hasPermissionResponse" + default: + description: Generic error response. + schema: + $ref: "#/definitions/error" + tags: + - UserAPI + /users: get: summary: List Users @@ -1557,14 +1579,14 @@ paths: summary: Activate a particular tenant using the existing subscription license operationId: SubscriptionActivate parameters: - - name: namespace - in: path - required: true - type: string - - name: tenant - in: path - required: true - type: string + - name: namespace + in: path + required: true + type: string + - name: tenant + in: path + required: true + type: string responses: 204: description: A successful response. @@ -2145,7 +2167,7 @@ paths: $ref: "#/definitions/error" tags: - AdminAPI - + /direct-csi/drives: get: summary: Get direct-csi drives list @@ -2170,7 +2192,7 @@ paths: $ref: "#/definitions/error" tags: - AdminAPI - + /direct-csi/volumes: get: summary: Get direct-csi volumes list @@ -2778,7 +2800,7 @@ definitions: type: string status: type: string - enum: [ok] + enum: [ ok ] operator: type: boolean widgetResult: @@ -4050,7 +4072,7 @@ definitions: restart: description: Returns wheter server needs to restart to apply changes or not type: boolean - + subscriptionValidateRequest: type: object @@ -4105,7 +4127,7 @@ definitions: type: string message: type: string - + getDirectCSIVolumeListResponse: type: object properties: @@ -4113,7 +4135,7 @@ definitions: type: array items: $ref: "#/definitions/directCSIVolumeInfo" - + directCSIVolumeInfo: type: object properties: @@ -4126,3 +4148,34 @@ definitions: type: string drive: type: string + + policyArgs: + type: object + properties: + id: + type: string + action: + type: string + bucket_name: + type: string + hasPermissionRequest: + type: object + properties: + actions: + type: array + items: + $ref: "#/definitions/policyArgs" + permissionAction: + type: object + properties: + id: + type: string + can: + type: boolean + hasPermissionResponse: + type: object + properties: + permissions: + type: array + items: + $ref: "#/definitions/permissionAction"