{"version":3,"sources":["history.ts","screens/LoginPage/types.ts","types.ts","actions.ts","common/utils.ts","common/api/index.ts","icons/RefreshIcon.tsx","screens/LoginPage/LoginPage.tsx","screens/Console/Common/FormComponents/common/styleLibrary.ts","common/Copyright.tsx","screens/NotFoundPage.tsx","icons/StorageIcon.tsx","icons/ShareIcon.tsx","icons/FolderIcon.tsx","icons/EditIcon.tsx","icons/SearchIcon.tsx","icons/ObjectBrowserFolderIcon.tsx","icons/DashboardIcon.tsx","icons/WatchIcon.tsx","icons/HealIcon.tsx","icons/OperatorLogo.tsx","icons/DeleteIcon.tsx","icons/ReportedUsageIcon.tsx","icons/AccountIcon.tsx","icons/TenantsOutlineIcon.tsx","icons/HelpIcon.tsx","icons/DiagnosticsIcon.tsx","icons/CopyIcon.tsx","icons/ConsoleLogo.tsx","icons/TraceIcon.tsx","icons/AddIcon.tsx","icons/BackSettingsIcon.tsx","icons/LicenseIcon.tsx","icons/RemoveIcon.tsx","icons/AddFolderIcon.tsx","icons/IAMPoliciesIcon.tsx","icons/UsersIcon.tsx","icons/DocumentationIcon.tsx","icons/TrashIcon.tsx","icons/DownloadIcon.tsx","icons/GroupsIcon.tsx","icons/TenantsIcon.tsx","icons/CreateIcon.tsx","icons/SyncIcon.tsx","icons/LogoutIcon.tsx","icons/HistoryIcon.tsx","icons/BucketsIcon.tsx","icons/ObjectBrowserIcon.tsx","icons/SettingsIcon.tsx","icons/UploadIcon.tsx","icons/LogsIcon.tsx","icons/ServersIcon.tsx","icons/TotalObjectsIcon.tsx","icons/CircleIcon.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/ShareIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/CloudIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/ConsoleIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/DisableIcon.tsx","screens/Console/Common/TableWrapper/TableActionIcons/FormatDriveIcon.tsx","screens/Console/Common/TableWrapper/TableActionButton.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/Common/FormComponents/PredefinedList/PredefinedList.tsx","screens/Console/Common/GenericWizard/WizardPage.tsx","screens/Console/Common/GenericWizard/GenericWizard.tsx","screens/Console/Buckets/ListBuckets/BulkReplicationModal.tsx","screens/Console/Buckets/ListBuckets/ListBuckets.tsx","screens/shared/tabs.tsx","screens/Console/Buckets/BucketDetails/AccessDetailsPanel.tsx","screens/Console/Buckets/BucketDetails/SetAccessPolicy.tsx","screens/Console/Buckets/BucketDetails/SetRetentionConfig.tsx","screens/Console/Buckets/BucketDetails/EnableBucketEncryption.tsx","screens/Console/Buckets/BucketDetails/EnableVersioningModal.tsx","screens/Console/Buckets/BucketDetails/EnableQuota.tsx","screens/Console/Buckets/BucketDetails/BucketSummaryPanel.tsx","screens/Console/Buckets/BucketDetails/DeleteEvent.tsx","screens/Console/Common/FormComponents/AutocompleteWrapper/AutocompleteWrapper.tsx","screens/Console/Buckets/BucketDetails/AddEvent.tsx","screens/Console/Buckets/BucketDetails/BucketEventsPanel.tsx","screens/Console/Common/FormComponents/QueryMultiSelector/QueryMultiSelector.tsx","screens/Console/Buckets/BucketDetails/AddReplicationModal.tsx","screens/Console/Buckets/BucketDetails/DeleteReplicationRule.tsx","screens/Console/Buckets/BucketDetails/BucketReplicationPanel.tsx","screens/Console/Buckets/BucketDetails/EditLifecycleConfiguration.tsx","screens/Console/Common/FormComponents/DateSelector/utils.ts","screens/Console/Common/FormComponents/DateSelector/DateSelector.tsx","screens/Console/Buckets/BucketDetails/AddLifecycleModal.tsx","screens/Console/Buckets/BucketDetails/BucketLifecyclePanel.tsx","screens/Console/Common/ScreenTitle/ScreenTitle.tsx","screens/Console/Buckets/BucketDetails/AddAccessRule.tsx","screens/Console/Buckets/BucketDetails/DeleteAccessRule.tsx","screens/Console/Buckets/BucketDetails/EditAccessRule.tsx","screens/Console/Buckets/BucketDetails/AccessRulePanel.tsx","screens/Console/Buckets/BucketDetails/BucketDetails.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/ListPolicies.tsx","screens/Console/Policies/PolicyDetails.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","screens/Console/Dashboard/BasicDashboard/ServerInfoCard.tsx","screens/Console/Dashboard/BasicDashboard/DriveInfoCard.tsx","screens/Console/Dashboard/BasicDashboard/BasicDashboard.tsx","screens/Console/Dashboard/Dashboard.tsx","screens/Console/Menu/utils.ts","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/Policies/PolicySelectors.tsx","screens/Console/Users/AddUser.tsx","screens/Console/Users/DeleteUser.tsx","screens/Console/Users/BulkAddToGroup.tsx","screens/Console/Policies/SetPolicy.tsx","screens/Console/Users/ListUsers.tsx","screens/Console/Users/ChangeUserGroups.tsx","screens/Console/Users/SetUserPolicies.tsx","screens/Console/Users/AddUserServiceAccount.tsx","screens/Console/Users/UserServiceAccountsPanel.tsx","screens/Console/Account/ChangeUserPasswordModal.tsx","screens/Console/Users/DeleteUserString.tsx","screens/Console/Users/UserDetails.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","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","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/shared/ErrorBlock.tsx","screens/Console/Common/FormComponents/FileSelector/FileSelector.tsx","screens/Console/Common/FormComponents/FileSelector/utils.ts","screens/Console/Configurations/TiersConfiguration/AddTierConfiguration.tsx","screens/Console/Configurations/TiersConfiguration/UpdateTierCredentiasModal.tsx","screens/Console/Configurations/TiersConfiguration/ListTiersConfiguration.tsx","screens/Console/Configurations/ConfigurationMain.tsx","screens/Console/Configurations/ConfigurationPanels/WebhookPanel.tsx","screens/Console/Tenants/types.ts","screens/Console/Tenants/actions.ts","screens/Console/Tenants/ListTenants/DeleteTenant.tsx","screens/Console/Tenants/TenantDetails/utils.ts","utils/validationFunctions.ts","screens/Console/Tenants/utils.ts","screens/Console/Tenants/AddTenant/Steps/helpers/AddNamespaceModal.tsx","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/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/Steps/Affinity.tsx","screens/Console/Tenants/AddTenant/AddTenant.tsx","screens/Console/Tenants/ListTenants/ListTenants.tsx","screens/Console/Tenants/TenantsMain.tsx","screens/Console/Tenants/TenantDetails/TenantYAML.tsx","screens/Console/Common/UsageBarWrapper/UsageBarWrapper.tsx","screens/Console/Tenants/TenantDetails/UpdateTenantModal.tsx","screens/Console/Tenants/TenantDetails/TenantSummary.tsx","screens/Console/Tenants/TenantDetails/SubnetLicenseTenant.tsx","screens/Console/Tenants/TenantDetails/TenantLicense.tsx","screens/Console/Tenants/TenantDetails/AddPoolModal.tsx","screens/Console/Tenants/TenantDetails/PoolsSummary.tsx","screens/Console/Tenants/TenantDetails/DeletePod.tsx","screens/Console/Tenants/TenantDetails/PodsSummary.tsx","screens/Console/Tenants/TenantDetails/TenantMetrics.tsx","screens/Console/Tenants/TenantDetails/ConfirmationDialog.tsx","screens/Console/Tenants/TenantDetails/TenantSecurity.tsx","screens/Console/Tenants/TenantDetails/pods/PodLogs.tsx","screens/Console/Tenants/TenantDetails/pods/PodEvents.tsx","screens/Console/Tenants/TenantDetails/pods/PodDetails.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","screens/Console/Buckets/ListBuckets/Objects/utils.ts","screens/Console/Buckets/ListBuckets/Objects/ListObjects/RewindEnable.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/DeleteMultipleObjects.tsx","screens/Console/Buckets/ListBuckets/Objects/Preview/PreviewFileContent.tsx","screens/Console/Buckets/ListBuckets/Objects/Preview/PreviewFileModal.tsx","screens/Console/Buckets/ListBuckets/Objects/ListObjects/ListObjects.tsx","screens/Console/Buckets/ListBuckets/Objects/ObjectDetails/ShareFile.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/LicenseModal.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/Common/MainError/MainError.tsx","screens/Console/HealthInfo/HealthInfo.tsx","screens/Console/Storage/StoragePVCs.tsx","screens/Console/DirectCSI/types.ts","screens/Console/DirectCSI/FormatDrives.tsx","screens/Console/DirectCSI/FormatErrorsResult.tsx","screens/Console/DirectCSI/DirectCSIDrives.tsx","screens/Console/DirectCSI/actions.ts","screens/Console/Storage/Storage.tsx","screens/Console/Dashboard/Metrics.tsx","screens/Console/Tenants/TenantDetails/hop/Hop.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","screens/Console/DirectCSI/reducer.ts","store.ts","serviceWorker.ts","theme/main.ts","index.tsx"],"names":["browserHistoryOpts","baseUrl","window","location","pathname","startsWith","urlParts","split","slice","basename","join","createBrowserHistory","loginStrategyType","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","GLOBAL_SET_DISTRIBUTED_SETUP","userLoggedIn","loggedIn","type","logged","setMenuOpen","open","serverNeedsRestart","needsRestart","setSnackBarMessage","message","setErrorSnackMessage","setModalSnackMessage","setModalErrorSnackMessage","minStReq","minMemReq","units","k8sUnits","k8sCalcUnits","niceBytes","x","showK8sUnits","n","parseInt","niceBytesInt","l","k8sUnitsN","toFixed","clearSession","name","storage","removeItem","document","cookie","timeFromDate","d","h","getHours","m","getMinutes","s","getSeconds","getMilliseconds","factorForDropdown","map","unit","label","value","k8sfactorForDropdown","getBytes","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","niceDays","secondsValue","timeVariant","seconds","niceDaysInt","days","hours","minutes","years","months","diffDays","weeks","getTimeFromTimestamp","timestamp","fullDate","dateObject","Date","getFullYear","String","getMonth","padStart","getDay","nsToSeconds","nanoseconds","conversion","round","Number","EPSILON","textToRGBColor","text","hashColored","reduce","acc","currItem","charCodeAt","toUpperCase","api","method","url","data","targetURL","replaceAll","request","send","then","res","body","catch","err","status","href","onError","errMessage","get","response","detailedMessage","throwMessage","errorMessage","charAt","detailedError","Promise","reject","RefreshIcon","width","SvgIcon","style","height","xmlns","viewBox","data-name","inputStyles","makeStyles","theme","createStyles","disabled","borderColor","borderBottomStyle","LoginField","props","classes","TextField","InputProps","connector","connect","state","withStyles","backgroundColor","paper","borderRadius","display","flexDirection","alignItems","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","loaderAlignment","retryButton","alignSelf","useState","accessKey","setAccessKey","jwt","setJwt","secretKey","setSecretKey","setError","loginStrategy","unknown","redirect","setLoginStrategy","loginSending","setLoginSending","loginStrategyEndpoints","loginStrategyPayload","fetchConfiguration","invoke","loginDetails","formSubmit","e","preventDefault","post","bodyResponse","localStorage","setItem","btoa","history","push","useEffect","loginComponent","Fragment","Typography","component","variant","className","noValidate","onSubmit","Grid","container","item","xs","fullWidth","id","onChange","target","autoComplete","Button","LinearProgress","serviceAccount","required","CircularProgress","onClick","startIcon","Paper","fieldBasic","inputLabel","overflow","fieldLabelError","paddingBottom","fieldContainer","maxWidth","tooltipContainer","switchContainer","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","whiteSpace","timeContainers","flexGrow","searchField","transform","transformOrigin","opacity","predefinedList","prefinedContainer","predefinedTitle","minHeight","innerContent","overflowX","scrollbarWidth","innerContentMultiline","objectBrowserCommon","obTitleSection","sectionTitle","lineHeight","breadcrumbs","textDecoration","smallLabel","selectorsCommon","multiSelectTable","settingsCommon","customTitle","borderBottom","settingsFormContainer","settingsButtonContainer","borderTop","innerSettingsButtonContainer","settingsOptionsContainer","backButton","backContainer","typesSelection","iconContainer","flexWrap","nonIconContainer","pickTitle","centerElements","logoButton","lambdaNotif","logsCommon","logsSubContainer","widgetCommon","singleValueContainer","titleContainer","contentContainer","contentContainerWithLabel","legendBlock","bottom","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","buttonsStyles","anchorButton","textTransform","hrClass","borderLeft","borderRight","tenantDetailsStyles","buttonContainer","containerHeader","paperContainer","infoGrid","gridTemplateColumns","gridGap","paddingRight","masterActions","updateButton","poolLabel","titleCol","breadcrumLink","healthCol","inputFieldStyles","root","input","inlineCheckboxes","Copyright","align","Link","useStyles","common","white","NotFound","Container","CssBaseline","Box","mt","StorageIcon","clipPath","stroke","strokeWidth","rx","ShareIcon","FolderIcon","EditIcon","SearchIcon","ObjectBrowserFolderIcon","cx","cy","r","DashboardIcon","WatchIcon","HealIcon","strokeMiterlimit","OperatorLogo","DeleteIcon","ReportedUsageIcon","AccountIcon","TenantsOutlineIcon","HelpIcon","DiagnosticsIcon","CopyIcon","ConsoleLogo","TraceIcon","AddIcon","fill","BackSettingsIcon","x2","strokeLinecap","y1","y2","LicenseIcon","RemoveIcon","AddFolderIcon","IAMPoliciesIcon","UsersIcon","DocumentationIcon","TrashIcon","DownloadIcon","GroupsIcon","TenantsIcon","CreateIcon","SyncIcon","LogoutIcon","HistoryIcon","BucketsIcon","ObjectBrowserIcon","SettingsIcon","UploadIcon","LogsIcon","serversIcon","totalObjectsIcon","circleIcon","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","BUCKET_DETAILS_SET_TAB","BUCKET_DETAILS_LOADING","BUCKET_DETAILS_SET_INFO","setBucketDetailsLoad","loading","unSelected","selected","ViewIcon","active","CloudIcon","ConsoleIcon","DescriptionIcon","FormatDriveIcon","defineIcon","DisableIcon","buttonDisabled","filter","valueToSend","idField","to","sendOnlyId","valueClick","buttonElement","IconButton","aria-label","size","stopPropagation","isString","flexBasis","checked","Checkbox","inputProps","icon","InputLabel","htmlFor","Tooltip","title","placement","rowText","borderWidth","transitionDuration","generateColumnsMap","columns","containerWidth","actionsWidth","hasSelect","hasActions","selectedItems","columnsSelector","columnsShown","sortColumn","sortDirection","commonRestWidth","colsItems","column","includes","elementKey","initialValue","currValue","el","calculateColumnRest","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","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","aria-describedby","Popover","anchorOrigin","vertical","horizontal","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","disableButtonFunction","showLoaderFunction","elementActions","baseCloseLine","content","modalSnackMessage","system","modalSnackBar","closeContainer","closeButton","modalCloseIcon","closeIcon","titleClass","modalContent","customDialogSize","modalOpen","children","wideLimit","noContentPadding","openSnackbar","setOpenSnackbar","customSize","detailedErrorMsg","Dialog","aria-labelledby","Snackbar","ContentProps","autoHideDuration","disableRipple","DialogTitle","DialogContent","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","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","distributedSetup","addBucketVersioned","versioned","enableObjectLocking","locking","addBucketQuota","quota","addBucketRetention","retention","mode","validity","setModalError","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","borderBottomColor","labelStyle","rightMenu","justify","multiLine","wizardStepContainer","wizardComponent","wizardModal","buttonsContainer","buttonInnerContainer","page","pageChange","loadingStep","forModal","componentRender","buttons","btn","toPage","buttonAction","wizardMain","wizFromContainer","wizFromModal","wizardSteps","listStyle","modalWizardSteps","buttonList","paddedContentGrid","stepsLabel","stepsMasterContainer","currentStep","setCurrentStep","toElement","lastPage","nextPage","prevPage","pg","stepsList","step","sm","md","lg","xl","remoteBucketList","errorIcon","successIcon","hide","bucketsToAlter","setBucketsToAlter","externalLoading","setExternalLoading","setTargetURL","region","setRegion","useTLS","setUseTLS","replicationMode","setReplicationMode","bandwidthScalar","setBandwidthScalar","bandwidthUnit","setBandwidthUnit","healthCheck","setHealthCheck","relationBuckets","setRelationBuckets","remoteBucketsOpts","setRemoteBucketOpts","responseItem","setResponseItem","optionsForBucketsDrop","remoteBucketName","bucketsAlter","relationBucketsAlter","forEach","LogoToShow","errString","updateItem","indexItem","updatedList","removeSuccessItems","newBucketsToAlter","newRelationBuckets","successElement","errorString","indexToRemove","indexOf","originBucket","splice","wizardPageJump","remoteConnectInfo","dataReturn","arrayReplaceBuckets","errorItem","initialBucket","bucketResponse","stateOfItem","replicate","destinationBucket","endURL","hc","remoteBucketsInfo","bucketsRelation","syncMode","bandwidth","healthCheckPeriod","states","replicationState","itm","setTimeout","addBucketOpen","addBucketReset","topSpacer","setRecords","setLoading","setDeleteOpen","setSelectedBucket","filterBuckets","setFilterBuckets","loadingPerms","setLoadingPerms","canCreateBucket","setCanCreateBucket","selectedBuckets","setSelectedBuckets","replicationModalOpen","setReplicationModalOpen","permissions","canCreate","can","tableActions","bucket","filteredRecords","b","refresh","BulkReplicationModal","unselectAll","val","disableUnderline","startAdornment","InputAdornment","date","targetD","elements","TabPanel","other","role","hidden","session","console","loadingBucket","bucketDetails","a11yProps","match","curTab","setCurTab","loadingPolicies","setLoadingPolicies","bucketPolicy","setBucketPolicy","loadingUsers","setLoadingUsers","bucketUsers","setBucketUsers","params","usersEnabled","pages","PolicyActions","policy","userTableActions","user","policies","Tabs","newValue","indicatorColor","textColor","scrollButtons","Tab","actualPolicy","accessPolicy","setAccessPolicy","access","loadingForm","setLoadingForm","setRetentionMode","setRetentionUnit","setRetentionValidity","setValid","encryptionCfg","encryptionEnabled","kmsKeyID","setKmsKeyID","encryptionType","setEncryptionType","algorithm","kmsMasterKeyID","encType","closeVersioningModalAndRefresh","versioningCurrentState","versioningLoading","setVersioningLoading","cfg","setQuotaEnabled","setQuotaType","setQuotaSize","setQuotaUnit","maxUnit","maxQuota","i","req","enableBucketEncryption","bucketInfo","elementTitle","consumptionValue","reportedUsage","dualCardLeft","dualCardRight","capitalizeFirst","setEncryptionCfg","bucketSize","setBucketSize","hasObjectLocking","setHasObjectLocking","accessPolicyScreenOpen","setAccessPolicyScreenOpen","replicationRules","setReplicationRules","loadingObjectLocking","setLoadingLocking","loadingSize","setLoadingSize","bucketLoading","setBucketLoading","loadingEncryption","setLoadingEncryption","loadingVersioning","setLoadingVersioning","loadingQuota","setLoadingQuota","loadingReplication","setLoadingReplication","loadingRetention","setLoadingRetention","isVersioned","setIsVersioned","setQuota","setEncryptionEnabled","setRetentionEnabled","retentionConfig","setRetentionConfig","retentionConfigOpen","setRetentionConfigOpen","enableEncryptionScreenOpen","setEnableEncryptionScreenOpen","enableQuotaScreenOpen","setEnableQuotaScreenOpen","enableVersioningOpen","setEnableVersioningOpen","is_versioned","object_locking_enabled","rules","str","loadAllBucketData","toLowerCase","doubleElement","direction","elevation","gridContainer","colSpan","bucketEvent","events","prefix","suffix","arn","removeRecord","internalValue","setInternalValue","Autocomplete","getOptionLabel","getOptionSelected","renderInput","_","selectedValue","autoHighlight","setPrefix","setSuffix","setArn","selectedEvents","setSelectedEvents","arnList","setArnList","fetchArnList","useCallback","arns","handleClick","selectedIndex","newSelected","concat","arnValues","arnConstant","configuration","ignoreExisting","Table","TableHead","TableRow","TableCell","TableBody","addEventScreenOpen","setAddEventScreenOpen","loadingEvents","setLoadingEvents","selectedEvent","setSelectedEvent","evnt","inputWithBorder","lineInputBoxes","queryDiv","keyPlaceholder","valuePlaceholder","withBorder","currentKeys","setCurrentKeys","currentValues","setCurrentValues","bottomList","createRef","elementsSplit","keys","values","splittedVals","refScroll","current","scrollIntoView","firstUpdate","useRef","useLayoutEffect","debouncedOnChange","onChangeKey","persist","updatedElement","onChangeValue","debounce","queryString","keyVal","insertString","inputs","keysList","valuesList","addEmptyLine","targetStorageClass","setTargetStorageClass","targetBucket","setTargetBucket","repDeleteMarker","setRepDeleteMarker","repDelete","setRepDelete","repMetadata","tags","setTags","replicateDeleteMarkers","replicateDeletes","replicateMetadata","itemVal","log","ruleToDelete","canPutReplication","setCanPutReplication","deleteReplicationModal","setDeleteReplicationModal","openSetReplication","setOpenSetReplication","selectedRRule","setSelectedRRule","bucket_name","userCanPutReplication","setOpenReplicationOpen","replicationTableActions","replication","replace","strongText","keyName","lifecycle","setEnabled","tgs","stringLab","key","disable","Array","from","num","currentYear","numYear","DateSelector","forwardRef","addSwitch","onDateChange","useImperativeHandle","resetDate","dateEnabled","setDateEnabled","month","setMonth","day","setDay","year","setYear","valueSplit","currentDate","parse","parsedMonth","parsedDay","monthForString","dayForString","parsedDate","toISOString","dateString","validDate","isValid","isDateDisabled","fieldContainerBorder","dateInput","displayEmpty","dayNumber","flex","loadingTiers","setLoadingTiers","tiersList","setTiersList","storageClass","setStorageClass","NCTransitionSC","setNCTransitionSC","expiredObjectDM","setExpiredObjectDM","NCExpirationDays","setNCExpirationDays","NCTransitionDays","setNCTransitionDays","ilmType","setIlmType","expiryType","setExpiryType","expiryDays","setExpiryDays","expiryDate","setExpiryDate","transitionDays","setTransitionDays","transitionDate","setTransitionDate","transitionType","setTransitionType","isFormValid","setIsFormValid","objList","tier","tierType","expiry","expiry_date","expiry_days","noncurrentversion_expiration_days","transition","transition_date","transition_days","noncurrentversion_transition_days","noncurrentversion_transition_storage_class","storage_class","lifecycleInsert","expired_object_delete_marker","loadingLifecycle","setLoadingLifecycle","lifecycleRecords","setLifecycleRecords","addLifecycleOpen","setAddLifecycleOpen","editLifecycleOpen","setEditLifecycleOpen","lifecycleColumns","expiration","objectST","headerBarIcon","float","primary","headerBarSubheader","subTitle","pathLabel","selectedAccess","setSelectedAccess","toDelete","toEdit","initial","fileName","fileNameText","browsePaper","listButton","badgeOverlap","loadingAccessRules","setLoadingAccessRules","accessRules","setAccessRules","addAccessRuleOpen","setAddAccessRuleOpen","deleteAccessRuleOpen","setDeleteAccessRuleOpen","accessRuleToDelete","setAccessRuleToDelete","editAccessRuleOpen","setEditAccessRuleOpen","accessRuleToEdit","setAccessRuleToEdit","initialAccess","setInitialAccess","AccessRuleActions","accessRule","selectedTab","setBucketDetailsTab","tab","setBucketInfo","info","noRecords","gridWrapper","encCheckbox","tabPan","fixedHeight","routerContainer","iniLoad","setIniLoad","canGetReplication","setCanGetReplication","matchURL","splitMatch","canGetReplicationVal","changeRoute","newTab","mainRoute","substr","List","dense","ListItem","button","ListItemText","path","BucketSummaryPanel","BucketEventsPanel","BucketReplicationPanel","BucketLifecyclePanel","AccessDetailsPanel","AccessRulePanel","sidebarOpen","withRouter","BucketDetails","ListBuckets","NotFoundPage","require","widgetType","onBeforeChange","readOnly","lineNumbers","jsonPolicyEditor","policyEdit","policyName","setPolicyName","policyDefinition","setPolicyDefinition","JSON","stringify","validSave","editor","selectedPolicy","addScreenOpen","setAddScreenOpen","setSelectedPolicy","filterPolicies","setFilterPolicies","setPolicyEdit","fetchRecords","pa","pb","elementItem","noUnderLine","licenseContainer","licenseInfo","licenseInfoTitle","licenseInfoValue","verifiedIcon","statement","labelCol","statementActions","addStmt","listBox","setSelectedTab","setPolicy","policyStatements","setPolicyStatements","userList","setUserList","groupList","setGroupList","loadingPolicy","setLoadingPolicy","filterUsers","setFilterUsers","filterGroups","setFilterGroups","loadingGroups","setLoadingGroups","saveRecord","result","pol","Statement","filteredUsers","filteredGroups","stmt","Effect","Action","act","actIndex","Resource","resIndex","PolicyDetails","ListPolicies","dLocalStorageV","defaultWidgetsLayout","w","y","minW","moved","static","colorsMain","niceDaysFromNS","roundNumber","panelsConfiguration","singleValue","layoutIdentifier","labelDisplayFunction","dataOuter","widgetConfiguration","outerChart","colorList","innerRadius","outerRadius","startAngle","endAngle","innerChart","pieChart","innerLabel","keyLabel","lineColor","fillColor","linearGraph","yAxisFormatter","xAxisFormatter","customStructure","originTag","displayTag","barChart","singleRep","disableYAxis","calculateMainValue","metricCalc","sumValues","accumulator","sortResult","value1","value2","widgetDetailsToPanel","payloadData","panelItem","typeOfPayload","valueDisplay","chartSeries","valuesArray","totalValues","elementValue","metricKeyItem","Object","metric","metricName","targets","series","plotValues","targetMaster","results","legendFormat","itemVals","labelName","metrics","keysToReplace","expToReplace","RegExp","replacedLegend","matchItem","nwMatchItem","countVarsOpen","countVarsClose","cleanLegend","constructLabelNames","valInfo","itemIndex","itemToPush","seriesWithColors","series1","series2","serialC","sortedVals","chartBars","sortFunction","structureItem","metricTake","lastValue","a","valuesForBackground","eachVal","saveDashboardDistribution","displayErrorMessage","loadingAlign","timeStart","timeEnd","propLoading","apiPrefix","setData","stepCalc","secondsInPeriod","unix","periods","widgetsWithValue","payload","linearConfiguration","pl","containerElements","chartCont","legendChart","hideYAxis","panelWidth","dataMax","setDataMax","setResult","maxVal","dp","intervalCount","ResponsiveContainer","AreaChart","CartesianGrid","strokeDasharray","strokeOpacity","XAxis","tickFormatter","interval","tick","tickCount","YAxis","domain","section","Area","fillOpacity","wrapperStyle","barChartConfiguration","CustomizedAxisTick","textAnchor","dy","BarChart","layout","barCategoryGap","tickLine","axisLine","bar","Bar","dataInner","setDataInner","setDataOuter","pieChartConfiguration","middleLabel","innerColors","outerColors","PieChart","Pie","entry","Cell","dominantBaseline","dateSelectorOverride","dateSelectorFormOverride","parentDateOverride","forSearchBlock","inputItem","utils","MomentUtils","DateTimePicker","ampm","format","widgetsContainer","syncButton","setTimeStart","setTimeEnd","panelInformation","setPanelInformation","dashboardDistr","currentItems","storedConfiguration","getItem","parsedConfig","atob","getDashboardDistribution","autoSizerStyleProp","panels","filterPanels","singlePanelWidth","xSpacing","componentToUse","fetchUsage","widgets","panelT","summaryPanels","resourcesPanels","requestsPanels","hpanel","totalWidth","cols","containerPadding","onLayoutChange","cardIconContainer","stateContainer","infoValue","redState","greenState","success","yellowState","warning","greyState","healthStatusIcon","innerState","cardHeader","server","networkKeys","network","networkTotal","totalDrives","drives","activeNetwork","activeDisks","Card","CardHeader","health_status","serverStatusToClass","CircleIcon","endpoint","subheader","uptime","drive","driveStatusToClass","totalSpace","usedSpace","availableSpace","dashboardBG","backgroundSize","cardsContainer","usage","prettyNumber","serverArray","servers","nameA","nameB","makeServerArray","cardRoot","niceBytesUsage","smallUnit","prettyUsage","TotalObjectsIcon","objects","ServersIcon","basicResult","setBasicResult","menuGroups","group","collapsible","operatorMode","logo","menuList","extraMargin","groupTitle","subTitleMenu","selectorArrow","borderStyle","selectorArrowOpen","menuItem","menuStateBuilder","menuOpen","menuItems","NavLink","fsHidden","allowedPages","documentation","forceDisplay","hasOwnProperty","allowedItems","groupMember","filterByGroup","menuClicked","newMenu","setMenuCollapse","Collapse","in","timeout","unmountOnExit","ListItemIcon","Divider","deleteSession","infoDetails","containerScrollable","addSending","setAddSending","isRestrictedByPolicy","setIsRestrictedByPolicy","addCredentials","setAddCredentials","addServiceAccount","wrapText","selectedServiceAccount","warningBlock","credentialsPanel","newServiceAccount","closeModal","entity","consoleCreds","idp","isArray","credentialsPair","consoleExtras","cCreds","itemMap","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","fetchPolicies","selectedUser","selectedPolicies","setSelectedPolicies","currentGroups","setCurrentGroups","currenTab","setCurrenTab","getUserInformation","encodeURI","memberOf","nv","checkedUsers","saving","isSaving","accepted","setAccepted","users","selectedGroup","setActualPolicy","groupPolicy","userPolicy","userName","entityType","setSelectedUser","addGroupOpen","setAddGroupOpen","setCheckedUsers","policyOpen","setPolicyOpen","selectionElement","topValue","close","unCheckAll","closeAddGroupBulk","currentPolicies","addUserServiceAccount","newSecretKey","changeUserPassword","setCurrentPolicies","changeUserPasswordModalOpen","setChangeUserPasswordModalOpen","ChangeUserPasswordModal","isEnabled","UserDetails","ListUsers","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","etcd","identity_openid","identity_ldap","logger_webhook","audit_webhook","commonFields","notificationEndpointsFields","removeEmptyFields","formFields","field","commonPlaceholder","currentElements","setCurrentElements","onChangeElement","elementsString","elementsUp","cpList","cssOutlinedInput","rootContainer","InputLabelProps","shrink","notchedOutline","valueDef","defaults","defValue","storedConfig","fields","defaultVals","valueHolder","setValueHolder","fieldsElements","defValList","stateInsert","setValueElement","valuesDup","fieldDefinition","selectedConfiguration","valuesObj","setValueObj","setSaving","loadingConfig","setLoadingConfig","configValues","setConfigValues","configId","keyVals","key_values","onValueChange","masterContainer","sliderContainer","slide","slideOptions","currentSlide","currentSliderPosition","containerSize","block","initialConfiguration","iconText","customConfigurationPage","setSelectedConfiguration","currentConfiguration","setCurrentConfiguration","servicesList","actionTrigger","targetTitle","useConnectionString","setUseConnectionString","connectionString","setConnectionString","host","setHostname","dbName","setDbName","port","setPort","setUser","password","setPassword","sslMode","setSslMode","table","setTable","setFormat","queueDir","setQueueDir","queueLimit","setQueueLimit","comment","setComment","configToString","strValue","cs","kv","valueIndexes","n1","n2","kvFields","Map","j","set","parseConnectionString","useDsnString","setUseDsnString","dsnString","setDsnString","configToDsnString","regex","exec","lastIndex","parseDsnString","lambdaFormIndicator","service","saveAndRefresh","valuesArr","setValueArr","srvComponent","targetElement","nonLogos","elService","withLogos","setService","src","alt","lambdaContainer","setIsLoading","currentPanel","setCurrentPanel","resNotEndList","notification_endpoints","service_name","account_id","backClick","red","serviceName","withBreak","errorText","valueString","fileReselect","fieldBottom","fileInputField","accept","showFileSelector","setShowSelector","evt","callback","file","files","reader","FileReader","readAsDataURL","onload","fileBase64","fileArray","fileProcess","setName","setEndpoint","setBucket","creds","setCreds","encodedCreds","setEncodedCreds","accountName","setAccountName","accountKey","setAccountKey","titleSelection","setTitleSelection","nameInputError","setNameInputError","validName","test","s3","accesskey","secretkey","storageclass","gcs","azure","accountname","accountkey","encodedValue","tierData","savingTiers","setSavingTiers","updateCredentialsOpen","setUpdateCredentialsOpen","selectedTier","setSelectedTier","setType","items","getItemName","getItemType","typeSelect","typeItem","UpdateTierCredentiasModal","headerLabel","logger","modalTitle","apiURL","audit","addWebhookOpen","setAddWebhookOpen","panelToDisplay","panelData","toLocaleLowerCase","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_ADD_CONSOLE_CA_KEYPAIR","ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR","ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR","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","TENANT_DETAILS_SET_LOADING","TENANT_DETAILS_SET_CURRENT_TENANT","TENANT_DETAILS_SET_TENANT","TENANT_DETAILS_SET_TAB","updateAddField","pageName","fieldName","isPageValid","setTenantDetailsLoad","selectedTenant","retypeTenant","setRetypeTenant","namespace","getDefaultAffinity","tenantName","poolName","podAntiAffinity","requiredDuringSchedulingIgnoredDuringExecution","labelSelector","matchExpressions","operator","topologyKey","getNodeSelector","labels","withPodAntiAffinity","splittedLabels","splitKeyValue","nodeSelector","nodeAffinity","nodeSelectorTerms","def","commonFormValidation","fieldsValidate","returnErrors","fieldKey","customValidation","customValidationMessage","pattern","customPatternMessage","rgx","clearValidationError","validationErrors","newValidationElement","getRandomString","retval","legalcharacters","random","addNamespaceOpen","closeAddNamespaceModalAndRefresh","addNamespaceLoading","setAddNamespaceLoading","advancedMode","tenants","createTenant","advancedModeOn","nameTenant","selectedStorageClass","storageClasses","setAdvancedMode","setStorageClassesList","setLimitSize","setValidationErrors","emptyNamespace","setEmptyNamespace","loadingNamespaceInfo","setLoadingNamespaceInfo","showCreateButton","setShowCreateButton","openAddNSConfirm","setOpenAddNSConfirm","updateField","getNamespaceInformation","tenantsList","resourceQuotas","quotas","returnQuotas","rsQuota","stCName","hard","used","getLimitSizes","newStorage","debounceNamespace","useMemo","cancel","customNamespaceError","commonValidation","frmValidationCleanup","customImage","configure","imageName","customDockerhub","imageRegistry","imageRegistryUsername","imageRegistryPassword","exposeMinIO","exposeConsole","prometheusCustom","logSearchCustom","logSearchVolumeSize","logSearchSizeFactor","prometheusVolumeSize","prometheusSizeFactor","logSearchSelectedStorageClass","logSearchImage","kesImage","logSearchPostgresImage","logSearchPostgresInitImage","prometheusSelectedStorageClass","prometheusImage","prometheusSidecarImage","prometheusInitImage","customAccountValidation","commonVal","cleanValidation","idpSelection","identityProvider","accessKeys","secretKeys","openIDURL","openIDConfigurationURL","openIDClientID","openIDSecretID","openIDCallbackURL","openIDClaimName","openIDScopes","ADURL","ADSkipTLS","ADServerInsecure","ADUserNameSearchFilter","ADGroupSearchBaseDN","ADGroupSearchFilter","ADGroupNameAttribute","ADUserDNs","ADUserNameFormat","ADLookupBindDN","ADLookupBindPassword","ADUserDNSearchBaseDN","ADUserDNSearchFilter","ADServerStartTLS","shortened","buttonTray","updateUserField","newUserField","updatePwordField","updateADUserField","newADUserDNsField","customIDPValidation","gutterBottom","enableTLS","security","enableAutoCert","enableCustomCerts","minioCertificates","certificates","caCertificates","addFileToCaCertificates","deleteCaCertificate","addCaCertificate","addKeyPair","addFileToKeyPair","deleteKeyPair","keyPair","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","errorFlag","setErrorFlag","nodeError","setNodeError","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","podAffinity","affinity","nodeSelectorLabels","keyValueMap","setKeyValueMap","keyValuePairs","setKeyValuePairs","keyOptions","setKeyOptions","k","kvp","kvs","splitItem","newKey","arrCp","assign","v","validPages","closeAndRefresh","createdAccount","setCreatedAccount","consoleCaCertificates","consoleCertificate","affinityType","affinityObject","dataSend","access_keys","secret_keys","enable_tls","enable_console","enable_prometheus","image","expose_minio","expose_console","volumes_per_server","volume_configuration","storage_class_name","resources","requests","memory","limits","erasureCodingParity","image_registry","registry","username","logSearchConfiguration","storageSize","postgres_image","postgres_init_image","prometheusConfiguration","sidecar_image","init_image","tenantCerts","consoleCerts","caCerts","consoleCaCerts","ca_certificates","console_ca_certificates","minio","crt","tls","insertEncrypt","gemaltoCAIntroduce","ca","gemalto","keysecure","credentials","token","retry","aws","secretsmanager","kmskey","gcp","secretmanager","project_id","client_email","client_id","private_key_id","private_key","vaultKeyPair","vaultCAInsert","vaultTLS","vault","engine","approle","secret","ping","encryptionServerKeyPair","encryptionClientKeyPair","client","dataIDP","keyarray","oidc","configuration_url","secret_id","claim_name","callback_url","scopes","active_directory","skip_tls_verification","server_insecure","username_format","username_search_filter","group_search_base_dn","group_search_filter","group_name_attribute","user_dns","lookup_bind_dn","lookup_bind_password","user_dn_search_base_dn","user_dn_search_filter","server_start_tls","consoleSAList","newSrvAcc","consoleItem","consoleKey","cancelButton","advancedOnly","filteredWizardSteps","resetAddTenantForm","tenantsContainer","setSelectedTenant","filterTenants","setFilterTenants","tenant","resTenants","capacity","total_size","healthStatusToClass","reloadData","t","tenantYaml","setTenantYaml","setErrorMessage","yaml","BorderLinearProgress","colorPrimary","padChart","allValue","currentUsage","centerItem","maxValue","porcentualValue","idTenant","isSending","setIsSending","minioImage","setMinioImage","setImageRegistry","imageRegistryEndpoint","setImageRegistryEndpoint","setImageRegistryUsername","setImageRegistryPassword","validMinioImage","setValidMinioImage","validateImage","fieldToCheck","loadingTenant","tenantDetails","currentTenant","tenantInfo","logEnabled","monitoringEnabled","minioTLS","consoleTLS","consoleEnabled","adEnabled","oidcEnabled","centerAlign","setCapacity","poolCount","setPoolCount","instances","setInstances","volumes","setVolumes","loadingUsage","setLoadingUsage","usageError","setUsageError","setUsage","updateMinioVersion","setUpdateMinioVersion","tenantNamespace","resPools","totalInstances","totalVolumes","poolNamedIndex","pool","cap","endpoints","rel","currentState","drives_online","drives_offline","write_quorum","loadingActivateProduct","loadingLicenseInfo","activateProduct","subnet_license","organization","storage_capacity","expires_at","plan","email","licenseButton","loaderAlign","setLicenseInfo","setLoadingLicenseInfo","setLoadingActivateProduct","bottomContainer","factorElements","sizeNumber","sizeDescription","onClosePoolAndReload","numberOfNodes","setNumberOfNodes","setVolumeSize","setVolumesPerSever","setSelectedStorageClass","setStorageClasses","instanceCapacity","totalCapacity","defaultAffinity","setPools","addPoolOpen","setAddPool","filteredPools","reload","selectedPod","retypePod","setRetypePod","pods","setPods","loadingPods","setLoadingPods","setSelectedPod","podTableActions","pod","currentTime","now","time","timeCreated","flexBox","flexFlow","iframeStyle","onLoad","cancelLabel","okLabel","cancelOnClick","okOnClick","bold","italic","underline","textDecorationLine","certificateInfo","certificateInfoName","dialogOpen","setDialogOpen","setEnableAutoCert","setEnableCustomCerts","certificatesToBeRemoved","setCertificatesToBeRemoved","setMinioCertificates","minioCaCertificates","setMinioCaCertificates","minioTLSCertificateSecrets","setMinioTLSCertificateSecrets","minioTLSCaCertificateSecrets","setMinioTLSCaCertificateSecrets","getTenantSecurityInfo","autoCert","customCertificates","minioCAs","removeCertificate","updatedMinIOTLSCertificateSecrets","certificateSecret","updatedMinIOTLSCaCertificateSecrets","updateCertificates","secretsToBeDeleted","Chip","domains","dom","onDelete","logList","logerror","logerror_tab","ansidefault","highlight","podName","setHighlight","logLines","setLogLines","renderLines","logMessage","highlightedLine","renderLog","setEvent","seen","last_seen","currentTab","selectedNamespace","currentNamespace","setTenantName","setTenantInfo","setTenantTab","yamlScreenOpen","setYamlScreenOpen","splitSections","TenantSummary","TenantMetrics","TenantSecurity","PoolsSummary","PodDetails","PodsSummary","TenantLicense","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","REWIND_SET_ENABLE","REWIND_RESET_REWIND","addRoute","route","routeType","removeRouteLevel","toRoute","setAllRoutes","currentRoute","fileIsBeingPrepared","fileDownloadStarted","resetRewind","objectBrowser","objectsList","rewindEnabled","rewindDate","listBreadcrumbs","objectItem","resetRoutesList","reset","usedSpaceCol","subTitleLabel","iconBucket","pop","idElement","currentPath","newPath","globalClass","rowClass","watchList","inputField","lastElementWPadding","pathIn","selectedObject","recursive","endsWith","createFolder","newRoute","folderName","pathUrl","setPathUrl","folderTruncated","objectPath","versionID","callBack","includeVersionInCallback","anchor","encodedPath","isNullOrUndefined","extensionPreview","fileExtension","setRewindEnable","dateRewind","bucketToRewind","rewind","dateToRewind","rewindEnabling","setRewindEnabling","rewindEnableButton","setRewindEnableButton","dateSelected","setDateSelected","selectedObjects","toSend","iframeContainer","iframeBase","iframeHidden","object","isFullscreen","origin","version_id","objectType","allowTransparency","PreviewFileModal","onClosePreview","PreviewFileContent","commonIcon","defLoading","setLastAsFile","setLoadingProgress","progress","loadingProgress","routesList","downloadingFiles","iconFolder","iconFile","setRewind","loadingRewind","setLoadingRewind","deleteMultipleOpen","setDeleteMultipleOpen","createFolderOpen","setCreateFolderOpen","setSelectedObject","filterObjects","setFilterObjects","loadingStartTime","setLoadingStartTime","setLoadingMessage","rewindSelect","setRewindSelect","setSelectedObjects","previewOpen","setPreviewOpen","selectedPreview","setSelectedPreview","internalPaths","fileUpload","delay","savedCallback","setInterval","clearInterval","useInterval","timeDelta","updateMessage","rewindParsed","extraPath","currentTimestamp","folders","record","recordsInElement","verifyIfIsFile","displayParsedDate","last_modified","displayNiceBytes","uploadObject","splitPaths","uploadUrl","xhr","XMLHttpRequest","areMultipleFiles","okMessage","withCredentials","upload","addEventListener","loaded","onerror","onloadend","formData","FormData","blobFile","Blob","append","idElementClean","pathInArray","fileObject","elm","delete_flag","displayName","elementString","listModeColumns","rewindModeColumns","pageTitle","DeleteMultipleObjects","multiple","Badge","badgeContent","invisible","copyButtonContainer","dataObject","shareURL","setShareURL","isLoadingFile","setIsLoadingFile","selectedDate","setSelectedDate","dateValid","setDateValid","slDate","currDate","diffDate","getTime","versID","dateContainer","newDate","objectName","objectInfo","statusEnabled","setStatusEnabled","setDate","isDateValid","setIsDateValid","setIsSaving","alreadyConfigured","setAlreadyConfigured","retention_mode","retention_until_date","valueDate","getDate","dateElement","showSwitcher","versionId","expireDate","expires","addRetention","disableRetention","currentTags","onCloseAndUpdate","setNewKey","newLabel","setNewLabel","newTag","newTagList","verID","selectedTag","setDeleteSending","tagKey","tagLabel","cleanObject","actualInfo","legalHoldEnabled","setLegalHoldEnabled","emptyFile","is_latest","legal_hold_status","objectNameContainer","objectPathContainer","objectPathLink","propertiesContainer","propertiesItem","propertiesItemBold","propertiesValue","propertiesIcon","actionsIconContainer","actionsIcon","tagsContainer","tagText","tag","search","titleItem","loadObjectData","setLoadObjectData","shareFileModalOpen","setShareFileModalOpen","retentionModalOpen","setRetentionModalOpen","tagModalOpen","setTagModalOpen","deleteTagModalOpen","setDeleteTagModalOpen","setSelectedTag","legalholdOpen","setLegalholdOpen","setActualInfo","versions","setVersions","filterVersion","setFilterVersion","metadataLoad","setMetadataLoad","metadata","setMetadata","allPathData","pathInBucket","previewObject","content_type","fileData","tagKeys","shareObject","downloadObject","includeVersion","is_delete_marker","version","updateInfo","redirectBack","reloadObjectData","deleteIcon","deleteTag","clickable","hr","versOrd","currentItem","planDetails","price","capacityMin","capacityMax","planItems","community","communityDetail","standard","standardDetail","enterprise","enterpriseDetail","planButtons","text2","link","subnetLicenseKey","subnetLoginForm","licenseKeyField","buttonSignup","license","setLicense","subnetPassword","setSubnetPassword","subnetEmail","setSubnetEmail","rows","pageSubTitle","detailsContainer","detailsContainerBorder","detailsContainerBorderHighlighted","detailsTitle","activePlanHeader","planHeader","detailsPrice","detailsCapacityMax","detailsCapacityMin","itemContainer","itemContainerDetail","alignContent","itemFirst","itemHighlighted","checkIcon","buttonContainerBlank","buttonContainerHighlighted","openSourcePolicy","activateLink","clear","subnetRefreshLicenseLink","licenseDescription","currentPlanBG","currentPlanButton","planItemsPadding","subnetSubTitle","clickableBlock","fetchLicenseInfo","setCurrentPlanID","activateProductModal","setActivateProductModal","licenseModal","setLicenseModal","currentPlanID","loadingRefreshLicense","setLoadingRefreshLicense","details","currentPlan","TRACE_MESSAGE_RECEIVED","TRACE_RESET_MESSAGES","TRACE_SET_STARTED","wsProtocol","protocol","c","messages","trace","traceStarted","traceMessageReceived","traceResetMessages","setTraceStarted","sizeItem","timeItem","labelCheckboxes","startButton","tableWrapper","statusCode","setStatusCode","setMethod","func","setFunc","setPath","threshold","setThreshold","all","setAll","setS3","internal","setInternal","setStorage","os","setOS","errors","setErrors","URL","calls","wsProt","W3CWebSocket","hostname","onopen","onmessage","ptime","moment","toDate","onclose","timeParse","fullElement","statusMsg","LOG_MESSAGE_RECEIVED","LOG_RESET_MESSAGES","logs","logMessageReceived","logResetMessages","logElement","ConsoleMsg","errorElems","deploymentid","requestID","remotehost","userAgent","source","renderError","buttonKit","toggleButton","features","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","logSearchEnabled","queryParams","fetchedResults","newResultSet","response_status_code","response_status","colName","newArray","sortData","newSortDirection","resolve","setCurrentTab","graphContainer","scanInfo","scanData","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","timerI","DiagStatError","DiagStatSuccess","DiagStatInProgress","healthInfo","serverDiagnosticStatus","healthInfoMessageReceived","healthInfoResetMessage","setServerDiagStat","gap","startDiagnostic","setStartDiagnostic","downloadDisabled","setDownloadDisabled","code","DIRECT_CSI_SELECT_DRIVE","closeFormatModalAndRefresh","allDrives","drivesToFormat","formatAll","setFormatAll","force","setForce","formatIssuesList","errorsList","onCloseFormatErrorsList","selectDrive","driveName","notAvailableNotice","linkItem","checkedDrives","setCheckedDrives","formatOpen","setFormatOpen","formatErrorsResult","setFormatErrorsResult","formatErrorsOpen","setFormatErrorsOpen","setDrivesToFormat","notAvailable","setNotAvailable","newItem","joinName","node","d1","d2","driveID","routes","routeChange","StoragePVCs","DirectCSIDrives","render","loader","consoleFrame","contentDocument","loc","add","next","startHideTimer","callbackFunction","stopHideTimer","mainErrorContainer","borderLeftWidth","mainErrorShow","errorTitle","errorLabel","messageIcon","simpleError","detailsButton","transformDuration","extraDetailsContainer","extraDetailsOpen","arrowElement","arrowOpen","detailsOpen","setDetailsOpen","displayErrorMsg","setDisplayErrorMsg","closeErrorMessage","messageDetails","onMouseOver","onMouseLeave","detailsContainerLink","isServerLoading","serverIsLoading","snackBarMessage","toolbar","default","toolbarIcon","mixins","appBar","drawer","transitions","create","easing","sharp","duration","leavingScreen","appBarShift","enteringScreen","menuButton","menuButtonHidden","drawerPaper","drawerPaperClose","breakpoints","up","warningBar","heigh","widht","allowedRoutes","Dashboard","Metrics","Buckets","ObjectBrowser","ObjectRouting","Watch","Users","Groups","Policies","Heal","Trace","LogsMain","HealthInfo","ConfigurationMain","Account","WebhookPanel","TenantsMain","Storage","TenantDetails","Hop","License","useLocation","hideMenu","Drawer","exact","routerProps","LoginCallback","errorDescription","setErrorDescription","sessionId","SESSION_RESPONSE","consoleOperatorMode","saveSessionResponse","setDistributedMode","Component","sessionLoading","setSessionLoading","distributedMode","hot","Login","Console","initialState","initialRoute","selectedDrive","globalReducer","combineReducers","newRouteList","indexOfTopPath","newRouteLevels","splitRoutes","routesArray","initRoute","newSetOfRoutes","newFoldersRoutes","lastRoute","splitElements","folderTrim","currentList","lastItem","newList","actualFiles","rewindSetEnabled","resetItem","newState","has","originPageNameItems","joinValue","originValidPages","newSetOfPages","changeCL","minioCerts","NCertList","minioCertsList","cleanMinioCertsList","CACerts","NACList","CACertsList","cleanCaCertsList","consoleCert","ConsoleCACerts","consoleNACList","consoleCACertsList","encServerCert","encClientCert","encVaultCert","encVaultCA","encGemaltoCA","tenantData","setTenant","directCSI","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","MuiPaper","elevation1","MuiListItem","GlobalCss","ReactDOM","store","createStore","applyMiddleware","thunk","ThemeProvider","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,UACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,GACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,GACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO,EACPC,QAAQ,GAEV,CACEJ,EAAG,EACH73C,EAAG,EACHhB,EAAG,EACH84C,EAAG,EACHja,EAAG,WACHka,KAAM,EACNC,OAAO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QACApK,EASmB,EATnBA,KACAE,EAQmB,EARnBA,aACAgrG,EAOmB,EAPnBA,gBACAjrG,EAMmB,EANnBA,mBACAkrG,EAKmB,EALnBA,gBACApvE,EAImB,EAJnBA,QACAwwD,EAGmB,EAHnBA,gBACA6e,EAEmB,EAFnBA,gBACAjrG,EACmB,EADnBA,mBAEA,EAAwC0N,oBAAkB,GAA1D,mBAAOsc,EAAP,KAAqBC,EAArB,KAmBMigC,EAAetuB,EAAQkB,MAAM71B,QACjC,SAACuxC,EAAatoC,EAAWqS,GAEvB,OADAi2B,EAAOtoC,IAAQ,EACRsoC,IAET,IAmJIi0D,EAjJS,CACb,CACE98F,UAAW+8F,GACXp4D,KAAM,cAER,CACE3kC,UAAWg9F,GACXr4D,KAAM,YAER,CACE3kC,UAAWi9F,GACXt4D,KAAM,YAER,CACE3kC,UAAWi9F,GACXt4D,KAAM,cAER,CACE3kC,UAAWk9F,GACXv4D,KAAM,mBAER,CACE3kC,UAAWm9F,GACXx4D,KAAM,2BAER,CACE3kC,UAAWm9F,GACXx4D,KAAM,6BAER,CACE3kC,UAAWo9F,GACXz4D,KAAM,UAER,CACE3kC,UAAWq9F,GACX14D,KAAM,qBAER,CACE3kC,UAAWq9F,GACX14D,KAAM,UAER,CACE3kC,UAAWs9F,GACX34D,KAAM,WAER,CACE3kC,UAAWu9F,GACX54D,KAAM,yBAER,CACE3kC,UAAWu9F,GACX54D,KAAM,aAER,CACE3kC,UAAWw9F,GACX74D,KAAM,SAER,CACE3kC,UAAWy9F,GACX94D,KAAM,UAER,CACE3kC,UAAW09F,GACX/4D,KAAM,SAER,CACE3kC,UAAW29F,GACXh5D,KAAM,gBAER,CACE3kC,UAAW49F,GACXj5D,KAAM,aAER,CACE3kC,UAAW69F,GACXl5D,KAAM,WACNtqC,MAAO,CACL+jD,eAAgBnyB,EAAQkB,MAAM7a,SAAS,8BAG3C,CACEtS,UAAW89F,GACXn5D,KAAM,mBAER,CACE3kC,UAAW89F,GACXn5D,KAAM,kBAER,CACE3kC,UAAW+9F,GACXp5D,KAAM,YAER,CACE3kC,UAAWg+F,GACXr5D,KAAM,Y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","file":"static/js/main.d668582e.chunk.js","sourcesContent":["import { createBrowserHistory } from \"history\";\nimport { BrowserHistoryBuildOptions } from \"history/createBrowserHistory\";\n\nlet browserHistoryOpts: BrowserHistoryBuildOptions = {};\n\nexport let baseUrl = \"\";\n\nif (`${window.location.pathname}`.startsWith(\"/api/proxy/\")) {\n // grab from api to the tenant name (/api/proxy/namespace/tenant)\n const urlParts = `${window.location.pathname}`.split(\"/\").slice(0, 5);\n browserHistoryOpts.basename = urlParts.join(\"/\");\n baseUrl = `${urlParts.join(\"/\")}/`;\n}\n\nexport default createBrowserHistory(browserHistoryOpts);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\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\nimport { ErrorResponseHandler } from \"./common/types\";\n\n// along with this program. If not, see .\nexport interface snackBarMessage {\n message: string;\n detailedErrorMsg: 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 distributedSetup: boolean;\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\";\nexport const GLOBAL_SET_DISTRIBUTED_SETUP = \"GLOBAL/SET_DISTRIBUTED_SETUP\";\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: ErrorResponseHandler;\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: ErrorResponseHandler;\n}\n\ninterface SetDistributedSetup {\n type: typeof GLOBAL_SET_DISTRIBUTED_SETUP;\n distributedSetup: boolean;\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 | SetDistributedSetup;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ErrorResponseHandler } from \"./common/types\";\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 GLOBAL_SET_DISTRIBUTED_SETUP,\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: ErrorResponseHandler) => {\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: ErrorResponseHandler) => {\n return {\n type: SET_MODAL_ERROR_MESSAGE,\n message,\n };\n};\n\nexport const setDistributedMode = (distributedSetup: boolean) => {\n return {\n type: GLOBAL_SET_DISTRIBUTED_SETUP,\n distributedSetup,\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 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 n = parseInt(x, 10) || 0;\n\n return niceBytesInt(n, showK8sUnits);\n};\n\nexport const niceBytesInt = (n: number, showK8sUnits: boolean = false) => {\n let l = 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 (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, timeVariant: string = \"s\") => {\n let seconds = parseFloat(secondsValue);\n\n return niceDaysInt(seconds, timeVariant);\n};\n\nexport const niceDaysInt = (seconds: number, timeVariant: string = \"s\") => {\n switch (timeVariant) {\n case \"ns\":\n seconds = Math.floor(seconds * 0.000000001);\n break;\n case \"ms\":\n seconds = Math.floor(seconds * 0.001);\n break;\n default:\n }\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\";\nimport { baseUrl } from \"../../history\";\nimport { ErrorResponseHandler } from \"../types\";\n\nexport class API {\n invoke(method: string, url: string, data?: object) {\n const targetURL = `${baseUrl}${url}`.replaceAll(\"//\", \"/\");\n return request(method, targetURL)\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 `Error ${err.status.toString()}`\n );\n\n let detailedMessage = get(err.response, \"body.detailedMessage\", \"\");\n\n if (errMessage === detailedMessage) {\n detailedMessage = \"\";\n }\n\n const capMessage =\n errMessage.charAt(0).toUpperCase() + errMessage.slice(1);\n const capDetailed =\n detailedMessage.charAt(0).toUpperCase() + detailedMessage.slice(1);\n\n const throwMessage: ErrorResponseHandler = {\n errorMessage: capMessage,\n detailedError: capDetailed,\n };\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 from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nimport { IIcon } from \"./props\";\nconst RefreshIcon = ({ width = 24 }: IIcon) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default RefreshIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { OutlinedInputProps } from \"@material-ui/core/OutlinedInput\";\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 request from \"superagent\";\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 { ILoginDetails, loginStrategyType } from \"./types\";\nimport { SystemState } from \"../../types\";\nimport { userLoggedIn } from \"../../actions\";\nimport { ErrorResponseHandler } from \"../../common/types\";\nimport api from \"../../common/api\";\nimport history from \"../../history\";\nimport RefreshIcon from \"../../icons/RefreshIcon\";\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 loaderAlignment: {\n display: \"flex\",\n width: \"100%\",\n height: \"100%\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n },\n retryButton: {\n alignSelf: \"flex-end\",\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(null);\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(null);\n if (\n loginDetails.loginStrategy === \"redirect\" &&\n loginDetails.redirect !== \"\"\n ) {\n //location.href = loginDetails.redirect;\n }\n })\n .catch((err: ErrorResponseHandler) => {\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({ detailedError: \"\", errorMessage: 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 Username\"\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 Password\"\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
\n );\n break;\n }\n case loginStrategyType.redirect: {\n loginComponent = (\n \n \n Welcome\n \n \n Login with SSO\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
\n );\n break;\n }\n default:\n loginComponent = (\n
\n {error === null ? (\n \n ) : (\n \n
\n

An error has ocurred, the backend cannot be reached.

\n
\n
\n {\n fetchConfiguration();\n }}\n startIcon={}\n color={\"primary\"}\n className={classes.retryButton}\n >\n Retry\n \n
\n
\n )}\n
\n );\n }\n\n return (\n \n {error !== null && (\n
\n {\" \"}\n {error.errorMessage}\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 },\n tooltipContainer: {\n marginLeft: 5,\n display: \"flex\",\n alignItems: \"center\",\n },\n switchContainer: {\n display: \"flex\",\n maxWidth: 840,\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 },\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: \"82px 8px 0\",\n \"& h6\": {\n color: \"#777777\",\n fontSize: 14,\n },\n \"& p\": {\n \"& span:not(*[class*='smallUnit'])\": {\n fontSize: 16,\n },\n },\n },\n sectionTitle: {\n padding: \"0px\",\n margin: \"0px\",\n },\n topSpacer: {\n height: \"8px\",\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 \"& label, & label.MuiInputLabel-shrink\": {\n fontSize: 10,\n transform: \"translate(5px, 2px)\",\n transformOrigin: \"top left\",\n },\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 \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n },\n },\n};\n\nexport const predefinedList = {\n prefinedContainer: {\n maxWidth: 840,\n width: \"100%\",\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 smallLabel: {\n color: \"#9C9C9C\",\n fontSize: 15,\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 innerSettingsButtonContainer: {\n maxWidth: 840,\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 typesSelection = {\n iconContainer: {\n display: \"flex\" as const,\n flexDirection: \"row\" as const,\n maxWidth: 455,\n justifyContent: \"space-between\" as const,\n flexWrap: \"wrap\" as const,\n width: \"100%\",\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\" as const,\n flexDirection: \"column\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"center\" as const,\n },\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};\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\nexport const buttonsStyles = {\n anchorButton: {\n textDecoration: \"underline\" as const,\n textTransform: \"unset\" as const,\n fontWeight: \"normal\" as const,\n padding: 0,\n lineHeight: \"unset\" as const,\n height: \"unset\" as const,\n width: \"unset\" as const,\n textAlign: \"left\" as const,\n border: 0,\n minWidth: \"unset\" as const,\n },\n};\n\nexport const hrClass = {\n hrClass: {\n borderTop: 0,\n borderLeft: 0,\n borderRight: 0,\n borderColor: \"#999999\",\n backgroundColor: \"transparent\" as const,\n },\n};\n\nexport const tenantDetailsStyles = {\n buttonContainer: {\n textAlign: \"right\" as const,\n },\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 },\n containerHeader: {\n display: \"flex\" as const,\n justifyContent: \"space-between\" as const,\n },\n paperContainer: {\n padding: \"15px 15px 15px 50px\",\n },\n infoGrid: {\n display: \"grid\" as const,\n gridTemplateColumns: \"auto auto auto auto\",\n gridGap: 8,\n \"& div\": {\n display: \"flex\" as const,\n alignItems: \"center\" as const,\n },\n \"& div:nth-child(odd)\": {\n justifyContent: \"flex-end\" as const,\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 updateButton: {\n backgroundColor: \"transparent\" as const,\n border: 0,\n padding: \"0 6px\",\n cursor: \"pointer\" as const,\n \"&:focus, &:active\": {\n outline: \"none\",\n },\n \"& svg\": {\n height: 12,\n },\n },\n poolLabel: {\n color: \"#666666\",\n },\n titleCol: {\n fontWeight: 700,\n },\n breadcrumLink: {\n textDecoration: \"none\",\n color: \"black\",\n },\n healthCol: {\n fontWeight: 700,\n paddingRight: \"10px\",\n },\n ...modalBasic,\n ...actionsTray,\n ...buttonsStyles,\n ...searchField,\n ...hrClass,\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"15px 0 0\",\n },\n};\n\nexport const inputFieldStyles = {\n root: {\n borderRadius: 0,\n \"&::before\": {\n borderColor: \"#9c9c9c\",\n },\n },\n disabled: {\n \"&.MuiInput-underline::before\": {\n borderColor: \"#eaeaea\",\n borderBottomStyle: \"solid\" as const,\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\nexport const inlineCheckboxes = {\n inlineCheckboxes: {\n display: \"flex\",\n justifyContent: \"flex-start\",\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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst StorageIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default StorageIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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\ninterface IShareIcon {\n width?: number;\n}\n\nconst ShareIcon = ({ width = 24 }: IShareIcon) => {\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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst FolderIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default FolderIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst EditIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default EditIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst SearchIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default SearchIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst ObjectBrowserFolderIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ObjectBrowserFolderIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst DashboardIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst WatchIcon = (props: SvgIconProps) => {\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\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\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst HealIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \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 from \"react\";\n\ninterface IOperatorLogo {\n width?: number;\n}\n\nconst OperatorLogo = ({ width = 120 }: IOperatorLogo) => {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default OperatorLogo;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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\";\nimport { IIcon } from \"./props\";\n\nconst DeleteIcon = ({ width = 24 }: IIcon) => {\n return (\n \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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst ReportedUsageIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ReportedUsageIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst AccountIcon = (props: SvgIconProps) => {\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\nexport default AccountIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst TenantsOutlineIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default TenantsOutlineIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 .\n\nimport React from \"react\";\nimport { SvgIcon } from \"@material-ui/core\";\nimport { IIcon } from \"./props\";\n\nconst DiagnosticsIcon = ({ width = 24 }: IIcon) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default DiagnosticsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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\";\n\ninterface IConsoleLogo {\n width?: number;\n}\n\nconst ConsoleLogo = ({ width = 120 }: IConsoleLogo) => {\n return (\n \n \n \n \n \n \n );\n};\n\nexport default ConsoleLogo;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst TraceIcon = (props: SvgIconProps) => {\n return (\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\";\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 .\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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst LicenseIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \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\";\n\nconst RemoveIcon = () => {\n return (\n \n \n \n );\n};\n\nexport default RemoveIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst AddFolderIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default AddFolderIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst IAMPoliciesIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IAMPoliciesIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst UsersIcon = (props: SvgIconProps) => {\n return (\n \n \n \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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst DocumentationIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default DocumentationIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst TrashIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TrashIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst DownloadIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst GroupsIcon = (props: SvgIconProps) => {\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\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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst TenantsIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default TenantsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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\ninterface ICreateIcon {\n width?: number;\n}\n\nconst CreateIcon = ({ width = 24 }: ICreateIcon) => {\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\";\nconst SyncIcon = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default SyncIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst LogoutIcon = (props: SvgIconProps) => {\n return (\n \n \n \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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst HistoryIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default HistoryIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst BucketsIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \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 * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst ObjectBrowserIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default ObjectBrowserIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst SettingsIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default SettingsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst UploadIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default UploadIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst LogsIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default LogsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst serversIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default serversIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst totalObjectsIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default totalObjectsIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport * as React from \"react\";\nimport { SvgIcon, SvgIconProps } from \"@material-ui/core\";\n\nconst circleIcon = (props: SvgIconProps) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default circleIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { BucketInfo } from \"./types\";\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\";\nexport const BUCKET_DETAILS_SET_TAB = \"BUCKET_DETAILS/SET_TAB\";\nexport const BUCKET_DETAILS_LOADING = \"BUCKET_DETAILS/LOADING\";\nexport const BUCKET_DETAILS_SET_INFO = \"BUCKET_DETAILS/SET_INFO\";\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\ninterface SetBucketDetailsTab {\n type: typeof BUCKET_DETAILS_SET_TAB;\n tab: string;\n}\n\ninterface SetLoadingBucket {\n type: typeof BUCKET_DETAILS_LOADING;\n state: boolean;\n}\n\ninterface SetBucketInfo {\n type: typeof BUCKET_DETAILS_SET_INFO;\n info: BucketInfo | null;\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 | SetBucketDetailsTab\n | SetLoadingBucket\n | SetBucketInfo;\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\nexport function setBucketDetailsTab(tab: string) {\n return {\n type: BUCKET_DETAILS_SET_TAB,\n tab,\n };\n}\n\nexport const setBucketDetailsLoad = (loading: boolean) => {\n return {\n type: BUCKET_DETAILS_LOADING,\n state: loading,\n };\n};\n\nexport const setBucketInfo = (bucketInfo: BucketInfo | null) => {\n return {\n type: BUCKET_DETAILS_SET_INFO,\n info: bucketInfo,\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 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 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 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 FormatDriveIcon = ({ active = false }: IIcon) => {\n return (\n \n \n \n );\n};\n\nexport default FormatDriveIcon;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more 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 { Link } from \"react-router-dom\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\nimport { IconButton } from \"@material-ui/core\";\nimport ViewIcon from \"./TableActionIcons/ViewIcon\";\nimport ShareIcon from \"./TableActionIcons/ShareIcon\";\nimport CloudIcon from \"./TableActionIcons/CloudIcon\";\nimport ConsoleIcon from \"./TableActionIcons/ConsoleIcon\";\nimport DisableIcon from \"./TableActionIcons/DisableIcon\";\nimport FormatDriveIcon from \"./TableActionIcons/FormatDriveIcon\";\nimport EditIcon from \"../../../../icons/EditIcon\";\nimport TrashIcon from \"../../../../icons/TrashIcon\";\nimport { IAMPoliciesIcon } from \"../../../../icons\";\nimport DownloadIcon from \"../../../../icons/DownloadIcon\";\n\nconst styles = () =>\n createStyles({\n spacing: {\n margin: \"0 8px\",\n },\n buttonDisabled: {\n \"&.MuiButtonBase-root.Mui-disabled\": {\n cursor: \"not-allowed\",\n filter: \"grayscale(100%)\",\n opacity: \"30%\",\n },\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 disabled: boolean;\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 case \"disable\":\n return ;\n case \"format\":\n return ;\n case \"preview\":\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 disabled = false,\n classes,\n}: IActionButton) => {\n const valueClick = sendOnlyId ? valueToSend[idField] : valueToSend;\n\n const buttonElement = (\n {\n e.stopPropagation();\n if (!disabled) {\n onClick(valueClick);\n } else {\n e.preventDefault();\n }\n }\n : () => null\n }\n className={`${classes.spacing} ${disabled ? classes.buttonDisabled : \"\"}`}\n disabled={disabled}\n >\n {defineIcon(type, selected)}\n \n );\n\n if (onClick) {\n return buttonElement;\n }\n\n if (isString(to)) {\n if (!disabled) {\n return (\n {\n e.stopPropagation();\n }}\n >\n {buttonElement}\n \n );\n }\n\n return buttonElement;\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 .\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\nexport interface ItemActions {\n type: string;\n to?: string;\n sendOnlyId?: boolean;\n disableButtonFunction?: (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: \"8px 16px\",\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 \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n },\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 let disabled = false;\n\n if (action.disableButtonFunction) {\n if (action.disableButtonFunction(vlSend)) {\n disabled = true;\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 noContentPadding?: boolean;\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 width: \"100%\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n textOverflow: \"ellipsis\",\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 noContentPadding,\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 let message = \"\";\n\n if (modalSnackMessage) {\n message = modalSnackMessage.detailedErrorMsg;\n if (\n modalSnackMessage.detailedErrorMsg === \"\" ||\n modalSnackMessage.detailedErrorMsg.length < 5\n ) {\n message = modalSnackMessage.message;\n }\n }\n\n return (\n \n
\n {\n closeSnackBar();\n }}\n message={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 {\n fieldBasic,\n inputFieldStyles,\n tooltipHelper,\n} 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 \"&.withLabel\": {\n top: 27,\n },\n },\n });\n\nconst inputStyles = makeStyles((theme: Theme) =>\n createStyles({\n ...inputFieldStyles,\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\nexport interface 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 maxWidth: 840,\n },\n wrapperContainer: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n maxWidth: 840,\n },\n indicatorLabel: {\n fontSize: 12,\n fontWeight: 600,\n color: \"#081C42\",\n margin: \"0 8px 0 10px\",\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, Fragment } 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\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\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 error: {\n color: \"#b53b4b\",\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 distributedSetup: boolean;\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 distributedSetup,\n}: IAddBucketProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [sendEnabled, setSendEnabled] = useState(false);\n const [lockingFieldDisabled, setLockingFieldDisabled] =\n useState(false);\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: distributedSetup ? versioningEnabled : false,\n locking: distributedSetup ? lockingEnabled : false,\n };\n\n if (distributedSetup) {\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\n api\n .invoke(\"POST\", \"/api/v1/buckets\", request)\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\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 addBucketRetention,\n addBucketRetentionMode,\n addBucketRetentionUnit,\n addBucketRetentionValidity,\n retentionValidity,\n versioningEnabled,\n enableObjectLocking,\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 {!distributedSetup && (\n \n \n Some these features are disabled as server is running in\n non-erasure coded mode.\n \n
\n
\n
\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 disabled={!distributedSetup}\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 ) => {\n addBucketQuota(event.target.checked);\n }}\n label={\"Quota\"}\n description={\"Limit the amount of data in the bucket.\"}\n indicatorLabels={[\"On\", \"Off\"]}\n disabled={!distributedSetup}\n />\n \n {quotaEnabled && distributedSetup && (\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 && distributedSetup && (\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 && distributedSetup && (\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 distributedSetup: state.system.distributedSetup,\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 { ErrorResponseHandler } from \"../../../../common/types\";\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: ErrorResponseHandler) => {\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 actions?: 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: \"2px solid\",\n borderBottomColor: \"#e8e8e8\",\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: 34,\n marginTop: 8,\n },\n rightMenu: {\n marginTop: 16,\n marginRight: 8,\n },\n });\n\nconst PageHeader = ({ classes, label, actions }: IPageHeader) => {\n return (\n \n \n \n {label}\n \n \n {actions && (\n \n {actions}\n \n )}\n \n );\n};\n\nexport default withStyles(styles)(PageHeader);\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 from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IWizardButton, IWizardPage } from \"./types\";\nimport { Button, LinearProgress } 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 - 342px)\",\n maxWidth: 840,\n width: \"100%\",\n },\n wizardModal: {\n overflowY: \"auto\",\n marginBottom: 10,\n height: \"calc(100vh - 515px)\",\n },\n buttonsContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\" as const,\n padding: \"10px 0\",\n borderTop: \"#EAEAEA 1px solid\",\n \"& button\": {\n marginLeft: 10,\n },\n \"&.forModal\": {\n paddingBottom: 0,\n },\n },\n buttonInnerContainer: {\n maxWidth: 840,\n width: \"100%\",\n textAlign: \"right\" as const,\n },\n });\n\nconst WizardPage = ({\n classes,\n page,\n pageChange,\n loadingStep,\n forModal,\n}: 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 case \"custom\":\n default:\n }\n\n if (btn.action) {\n btn.action(pageChange);\n }\n };\n\n return (\n
\n
\n {page.componentRender}\n
\n {loadingStep && (\n
\n \n
\n )}\n \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};\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, Fragment } 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 - 270px)\",\n minHeight: 450,\n padding: \"0 30px\",\n },\n wizFromModal: {\n position: \"relative\",\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: 0,\n\n \"& li\": {\n listStyle: \"lower-roman\",\n marginBottom: 12,\n },\n },\n },\n modalWizardSteps: {\n padding: 5,\n borderBottom: \"#eaeaea 1px solid\",\n \"& ul\": {\n padding: 0,\n marginTop: 0,\n display: \"flex\",\n justifyContent: \"space-evenly\",\n\n \"& li\": {\n listStyle: \"lower-roman\",\n \"&::marker\": {\n paddingLeft: 15,\n },\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 \"&.stepsModalTitle\": {\n textAlign: \"center\",\n width: \"100%\",\n marginTop: 0,\n marginBottom: 10,\n },\n },\n stepsMasterContainer: {\n position: \"sticky\",\n top: 0,\n backgroundColor: \"#FFFFFF\",\n width: \"100%\",\n maxHeight: 90,\n },\n });\n\nconst GenericWizard = ({\n classes,\n wizardSteps,\n loadingStep,\n forModal,\n}: 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 const stepsList = () => {\n return (\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 return (\n \n {forModal ? (\n \n
\n
Steps
\n
{stepsList()}
\n
\n
\n ) : (\n \n \n
\n Steps\n {stepsList()}\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 .\n\nimport React, { useState, useEffect, Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Tooltip } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\nimport CheckCircleOutlineIcon from \"@material-ui/icons/CheckCircleOutline\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { BulkReplicationResponse, BulkReplicationItem } from \"../types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\nimport PredefinedList from \"../../Common/FormComponents/PredefinedList/PredefinedList\";\nimport api from \"../../../../common/api\";\nimport GenericWizard from \"../../Common/GenericWizard/GenericWizard\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { SelectorTypes } from \"../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport { getBytes, k8sfactorForDropdown } from \"../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ninterface IBulkReplicationModal {\n open: boolean;\n closeModalAndRefresh: (clearSelection: boolean) => any;\n classes: any;\n buckets: 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 remoteBucketList: {\n display: \"grid\",\n gridTemplateColumns: \"auto auto 45px\",\n alignItems: \"center\",\n justifyContent: \"stretch\",\n },\n errorIcon: {\n color: \"#C72C48\",\n },\n successIcon: {\n color: \"#42C91A\",\n },\n hide: {\n opacity: 0,\n transitionDuration: \"0.3s\",\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst AddBulkReplicationModal = ({\n open,\n closeModalAndRefresh,\n classes,\n buckets,\n setModalErrorSnackMessage,\n}: IBulkReplicationModal) => {\n const [bucketsToAlter, setBucketsToAlter] = useState([]);\n const [addLoading, setAddLoading] = useState(false);\n const [externalLoading, setExternalLoading] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [targetURL, setTargetURL] = useState(\"\");\n const [region, setRegion] = useState(\"\");\n const [useTLS, setUseTLS] = useState(true);\n const [replicationMode, setReplicationMode] = useState(\"async\");\n const [bandwidthScalar, setBandwidthScalar] = useState(\"100\");\n const [bandwidthUnit, setBandwidthUnit] = useState(\"Gi\");\n const [healthCheck, setHealthCheck] = useState(\"60\");\n const [relationBuckets, setRelationBuckets] = useState([]);\n const [remoteBucketsOpts, setRemoteBucketOpts] = useState([]);\n const [responseItem, setResponseItem] = useState([]);\n\n const optionsForBucketsDrop: SelectorTypes[] = remoteBucketsOpts.map(\n (remoteBucketName: string) => {\n return {\n label: remoteBucketName,\n value: remoteBucketName,\n };\n }\n );\n\n useEffect(() => {\n if (relationBuckets.length === 0) {\n const bucketsAlter: string[] = [];\n const relationBucketsAlter: string[] = [];\n\n buckets.forEach((item: string) => {\n bucketsAlter.push(item);\n relationBucketsAlter.push(\"\");\n });\n\n setRelationBuckets(relationBucketsAlter);\n setBucketsToAlter(bucketsAlter);\n }\n }, [buckets, relationBuckets.length]);\n\n const addRecord = () => {\n setAddLoading(true);\n const replicate = bucketsToAlter.map((bucketName, index) => {\n return {\n originBucket: bucketName,\n destinationBucket: relationBuckets[index],\n };\n });\n\n const endURL = `${useTLS ? \"https://\" : \"http://\"}${targetURL}`;\n const hc = parseInt(healthCheck);\n\n const remoteBucketsInfo = {\n accessKey: accessKey,\n secretKey: secretKey,\n targetURL: endURL,\n region: region,\n bucketsRelation: replicate,\n syncMode: replicationMode,\n bandwidth:\n replicationMode === \"async\"\n ? parseInt(getBytes(bandwidthScalar, bandwidthUnit, true))\n : 0,\n healthCheckPeriod: hc,\n };\n\n api\n .invoke(\"POST\", \"/api/v1/buckets-replication\", remoteBucketsInfo)\n .then((response: BulkReplicationResponse) => {\n setAddLoading(false);\n\n const states = response.replicationState;\n setResponseItem(states);\n\n const filterErrors = states.filter(\n (itm) => itm.errorString && itm.errorString !== \"\"\n );\n\n if (filterErrors.length === 0) {\n closeModalAndRefresh(true);\n } else {\n setTimeout(() => {\n removeSuccessItems(states);\n }, 500);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const retrieveRemoteBuckets = (\n wizardPageJump: (page: number | string) => void\n ) => {\n const remoteConnectInfo = {\n accessKey: accessKey,\n secretKey: secretKey,\n targetURL: targetURL,\n useTLS,\n };\n setExternalLoading(true);\n\n api\n .invoke(\"POST\", \"/api/v1/list-external-buckets\", remoteConnectInfo)\n .then((dataReturn) => {\n const buckets = get(dataReturn, \"buckets\", []);\n\n if (buckets && buckets.length > 0) {\n const arrayReplaceBuckets = buckets.map((element: any) => {\n return element.name;\n });\n\n setRemoteBucketOpts(arrayReplaceBuckets);\n }\n\n wizardPageJump(\"++\");\n setExternalLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setExternalLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const stateOfItem = (initialBucket: string) => {\n if (responseItem.length > 0) {\n const bucketResponse = responseItem.find(\n (item) => item.originBucket === initialBucket\n );\n\n if (bucketResponse) {\n const errString = get(bucketResponse, \"errorString\", \"\");\n\n if (errString) {\n return errString;\n }\n\n return \"\";\n }\n }\n return \"n/a\";\n };\n\n const LogoToShow = ({ errString }: { errString: string }) => {\n switch (errString) {\n case \"\":\n return (\n
\n \n
\n );\n case \"n/a\":\n return null;\n default:\n if (errString) {\n return (\n
\n \n \n \n
\n );\n }\n }\n return null;\n };\n\n const updateItem = (indexItem: number, value: string) => {\n const updatedList = [...relationBuckets];\n updatedList[indexItem] = value;\n setRelationBuckets(updatedList);\n };\n\n const itemDisplayBulk = (indexItem: number) => {\n if (remoteBucketsOpts.length > 0) {\n return (\n \n ) => {\n updateItem(indexItem, e.target.value as string);\n }}\n options={optionsForBucketsDrop}\n disabled={addLoading}\n />\n \n );\n }\n return (\n \n ) => {\n updateItem(indexItem, event.target.value);\n }}\n value={relationBuckets[indexItem]}\n disabled={addLoading}\n />\n \n );\n };\n\n const removeSuccessItems = (responseItem: BulkReplicationItem[]) => {\n let newBucketsToAlter = [...bucketsToAlter];\n let newRelationBuckets = [...relationBuckets];\n\n responseItem.forEach((successElement) => {\n const errorString = get(successElement, \"errorString\", \"\");\n\n if (!errorString || errorString === \"\") {\n const indexToRemove = newBucketsToAlter.indexOf(\n successElement.originBucket\n );\n\n newBucketsToAlter.splice(indexToRemove, 1);\n newRelationBuckets.splice(indexToRemove, 1);\n }\n });\n\n setBucketsToAlter(newBucketsToAlter);\n setRelationBuckets(newRelationBuckets);\n };\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n title=\"Set Multiple Bucket Replication\"\n >\n \n \n \n \n

Remote Endpoint Configuration

\n \n Please avoid the use of root credentials for this feature\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=\"play.min.io:9000\"\n label=\"Target URL\"\n value={targetURL}\n />\n \n \n {\n setUseTLS(e.target.checked);\n }}\n value=\"yes\"\n />\n \n \n ) => {\n setRegion(e.target.value);\n }}\n label=\"Region\"\n value={region}\n />\n \n \n ) => {\n setReplicationMode(e.target.value as string);\n }}\n label=\"Replication Mode\"\n value={replicationMode}\n options={[\n { label: \"Asynchronous\", value: \"async\" },\n { label: \"Synchronous\", value: \"sync\" },\n ]}\n />\n \n {replicationMode === \"async\" && (\n \n
\n
\n \n ) => {\n setBandwidthScalar(e.target.value as string);\n }}\n label=\"Bandwidth\"\n value={bandwidthScalar}\n min=\"0\"\n />\n
\n
\n \n ) => {\n setBandwidthUnit(e.target.value as string);\n }}\n options={k8sfactorForDropdown()}\n />\n
\n
\n
\n )}\n \n ) => {\n setHealthCheck(e.target.value as string);\n }}\n label=\"Health Check Duration\"\n value={healthCheck}\n />\n \n \n ),\n buttons: [\n {\n type: \"custom\",\n label: \"Next\",\n enabled: !externalLoading,\n action: retrieveRemoteBuckets,\n },\n ],\n },\n {\n label: \"Buckets Assignation\",\n componentRender: (\n \n

Remote Buckets Assignation

\n \n Please select / type the desired remote bucket were you want\n the local data to be replicated.\n \n
\n {bucketsToAlter.map((bucketName: string, index: number) => {\n const errorItem = stateOfItem(bucketName);\n return (\n \n
\n {bucketName}\n
\n
\n {itemDisplayBulk(index)}\n
\n
\n {responseItem.length > 0 && (\n \n )}\n
\n \n );\n })}\n
\n
\n ),\n buttons: [\n {\n type: \"back\",\n label: \"Back\",\n enabled: true,\n },\n {\n type: \"next\",\n label: \"Create\",\n enabled: !addLoading,\n action: addRecord,\n },\n ],\n },\n ]}\n forModal\n />\n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(AddBulkReplicationModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 FileCopyIcon from \"@material-ui/icons/FileCopy\";\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 { ErrorResponseHandler } from \"../../../../common/types\";\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\";\nimport BulkReplicationModal from \"./BulkReplicationModal\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\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 const [selectedBuckets, setSelectedBuckets] = useState([]);\n const [replicationModalOpen, setReplicationModalOpen] =\n useState(false);\n\n // check the permissions for creating bucket\n useEffect(() => {\n if (loadingPerms) {\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: ErrorResponseHandler) => {\n setLoadingPerms(false);\n setErrorSnackMessage(err);\n });\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: ErrorResponseHandler) => {\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 setSelectedBuckets([]);\n }\n };\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n setLoading(true);\n setSelectedBuckets([]);\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 const selectListBuckets = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selectedBuckets]; // We clone the selectedBuckets array\n\n if (checked) {\n // If the user has checked this field we need to push this to selectedBucketsList\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 setSelectedBuckets(elements);\n\n return elements;\n };\n\n const closeBulkReplicationModal = (unselectAll: boolean) => {\n setReplicationModalOpen(false);\n\n if (unselectAll) {\n setSelectedBuckets([]);\n }\n };\n\n return (\n \n {addBucketModalOpen && (\n \n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n {replicationModalOpen && (\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 setReplicationModalOpen(true);\n }}\n disabled={selectedBuckets.length === 0}\n >\n Set Replication\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, { Fragment } from \"react\";\n\ninterface TabPanelProps {\n children?: React.ReactNode;\n index: any;\n value: any;\n}\n\nexport const TabPanel = (props: TabPanelProps) => {\n const { children, value, index, ...other } = props;\n\n return (\n
\n \n Network: {activeNetwork}/{networkTotal}{\" \"}\n \n \n \n \n \n Uptime: {niceDays(server.uptime)}\n \n \n }\n />\n \n );\n};\n\nexport default withStyles(styles)(ServerInfoCard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 Grid from \"@material-ui/core/Grid\";\nimport { IDriveInfo } from \"../types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport { Card, CardHeader } from \"@material-ui/core\";\nimport { CircleIcon, StorageIcon } from \"../../../../icons\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n cardIconContainer: {\n display: \"flex\",\n position: \"relative\",\n alignItems: \"center\",\n },\n stateContainer: {\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\",\n },\n infoValue: {\n fontWeight: 500,\n color: \"#777777\",\n fontSize: 14,\n margin: \"5px 4px\",\n display: \"inline-flex\",\n \"& strong\": {\n marginRight: 4,\n },\n },\n redState: {\n color: theme.palette.error.main,\n },\n greenState: {\n color: theme.palette.success.main,\n },\n yellowState: {\n color: theme.palette.warning.main,\n },\n greyState: {\n color: \"grey\",\n },\n healthStatusIcon: {\n position: \"absolute\",\n fontSize: 10,\n left: 18,\n height: 10,\n bottom: 2,\n \"& .MuiSvgIcon-root\": {\n width: 10,\n height: 10,\n },\n },\n innerState: {\n fontSize: 10,\n marginLeft: 5,\n display: \"flex\",\n alignItems: \"center\",\n marginTop: -3,\n },\n cardHeader: {\n \"& .MuiCardHeader-title\": {\n fontWeight: \"bolder\",\n },\n },\n });\n\ninterface ICardProps {\n classes: any;\n drive: IDriveInfo;\n}\n\nconst DriveInfoCard = ({ classes, drive }: ICardProps) => {\n console.log(drive);\n const driveStatusToClass = (health_status: string) => {\n switch (health_status) {\n case \"offline\":\n return classes.redState;\n case \"ok\":\n return classes.greenState;\n default:\n return classes.greyState;\n }\n };\n\n return (\n \n \n \n \n
\n {drive.state && (\n \n \n \n )}\n
\n \n }\n title={drive.endpoint}\n subheader={\n \n \n Capacity:{\" \"}\n {niceBytes(drive.totalSpace.toString())}\n \n \n Used: {niceBytes(drive.usedSpace.toString())}\n \n \n Available:{\" \"}\n {niceBytes(drive.availableSpace.toString())}\n \n \n }\n />\n
\n
\n );\n};\n\nexport default withStyles(styles)(DriveInfoCard);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 Typography from \"@material-ui/core/Typography\";\nimport { Usage } from \"../types\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport ReportedUsageIcon from \"../../../../icons/ReportedUsageIcon\";\nimport ServerInfoCard from \"./ServerInfoCard\";\nimport DriveInfoCard from \"./DriveInfoCard\";\nimport {\n BucketsIcon,\n ServersIcon,\n StorageIcon,\n TotalObjectsIcon,\n} from \"../../../../icons\";\nimport { Card, CardHeader } from \"@material-ui/core\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n dashboardBG: {\n width: 390,\n height: 255,\n zIndex: -1,\n position: \"fixed\",\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\n cardsContainer: {\n maxHeight: 440,\n overflowY: \"auto\",\n overflowX: \"hidden\",\n },\n });\n\ninterface IDashboardProps {\n classes: any;\n usage: Usage | null;\n}\n\nconst BasicDashboard = ({ classes, usage }: IDashboardProps) => {\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 const makeServerArray = (usage: Usage | null) => {\n if (usage != null) {\n return usage.servers.sort(function (a, b) {\n var nameA = a.endpoint.toLowerCase();\n var nameB = b.endpoint.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n } else return [];\n };\n\n const serverArray = makeServerArray(usage);\n\n return (\n \n
\n \n \n \n \n \n }\n title=\"Number of Buckets\"\n subheader={usage ? prettyNumber(usage.buckets) : 0}\n />\n \n \n \n \n }\n title=\"Usage\"\n subheader={usage ? prettyUsage(usage.usage + \"\") : 0}\n />\n \n \n \n \n }\n title=\"Total Objects\"\n subheader={usage ? prettyNumber(usage.objects) : 0}\n />\n \n \n \n \n\n \n \n \n \n \n \n Drives Status\n \n \n \n {serverArray.map((server, index) =>\n server.drives.map((drive) => (\n \n \n \n ))\n )}\n \n \n \n \n \n \n \n \n \n Servers Status\n \n \n \n {serverArray.map((server, index) => (\n \n \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, { Fragment, useCallback, useEffect, useState } 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\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\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: ErrorResponseHandler) => {\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 {loading ? (\n \n \n \n \n \n ) : (\n \n {widgets !== null ? (\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(Dashboard));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\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, { useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { NavLink } from \"react-router-dom\";\nimport { Divider, withStyles } from \"@material-ui/core\";\nimport { createStyles, Theme } from \"@material-ui/core/styles\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport { AppState } from \"../../../store\";\nimport { userLoggedIn } from \"../../../actions\";\nimport { menuGroups } from \"./utils\";\nimport { IMenuItem, IMenuProps } from \"./types\";\nimport {\n BucketsIcon,\n DashboardIcon,\n GroupsIcon,\n IAMPoliciesIcon,\n TraceIcon,\n UsersIcon,\n} from \"../../../icons\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { clearSession } from \"../../../common/utils\";\nimport LicenseIcon from \"../../../icons/LicenseIcon\";\nimport LogoutIcon from \"../../../icons/LogoutIcon\";\nimport HealIcon from \"../../../icons/HealIcon\";\nimport WatchIcon from \"../../../icons/WatchIcon\";\nimport OperatorLogo from \"../../../icons/OperatorLogo\";\nimport ConsoleLogo from \"../../../icons/ConsoleLogo\";\nimport history from \"../../../history\";\nimport api from \"../../../common/api\";\nimport AccountIcon from \"../../../icons/AccountIcon\";\nimport DiagnosticsIcon from \"../../../icons/DiagnosticsIcon\";\nimport DocumentationIcon from \"../../../icons/DocumentationIcon\";\nimport LogsIcon from \"../../../icons/LogsIcon\";\nimport SettingsIcon from \"../../../icons/SettingsIcon\";\nimport StorageIcon from \"../../../icons/StorageIcon\";\nimport TenantsOutlinedIcon from \"../../../icons/TenantsOutlineIcon\";\nimport ObjectBrowserIcon from \"../../../icons/ObjectBrowserIcon\";\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 {\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\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 = ({\n userLoggedIn,\n classes,\n pages,\n operatorMode,\n distributedSetup,\n}: 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: ErrorResponseHandler) => {\n console.log(err);\n deleteSession();\n });\n };\n\n let menuItems: IMenuItem[] = [\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: \"Service Accounts\",\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 fsHidden: distributedSetup,\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: \"/storage\",\n name: \"Storage\",\n icon: ,\n },\n ];\n\n const allowedPages = pages.reduce((result: any, item: any) => {\n result[item] = true;\n return result;\n }, {});\n\n const documentation: IMenuItem = {\n group: \"License\",\n type: \"item\",\n component: NavLink,\n to: \"/documentation\",\n name: \"Documentation\",\n icon: ,\n forceDisplay: true,\n };\n\n // Append the license page according to the allowedPages\n if (allowedPages.hasOwnProperty(\"/tenants\")) {\n menuItems.push(\n {\n group: \"Operator\",\n type: \"item\",\n component: NavLink,\n to: \"/license\",\n name: \"License\",\n icon: ,\n },\n {\n ...documentation,\n group: \"Operator\",\n onClick: (\n e:\n | React.MouseEvent\n | React.MouseEvent\n | React.MouseEvent\n ) => {\n e.preventDefault();\n window.open(\n `https://docs.min.io/?ref=${operatorMode ? \"op\" : \"con\"}`,\n \"_blank\"\n );\n },\n }\n );\n } else {\n menuItems.push(\n {\n group: \"License\",\n type: \"item\",\n component: NavLink,\n to: \"/license\",\n name: \"License\",\n icon: ,\n },\n {\n ...documentation,\n group: \"License\",\n onClick: (\n e:\n | React.MouseEvent\n | React.MouseEvent\n | React.MouseEvent\n ) => {\n e.preventDefault();\n window.open(\n `https://docs.min.io/?ref=${operatorMode ? \"op\" : \"con\"}`,\n \"_blank\"\n );\n },\n }\n );\n }\n\n const allowedItems = menuItems.filter(\n (item: any) =>\n (allowedPages[item.to] || item.forceDisplay || item.type !== \"item\") &&\n item.fsHidden !== false\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 {operatorMode ? : }\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: IMenuItem) => {\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\nconst mapState = (state: AppState) => ({\n open: state.system.loggedIn,\n operatorMode: state.system.operatorMode,\n distributedSetup: state.system.distributedSetup,\n});\n\nconst connector = connect(mapState, { userLoggedIn });\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 { 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 { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\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 marginBottom: \"8px\",\n },\n containerScrollable: {\n maxHeight: \"calc(100vh - 300px)\" as const,\n overflowY: \"auto\" as const,\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 const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [isRestrictedByPolicy, setIsRestrictedByPolicy] =\n useState(false);\n const [addCredentials, setAddCredentials] = useState(false);\n\n useEffect(() => {\n if (addSending) {\n if (addCredentials) {\n api\n .invoke(\"POST\", `/api/v1/service-account-credentials`, {\n policy: policyDefinition,\n accessKey: accessKey,\n secretKey: secretKey,\n })\n .then((res) => {\n setAddSending(false);\n closeModalAndRefresh(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n } else {\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: ErrorResponseHandler) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n }\n }\n }, [\n addSending,\n setAddSending,\n setModalErrorSnackMessage,\n policyDefinition,\n closeModalAndRefresh,\n addCredentials,\n accessKey,\n secretKey,\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 \n ) => {\n setIsRestrictedByPolicy(event.target.checked);\n }}\n label={\"Restrict with policy\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n ) => {\n setAddCredentials(event.target.checked);\n }}\n label={\"Customize Credentials\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n {isRestrictedByPolicy && (\n \n {\n setPolicyDefinition(value);\n }}\n />\n \n )}\n {addCredentials && (\n \n {\n setAccessKey(e.target.value);\n }}\n />\n {\n setSecretKey(e.target.value);\n }}\n />\n \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 { ErrorResponseHandler } from \"../../../common/types\";\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: ErrorResponseHandler) => {\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 Delete\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 credentialsPanel: {\n overflowY: \"auto\",\n maxHeight: 350,\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 const idp = get(newServiceAccount, \"idp\", false);\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 {!idp && consoleCreds && (\n \n \n Console Credentials\n {Array.isArray(consoleCreds) &&\n consoleCreds.map((credentialsPair, index) => {\n return (\n
    \n
  • \n Access Key: {credentialsPair.accessKey}\n
  • \n
  • \n Secret Key: {credentialsPair.secretKey}\n
  • \n
\n );\n })}\n {!Array.isArray(consoleCreds) && (\n
    \n
  • \n Access Key: {consoleCreds.accessKey}\n
  • \n
  • \n Secret Key: {consoleCreds.secretKey}\n
  • \n
\n )}\n
\n
\n )}\n {idp ? (\n \n Please Login via the configured external identity provider.\n \n ) : (\n \n Write these down, as this is the only time the secret will be\n displayed.\n \n )}\n
\n \n {!idp && (\n {\n let consoleExtras = {};\n\n if (consoleCreds) {\n if (!Array.isArray(consoleCreds)) {\n consoleExtras = {\n console: [\n {\n access_key: consoleCreds.accessKey,\n secret_key: consoleCreds.secretKey,\n },\n ],\n };\n } else {\n const cCreds = consoleCreds.map((itemMap) => {\n return {\n access_key: itemMap.accessKey,\n secret_key: itemMap.secretKey,\n };\n });\n\n consoleExtras = {\n console: [...cCreds],\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 {\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 { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\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({\n errorMessage: \"New passwords don't match\",\n detailedError: \"\",\n });\n return;\n }\n\n if (newPassword.length < 8) {\n setModalErrorSnackMessage({\n errorMessage: \"Passwords must be at least 8 characters long\",\n detailedError: \"\",\n });\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: ErrorResponseHandler) => {\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, { 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 api from \"../../../common/api\";\nimport { Button, IconButton, Tooltip } 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 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 { ErrorResponseHandler } from \"../../../common/types\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport ChangePasswordModal from \"./ChangePasswordModal\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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 [newServiceAccount, setNewServiceAccount] =\n useState(null);\n const [changePasswordModalOpen, 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: ErrorResponseHandler) => {\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 setChangePasswordModalOpen(false)}\n />\n \n {changePassword && (\n \n setChangePasswordModalOpen(true)}\n >\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 Grid from \"@material-ui/core/Grid\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\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 { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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: ErrorResponseHandler) => {\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 {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\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(GroupsSelectors));\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 Grid from \"@material-ui/core/Grid\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\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 { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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: ErrorResponseHandler) => {\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 {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\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, { useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, LinearProgress, Tab, Tabs } 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 { ErrorResponseHandler } from \"../../../common/types\";\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\";\nimport PolicySelectors from \"../Policies/PolicySelectors\";\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 [selectedPolicies, setSelectedPolicies] = useState([]);\n const [currentGroups, setCurrentGroups] = useState([]);\n const [currenTab, setCurrenTab] = useState(0);\n\n const getUserInformation = useCallback(() => {\n if (!selectedUser) {\n return null;\n }\n\n api\n .invoke(\"GET\", `/api/v1/user?name=${encodeURI(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: ErrorResponseHandler) => {\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 (secretKey.length < 8) {\n setModalErrorSnackMessage({\n errorMessage: \"Passwords must be at least 8 characters long\",\n detailedError: \"\",\n });\n setAddLoading(false);\n return;\n }\n\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n if (selectedUser !== null) {\n api\n .invoke(\n \"PUT\",\n `/api/v1/user?name=${encodeURI(selectedUser.accessKey)}`,\n {\n status: enabled ? \"enabled\" : \"disabled\",\n groups: selectedGroups,\n policies: selectedPolicies,\n }\n )\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\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 policies: selectedPolicies,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\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 setCurrenTab(nv);\n }}\n >\n \n \n \n \n {currenTab === 0 && (\n \n \n \n )}\n {currenTab === 1 && (\n \n {\n setSelectedGroups(elements);\n }}\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\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\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(\n \"DELETE\",\n `/api/v1/user?name=${encodeURI(selectedUser.accessKey)}`,\n {\n id: selectedUser.id,\n }\n )\n .then((res: UsersList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\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 { ErrorResponseHandler } from \"../../../common/types\";\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 BulkAddToGroup = ({\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: ErrorResponseHandler) => {\n isSaving(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n isSaving(false);\n setModalErrorSnackMessage({\n errorMessage: \"You need to select at least one group to assign\",\n detailedError: \"\",\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(BulkAddToGroup));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { ErrorResponseHandler } from \"../../../common/types\";\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: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const fetchGroupInformation = () => {\n if (selectedGroup) {\n api\n .invoke(\"GET\", `/api/v1/group?name=${encodeURI(selectedGroup)}`)\n .then((res: any) => {\n const groupPolicy: String = get(res, \"policy\", \"\");\n setActualPolicy(groupPolicy.split(\",\"));\n setSelectedPolicy(groupPolicy.split(\",\"));\n })\n .catch((err: ErrorResponseHandler) => {\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);\n setSelectedPolicy(userPolicy);\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 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 { ErrorResponseHandler } from \"../../../common/types\";\nimport AddUser from \"./AddUser\";\nimport DeleteUser from \"./DeleteUser\";\nimport AddToGroup from \"./BulkAddToGroup\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SetPolicy from \"../Policies/SetPolicy\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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 history: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst ListUsers = ({ classes, setErrorSnackMessage, history }: 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: ErrorResponseHandler) => {\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 history.push(`/users/${encodeURI(selectionElement.accessKey)}`);\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 {\n type: \"delete\",\n onClick: deleteAction,\n disableButtonFunction: (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(ListUsers));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport GroupsSelectors from \"./GroupsSelectors\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\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 IChangeUserGroupsContentProps {\n classes: any;\n closeModalAndRefresh: () => void;\n selectedUser: string;\n open: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ChangeUserGroups = ({\n classes,\n closeModalAndRefresh,\n selectedUser,\n open,\n setModalErrorSnackMessage,\n}: IChangeUserGroupsContentProps) => {\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\n const getUserInformation = useCallback(() => {\n if (!selectedUser) {\n return null;\n }\n\n api\n .invoke(\"GET\", `/api/v1/user?name=${encodeURI(selectedUser)}`)\n .then((res) => {\n setAddLoading(false);\n setAccessKey(res.accessKey);\n setSelectedGroups(res.memberOf || []);\n setEnabled(res.status === \"enabled\");\n })\n .catch((err: ErrorResponseHandler) => {\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/user?name=${encodeURI(selectedUser)}`, {\n status: enabled ? \"enabled\" : \"disabled\",\n groups: selectedGroups,\n })\n .then((_) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\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((_) => {\n setAddLoading(false);\n closeModalAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\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={\"Set Groups\"}\n >\n \n ) => {\n saveRecord(e);\n }}\n >\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(ChangeUserGroups));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { IPolicyItem } from \"../Users/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport PolicySelectors from \"../Policies/PolicySelectors\";\n\ninterface ISetUserPoliciesProps {\n classes: any;\n closeModalAndRefresh: () => void;\n selectedUser: string;\n currentPolicies: IPolicyItem[];\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 SetUserPolicies = ({\n classes,\n closeModalAndRefresh,\n selectedUser,\n currentPolicies,\n setModalErrorSnackMessage,\n open,\n}: ISetUserPoliciesProps) => {\n //Local States\n const [loading, setLoading] = useState(false);\n const [actualPolicy, setActualPolicy] = useState([]);\n const [selectedPolicy, setSelectedPolicy] = useState([]);\n\n const SetUserPoliciesAction = () => {\n let entity = \"user\";\n let value = selectedUser;\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: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n const resetSelection = () => {\n setSelectedPolicy(actualPolicy);\n };\n\n useEffect(() => {\n if (open) {\n const userPolicy: string[] = [];\n for (let pol of currentPolicies) {\n userPolicy.push(pol.policy);\n }\n setActualPolicy(userPolicy);\n setSelectedPolicy(userPolicy);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, selectedUser]);\n\n return (\n {\n closeModalAndRefresh();\n }}\n modalOpen={open}\n title=\"Set Policies\"\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(SetUserPolicies));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { modalBasic } from \"../Common/FormComponents/common/styleLibrary\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport api from \"../../../common/api\";\nimport CodeMirrorWrapper from \"../Common/FormComponents/CodeMirrorWrapper/CodeMirrorWrapper\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\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 marginBottom: \"8px\",\n },\n containerScrollable: {\n maxHeight: \"calc(100vh - 300px)\" as const,\n overflowY: \"auto\" as const,\n },\n ...modalBasic,\n });\n\ninterface IAddUserServiceAccountProps {\n classes: any;\n open: boolean;\n user: string;\n closeModalAndRefresh: (res: NewServiceAccount | null) => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst AddUserServiceAccount = ({\n classes,\n open,\n closeModalAndRefresh,\n setModalErrorSnackMessage,\n user,\n}: IAddUserServiceAccountProps) => {\n const [addSending, setAddSending] = useState(false);\n const [policyDefinition, setPolicyDefinition] = useState(\"\");\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n const [isRestrictedByPolicy, setIsRestrictedByPolicy] =\n useState(false);\n const [addCredentials, setAddCredentials] = useState(false);\n\n useEffect(() => {\n if (addSending) {\n if (addCredentials) {\n api\n .invoke(\"POST\", `/api/v1/user/${user}/service-account-credentials`, {\n policy: policyDefinition,\n accessKey: accessKey,\n secretKey: secretKey,\n })\n .then((res) => {\n setAddSending(false);\n closeModalAndRefresh(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n api\n .invoke(\"POST\", `/api/v1/user/${user}/service-accounts`, {\n policy: policyDefinition,\n })\n .then((res) => {\n setAddSending(false);\n closeModalAndRefresh(res);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddSending(false);\n setModalErrorSnackMessage(err);\n });\n }\n }\n }, [\n addSending,\n setAddSending,\n setModalErrorSnackMessage,\n policyDefinition,\n closeModalAndRefresh,\n user,\n addCredentials,\n accessKey,\n secretKey,\n ]);\n\n const addUserServiceAccount = (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 addUserServiceAccount(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 \n ) => {\n setIsRestrictedByPolicy(event.target.checked);\n }}\n label={\"Restrict with policy\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n ) => {\n setAddCredentials(event.target.checked);\n }}\n label={\"Customize Credentials\"}\n indicatorLabels={[\"On\", \"Off\"]}\n />\n \n {isRestrictedByPolicy && (\n \n {\n setPolicyDefinition(value);\n }}\n />\n \n )}\n {addCredentials && (\n \n {\n setAccessKey(e.target.value);\n }}\n />\n {\n setSecretKey(e.target.value);\n }}\n />\n \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(AddUserServiceAccount));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 actionsTray,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport { AppState } from \"../../../store\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { NewServiceAccount } from \"../Common/CredentialsPrompt/types\";\nimport { stringSort } from \"../../../utils/sortFunctions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport AddUserServiceAccount from \"./AddUserServiceAccount\";\nimport DeleteServiceAccount from \"../Account/DeleteServiceAccount\";\nimport CredentialsPrompt from \"../Common/CredentialsPrompt/CredentialsPrompt\";\nimport { CreateIcon } from \"../../../icons\";\nimport Button from \"@material-ui/core/Button\";\n\ninterface IUserServiceAccountsProps {\n classes: any;\n user: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...searchField,\n ...actionsTray,\n actionsTray: {\n ...actionsTray.actionsTray,\n },\n });\n\nconst UserServiceAccountsPanel = ({\n classes,\n user,\n setErrorSnackMessage,\n}: IUserServiceAccountsProps) => {\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 [selectedServiceAccount, setSelectedServiceAccount] = useState<\n string | null\n >(null);\n const [showNewCredentials, setShowNewCredentials] = useState(false);\n const [newServiceAccount, setNewServiceAccount] =\n useState(null);\n\n useEffect(() => {\n fetchRecords();\n }, []);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/user/${user}/service-accounts`)\n .then((res: string[]) => {\n const serviceAccounts = res.sort(stringSort);\n\n setLoading(false);\n setRecords(serviceAccounts);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setLoading(false);\n });\n }\n }, [loading, setLoading, setRecords, setErrorSnackMessage, user]);\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 return (\n \n {addScreenOpen && (\n {\n closeAddModalAndRefresh(res);\n }}\n user={user}\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

Service Accounts

\n }\n onClick={() => {\n setAddScreenOpen(true);\n setAddScreenOpen(true);\n setSelectedServiceAccount(null);\n }}\n >\n Create service account\n \n
\n
\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n session: state.console.session,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(UserServiceAccountsPanel));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { ChangeUserPasswordRequest } from \"../Buckets/types\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\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 IChangeUserPasswordProps {\n classes: any;\n open: boolean;\n userName: string;\n closeModal: () => void;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst ChangeUserPassword = ({\n classes,\n open,\n userName,\n closeModal,\n setModalErrorSnackMessage,\n}: IChangeUserPasswordProps) => {\n const [newPassword, setNewPassword] = useState(\"\");\n const [reNewPassword, setReNewPassword] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n const changeUserPassword = (event: React.FormEvent) => {\n event.preventDefault();\n\n if (loading) {\n return;\n }\n setLoading(true);\n\n if (newPassword.length < 8) {\n setModalErrorSnackMessage({\n errorMessage: \"Passwords must be at least 8 characters long\",\n detailedError: \"\",\n });\n setLoading(false);\n return;\n }\n\n let request: ChangeUserPasswordRequest = {\n selectedUser: userName,\n newSecretKey: newPassword,\n };\n\n api\n .invoke(\"POST\", \"/api/v1/account/change-user-password\", request)\n .then((res) => {\n setLoading(false);\n setNewPassword(\"\");\n setReNewPassword(\"\");\n closeModal();\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setNewPassword(\"\");\n setReNewPassword(\"\");\n setModalErrorSnackMessage(err);\n });\n };\n\n return open ? (\n {\n setNewPassword(\"\");\n setReNewPassword(\"\");\n closeModal();\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n ) => {\n changeUserPassword(e);\n }}\n >\n \n \n

Change password for {userName}

\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 && newPassword === reNewPassword)\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(ChangeUserPassword));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { UsersList } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport history from \"../../../history\";\nimport api from \"../../../common/api\";\n\ninterface IDeleteUserProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n userName: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteUserString = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n userName,\n setErrorSnackMessage,\n}: IDeleteUserProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n if (userName == null) {\n return;\n }\n setDeleteLoading(true);\n api\n .invoke(\"DELETE\", `/api/v1/user?name=${encodeURI(userName)}`, {\n id: userName,\n })\n .then((res: UsersList) => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n\n if (userName === 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 {userName}?\n \n \n \n {\n closeDeleteModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n {\n removeRecord();\n closeDeleteModalAndRefresh(true);\n history.push(`/users/`);\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(DeleteUserString);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { Link } from \"react-router-dom\";\n\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button, Grid, IconButton, Tooltip } from \"@material-ui/core\";\nimport {\n CreateIcon,\n DeleteIcon,\n IAMPoliciesIcon,\n UsersIcon,\n} from \"../../../icons\";\nimport {\n setErrorSnackMessage,\n setModalErrorSnackMessage,\n} from \"../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { IPolicyItem } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { TabPanel } from \"../../shared/tabs\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport ChangeUserGroups from \"./ChangeUserGroups\";\nimport SetUserPolicies from \"./SetUserPolicies\";\nimport history from \"../../../history\";\nimport UserServiceAccountsPanel from \"./UserServiceAccountsPanel\";\nimport ChangeUserPasswordModal from \"../Account/ChangeUserPasswordModal\";\nimport DeleteUserString from \"./DeleteUserString\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\nimport LockIcon from \"@material-ui/icons/Lock\";\nimport ScreenTitle from \"../Common/ScreenTitle/ScreenTitle\";\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 fixedHeight: {\n height: 165,\n minWidth: 247,\n padding: \"25px 28px\",\n \"& svg\": {\n maxHeight: 18,\n },\n },\n paperContainer: {\n padding: 15,\n paddingLeft: 50,\n display: \"flex\",\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 breadcrumLink: {\n textDecoration: \"none\",\n color: \"black\",\n },\n ...actionsTray,\n ...searchField,\n actionsTray: { ...actionsTray.actionsTray },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IUserDetailsProps {\n classes: any;\n match: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\ninterface IGroupItem {\n group: string;\n}\n\nconst UserDetails = ({ classes, match }: IUserDetailsProps) => {\n const [curTab, setCurTab] = useState(0);\n const [loading, setLoading] = useState(false);\n const [addGroupOpen, setAddGroupOpen] = useState(false);\n const [policyOpen, setPolicyOpen] = useState(false);\n const [addLoading, setAddLoading] = useState(false);\n\n const [enabled, setEnabled] = useState(false);\n const [selectedGroups, setSelectedGroups] = useState([]);\n const [currentGroups, setCurrentGroups] = useState([]);\n const [currentPolicies, setCurrentPolicies] = useState([]);\n const [changeUserPasswordModalOpen, setChangeUserPasswordModalOpen] =\n useState(false);\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n const userName = match.params[\"userName\"];\n\n const changeUserPassword = () => {\n setChangeUserPasswordModalOpen(true);\n };\n\n const deleteUser = () => {\n setDeleteOpen(true);\n };\n\n const getUserInformation = useCallback(() => {\n if (userName === \"\") {\n return null;\n }\n setLoading(true);\n api\n .invoke(\"GET\", `/api/v1/user?name=${encodeURI(userName)}`)\n .then((res) => {\n setAddLoading(false);\n const memberOf = res.memberOf || [];\n setSelectedGroups(memberOf);\n let currentGroups: IGroupItem[] = [];\n for (let group of memberOf) {\n currentGroups.push({\n group: group,\n });\n }\n setCurrentGroups(currentGroups);\n let currentPolicies: IPolicyItem[] = [];\n for (let policy of res.policy) {\n currentPolicies.push({\n policy: policy,\n });\n }\n setCurrentPolicies(currentPolicies);\n setEnabled(res.status === \"enabled\");\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [userName]);\n\n const saveRecord = (isEnabled: boolean) => {\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n api\n .invoke(\"PUT\", `/api/v1/user?name=${encodeURI(userName)}`, {\n status: isEnabled ? \"enabled\" : \"disabled\",\n groups: selectedGroups,\n })\n .then((_) => {\n setAddLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n setModalErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n getUserInformation();\n }, [getUserInformation]);\n\n const closeDeleteModalAndRefresh = (refresh: boolean) => {\n setDeleteOpen(false);\n if (refresh) {\n getUserInformation();\n }\n };\n\n return (\n \n \n \n Users\n \n \n }\n actions={}\n />\n {addGroupOpen && (\n {\n setAddGroupOpen(false);\n getUserInformation();\n }}\n />\n )}\n {policyOpen && (\n {\n setPolicyOpen(false);\n getUserInformation();\n }}\n />\n )}\n {deleteOpen && (\n {\n closeDeleteModalAndRefresh(refresh);\n }}\n />\n )}\n {changeUserPasswordModalOpen && (\n setChangeUserPasswordModalOpen(false)}\n />\n )}\n \n \n \n \n \n }\n title={userName}\n subTitle={\n Status: {enabled ? \"Enabled\" : \"Disabled\"}\n }\n actions={\n \n {\n setEnabled(!enabled);\n saveRecord(!enabled);\n }}\n color={\"primary\"}\n >\n {enabled ? \"Disable\" : \"Enable\"}\n \n \n \n \n \n \n \n \n \n \n \n \n }\n />\n \n \n \n {\n setCurTab(0);\n }}\n >\n \n \n {\n setCurTab(1);\n }}\n >\n \n \n {\n setCurTab(2);\n }}\n >\n \n \n \n \n \n \n \n
\n

Groups

\n }\n size=\"medium\"\n onClick={() => {\n setAddGroupOpen(true);\n }}\n >\n Add to Groups\n \n
\n
\n \n
\n \n \n \n \n
\n

Policies

\n }\n size=\"medium\"\n onClick={() => {\n setPolicyOpen(true);\n }}\n >\n Assign Policies\n \n
\n
\n {\n history.push(`/policies/${policy.policy}`);\n },\n },\n ]}\n columns={[{ label: \"Name\", elementKey: \"policy\" }]}\n isLoading={loading}\n records={currentPolicies}\n entityName=\"Policies\"\n idField=\"policy\"\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(UserDetails));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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\";\n\nimport ListUsers from \"./ListUsers\";\nimport UserDetails from \"./UserDetails\";\n\nconst mapState = (state: AppState) => ({\n open: state.system.sidebarOpen,\n});\n\nconst connector = connect(mapState, { setMenuOpen });\n\nconst Users = () => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default withRouter(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 { 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 TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport { UsersList } from \"../Users/types\";\nimport { usersSort } from \"../../../utils/sortFunctions\";\nimport {\n actionsTray,\n selectorsCommon,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { setModalErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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: ErrorResponseHandler) => {\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 { ErrorResponseHandler } from \"../../../common/types\";\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/group?name=${encodeURI(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: ErrorResponseHandler) => {\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: ErrorResponseHandler) => {\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/group?name=${encodeURI(selectedGroup)}`)\n .then((res: MainGroupProps) => {\n setGroupEnabled(res.status === \"enabled\");\n setGroupName(res.name);\n setSelectedUsers(res.members);\n })\n .catch((err: ErrorResponseHandler) => {\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\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\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/group?name=${encodeURI(selectedGroup)}`)\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\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 { 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 { ErrorResponseHandler } from \"../../../common/types\";\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\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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: ErrorResponseHandler) => {\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_webhook\";\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 .\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\";\nimport { ErrorResponseHandler } from \"../../../../common/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: ErrorResponseHandler) => {\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: ErrorResponseHandler) => {\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 \n Save\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)(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, { 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] =\n useState(initialConfiguration);\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 ,\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] =\n useState(false);\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 { ErrorResponseHandler } from \"../../../../common/types\";\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: ErrorResponseHandler) => {\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 \n Save\n \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 {\n settingsCommon,\n typesSelection,\n} 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 customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n ...typesSelection,\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 { IconButton, 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 {\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 { ErrorResponseHandler } from \"../../../../common/types\";\nimport api from \"../../../../common/api\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport NotificationTypeSelector from \"./NotificationTypeSelector\";\nimport RefreshIcon from \"../../../../icons/RefreshIcon\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\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: ErrorResponseHandler) => {\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 \n {\n setFilter(event.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={openNewLambdaSelector}\n >\n Add Notification Target\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 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 componentHeight = 48;\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...fieldBasic,\n ...tooltipHelper,\n textBoxContainer: {\n flexGrow: 1,\n position: \"relative\",\n display: \"flex\",\n flexWrap: \"nowrap\",\n height: componentHeight,\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 height: componentHeight,\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, { Fragment, useEffect, useState, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Button } from \"@material-ui/core\";\nimport api from \"../../../../common/api\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport {\n modalBasic,\n settingsCommon,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\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 customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n settingsFormContainer: {\n ...settingsCommon.settingsFormContainer,\n height: \"calc(100vh - 422px)\",\n },\n });\n\ninterface IAddNotificationEndpointProps {\n saveAndRefresh: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n classes: any;\n type: string;\n}\n\nconst AddTierConfiguration = ({\n saveAndRefresh,\n classes,\n setErrorSnackMessage,\n type,\n}: IAddNotificationEndpointProps) => {\n //Local States\n const [saving, setSaving] = useState(false);\n\n // Form Items\n const [name, setName] = useState(\"\");\n const [endpoint, setEndpoint] = useState(\"\");\n const [bucket, setBucket] = useState(\"\");\n const [prefix, setPrefix] = useState(\"\");\n const [region, setRegion] = useState(\"\");\n const [storageClass, setStorageClass] = useState(\"\");\n\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n\n const [creds, setCreds] = useState(\"\");\n const [encodedCreds, setEncodedCreds] = useState(\"\");\n\n const [accountName, setAccountName] = useState(\"\");\n const [accountKey, setAccountKey] = useState(\"\");\n\n const [titleSelection, setTitleSelection] = useState(\"\");\n\n // Validations\n const [isFormValid, setIsFormValid] = useState(true);\n const [nameInputError, setNameInputError] = useState(\"\");\n\n // Extra validation functions\n\n const validName = useCallback(() => {\n const patternAgainst = /^[A-Z0-9-_]+$/; // Only allow uppercase, numbers, dashes and underscores\n if (patternAgainst.test(name)) {\n setNameInputError(\"\");\n return true;\n }\n\n setNameInputError(\n \"Please verify that string is uppercase only and contains valid characters (numbers, dashes & underscores).\"\n );\n return false;\n }, [name]);\n\n //Effects\n\n useEffect(() => {\n if (saving) {\n let request = {};\n let fields = {\n name,\n endpoint,\n bucket,\n prefix,\n region,\n };\n\n let tierType = type;\n\n if (type === \"minio\") {\n tierType = \"s3\";\n }\n\n switch (type) {\n case \"minio\":\n case \"s3\":\n request = {\n s3: {\n ...fields,\n accesskey: accessKey,\n secretkey: secretKey,\n storageclass: storageClass,\n },\n };\n break;\n case \"gcs\":\n request = {\n gcs: {\n ...fields,\n creds: encodedCreds,\n },\n };\n break;\n case \"azure\":\n request = {\n azure: {\n ...fields,\n accountname: accountName,\n accountkey: accountKey,\n },\n };\n }\n\n let payload = {\n type: tierType,\n ...request,\n };\n\n api\n .invoke(\"POST\", `/api/v1/admin/tiers`, payload)\n .then(() => {\n setSaving(false);\n saveAndRefresh();\n })\n .catch((err: ErrorResponseHandler) => {\n setSaving(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n accessKey,\n accountKey,\n accountName,\n bucket,\n encodedCreds,\n endpoint,\n name,\n prefix,\n region,\n saveAndRefresh,\n saving,\n secretKey,\n setErrorSnackMessage,\n storageClass,\n type,\n ]);\n\n useEffect(() => {\n let valid = true;\n if (type === \"\") {\n valid = false;\n }\n if (name === \"\" || !validName()) {\n valid = false;\n }\n if (endpoint === \"\") {\n valid = false;\n }\n if (bucket === \"\") {\n valid = false;\n }\n if (prefix === \"\") {\n valid = false;\n }\n if (region === \"\") {\n valid = false;\n }\n\n if (type === \"s3\" || type === \"minio\") {\n if (accessKey === \"\") {\n valid = false;\n }\n if (secretKey === \"\") {\n valid = false;\n }\n }\n\n if (type === \"gcs\") {\n if (encodedCreds === \"\") {\n valid = false;\n }\n }\n\n if (type === \"azure\") {\n if (accountName === \"\") {\n valid = false;\n }\n if (accountKey === \"\") {\n valid = false;\n }\n }\n\n setIsFormValid(valid);\n }, [\n accessKey,\n accountKey,\n accountName,\n bucket,\n encodedCreds,\n endpoint,\n isFormValid,\n name,\n prefix,\n region,\n secretKey,\n storageClass,\n type,\n validName,\n ]);\n\n useEffect(() => {\n switch (type) {\n case \"gcs\":\n setEndpoint(\"https://storage.googleapis.com/\");\n setTitleSelection(\"Google Cloud\");\n break;\n case \"s3\":\n setEndpoint(\"https://s3.amazonaws.com\");\n setTitleSelection(\"Amazon S3\");\n break;\n case \"azure\":\n setEndpoint(\"http://blob.core.windows.net\");\n setTitleSelection(\"Azure\");\n break;\n case \"minio\":\n setEndpoint(\"\");\n setTitleSelection(\"MinIO\");\n }\n }, [type]);\n\n //Fetch Actions\n const submitForm = (event: React.FormEvent) => {\n event.preventDefault();\n setSaving(true);\n };\n\n // Input actions\n const updateTierName = (e: React.ChangeEvent) => {\n setName(e.target.value.toUpperCase());\n };\n\n return (\n \n
\n \n {titleSelection} - Add Tier Configuration\n \n \n \n {type !== \"\" && (\n \n \n ) => {\n setEndpoint(e.target.value);\n }}\n />\n {(type === \"s3\" || type === \"minio\") && (\n \n ) => {\n setAccessKey(e.target.value);\n }}\n />\n ) => {\n setSecretKey(e.target.value);\n }}\n />\n \n )}\n {type === \"gcs\" && (\n \n {\n setEncodedCreds(encodedValue);\n setCreds(fileName);\n }}\n value={creds}\n />\n \n )}\n {type === \"azure\" && (\n \n ) => {\n setAccountName(e.target.value);\n }}\n />\n ) => {\n setAccountKey(e.target.value);\n }}\n />\n \n )}\n ) => {\n setBucket(e.target.value);\n }}\n />\n ) => {\n setPrefix(e.target.value);\n }}\n />\n ) => {\n setRegion(e.target.value);\n }}\n />\n {type === \"s3\" ||\n (type === \"minio\" && (\n ) => {\n setStorageClass(e.target.value);\n }}\n />\n ))}\n \n )}\n \n \n \n \n \n Save\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(AddTierConfiguration));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 get from \"lodash/get\";\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 InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\nimport api from \"../../../../common/api\";\nimport { ITierElement } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\n\ninterface ITierCredentialsModal {\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => any;\n classes: any;\n tierData: ITierElement;\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 UpdateTierCredentialsModal = ({\n open,\n closeModalAndRefresh,\n classes,\n tierData,\n setModalErrorSnackMessage,\n}: ITierCredentialsModal) => {\n const [savingTiers, setSavingTiers] = useState(false);\n const [accessKey, setAccessKey] = useState(\"\");\n const [secretKey, setSecretKey] = useState(\"\");\n\n const [creds, setCreds] = useState(\"\");\n const [encodedCreds, setEncodedCreds] = useState(\"\");\n\n const [accountName, setAccountName] = useState(\"\");\n const [accountKey, setAccountKey] = useState(\"\");\n\n // Validations\n const [isFormValid, setIsFormValid] = useState(true);\n\n const type = get(tierData, \"type\", \"\");\n const name = get(tierData, `${type}.name`, \"\");\n\n useEffect(() => {\n let valid = true;\n\n if (type === \"s3\" || type === \"azure\") {\n if (accountName === \"\" || accountKey === \"\") {\n valid = false;\n }\n } else if (type === \"gcs\") {\n if (encodedCreds === \"\") {\n valid = false;\n }\n }\n setIsFormValid(valid);\n }, [accountKey, accountName, encodedCreds, type]);\n\n const addRecord = () => {\n let rules = {};\n\n if (type === \"s3\" || type === \"azure\") {\n rules = {\n access_key: accountName,\n secret_key: accountKey,\n };\n } else if (type === \"gcs\") {\n rules = {\n creds: encodedCreds,\n };\n }\n if (name !== \"\") {\n api\n .invoke(\"PUT\", `/api/v1/admin/tiers/${type}/${name}/credentials`, rules)\n .then(() => {\n setSavingTiers(false);\n closeModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setSavingTiers(false);\n setModalErrorSnackMessage(err);\n });\n } else {\n setModalErrorSnackMessage({\n errorMessage: \"There was an error retrieving tier information\",\n detailedError: \"\",\n });\n }\n };\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n title={`Update Credentials - ${type} / ${name}`}\n >\n ) => {\n e.preventDefault();\n setSavingTiers(true);\n addRecord();\n }}\n >\n \n \n {type === \"s3\" && (\n \n ) => {\n setAccessKey(e.target.value);\n }}\n />\n ) => {\n setSecretKey(e.target.value);\n }}\n />\n \n )}\n {type === \"gcs\" && (\n \n {\n setEncodedCreds(encodedValue);\n setCreds(fileName);\n }}\n value={creds}\n />\n \n )}\n {type === \"azure\" && (\n \n ) => {\n setAccountName(e.target.value);\n }}\n />\n ) => {\n setAccountKey(e.target.value);\n }}\n />\n \n )}\n \n \n \n Save\n \n \n {savingTiers && (\n \n \n \n )}\n \n \n \n );\n};\n\nconst connector = connect(null, {\n setModalErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(UpdateTierCredentialsModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IconButton, TextField } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Button from \"@material-ui/core/Button\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n settingsCommon,\n typesSelection,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { CreateIcon } from \"../../../../icons\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { ITierElement, ITierResponse } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport AddTierConfiguration from \"./AddTierConfiguration\";\nimport UpdateTierCredentiasModal from \"./UpdateTierCredentiasModal\";\nimport RefreshIcon from \"../../../../icons/RefreshIcon\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\n\ninterface IListTiersConfig {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...searchField,\n ...settingsCommon,\n ...typesSelection,\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 customTitle: {\n ...settingsCommon.customTitle,\n marginTop: 0,\n },\n });\n\nconst ListTiersConfiguration = ({\n classes,\n setErrorSnackMessage,\n}: IListTiersConfig) => {\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [isLoading, setIsLoading] = useState(true);\n const [currentPanel, setCurrentPanel] = useState(0);\n const [updateCredentialsOpen, setUpdateCredentialsOpen] =\n useState(false);\n const [selectedTier, setSelectedTier] = useState({\n type: \"unsupported\",\n });\n const [type, setType] = useState(\"\");\n\n useEffect(() => {\n if (isLoading) {\n const fetchRecords = () => {\n api\n .invoke(\"GET\", `/api/v1/admin/tiers`)\n .then((res: ITierResponse) => {\n setRecords(res.items || []);\n setIsLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setIsLoading(false);\n });\n };\n fetchRecords();\n }\n }, [isLoading, setErrorSnackMessage]);\n\n const filteredRecords = records.filter((b: ITierElement) => {\n if (filter === \"\") {\n return true;\n }\n const getItemName = get(b, `${b.type}.name`, \"\");\n const getItemType = get(b, `type`, \"\");\n\n return getItemName.indexOf(filter) >= 0 || getItemType.indexOf(filter) >= 0;\n });\n\n const backClick = () => {\n setCurrentPanel(currentPanel - 1);\n };\n\n const addTier = () => {\n setCurrentPanel(1);\n };\n\n const tierAdded = () => {\n setCurrentPanel(0);\n setIsLoading(true);\n };\n\n const renderTierName = (item: ITierElement) => {\n const name = get(item, `${item.type}.name`, \"\");\n\n if (name !== null) {\n return name;\n }\n\n return \"\";\n };\n\n const renderTierPrefix = (item: ITierElement) => {\n const prefix = get(item, `${item.type}.prefix`, \"\");\n\n if (prefix !== null) {\n return prefix;\n }\n\n return \"\";\n };\n\n const renderTierEndpoint = (item: ITierElement) => {\n const endpoint = get(item, `${item.type}.endpoint`, \"\");\n\n if (endpoint !== null) {\n return endpoint;\n }\n\n return \"\";\n };\n\n const renderTierBucket = (item: ITierElement) => {\n const bucket = get(item, `${item.type}.bucket`, \"\");\n\n if (bucket !== null) {\n return bucket;\n }\n\n return \"\";\n };\n\n const renderTierRegion = (item: ITierElement) => {\n const region = get(item, `${item.type}.region`, \"\");\n\n if (region !== null) {\n return region;\n }\n\n return \"\";\n };\n\n const closeTierCredentials = () => {\n setUpdateCredentialsOpen(false);\n };\n\n const typeSelect = (typeItem: string) => {\n setType(typeItem);\n setCurrentPanel(2);\n };\n\n return (\n \n {updateCredentialsOpen && (\n \n )}\n \n \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 setIsLoading(true);\n }}\n >\n \n \n }\n onClick={addTier}\n >\n Add Tier\n \n \n \n
\n
\n \n {\n setSelectedTier(tierData);\n setUpdateCredentialsOpen(true);\n },\n },\n ]}\n columns={[\n {\n label: \"Tier Name\",\n elementKey: \"type\",\n renderFunction: renderTierName,\n renderFullObject: true,\n },\n {\n label: \"Type\",\n elementKey: \"type\",\n width: 150,\n },\n {\n label: \"Endpoint\",\n elementKey: \"type\",\n renderFunction: renderTierEndpoint,\n renderFullObject: true,\n },\n {\n label: \"Bucket\",\n elementKey: \"type\",\n renderFunction: renderTierBucket,\n renderFullObject: true,\n },\n {\n label: \"Prefix\",\n elementKey: \"type\",\n renderFunction: renderTierPrefix,\n renderFullObject: true,\n },\n {\n label: \"Region\",\n elementKey: \"type\",\n renderFunction: renderTierRegion,\n renderFullObject: true,\n },\n ]}\n isLoading={isLoading}\n records={filteredRecords}\n entityName=\"Tiers\"\n idField=\"service_name\"\n customPaperHeight={classes.customConfigurationPage}\n noBackground\n />\n \n
\n ,\n \n \n \n \n Back To Tiers\n \n \n \n \n Add Tier Configuration\n \n \n \n \n
\n {\n typeSelect(\"minio\");\n }}\n >\n \n \n {\n typeSelect(\"gcs\");\n }}\n >\n \n \n {\n typeSelect(\"s3\");\n }}\n >\n \n \n {\n typeSelect(\"azure\");\n }}\n >\n \n \n
\n
\n
\n
\n \n
,\n \n \n \n \n Back To Tier Type Selection\n \n \n \n {currentPanel === 2 && (\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(ListTiersConfiguration));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 } 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 ConfigurationsList from \"./ConfigurationPanels/ConfigurationsList\";\nimport ListNotificationEndpoints from \"./NotificationEndpoints/ListNotificationEndpoints\";\nimport ListTiersConfiguration from \"./TiersConfiguration/ListTiersConfiguration\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport { ISessionResponse } from \"../types\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\n\ninterface IConfigurationMain {\n classes: any;\n session: ISessionResponse;\n distributedSetup: boolean;\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 = ({\n classes,\n session,\n distributedSetup,\n}: IConfigurationMain) => {\n const [selectedTab, setSelectedTab] = useState(0);\n\n return (\n \n \n \n \n \n {\n setSelectedTab(0);\n }}\n >\n \n \n {\n setSelectedTab(1);\n }}\n >\n \n \n {\n setSelectedTab(2);\n }}\n >\n \n \n \n \n \n {selectedTab === 0 && (\n \n

Configurations

\n \n
\n )}\n {selectedTab === 1 && (\n \n

Lambda Notifications

\n \n
\n )}\n {selectedTab === 2 && distributedSetup && (\n \n

Tiers

\n \n
\n )}\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n session: state.console.session,\n distributedSetup: state.system.distributedSetup,\n});\n\nconst connector = connect(mapState, {});\n\nexport default withStyles(styles)(connector(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 AddIcon from \"@material-ui/icons/Add\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport EditConfiguration from \"../CustomForms/EditConfiguration\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\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 { IErasureCodeCalc } from \"../../../common/types\";\nimport { IMemorySize, ITenant } 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\";\nexport const ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR =\n \"ADD_TENANT/ADD_CONSOLE_CA_KEYPAIR\";\nexport const ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR =\n \"ADD_TENANT/ADD_FILE_TO_CONSOLE_CA_KEYPAIR\";\nexport const ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR =\n \"ADD_TENANT/DELETE_CONSOLE_CA_KEYPAIR\";\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\n// Tenant Details\nexport const TENANT_DETAILS_SET_LOADING = \"TENANT_DETAILS/SET_LOADING\";\nexport const TENANT_DETAILS_SET_CURRENT_TENANT =\n \"TENANT_DETAILS/SET_CURRENT_TENANT\";\nexport const TENANT_DETAILS_SET_TENANT = \"TENANT_DETAILS/SET_TENANT\";\nexport const TENANT_DETAILS_SET_TAB = \"TENANT_DETAILS/SET_TAB\";\nexport interface ICertificateInfo {\n name: string;\n serialNumber: string;\n domains: string[];\n expiry: string;\n}\n\nexport interface ICustomCertificates {\n minio: ICertificateInfo[];\n minioCAs: ICertificateInfo[];\n console: ICertificateInfo[];\n consoleCAs: ICertificateInfo[];\n}\n\nexport interface ITenantSecurityResponse {\n autoCert: boolean;\n customCertificates: ICustomCertificates;\n}\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 consoleCaCertificates: 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 affinity: ITenantAffinity;\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 customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n prometheusCustom: boolean;\n logSearchCustom: boolean;\n logSearchVolumeSize: string;\n logSearchSizeFactor: string;\n logSearchSelectedStorageClass: string;\n logSearchImage: string;\n kesImage: string;\n logSearchPostgresImage: string;\n logSearchPostgresInitImage: string;\n prometheusVolumeSize: string;\n prometheusSizeFactor: string;\n prometheusSelectedStorageClass: string;\n prometheusImage: string;\n prometheusSidecarImage: string;\n prometheusInitImage: string;\n}\n\nexport interface IIdentityProviderFields {\n idpSelection: string;\n accessKeys: string[];\n secretKeys: string[];\n openIDURL: string;\n openIDConfigurationURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n openIDCallbackURL: string;\n openIDClaimName: string;\n openIDScopes: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameSearchFilter: string;\n ADUserNameFormat: string;\n ADGroupSearchBaseDN: string;\n ADGroupSearchFilter: string;\n ADGroupNameAttribute: string;\n ADUserDNs: string[];\n ADLookupBindDN: string;\n ADLookupBindPassword: string;\n ADUserDNSearchBaseDN: string;\n ADUserDNSearchFilter: string;\n ADServerStartTLS: boolean;\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 ITenantAffinity {\n podAffinity: \"default\" | \"nodeSelector\" | \"none\";\n nodeSelectorLabels: string;\n withPodAntiAffinity: boolean;\n}\n\nexport interface ITenantDetails {\n currentTenant: string;\n currentNamespace: string;\n loadingTenant: boolean;\n tenantInfo: ITenant | null;\n currentTab: string;\n}\n\nexport interface ITenantState {\n createTenant: ICreateTenant;\n tenantDetails: ITenantDetails;\n}\n\nexport interface ILabelKeyPair {\n labelKey: string;\n labelValue: string;\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}\ninterface AddConsoleCAKeyPair {\n type: typeof ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR;\n}\n\ninterface AddFileToConsoleCAKeyPair {\n type: typeof ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR;\n id: string;\n key: string;\n fileName: string;\n value: string;\n}\n\ninterface DeleteConsoleCAKeyPair {\n type: typeof ADD_TENANT_DELETE_CONSOLE_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\ninterface SetLoadingTenant {\n type: typeof TENANT_DETAILS_SET_LOADING;\n state: boolean;\n}\n\ninterface SetTenantName {\n type: typeof TENANT_DETAILS_SET_CURRENT_TENANT;\n name: string;\n namespace: string;\n}\n\ninterface SetTenantDetails {\n type: typeof TENANT_DETAILS_SET_TENANT;\n tenant: ITenant | null;\n}\n\ninterface SetTenantTab {\n type: typeof TENANT_DETAILS_SET_TAB;\n tab: string;\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 | AddConsoleCAKeyPair\n | DeleteConsoleCAKeyPair\n | AddFileConsoleCert\n | AddFileToMinioKeyPair\n | AddFileToCAKeyPair\n | AddFileToConsoleCAKeyPair\n | AddFileServerCert\n | AddFileClientCert\n | AddFileVaultCert\n | AddFileVaultCa\n | AddFileGemaltoCa\n | ResetForm\n | SetLoadingTenant\n | SetTenantName\n | SetTenantDetails\n | SetTenantTab;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ITenant } from \"./ListTenants/types\";\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_ADD_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_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 TENANT_DETAILS_SET_LOADING,\n TENANT_DETAILS_SET_TENANT,\n TENANT_DETAILS_SET_CURRENT_TENANT,\n TENANT_DETAILS_SET_TAB,\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 addConsoleCaCertificate = () => {\n return {\n type: ADD_TENANT_ADD_CONSOLE_CA_KEYPAIR,\n };\n};\n\nexport const deleteConsoleCaCertificate = (id: string) => {\n return {\n type: ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\n id,\n };\n};\n\nexport const addFileToConsoleCaCertificates = (\n id: string,\n key: string,\n fileName: string,\n value: string\n) => {\n return {\n type: ADD_TENANT_ADD_FILE_TO_CONSOLE_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\nexport const setTenantDetailsLoad = (loading: boolean) => {\n return {\n type: TENANT_DETAILS_SET_LOADING,\n state: loading,\n };\n};\n\nexport const setTenantName = (tenantName: string, tenantNamespace: string) => {\n return {\n type: TENANT_DETAILS_SET_CURRENT_TENANT,\n name: tenantName,\n namespace: tenantNamespace,\n };\n};\n\nexport const setTenantInfo = (tenant: ITenant | null) => {\n return {\n type: TENANT_DETAILS_SET_TENANT,\n tenant,\n };\n};\n\nexport const setTenantTab = (tab: string) => {\n return {\n type: TENANT_DETAILS_SET_TAB,\n tab,\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 {\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 { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\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: ErrorResponseHandler) => {\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({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\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 .\nimport { IAffinityModel } from \"../../../../common/types\";\n\nexport const getDefaultAffinity = (tenantName: string, poolName: string) => {\n const defaultAffinity: 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 defaultAffinity;\n};\n\nexport const getNodeSelector = (\n labels: string,\n withPodAntiAffinity: boolean,\n tenantName: string,\n poolName: string\n) => {\n // Labels in the form of key1=value1&key2=value2&key3=value3...\n const splittedLabels = labels.split(\"&\");\n let matchExpressions: any = [];\n\n splittedLabels.forEach((label: string) => {\n const splitKeyValue = label.split(\"=\");\n if (splitKeyValue.length === 2) {\n matchExpressions.push({\n key: splitKeyValue[0],\n operator: \"In\",\n values: [splitKeyValue[1]],\n });\n }\n });\n\n const nodeSelector: IAffinityModel = {\n nodeAffinity: {\n requiredDuringSchedulingIgnoredDuringExecution: {\n nodeSelectorTerms: [\n {\n matchExpressions: matchExpressions,\n },\n ],\n },\n },\n };\n if (withPodAntiAffinity) {\n const def = getDefaultAffinity(tenantName, poolName);\n nodeSelector.podAntiAffinity = def.podAntiAffinity;\n }\n console.log(nodeSelector);\n return nodeSelector;\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 // if it's not required and the value is empty, we are done here\n if (!field.required && field.value.trim() === \"\") {\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\n// Generates a valid access/secret key string\nexport const getRandomString = function (length = 16): string {\n let retval = \"\";\n let legalcharacters =\n \"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n for (let i = 0; i < length; i++) {\n retval +=\n legalcharacters[Math.floor(Math.random() * legalcharacters.length)];\n }\n return retval;\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 { 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 { ErrorResponseHandler } from \"../../../../../../common/types\";\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 ...modalBasic,\n });\n\ninterface IAddNamespace {\n classes: any;\n namespace: string;\n addNamespaceOpen: boolean;\n closeAddNamespaceModalAndRefresh: (reloadNamespaceData: boolean) => void;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst AddNamespaceModal = ({\n classes,\n namespace,\n addNamespaceOpen,\n closeAddNamespaceModalAndRefresh,\n setErrorSnackMessage,\n}: IAddNamespace) => {\n const [addNamespaceLoading, setAddNamespaceLoading] =\n useState(false);\n\n useEffect(() => {\n if (addNamespaceLoading) {\n api\n .invoke(\"POST\", \"/api/v1/namespace\", {\n name: namespace,\n })\n .then((res) => {\n setAddNamespaceLoading(false);\n closeAddNamespaceModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setAddNamespaceLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n addNamespaceLoading,\n closeAddNamespaceModalAndRefresh,\n namespace,\n setErrorSnackMessage,\n ]);\n\n const addNamespace = () => {\n setAddNamespaceLoading(true);\n };\n\n return (\n {\n closeAddNamespaceModalAndRefresh(false);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n Create new namespace\n \n {addNamespaceLoading && }\n \n Are you sure you want to add a namespace called{\" \"}\n {namespace}?\n \n \n \n {\n closeAddNamespaceModalAndRefresh(false);\n }}\n color=\"primary\"\n disabled={addNamespaceLoading}\n type=\"button\"\n className={classes.clearButton}\n >\n Cancel\n \n \n Create Namespace\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(AddNamespaceModal));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { ErrorResponseHandler } from \"../../../../../common/types\";\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\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\nimport AddNamespaceModal from \"./helpers/AddNamespaceModal\";\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 setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\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 setModalErrorSnackMessage,\n}: INameTenantScreen) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [emptyNamespace, setEmptyNamespace] = useState(true);\n const [loadingNamespaceInfo, setLoadingNamespaceInfo] =\n useState(false);\n const [showCreateButton, setShowCreateButton] = useState(false);\n const [openAddNSConfirm, setOpenAddNSConfirm] = useState(false);\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 setShowCreateButton(false);\n updateField(\"selectedStorageClass\", \"\");\n\n setStorageClassesList([]);\n\n // Empty tenantValidation\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants`)\n .then((res: any[]) => {\n const tenantsList = get(res, \"tenants\", []);\n\n if (tenantsList && tenantsList.length > 0) {\n setEmptyNamespace(false);\n setLoadingNamespaceInfo(false);\n return;\n }\n setEmptyNamespace(true);\n\n // Storagequotas retrieval\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 setLoadingNamespaceInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingNamespaceInfo(false);\n setShowCreateButton(true);\n console.error(\"Namespace error: \", err);\n });\n })\n .catch((err: ErrorResponseHandler) => {\n setModalErrorSnackMessage({\n errorMessage: \"Error validating if namespace already has tenants\",\n detailedError: err.detailedError,\n });\n });\n }, [\n namespace,\n setLimitSize,\n setModalErrorSnackMessage,\n setStorageClassesList,\n updateField,\n ]);\n\n const debounceNamespace = useMemo(\n () => debounce(getNamespaceInformation, 500),\n [getNamespaceInformation]\n );\n\n useEffect(() => {\n if (namespace !== \"\") {\n debounceNamespace();\n setLoadingNamespaceInfo(true);\n\n // Cancel previous debounce calls during useEffect cleanup.\n return debounceNamespace.cancel;\n }\n }, [debounceNamespace, namespace]);\n\n // Validation\n useEffect(() => {\n let customNamespaceError = false;\n let errorMessage = \"\";\n\n if (!emptyNamespace && !loadingNamespaceInfo) {\n customNamespaceError = true;\n errorMessage = \"You can only create one tenant per namespace\";\n } else if (\n storageClasses.length < 1 &&\n emptyNamespace &&\n !loadingNamespaceInfo\n ) {\n customNamespaceError = true;\n errorMessage = \"Please enter a valid namespace\";\n }\n\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: customNamespaceError,\n customValidationMessage: errorMessage,\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 }, [\n storageClasses,\n namespace,\n tenantName,\n isPageValid,\n emptyNamespace,\n loadingNamespaceInfo,\n ]);\n\n const frmValidationCleanup = (fieldName: string) => {\n setValidationErrors(clearValidationError(validationErrors, fieldName));\n };\n\n const addNamespace = () => {\n setOpenAddNSConfirm(true);\n };\n\n const closeAddNamespace = (refresh: boolean) => {\n setOpenAddNSConfirm(false);\n\n if (refresh) {\n debounceNamespace();\n }\n };\n\n return (\n \n {openAddNSConfirm && (\n \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 overlayIcon={showCreateButton ? : null}\n overlayAction={addNamespace}\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, { Fragment, useCallback, useEffect, useState } 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 { isPageValid, updateAddField } 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\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\ninterface IConfigureProps {\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n storageClasses: any;\n classes: any;\n customImage: boolean;\n imageName: string;\n customDockerhub: boolean;\n imageRegistry: string;\n imageRegistryUsername: string;\n imageRegistryPassword: string;\n exposeMinIO: boolean;\n exposeConsole: boolean;\n prometheusCustom: boolean;\n logSearchCustom: boolean;\n logSearchVolumeSize: string;\n logSearchSizeFactor: string;\n prometheusVolumeSize: string;\n prometheusSizeFactor: string;\n logSearchSelectedStorageClass: string;\n logSearchImage: string;\n kesImage: string;\n logSearchPostgresImage: string;\n logSearchPostgresInitImage: string;\n prometheusSelectedStorageClass: string;\n prometheusImage: string;\n prometheusSidecarImage: string;\n prometheusInitImage: string;\n selectedStorageClass: string;\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 storageClasses,\n customImage,\n imageName,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n exposeMinIO,\n exposeConsole,\n prometheusCustom,\n logSearchCustom,\n logSearchVolumeSize,\n logSearchSizeFactor,\n logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusVolumeSize,\n prometheusSizeFactor,\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n updateAddField,\n isPageValid,\n selectedStorageClass,\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 (prometheusCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"prometheus_storage_class\",\n required: true,\n value: prometheusSelectedStorageClass,\n customValidation: prometheusSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"prometheus_volume_size\",\n required: true,\n value: prometheusVolumeSize,\n customValidation:\n prometheusVolumeSize === \"\" || parseInt(prometheusVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n ];\n }\n if (logSearchCustom) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"log_search_storage_class\",\n required: true,\n value: logSearchSelectedStorageClass,\n customValidation: logSearchSelectedStorageClass === \"\",\n customValidationMessage: \"Field cannot be empty\",\n },\n {\n fieldKey: \"log_search_volume_size\",\n required: true,\n value: logSearchVolumeSize,\n customValidation:\n logSearchVolumeSize === \"\" || parseInt(logSearchVolumeSize) <= 0,\n customValidationMessage: `Volume size must be present and be greatter than 0`,\n },\n ];\n }\n\n if (customImage) {\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"image\",\n required: false,\n value: imageName,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/minio:VERSION'\",\n },\n {\n fieldKey: \"logSearchImage\",\n required: false,\n value: logSearchImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/logsearchapi:VERSION'\",\n },\n {\n fieldKey: \"kesImage\",\n required: false,\n value: kesImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage: \"Format must be of form: 'minio/kes:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresImage\",\n required: false,\n value: logSearchPostgresImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/postgres:VERSION'\",\n },\n {\n fieldKey: \"logSearchPostgresInitImage\",\n required: false,\n value: logSearchPostgresInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox:VERSION'\",\n },\n {\n fieldKey: \"prometheusImage\",\n required: false,\n value: prometheusImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'minio/prometheus:VERSION'\",\n },\n {\n fieldKey: \"prometheusSidecarImage\",\n required: false,\n value: prometheusSidecarImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'project/container:VERSION'\",\n },\n {\n fieldKey: \"prometheusInitImage\",\n required: false,\n value: prometheusInitImage,\n pattern: /^((.*?)\\/(.*?):(.+))$/,\n customPatternMessage:\n \"Format must be of form: 'library/busybox: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 logSearchImage,\n kesImage,\n logSearchPostgresImage,\n logSearchPostgresInitImage,\n prometheusImage,\n prometheusSidecarImage,\n prometheusInitImage,\n customDockerhub,\n imageRegistry,\n imageRegistryUsername,\n imageRegistryPassword,\n isPageValid,\n prometheusCustom,\n logSearchCustom,\n prometheusSelectedStorageClass,\n prometheusVolumeSize,\n logSearchSelectedStorageClass,\n logSearchVolumeSize,\n ]);\n\n useEffect(() => {\n // New default values is current selection is invalid\n if (storageClasses.length > 0) {\n const filterPrometheus = storageClasses.filter(\n (item: any) => item.value === prometheusSelectedStorageClass\n );\n if (filterPrometheus.length === 0) {\n updateField(\"prometheusSelectedStorageClass\", selectedStorageClass);\n }\n\n const filterLogSearch = storageClasses.filter(\n (item: any) => item.value === logSearchSelectedStorageClass\n );\n if (filterLogSearch.length === 0) {\n updateField(\"logSearchSelectedStorageClass\", selectedStorageClass);\n }\n }\n }, [\n logSearchSelectedStorageClass,\n prometheusSelectedStorageClass,\n selectedStorageClass,\n storageClasses,\n updateField,\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 docker image 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.2021-08-20T18-32-01Z\"\n />\n \n \n ) => {\n updateField(\"logSearchImage\", e.target.value);\n cleanValidation(\"logSearchImage\");\n }}\n label=\"Log Search API's Image\"\n value={logSearchImage}\n error={validationErrors[\"logSearchImage\"] || \"\"}\n placeholder=\"E.g. minio/logsearchapi:v4.1.1\"\n />\n \n \n ) => {\n updateField(\"kesImage\", e.target.value);\n cleanValidation(\"kesImage\");\n }}\n label=\"KES Image\"\n value={kesImage}\n error={validationErrors[\"kesImage\"] || \"\"}\n placeholder=\"E.g. minio/kes:v0.14.0\"\n />\n \n \n ) => {\n updateField(\"logSearchPostgresImage\", e.target.value);\n cleanValidation(\"logSearchPostgresImage\");\n }}\n label=\"Log Search Postgres's Image\"\n value={logSearchPostgresImage}\n error={validationErrors[\"logSearchPostgresImage\"] || \"\"}\n placeholder=\"E.g. library/postgres:13\"\n />\n \n \n ) => {\n updateField(\"logSearchPostgresInitImage\", e.target.value);\n cleanValidation(\"logSearchPostgresInitImage\");\n }}\n label=\"Log Search Postgres's Init Image\"\n value={logSearchPostgresInitImage}\n error={validationErrors[\"logSearchPostgresInitImage\"] || \"\"}\n placeholder=\"E.g. library/busybox:1.33.1\"\n />\n \n \n ) => {\n updateField(\"prometheusImage\", e.target.value);\n cleanValidation(\"prometheusImage\");\n }}\n label=\"Prometheus Image\"\n value={prometheusImage}\n error={validationErrors[\"prometheusImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n ) => {\n updateField(\"prometheusSidecarImage\", e.target.value);\n cleanValidation(\"prometheusSidecarImage\");\n }}\n label=\"Prometheus Sidecar Image\"\n value={prometheusSidecarImage}\n error={validationErrors[\"prometheusSidecarImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\n />\n \n \n ) => {\n updateField(\"prometheusInitImage\", e.target.value);\n cleanValidation(\"prometheusInitImage\");\n }}\n label=\"Prometheus Init Image\"\n value={prometheusInitImage}\n error={validationErrors[\"prometheusInitImage\"] || \"\"}\n placeholder=\"E.g. quay.io/prometheus/prometheus:latest\"\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

Additional Configurations

\n \n Configure Storage Classes & Storage size for Log Search and Prometheus\n add-ons\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"logSearchCustom\", checked);\n }}\n label={\"Override Log Search defaults\"}\n />\n \n {logSearchCustom && (\n \n \n ) => {\n updateField(\n \"logSearchSelectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Log Search Storage Class\"\n value={logSearchSelectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n \n
\n
\n ) => {\n updateField(\"logSearchVolumeSize\", e.target.value);\n cleanValidation(\"log_search_volume_size\");\n }}\n label=\"Storage Size [Gi]\"\n value={logSearchVolumeSize}\n required\n error={validationErrors[\"log_search_volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n
\n
\n
\n )}\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"prometheusCustom\", checked);\n }}\n label={\"Override Prometheus defaults\"}\n />\n \n {prometheusCustom && (\n \n \n ) => {\n updateField(\n \"prometheusSelectedStorageClass\",\n e.target.value as string\n );\n }}\n label=\"Prometheus Storage Class\"\n value={prometheusSelectedStorageClass}\n options={storageClasses}\n disabled={storageClasses.length < 1}\n />\n \n \n
\n
\n ) => {\n updateField(\"prometheusVolumeSize\", e.target.value);\n cleanValidation(\"prometheus_volume_size\");\n }}\n label=\"Storage Size [Gi]\"\n value={prometheusVolumeSize}\n required\n error={validationErrors[\"prometheus_volume_size\"] || \"\"}\n min=\"0\"\n />\n
\n
\n
\n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n storageClasses: state.tenants.createTenant.storageClasses,\n customImage: state.tenants.createTenant.fields.configure.customImage,\n imageName: state.tenants.createTenant.fields.configure.imageName,\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 prometheusCustom:\n state.tenants.createTenant.fields.configure.prometheusCustom,\n logSearchCustom: state.tenants.createTenant.fields.configure.logSearchCustom,\n logSearchVolumeSize:\n state.tenants.createTenant.fields.configure.logSearchVolumeSize,\n logSearchSizeFactor:\n state.tenants.createTenant.fields.configure.logSearchSizeFactor,\n prometheusVolumeSize:\n state.tenants.createTenant.fields.configure.prometheusVolumeSize,\n prometheusSizeFactor:\n state.tenants.createTenant.fields.configure.prometheusSizeFactor,\n logSearchSelectedStorageClass:\n state.tenants.createTenant.fields.configure.logSearchSelectedStorageClass,\n logSearchImage: state.tenants.createTenant.fields.configure.logSearchImage,\n kesImage: state.tenants.createTenant.fields.configure.kesImage,\n logSearchPostgresImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresImage,\n logSearchPostgresInitImage:\n state.tenants.createTenant.fields.configure.logSearchPostgresInitImage,\n prometheusSelectedStorageClass:\n state.tenants.createTenant.fields.configure.prometheusSelectedStorageClass,\n prometheusImage: state.tenants.createTenant.fields.configure.prometheusImage,\n prometheusSidecarImage:\n state.tenants.createTenant.fields.configure.prometheusSidecarImage,\n prometheusInitImage:\n state.tenants.createTenant.fields.configure.prometheusInitImage,\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(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, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, IconButton, Tooltip, Typography } from \"@material-ui/core\";\nimport CasinoIcon from \"@material-ui/icons/Casino\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { AppState } from \"../../../../../store\";\nimport { clearValidationError, getRandomString } from \"../../utils\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport AddIcon from \"@material-ui/icons/Add\";\n\ninterface IIdentityProviderProps {\n classes: any;\n idpSelection: string;\n accessKeys: string[];\n secretKeys: string[];\n openIDURL: string;\n openIDConfigurationURL: string;\n openIDClientID: string;\n openIDSecretID: string;\n openIDCallbackURL: string;\n openIDClaimName: string;\n openIDScopes: string;\n ADURL: string;\n ADSkipTLS: boolean;\n ADServerInsecure: boolean;\n ADUserNameSearchFilter: string;\n ADGroupSearchBaseDN: string;\n ADGroupSearchFilter: string;\n ADGroupNameAttribute: string;\n ADUserDNs: string[];\n ADUserNameFormat: string;\n ADLookupBindDN: string;\n ADLookupBindPassword: string;\n ADUserDNSearchBaseDN: string;\n ADUserDNSearchFilter: string;\n ADServerStartTLS: boolean;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n shortened: {\n gridTemplateColumns: \"auto auto 50px 50px\",\n display: \"grid\",\n gridGap: 20,\n },\n buttonTray: {\n gridTemplateColumns: \"auto auto 10px 10px\",\n display: \"grid\",\n gridGap: 0,\n height: 16,\n marginTop: 12,\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\nconst IdentityProvider = ({\n classes,\n idpSelection,\n accessKeys,\n secretKeys,\n openIDURL,\n openIDConfigurationURL,\n openIDClientID,\n openIDSecretID,\n openIDCallbackURL,\n openIDClaimName,\n openIDScopes,\n ADURL,\n ADSkipTLS,\n ADServerInsecure,\n ADUserNameSearchFilter,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADGroupNameAttribute,\n ADUserDNs,\n ADUserNameFormat,\n ADLookupBindDN,\n ADLookupBindPassword,\n ADUserDNSearchBaseDN,\n ADUserDNSearchFilter,\n ADServerStartTLS,\n updateAddField,\n isPageValid,\n}: IIdentityProviderProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"identityProvider\", field, value);\n },\n [updateAddField]\n );\n const updateUserField = (index: number, value: string) => {\n const newUserField = [...accessKeys];\n newUserField[index] = value;\n updateField(\"accessKeys\", newUserField);\n };\n const updatePwordField = (index: number, value: string) => {\n const newUserField = [...secretKeys];\n newUserField[index] = value;\n updateField(\"secretKeys\", newUserField);\n };\n const updateADUserField = (index: number, value: string) => {\n const newADUserDNsField = [...ADUserDNs];\n newADUserDNsField[index] = value;\n updateField(\"ADUserDNs\", newADUserDNsField);\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 customIDPValidation = [...customIDPValidation];\n for (var i = 0; i < accessKeys.length; i++) {\n customIDPValidation.push({\n fieldKey: `accesskey-${i.toString()}`,\n required: true,\n value: accessKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n customIDPValidation.push({\n fieldKey: `secretkey-${i.toString()}`,\n required: true,\n value: secretKeys[i],\n pattern: /^[a-zA-Z0-9-]{8,63}$/,\n customPatternMessage: \"Keys must be at least length 8\",\n });\n }\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_CONFIGURATION_URL\",\n required: true,\n value: openIDConfigurationURL,\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 fieldKey: \"openID_claimName\",\n required: true,\n value: openIDClaimName,\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 // validate user DNs\n for (let i = 0; i < ADUserDNs.length; i++) {\n customIDPValidation.push({\n fieldKey: `ad-userdn-${i.toString()}`,\n required: true,\n value: ADUserDNs[i],\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 accessKeys,\n secretKeys,\n openIDURL,\n openIDClientID,\n openIDSecretID,\n ADURL,\n ADUserNameSearchFilter,\n ADGroupSearchBaseDN,\n ADGroupSearchFilter,\n ADGroupNameAttribute,\n ADUserDNs,\n isPageValid,\n openIDConfigurationURL,\n openIDClaimName,\n ]);\n let inputs = null;\n if (idpSelection === \"Built-in\") {\n inputs = accessKeys.map((_, index) => {\n return (\n \n
\n ) => {\n updateUserField(index, e.target.value);\n cleanValidation(`accesskey-${index.toString()}`);\n }}\n index={index}\n key={`csv-accesskey-${index.toString()}`}\n error={validationErrors[`accesskey-${index.toString()}`] || \"\"}\n />\n ) => {\n updatePwordField(index, e.target.value);\n cleanValidation(`secretkey-${index.toString()}`);\n }}\n index={index}\n key={`csv-secretkey-${index.toString()}`}\n error={validationErrors[`secretkey-${index.toString()}`] || \"\"}\n />\n
\n \n {\n accessKeys.push(\"\");\n secretKeys.push(\"\");\n updateUserField(accessKeys.length - 1, \"\");\n updatePwordField(secretKeys.length - 1, \"\");\n }}\n >\n \n \n \n \n {\n updateUserField(index, getRandomString(16));\n updatePwordField(index, getRandomString(32));\n }}\n size={\"small\"}\n >\n \n \n \n \n {\n if (accessKeys.length > 1) {\n accessKeys.splice(index, 1);\n secretKeys.splice(index, 1);\n updateUserField(\n accessKeys.length - 1,\n accessKeys[accessKeys.length - 1]\n );\n }\n }}\n >\n \n \n \n
\n
\n
\n );\n });\n }\n if (idpSelection === \"AD\") {\n inputs = ADUserDNs.map((_, index) => {\n return (\n \n
\n ) => {\n updateADUserField(index, e.target.value);\n cleanValidation(`ad-userdn-${index.toString()}`);\n }}\n index={index}\n key={`csv-ad-userdn-${index.toString()}`}\n error={validationErrors[`ad-userdn-${index.toString()}`] || \"\"}\n />\n
\n \n {\n ADUserDNs.push(\"\");\n updateADUserField(ADUserDNs.length - 1, \"\");\n }}\n >\n \n \n \n \n {\n if (ADUserDNs.length > 1) {\n ADUserDNs.splice(index, 1);\n updateUserField(\n ADUserDNs.length - 1,\n ADUserDNs[ADUserDNs.length - 1]\n );\n }\n }}\n >\n \n \n \n
\n
\n
\n );\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 \n {idpSelection === \"Built-in\" && (\n \n Add additional users\n {inputs}\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 placeholder=\"https://your-identity-provider.com/\"\n error={validationErrors[\"openID_URL\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDConfigurationURL\", e.target.value);\n cleanValidation(\"openID_CONFIGURATION_URL\");\n }}\n label=\"Configuration URL\"\n value={openIDConfigurationURL}\n placeholder=\"https://your-identity-provider.com/.well-known/openid-configuration\"\n error={validationErrors[\"openID_CONFIGURATION_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 updateField(\"openIDCallbackURL\", e.target.value);\n cleanValidation(\"openID_callbackURL\");\n }}\n label=\"Callback URL\"\n value={openIDCallbackURL}\n placeholder=\"https://your-console-endpoint:9443/oauth_callback\"\n error={validationErrors[\"openID_callbackURL\"] || \"\"}\n />\n \n \n ) => {\n updateField(\"openIDClaimName\", e.target.value);\n cleanValidation(\"openID_claimName\");\n }}\n label=\"Claim Name\"\n value={openIDClaimName}\n error={validationErrors[\"openID_claimName\"] || \"\"}\n required\n />\n \n \n ) => {\n updateField(\"openIDScopes\", e.target.value);\n cleanValidation(\"openID_scopes\");\n }}\n label=\"Scopes\"\n value={openIDScopes}\n />\n \n \n )}\n {idpSelection === \"AD\" && (\n \n \n ) => {\n updateField(\"ADURL\", e.target.value);\n cleanValidation(\"AD_URL\");\n }}\n label=\"LDAP Server Address\"\n value={ADURL}\n placeholder=\"ldap-server:636\"\n error={validationErrors[\"AD_URL\"] || \"\"}\n required\n />\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\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 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 const targetD = e.target;\n const checked = targetD.checked;\n updateField(\"ADServerStartTLS\", checked);\n }}\n label={\"Start TLS connection to AD/LDAP server\"}\n />\n \n \n ) => {\n updateField(\"ADUserNameFormat\", e.target.value);\n }}\n label=\"Username Format\"\n value={ADUserNameFormat}\n placeholder=\"uid=%s,cn=accounts,dc=myldapserver,dc=com\"\n />\n \n \n ) => {\n updateField(\"ADUserNameSearchFilter\", e.target.value);\n }}\n label=\"Username Search Filter\"\n value={ADUserNameSearchFilter}\n placeholder=\"(|(objectclass=posixAccount)(uid=%s))\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchBaseDN\", e.target.value);\n }}\n label=\"Group Search Base DN\"\n value={ADGroupSearchBaseDN}\n placeholder=\"ou=hwengg,dc=min,dc=io;ou=swengg,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADGroupSearchFilter\", e.target.value);\n }}\n label=\"Group Search Filter\"\n value={ADGroupSearchFilter}\n placeholder=\"(&(objectclass=groupOfNames)(member=%s))\"\n />\n \n \n ) => {\n updateField(\"ADGroupNameAttribute\", e.target.value);\n }}\n label=\"Group Name Attribute\"\n value={ADGroupNameAttribute}\n placeholder=\"cn\"\n />\n \n \n ) => {\n updateField(\"ADLookupBindDN\", e.target.value);\n }}\n label=\"Lookup Bind DN\"\n value={ADLookupBindDN}\n placeholder=\"cn=admin,dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADLookupBindPassword\", e.target.value);\n }}\n label=\"Lookup Bind Password\"\n value={ADLookupBindPassword}\n placeholder=\"admin\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchBaseDN\", e.target.value);\n }}\n label=\"User DN Search Base DN\"\n value={ADUserDNSearchBaseDN}\n placeholder=\"dc=min,dc=io\"\n />\n \n \n ) => {\n updateField(\"ADUserDNSearchFilter\", e.target.value);\n }}\n label=\"User DN Search Filter\"\n value={ADUserDNSearchFilter}\n placeholder=\"(uid=%s)\"\n />\n \n \n List of user DNs (Distinguished Names) to be Tenant Administrators\n {inputs}\n \n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n idpSelection: state.tenants.createTenant.fields.identityProvider.idpSelection,\n accessKeys: state.tenants.createTenant.fields.identityProvider.accessKeys,\n secretKeys: state.tenants.createTenant.fields.identityProvider.secretKeys,\n openIDURL: state.tenants.createTenant.fields.identityProvider.openIDURL,\n openIDConfigurationURL:\n state.tenants.createTenant.fields.identityProvider.openIDConfigurationURL,\n openIDClientID:\n state.tenants.createTenant.fields.identityProvider.openIDClientID,\n openIDSecretID:\n state.tenants.createTenant.fields.identityProvider.openIDSecretID,\n openIDCallbackURL:\n state.tenants.createTenant.fields.identityProvider.openIDCallbackURL,\n openIDClaimName:\n state.tenants.createTenant.fields.identityProvider.openIDClaimName,\n openIDScopes: state.tenants.createTenant.fields.identityProvider.openIDScopes,\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 ADUserNameSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserNameSearchFilter,\n ADGroupSearchBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchBaseDN,\n ADGroupSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADGroupSearchFilter,\n ADGroupNameAttribute:\n state.tenants.createTenant.fields.identityProvider.ADGroupNameAttribute,\n ADUserDNs: state.tenants.createTenant.fields.identityProvider.ADUserDNs,\n ADUserNameFormat:\n state.tenants.createTenant.fields.identityProvider.ADUserNameFormat,\n ADLookupBindDN:\n state.tenants.createTenant.fields.identityProvider.ADLookupBindDN,\n ADLookupBindPassword:\n state.tenants.createTenant.fields.identityProvider.ADLookupBindPassword,\n ADUserDNSearchBaseDN:\n state.tenants.createTenant.fields.identityProvider.ADUserDNSearchBaseDN,\n ADUserDNSearchFilter:\n state.tenants.createTenant.fields.identityProvider.ADUserDNSearchFilter,\n ADServerStartTLS:\n state.tenants.createTenant.fields.identityProvider.ADServerStartTLS,\n});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(IdentityProvider));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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} 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 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}\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 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 \"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 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 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 MinIO 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\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});\n\nconst connector = connect(mapState, {\n updateAddField,\n isPageValid,\n addFileToCaCertificates,\n deleteCaCertificate,\n addCaCertificate,\n addKeyPair,\n addFileToKeyPair,\n deleteKeyPair,\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, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { AppState } from \"../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport {\n modalBasic,\n wizardCommon,\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 calculateDistribution,\n erasureCodeCalc,\n getBytes,\n k8sfactorForDropdown,\n niceBytes,\n setMemoryResource,\n} from \"../../../../../common/utils\";\nimport { clearValidationError } from \"../../utils\";\nimport { ecListTransform, Opts } from \"../../ListTenants/utils\";\nimport { IMemorySize } from \"../../ListTenants/types\";\nimport {\n ErrorResponseHandler,\n ICapacity,\n IErasureCodeCalc,\n} from \"../../../../../common/types\";\nimport { commonFormValidation } from \"../../../../../utils/validationFunctions\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\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 [errorFlag, setErrorFlag] = useState(false);\n const [nodeError, setNodeError] = 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 updateField(\"memorySize\", memoSize);\n }, [maxAllocableMemo, memoryNode, sizeFactor, updateField, volumeSize]);\n\n const getMaxAllocableMemory = (nodes: string) => {\n if (nodes !== \"\" && !isNaN(parseInt(nodes))) {\n setNodeError(\"\");\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: ErrorResponseHandler) => {\n setErrorFlag(true);\n setNodeError(err.errorMessage);\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: ErrorResponseHandler) => {\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 const commonValidation = commonFormValidation([\n {\n fieldKey: \"nodes\",\n required: true,\n value: nodes,\n customValidation: errorFlag,\n customValidationMessage: nodeError,\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 isPageValid,\n errorFlag,\n nodeError,\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
{distribution.error}
\n )}\n {memorySize.error !== \"\" && (\n
{memorySize.error}
\n )}\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 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 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\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 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, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, IconButton } from \"@material-ui/core\";\nimport { AppState } from \"../../../../../store\";\nimport { isPageValid, updateAddField } from \"../../actions\";\nimport { setModalErrorSnackMessage } from \"../../../../../actions\";\nimport {\n modalBasic,\n wizardCommon,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport {\n commonFormValidation,\n IValidation,\n} from \"../../../../../utils/validationFunctions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport RadioGroupSelector from \"../../../Common/FormComponents/RadioGroupSelector/RadioGroupSelector\";\nimport FormSwitchWrapper from \"../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport api from \"../../../../../common/api\";\nimport InputBoxWrapper from \"../../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport AddIcon from \"../../../../../icons/AddIcon\";\nimport RemoveIcon from \"../../../../../icons/RemoveIcon\";\nimport SelectWrapper from \"../../../Common/FormComponents/SelectWrapper/SelectWrapper\";\n\ninterface IAffinityProps {\n classes: any;\n podAffinity: string;\n nodeSelectorLabels: string;\n withPodAntiAffinity: boolean;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n updateAddField: typeof updateAddField;\n isPageValid: typeof isPageValid;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n overlayAction: {\n lineHeight: \"50px\",\n float: \"left\",\n \"& svg\": {\n maxWidth: 15,\n maxHeight: 15,\n },\n },\n ...modalBasic,\n ...wizardCommon,\n });\n\ninterface LabelKeyPair {\n key: string;\n value: string;\n}\n\ninterface OptionPair {\n label: string;\n value: string;\n}\n\nconst Affinity = ({\n classes,\n podAffinity,\n nodeSelectorLabels,\n withPodAntiAffinity,\n setModalErrorSnackMessage,\n updateAddField,\n isPageValid,\n}: IAffinityProps) => {\n const [validationErrors, setValidationErrors] = useState({});\n const [loading, setLoading] = useState(true);\n const [keyValueMap, setKeyValueMap] = useState<{ [key: string]: string[] }>(\n {}\n );\n const [keyValuePairs, setKeyValuePairs] = useState([\n { key: \"\", value: \"\" },\n ]);\n\n const [keyOptions, setKeyOptions] = useState([]);\n\n // Common\n const updateField = useCallback(\n (field: string, value: any) => {\n updateAddField(\"affinity\", field, value);\n },\n [updateAddField]\n );\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/nodes/labels`)\n .then((res: { [key: string]: string[] }) => {\n setLoading(false);\n setKeyValueMap(res);\n let keys: OptionPair[] = [];\n for (let k in res) {\n keys.push({\n label: k,\n value: k,\n });\n }\n setKeyOptions(keys);\n setKeyValuePairs([{ key: keys[0].value, value: keys[0].value }]);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n setKeyValueMap({});\n });\n }\n }, [setModalErrorSnackMessage, loading]);\n\n useEffect(() => {\n if (keyValuePairs) {\n const vlr = keyValuePairs\n .filter((kvp) => kvp.key !== \"\")\n .map((kvp) => `${kvp.key}=${kvp.value}`)\n .filter((kvs, i, a) => a.indexOf(kvs) === i);\n const vl = vlr.join(\"&\");\n\n console.log(vl);\n\n updateField(\"nodeSelectorLabels\", vl);\n }\n }, [keyValuePairs, updateField]);\n\n // Validation\n useEffect(() => {\n let customAccountValidation: IValidation[] = [];\n\n if (podAffinity === \"nodeSelector\") {\n let valid = true;\n\n const splittedLabels = nodeSelectorLabels.split(\"&\");\n\n if (splittedLabels.length === 1 && splittedLabels[0] === \"\") {\n valid = false;\n }\n\n splittedLabels.forEach((item: string, index: number) => {\n const splitItem = item.split(\"=\");\n\n if (splitItem.length !== 2) {\n valid = false;\n }\n\n if (index + 1 !== splittedLabels.length) {\n if (splitItem[0] === \"\" || splitItem[1] === \"\") {\n valid = false;\n }\n }\n });\n\n customAccountValidation = [\n ...customAccountValidation,\n {\n fieldKey: \"labels\",\n required: true,\n value: nodeSelectorLabels,\n customValidation: !valid,\n customValidationMessage:\n \"You need to add at least one label key-pair\",\n },\n ];\n }\n\n const commonVal = commonFormValidation(customAccountValidation);\n\n isPageValid(\"affinity\", Object.keys(commonVal).length === 0);\n\n setValidationErrors(commonVal);\n }, [isPageValid, podAffinity, nodeSelectorLabels]);\n\n return (\n \n
\n

Pod Affinity

\n \n Configure how pods will be assigned to nodes\n \n
\n \n {\n updateField(\"podAffinity\", e.target.value);\n }}\n selectorOptions={[\n { label: \"None\", value: \"none\" },\n { label: \"Default (Pod Anti-afinnity)\", value: \"default\" },\n { label: \"Node Selector\", value: \"nodeSelector\" },\n ]}\n />\n MinIO supports multiple configurations for Pod Afinnity\n \n {podAffinity === \"nodeSelector\" && (\n \n
\n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n\n updateField(\"withPodAntiAffinity\", checked);\n }}\n label={\"With Pod Anti-Affinity\"}\n />\n \n \n

Labels

\n {validationErrors[\"labels\"]}\n \n {keyValuePairs &&\n keyValuePairs.map((kvp, i) => {\n return (\n \n \n {keyOptions.length > 0 && (\n \n ) => {\n const newKey = e.target.value as string;\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n\n arrCp[i].key = e.target.value as string;\n arrCp[i].value = keyValueMap[newKey][0];\n setKeyValuePairs(arrCp);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.key}\n options={keyOptions}\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].key = e.target.value;\n setKeyValuePairs(arrCp);\n }}\n index={i}\n placeholder={\"Key\"}\n />\n )}\n \n \n {keyOptions.length > 0 && (\n \n ) => {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].value = e.target.value as string;\n setKeyValuePairs(arrCp);\n }}\n id=\"select-access-policy\"\n name=\"select-access-policy\"\n label={\"\"}\n value={kvp.value}\n options={\n keyValueMap[kvp.key]\n ? keyValueMap[kvp.key].map((v) => {\n return { label: v, value: v };\n })\n : []\n }\n />\n )}\n {keyOptions.length === 0 && (\n {\n const arrCp: LabelKeyPair[] = Object.assign(\n [],\n keyValuePairs\n );\n arrCp[i].value = e.target.value;\n setKeyValuePairs(arrCp);\n }}\n index={i}\n placeholder={\"value\"}\n />\n )}\n \n \n
\n {\n const arrCp = Object.assign([], keyValuePairs);\n if (keyOptions.length > 0) {\n arrCp.push({\n key: keyOptions[0].value,\n value: keyValueMap[keyOptions[0].value][0],\n });\n } else {\n arrCp.push({ key: \"\", value: \"\" });\n }\n\n setKeyValuePairs(arrCp);\n }}\n >\n \n \n
\n {keyValuePairs.length > 1 && (\n
\n {\n const arrCp = keyValuePairs.filter(\n (item, index) => index !== i\n );\n setKeyValuePairs(arrCp);\n }}\n >\n \n \n
\n )}\n
\n
\n );\n })}\n
\n
\n
\n )}\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n podAffinity: state.tenants.createTenant.fields.affinity.podAffinity,\n nodeSelectorLabels:\n state.tenants.createTenant.fields.affinity.nodeSelectorLabels,\n withPodAntiAffinity:\n state.tenants.createTenant.fields.affinity.withPodAntiAffinity,\n});\n\nconst connector = connect(mapState, {\n setModalErrorSnackMessage,\n updateAddField,\n isPageValid,\n});\n\nexport default withStyles(styles)(connector(Affinity));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\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 { ErrorResponseHandler, ITenantCreator } from \"../../../../common/types\";\nimport { KeyPair } from \"../ListTenants/utils\";\n\nimport { setModalErrorSnackMessage } from \"../../../../actions\";\nimport { getDefaultAffinity, getNodeSelector } 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\";\nimport Affinity from \"./Steps/Affinity\";\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 [createdAccount, 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 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 openIDConfigurationURL =\n fields.identityProvider.openIDConfigurationURL;\n const openIDClientID = fields.identityProvider.openIDClientID;\n const openIDClaimName = fields.identityProvider.openIDClaimName;\n const openIDCallbackURL = fields.identityProvider.openIDCallbackURL;\n const openIDScopes = fields.identityProvider.openIDScopes;\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 ADUserNameSearchFilter =\n fields.identityProvider.ADUserNameSearchFilter;\n const ADGroupSearchBaseDN = fields.identityProvider.ADGroupSearchBaseDN;\n const ADGroupSearchFilter = fields.identityProvider.ADGroupSearchFilter;\n const ADGroupNameAttribute = fields.identityProvider.ADGroupNameAttribute;\n const ADUserDNs = fields.identityProvider.ADUserDNs;\n const ADUserNameFormat = fields.identityProvider.ADUserNameFormat;\n const ADLookupBindDN = fields.identityProvider.ADLookupBindDN;\n const ADLookupBindPassword = fields.identityProvider.ADLookupBindPassword;\n const ADUserDNSearchBaseDN = fields.identityProvider.ADUserDNSearchBaseDN;\n const ADUserDNSearchFilter = fields.identityProvider.ADUserDNSearchFilter;\n const ADServerStartTLS = fields.identityProvider.ADServerStartTLS;\n const accessKeys = fields.identityProvider.accessKeys;\n const secretKeys = fields.identityProvider.secretKeys;\n const minioCertificates = certificates.minioCertificates;\n const caCertificates = certificates.caCertificates;\n const consoleCaCertificates = certificates.consoleCaCertificates;\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 const logSearchCustom = fields.configure.logSearchCustom;\n const prometheusCustom = fields.configure.prometheusCustom;\n const logSearchVolumeSize = fields.configure.logSearchVolumeSize;\n const logSearchSelectedStorageClass =\n fields.configure.logSearchSelectedStorageClass;\n const logSearchImage = fields.configure.logSearchImage;\n const kesImage = fields.configure.kesImage;\n const logSearchPostgresImage = fields.configure.logSearchPostgresImage;\n const logSearchPostgresInitImage =\n fields.configure.logSearchPostgresInitImage;\n const prometheusImage = fields.configure.prometheusImage;\n const prometheusSidecarImage = fields.configure.prometheusSidecarImage;\n const prometheusInitImage = fields.configure.prometheusInitImage;\n const prometheusSelectedStorageClass =\n fields.configure.prometheusSelectedStorageClass;\n const prometheusVolumeSize = fields.configure.prometheusVolumeSize;\n const affinityType = fields.affinity.podAffinity;\n const nodeSelectorLabels = fields.affinity.nodeSelectorLabels;\n const withPodAntiAffinity = fields.affinity.withPodAntiAffinity;\n\n if (addSending) {\n const poolName = generatePoolName([]);\n\n let affinityObject = {};\n\n switch (affinityType) {\n case \"default\":\n affinityObject = {\n affinity: getDefaultAffinity(tenantName, poolName),\n };\n break;\n case \"nodeSelector\":\n affinityObject = {\n affinity: getNodeSelector(\n nodeSelectorLabels,\n withPodAntiAffinity,\n tenantName,\n poolName\n ),\n };\n break;\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 access_keys: [],\n secret_keys: [],\n enable_tls: enableTLS && enableAutoCert,\n enable_console: true,\n enable_prometheus: true,\n service_name: \"\",\n image: imageName,\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 ...affinityObject,\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 if (logSearchCustom) {\n dataSend = {\n ...dataSend,\n logSearchConfiguration: {\n storageClass: logSearchSelectedStorageClass,\n storageSize: parseInt(logSearchVolumeSize),\n image: logSearchImage,\n postgres_image: logSearchPostgresImage,\n postgres_init_image: logSearchPostgresInitImage,\n },\n };\n } else {\n dataSend = {\n ...dataSend,\n logSearchConfiguration: {\n image: logSearchImage,\n postgres_image: logSearchPostgresImage,\n postgres_init_image: logSearchPostgresInitImage,\n },\n };\n }\n\n if (prometheusCustom) {\n dataSend = {\n ...dataSend,\n prometheusConfiguration: {\n storageClass: prometheusSelectedStorageClass,\n storageSize: parseInt(prometheusVolumeSize),\n image: prometheusImage,\n sidecar_image: prometheusSidecarImage,\n init_image: prometheusInitImage,\n },\n };\n } else {\n dataSend = {\n ...dataSend,\n prometheusConfiguration: {\n image: prometheusImage,\n sidecar_image: prometheusSidecarImage,\n init_image: prometheusInitImage,\n },\n };\n }\n\n let tenantCerts: any = null;\n let consoleCerts: any = null;\n let caCerts: any = null;\n let consoleCaCerts: 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 (consoleCaCertificates.length > 0) {\n consoleCaCerts = {\n console_ca_certificates: consoleCaCertificates\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 || consoleCaCerts) {\n dataSend = {\n ...dataSend,\n tls: {\n ...tenantCerts,\n ...consoleCerts,\n ...caCerts,\n ...consoleCaCerts,\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 image: kesImage,\n ...encryptionClientKeyPair,\n ...encryptionServerKeyPair,\n ...insertEncrypt,\n },\n };\n }\n\n let dataIDP: any = {};\n switch (idpSelection) {\n case \"Built-in\":\n let keyarray = [];\n for (let i = 0; i < accessKeys.length; i++) {\n keyarray.push({\n access_key: accessKeys[i],\n secret_key: secretKeys[i],\n });\n }\n dataIDP = {\n keys: keyarray,\n };\n break;\n case \"OpenID\":\n dataIDP = {\n oidc: {\n url: openIDURL,\n configuration_url: openIDConfigurationURL,\n client_id: openIDClientID,\n secret_id: openIDSecretID,\n claim_name: openIDClaimName,\n callback_url: openIDCallbackURL,\n scopes: openIDScopes,\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: ADUserNameFormat,\n username_search_filter: ADUserNameSearchFilter,\n group_search_base_dn: ADGroupSearchBaseDN,\n group_search_filter: ADGroupSearchFilter,\n group_name_attribute: ADGroupNameAttribute,\n user_dns: ADUserDNs,\n lookup_bind_dn: ADLookupBindDN,\n lookup_bind_password: ADLookupBindPassword,\n user_dn_search_base_dn: ADUserDNSearchBaseDN,\n user_dn_search_filter: ADUserDNSearchFilter,\n server_start_tls: ADServerStartTLS,\n },\n };\n break;\n }\n\n dataSend = {\n ...dataSend,\n idp: { ...dataIDP },\n };\n api\n .invoke(\"POST\", `/api/v1/tenants`, dataSend)\n .then((res) => {\n const consoleSAList = get(res, \"console\", []);\n\n let newSrvAcc: NewServiceAccount = {\n idp: get(res, \"externalIDP\", false),\n console: [],\n };\n\n if (consoleSAList) {\n if (Array.isArray(consoleSAList)) {\n const consoleItem = consoleSAList.map((consoleKey) => {\n return {\n accessKey: consoleKey.access_key,\n secretKey: consoleKey.secret_key,\n };\n });\n\n newSrvAcc.console = consoleItem;\n } else {\n newSrvAcc = {\n console: {\n accessKey: res.console.access_key,\n secretKey: res.console.secret_key,\n },\n };\n }\n }\n setAddSending(false);\n setShowNewCredentials(true);\n setCreatedAccount(newSrvAcc);\n })\n .catch((err: ErrorResponseHandler) => {\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: \"Pod Affinity\",\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(\"affinity\"),\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, { Fragment, useEffect, useState } 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 { 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 { CircleIcon, CreateIcon } from \"../../../../icons\";\nimport { resetAddTenantForm } from \"../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\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 SlideOptions from \"../../Common/SlideOptions/SlideOptions\";\nimport BackSettingsIcon from \"../../../../icons/BackSettingsIcon\";\nimport RefreshIcon from \"../../../../icons/RefreshIcon\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\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 settingsOptionsContainer: {\n ...settingsCommon.settingsOptionsContainer,\n height: \"calc(100vh - 150px)\",\n },\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 - 260px)\",\n scrollbarWidth: \"none\" as const,\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n },\n redState: {\n color: theme.palette.error.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n yellowState: {\n color: theme.palette.warning.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n greenState: {\n color: theme.palette.success.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\n },\n },\n greyState: {\n color: \"grey\",\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n float: \"left\",\n marginRight: 4,\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 [createdAccount, 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: ErrorResponseHandler) => {\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 const healthStatusToClass = (health_status: string) => {\n switch (health_status) {\n case \"red\":\n return classes.redState;\n case \"yellow\":\n return classes.yellowState;\n case \"green\":\n return classes.greenState;\n default:\n return classes.greyState;\n }\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 {\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 return (\n \n \n \n
\n
{t.name}
\n \n );\n },\n },\n { label: \"Namespace\", elementKey: \"namespace\" },\n { label: \"Capacity\", elementKey: \"capacity\" },\n { label: \"# of Pools\", elementKey: \"pool_count\" },\n { label: \"State\", elementKey: \"currentState\" },\n ]}\n isLoading={isLoading}\n records={filteredRecords}\n entityName=\"Tenants\"\n idField=\"name\"\n customPaperHeight={classes.customConfigurationPage}\n noBackground\n />\n
\n
\n
,\n \n \n \n \n \n {currentPanel === 1 && (\n \n )}\n \n ,\n ]}\n currentSlide={currentPanel}\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 } 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 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 return (\n \n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(TenantsMain);\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 { setModalErrorSnackMessage } from \"../../../../actions\";\nimport {\n fieldBasic,\n modalBasic,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport ModalWrapper from \"../../Common/ModalWrapper/ModalWrapper\";\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 errorState: {\n color: \"#b53b4b\",\n fontSize: 14,\n fontWeight: \"bold\",\n },\n ...modalBasic,\n ...fieldBasic,\n });\n\ninterface ITenantYAML {\n yaml: string;\n}\n\ninterface ITenantYAMLProps {\n classes: any;\n open: boolean;\n closeModalAndRefresh: (refresh: boolean) => void;\n tenant: string;\n namespace: string;\n setModalErrorSnackMessage: typeof setModalErrorSnackMessage;\n}\n\nconst TenantYAML = ({\n classes,\n open,\n closeModalAndRefresh,\n tenant,\n namespace,\n setModalErrorSnackMessage,\n}: ITenantYAMLProps) => {\n const [addLoading, setAddLoading] = useState(false);\n const [loading, setLoading] = useState(false);\n const [tenantYaml, setTenantYaml] = useState(\"\");\n const [errorMessage, setErrorMessage] = useState(\"\");\n\n const updateTenant = (event: React.FormEvent) => {\n event.preventDefault();\n if (addLoading) {\n return;\n }\n setAddLoading(true);\n setErrorMessage(\"\");\n api\n .invoke(\"PUT\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`, {\n yaml: tenantYaml,\n })\n .then((res) => {\n setAddLoading(false);\n closeModalAndRefresh(true);\n setErrorMessage(\"\");\n })\n .catch((err: ErrorResponseHandler) => {\n setAddLoading(false);\n setErrorMessage(err.errorMessage);\n });\n };\n\n // check the permissions for creating bucket\n useEffect(() => {\n api\n .invoke(\"GET\", `/api/v1/namespaces/${namespace}/tenants/${tenant}/yaml`)\n .then((res: ITenantYAML) => {\n setLoading(false);\n setTenantYaml(res.yaml);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setModalErrorSnackMessage(err);\n });\n }, [tenant, namespace, setModalErrorSnackMessage]);\n\n useEffect(() => {}, []);\n\n const validSave = tenantYaml.trim() !== \"\";\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n title={`YAML`}\n >\n {loading && }\n {errorMessage !== \"\" && (\n
{errorMessage}
\n )}\n {!loading && (\n ) => {\n updateTenant(e);\n }}\n >\n \n \n \n
\n
\n {\n setTenantYaml(value);\n }}\n />\n
\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(TenantYAML));\n","import React from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { LinearProgress } from \"@material-ui/core\";\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 padChart: {\n padding: \"5px\",\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 {loading && (\n
\n \n \n \n
\n )}\n {renderComponent()}\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 { ErrorResponseHandler } from \"../../../../common/types\";\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 [imageRegistry, setImageRegistry] = useState(false);\n const [imageRegistryEndpoint, setImageRegistryEndpoint] =\n useState(\"\");\n const [imageRegistryUsername, setImageRegistryUsername] =\n useState(\"\");\n const [imageRegistryPassword, setImageRegistryPassword] =\n useState(\"\");\n const [validMinioImage, setValidMinioImage] = useState(true);\n\n const validateImage = useCallback(\n (fieldToCheck: string) => {\n const pattern = new RegExp(\"^$|^((.*?)/(.*?):(.+))$\");\n\n switch (fieldToCheck) {\n case \"minioImage\":\n setValidMinioImage(pattern.test(minioImage));\n break;\n }\n },\n [minioImage]\n );\n\n useEffect(() => {\n validateImage(\"minioImage\");\n }, [minioImage, validateImage]);\n\n const closeAction = () => {\n closeModalAndRefresh(false);\n };\n\n const resetForm = () => {\n setMinioImage(\"\");\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 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: ErrorResponseHandler) => {\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 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, { Fragment, 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 tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { Button, CircularProgress } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport api from \"../../../../common/api\";\nimport { ITenant } from \"../ListTenants/types\";\nimport UsageBarWrapper from \"../../Common/UsageBarWrapper/UsageBarWrapper\";\nimport UpdateTenantModal from \"./UpdateTenantModal\";\nimport { AppState } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport history from \"./../../../../history\";\nimport { CircleIcon } from \"../../../../icons\";\n\ninterface ITenantsSummary {\n classes: any;\n match: any;\n tenant: ITenant | null;\n logEnabled: boolean;\n monitoringEnabled: boolean;\n encryptionEnabled: boolean;\n minioTLS: boolean;\n consoleTLS: boolean;\n consoleEnabled: boolean;\n adEnabled: boolean;\n oidcEnabled: boolean;\n loadingTenant: boolean;\n}\n\ninterface ITenantUsage {\n used: string;\n disk_used: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n redState: {\n color: theme.palette.error.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n yellowState: {\n color: theme.palette.warning.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n greenState: {\n color: theme.palette.success.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n greyState: {\n color: \"grey\",\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n centerAlign: {\n textAlign: \"center\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantSummary = ({\n classes,\n match,\n tenant,\n logEnabled,\n monitoringEnabled,\n encryptionEnabled,\n minioTLS,\n consoleTLS,\n consoleEnabled,\n adEnabled,\n oidcEnabled,\n loadingTenant,\n}: ITenantsSummary) => {\n const [capacity, setCapacity] = useState(0);\n const [poolCount, setPoolCount] = useState(0);\n const [instances, setInstances] = useState(0);\n const [volumes, setVolumes] = useState(0);\n const [loadingUsage, setLoadingUsage] = useState(true);\n const [usageError, setUsageError] = useState(\"\");\n const [usage, setUsage] = useState(0);\n const [updateMinioVersion, setUpdateMinioVersion] = useState(false);\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const healthStatusToClass = (health_status: string) => {\n return health_status === \"red\"\n ? classes.redState\n : health_status === \"yellow\"\n ? classes.yellowState\n : health_status === \"green\"\n ? classes.greenState\n : classes.greyState;\n };\n\n useEffect(() => {\n if (loadingUsage) {\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: ErrorResponseHandler) => {\n setUsageError(err.errorMessage);\n setUsage(0);\n setLoadingUsage(false);\n });\n }\n }, [tenantName, tenantNamespace, loadingUsage]);\n\n useEffect(() => {\n if (tenant) {\n const res = tenant;\n\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 || 0);\n setPoolCount(resPools.length);\n setVolumes(totalVolumes);\n setInstances(totalInstances);\n }\n }, [tenant]);\n\n return (\n \n {updateMinioVersion && (\n {\n setUpdateMinioVersion(false);\n }}\n idTenant={tenantName}\n namespace={tenantNamespace}\n />\n )}\n
\n

Summary

\n \n \n \n \n \n \n \n \n {loadingTenant ? (\n \n \n \n ) : (\n \n \n \n \n \n \n \n \n \n \n \n \n \n {tenant?.endpoints && (\n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n \n )}\n \n
\n

Details

\n
\n
\n \n
Capacity:{niceBytes(capacity.toString(10))}Clusters:{poolCount}
Instances:{instances}Volumes:{volumes}
Endpoint:\n \n {tenant?.endpoints.minio}\n \n Console:\n \n {tenant?.endpoints.console}\n \n
MinIO:\n {\n setUpdateMinioVersion(true);\n }}\n >\n {tenant ? tenant.image : \"\"}\n \n
State:{tenant?.currentState}
\n
\n \n {loadingTenant ? (\n
\n \n
\n ) : (\n \n \n

\n {tenant && tenant.status && (\n \n \n \n )}\n Health\n

\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Drives Online\n {tenant?.status?.drives_online\n ? tenant?.status?.drives_online\n : 0}\n
Drives Offline\n {tenant?.status?.drives_offline\n ? tenant?.status?.drives_offline\n : 0}\n
Write Quorum\n {tenant?.status?.write_quorum\n ? tenant?.status?.write_quorum\n : 0}\n
\n {\n history.push(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}/hop`\n );\n }}\n >\n Manage Tenant\n \n
\n )}\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n {loadingTenant ? (\n \n \n \n ) : (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n
\n

Features

\n
\n
\n \n
Logs:\n \n {logEnabled ? \"Enabled\" : \"Disabled\"}\n \n Monitoring:\n \n {monitoringEnabled ? \"Enabled\" : \"Disabled\"}\n \n
MinIO TLS:\n \n {minioTLS ? \"Enabled\" : \"Disabled\"}\n \n Encryption:\n \n {encryptionEnabled ? \"Enabled\" : \"Disabled\"}\n \n
Active Directory:\n \n {adEnabled ? \"Enabled\" : \"Disabled\"}\n \n OpenID:\n \n {oidcEnabled ? \"Enabled\" : \"Disabled\"}\n \n
\n
\n
\n
\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n selectedTenant: state.tenants.tenantDetails.currentTenant,\n tenant: state.tenants.tenantDetails.tenantInfo,\n logEnabled: get(state.tenants.tenantDetails.tenantInfo, \"logEnabled\", false),\n monitoringEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"monitoringEnabled\",\n false\n ),\n encryptionEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"encryptionEnabled\",\n false\n ),\n minioTLS: get(state.tenants.tenantDetails.tenantInfo, \"minioTLS\", false),\n consoleTLS: get(state.tenants.tenantDetails.tenantInfo, \"consoleTLS\", false),\n consoleEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"consoleEnabled\",\n false\n ),\n adEnabled: get(state.tenants.tenantDetails.tenantInfo, \"idpAdEnabled\", false),\n oidcEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"idpOidcEnabled\",\n false\n ),\n});\n\nconst connector = connect(mapState, null);\n\nexport default withStyles(styles)(connector(TenantSummary));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 Grid from \"@material-ui/core/Grid\";\nimport { containerForHeader } from \"../../Common/FormComponents/common/styleLibrary\";\nimport { Button, Typography } from \"@material-ui/core\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport Moment from \"react-moment\";\nimport { Link } from \"react-router-dom\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { ITenant } from \"../ListTenants/types\";\nimport { LicenseInfo } from \"../../License/types\";\n\ninterface ISubnetLicenseTenant {\n classes: any;\n tenant: ITenant | null;\n loadingActivateProduct: any;\n loadingLicenseInfo: boolean;\n licenseInfo: LicenseInfo | undefined;\n activateProduct: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperContainer: {\n padding: \"15px 15px 15px 50px\",\n },\n licenseInfoValue: {\n textTransform: \"none\",\n fontSize: 14,\n fontWeight: \"bold\",\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 verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n noUnderLine: {\n textDecoration: \"none\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst SubnetLicenseTenant = ({\n classes,\n tenant,\n loadingActivateProduct,\n loadingLicenseInfo,\n licenseInfo,\n activateProduct,\n}: ISubnetLicenseTenant) => {\n return (\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 (tenant.subnet_license.storage_capacity * 1099511627776) // 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 activateProduct(tenant.namespace, tenant.name)}\n >\n Attach License\n \n )}\n \n )\n )}\n \n );\n};\n\nexport default withStyles(styles)(SubnetLicenseTenant);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { CircularProgress } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ITenant } from \"../ListTenants/types\";\nimport { LicenseInfo } from \"../../License/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { AppState } from \"../../../../store\";\nimport { setTenantDetailsLoad } from \"../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport SubnetLicenseTenant from \"./SubnetLicenseTenant\";\nimport api from \"../../../../common/api\";\n\ninterface ITenantLicense {\n classes: any;\n loadingTenant: boolean;\n tenant: ITenant | null;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n loaderAlign: {\n textAlign: \"center\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantLicense = ({\n classes,\n tenant,\n loadingTenant,\n setTenantDetailsLoad,\n}: ITenantLicense) => {\n const [licenseInfo, setLicenseInfo] = useState();\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingActivateProduct, setLoadingActivateProduct] =\n useState(false);\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 setTenantDetailsLoad(true);\n setLoadingLicenseInfo(true);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingActivateProduct(false);\n setErrorSnackMessage(err);\n });\n };\n\n useEffect(() => {\n if (loadingLicenseInfo) {\n api\n .invoke(\"GET\", `/api/v1/subscription/info`)\n .then((res: LicenseInfo) => {\n setLicenseInfo(res);\n setLoadingLicenseInfo(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingLicenseInfo(false);\n });\n }\n }, [loadingLicenseInfo]);\n\n return (\n \n
\n

License

\n {loadingTenant ? (\n
\n \n
\n ) : (\n \n {tenant && (\n \n \n \n \n \n )}\n \n )}\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n tenant: state.tenants.tenantDetails.tenantInfo,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n setTenantDetailsLoad,\n});\n\nexport default withStyles(styles)(connector(TenantLicense));\n","import React, { useState, useEffect } from \"react\";\nimport get from \"lodash/get\";\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 { ErrorResponseHandler, IAffinityModel } from \"../../../../common/types\";\nimport { getDefaultAffinity } from \"./utils\";\n\nimport SelectWrapper from \"../../Common/FormComponents/SelectWrapper/SelectWrapper\";\nimport { IQuotaElement, IQuotas, Opts } from \"../ListTenants/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 const [selectedStorageClass, setSelectedStorageClass] = useState(\"\");\n const [storageClasses, setStorageClasses] = useState([]);\n\n const instanceCapacity: number = volumeSize * 1073741824 * volumesPerServer;\n const totalCapacity: number = instanceCapacity * numberOfNodes;\n\n useEffect(() => {\n setSelectedStorageClass(\"\");\n\n setStorageClasses([]);\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant.namespace}/resourcequotas/${tenant.namespace}-storagequota`\n )\n .then((res: IQuotas) => {\n const elements: IQuotaElement[] = get(res, \"elements\", []);\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 setStorageClasses(newStorage);\n if (newStorage.length > 0) {\n setSelectedStorageClass(newStorage[0].value);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n console.error(err);\n });\n }, [tenant]);\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 defaultAffinity: IAffinityModel = getDefaultAffinity(\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_name: selectedStorageClass,\n labels: null,\n },\n affinity: defaultAffinity,\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: ErrorResponseHandler) => {\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 setSelectedStorageClass(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
\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 .\n\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n actionsTray,\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { Button, TextField } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { CreateIcon } from \"../../../../icons\";\nimport { IPool, ITenant } from \"../ListTenants/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport AddPoolModal from \"./AddPoolModal\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport { AppState } from \"../../../../store\";\nimport { setTenantDetailsLoad } from \"../actions\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\n\ninterface IPoolsSummary {\n classes: any;\n tenant: ITenant | null;\n loadingTenant: boolean;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n redState: {\n color: theme.palette.error.main,\n },\n yellowState: {\n color: theme.palette.warning.main,\n },\n greenState: {\n color: theme.palette.success.main,\n },\n greyState: {\n color: \"grey\",\n },\n ...actionsTray,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PoolsSummary = ({\n classes,\n tenant,\n loadingTenant,\n setTenantDetailsLoad,\n}: IPoolsSummary) => {\n const [pools, setPools] = useState([]);\n const [addPoolOpen, setAddPool] = useState(false);\n const [filter, setFilter] = useState(\"\");\n\n useEffect(() => {\n if (tenant) {\n const resPools = !tenant.pools ? [] : tenant.pools;\n setPools(resPools);\n }\n }, [tenant]);\n\n const onClosePoolAndRefresh = (reload: boolean) => {\n setAddPool(false);\n\n if (reload) {\n setTenantDetailsLoad(true);\n }\n };\n\n const filteredPools = pools.filter((pool) => {\n if (pool.name.toLowerCase().includes(filter.toLowerCase())) {\n return true;\n }\n\n return false;\n });\n\n return (\n \n {addPoolOpen && tenant !== null && (\n \n )}\n
\n

Pools

\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 setAddPool(true);\n }}\n >\n Expand Tenant\n \n \n \n
\n
\n\n \n \n \n
\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n selectedTenant: state.tenants.tenantDetails.currentTenant,\n tenant: state.tenants.tenantDetails.tenantInfo,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n setTenantDetailsLoad,\n});\n\nexport default withStyles(styles)(connector(PoolsSummary));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { IPodListElement } from \"../ListTenants/types\";\nimport InputBoxWrapper from \"../../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { connect } from \"react-redux\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\n\ninterface IDeletePod {\n deleteOpen: boolean;\n selectedPod: IPodListElement;\n closeDeleteModalAndRefresh: (refreshList: boolean) => any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeletePod = ({\n deleteOpen,\n selectedPod,\n closeDeleteModalAndRefresh,\n setErrorSnackMessage,\n}: IDeletePod) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n const [retypePod, setRetypePod] = useState(\"\");\n\n useEffect(() => {\n if (deleteLoading) {\n api\n .invoke(\n \"DELETE\",\n `/api/v1/namespaces/${selectedPod.namespace}/tenants/${selectedPod.tenant}/pods/${selectedPod.name}`\n )\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\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 (retypePod !== selectedPod.name) {\n setErrorSnackMessage({\n errorMessage: \"Tenant name is incorrect\",\n detailedError: \"\",\n });\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 Pod\n \n {deleteLoading && }\n \n To continue please type {selectedPod.name} in the box.\n \n ) => {\n setRetypePod(event.target.value);\n }}\n label=\"\"\n value={retypePod}\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(DeletePod);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { niceDays } from \"../../../../common/utils\";\nimport { IPodListElement } from \"../ListTenants/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport api from \"../../../../common/api\";\nimport TableWrapper from \"../../Common/TableWrapper/TableWrapper\";\nimport { AppState } from \"../../../../store\";\nimport { setTenantDetailsLoad } from \"../actions\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport DeletePod from \"./DeletePod\";\n\ninterface IPodsSummary {\n classes: any;\n match: any;\n history: any;\n loadingTenant: boolean;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PodsSummary = ({\n classes,\n match,\n history,\n loadingTenant,\n}: IPodsSummary) => {\n const [pods, setPods] = useState([]);\n const [loadingPods, setLoadingPods] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [selectedPod, setSelectedPod] = useState(null);\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const podViewAction = (pod: IPodListElement) => {\n history.push(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}/pods/${pod.name}`\n );\n return;\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n };\n\n const confirmDeletePod = (pod: IPodListElement) => {\n pod.tenant = tenantName;\n pod.namespace = tenantNamespace;\n setSelectedPod(pod);\n setDeleteOpen(true);\n };\n\n const podTableActions = [\n { type: \"view\", onClick: podViewAction },\n { type: \"delete\", onClick: confirmDeletePod },\n ];\n\n useEffect(() => {\n if (loadingTenant) {\n setLoadingPods(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loadingPods) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}/pods`\n )\n .then((result: IPodListElement[]) => {\n for (let i = 0; i < result.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n result[i].time = niceDays(\n (currentTime - parseInt(result[i].timeCreated)).toString()\n );\n }\n setPods(result);\n setLoadingPods(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage({\n errorMessage: \"Error loading pods\",\n detailedError: err.detailedError,\n });\n });\n }\n }, [loadingPods, tenantName, tenantNamespace]);\n\n return (\n \n {deleteOpen && (\n \n )}\n
\n

Pods

\n {\n return input != null ? input : 0;\n },\n },\n { label: \"Node\", elementKey: \"node\" },\n ]}\n isLoading={loadingPods}\n records={pods}\n itemActions={podTableActions}\n entityName=\"Servers\"\n idField=\"name\"\n />\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PodsSummary));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 get from \"lodash/get\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { ITenant } from \"../ListTenants/types\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { AppState } from \"../../../../store\";\nimport { LinearProgress } from \"@material-ui/core\";\n\ninterface ITenantMetrics {\n classes: any;\n match: any;\n tenant: ITenant | null;\n\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n flexBox: {\n display: \"flex\",\n flexFlow: \"column\",\n },\n iframeStyle: {\n border: \"0px\",\n flex: \"1 1 auto\",\n minHeight: \"800px\",\n width: \"100%\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantMetrics = ({ classes, match }: ITenantMetrics) => {\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n\n const [loading, setLoading] = useState(true);\n\n return (\n \n

Metrics

\n {loading && (\n
\n \n
\n )}\n {\n setLoading(false);\n }}\n />\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n selectedTenant: state.tenants.tenantDetails.currentTenant,\n tenant: state.tenants.tenantDetails.tenantInfo,\n logEnabled: get(state.tenants.tenantDetails.tenantInfo, \"logEnabled\", false),\n monitoringEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"monitoringEnabled\",\n false\n ),\n encryptionEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"encryptionEnabled\",\n false\n ),\n adEnabled: get(state.tenants.tenantDetails.tenantInfo, \"idpAdEnabled\", false),\n oidcEnabled: get(\n state.tenants.tenantDetails.tenantInfo,\n \"idpOidcEnabled\",\n false\n ),\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(TenantMetrics));\n","import React, { useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from \"@material-ui/core\";\n\ninterface IConfirmationDialog {\n classes: any;\n open: boolean;\n cancelLabel: string;\n okLabel: string;\n onClose: any;\n cancelOnClick: any;\n okOnClick: any;\n title: string;\n description: string;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst ConfirmationDialog = ({\n classes,\n open,\n cancelLabel,\n okLabel,\n onClose,\n cancelOnClick,\n okOnClick,\n title,\n description,\n}: IConfirmationDialog) => {\n const [isSending, setIsSending] = useState(false);\n const onClick = () => {\n setIsSending(true);\n if (okOnClick !== null) {\n okOnClick();\n }\n setIsSending(false);\n };\n if (!open) return null;\n return (\n \n {title}\n \n {isSending && }\n \n {description}\n \n \n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(ConfirmationDialog);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { ITenant } from \"../ListTenants/types\";\nimport { ICertificateInfo, ITenantSecurityResponse } from \"../types\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Chip from \"@material-ui/core/Chip\";\nimport React, { Fragment, useCallback, useEffect, useState } from \"react\";\nimport Moment from \"react-moment\";\nimport FormSwitchWrapper from \"../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\nimport { Button, CircularProgress, Typography } from \"@material-ui/core\";\nimport { KeyPair } from \"../ListTenants/utils\";\nimport FileSelector from \"../../Common/FormComponents/FileSelector/FileSelector\";\nimport api from \"../../../../common/api\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { connect } from \"react-redux\";\nimport { AppState } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport { setTenantDetailsLoad } from \"../actions\";\nimport ConfirmationDialog from \"./ConfirmationDialog\";\n\ninterface ITenantSecurity {\n classes: any;\n loadingTenant: boolean;\n tenant: ITenant | null;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n loaderAlign: {\n textAlign: \"center\",\n },\n title: {\n marginTop: 35,\n },\n bold: { fontWeight: \"bold\" },\n italic: { fontStyle: \"italic\" },\n underline: { textDecorationLine: \"underline\" },\n paperContainer: {\n padding: \"15px 15px 15px 50px\",\n },\n verifiedIcon: {\n width: 96,\n position: \"absolute\",\n right: 0,\n bottom: 29,\n },\n noUnderLine: {\n textDecoration: \"none\",\n },\n certificateInfo: {\n height: \"auto\",\n margin: 5,\n },\n certificateInfoName: {\n fontWeight: \"bold\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantSecurity = ({\n classes,\n tenant,\n loadingTenant,\n setErrorSnackMessage,\n setTenantDetailsLoad,\n}: ITenantSecurity) => {\n const [isSending, setIsSending] = useState(false);\n const [dialogOpen, setDialogOpen] = useState(false);\n const [enableAutoCert, setEnableAutoCert] = useState(false);\n const [enableCustomCerts, setEnableCustomCerts] = useState(false);\n const [certificatesToBeRemoved, setCertificatesToBeRemoved] = useState<\n string[]\n >([]);\n // MinIO certificates\n const [minioCertificates, setMinioCertificates] = useState([]);\n const [minioCaCertificates, setMinioCaCertificates] = useState([]);\n const [minioTLSCertificateSecrets, setMinioTLSCertificateSecrets] = useState<\n ICertificateInfo[]\n >([]);\n const [minioTLSCaCertificateSecrets, setMinioTLSCaCertificateSecrets] =\n useState([]);\n\n const getTenantSecurityInfo = useCallback(() => {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`\n )\n .then((res: ITenantSecurityResponse) => {\n setEnableAutoCert(res.autoCert);\n if (res.customCertificates.minio || res.customCertificates.minioCAs) {\n setEnableCustomCerts(true);\n }\n setMinioTLSCertificateSecrets(res.customCertificates.minio || []);\n setMinioTLSCaCertificateSecrets(res.customCertificates.minioCAs || []);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n });\n }, [tenant, setErrorSnackMessage]);\n\n useEffect(() => {\n if (tenant) {\n getTenantSecurityInfo();\n }\n }, [tenant, getTenantSecurityInfo]);\n\n const updateTenantSecurity = () => {\n setIsSending(true);\n let payload = {\n autoCert: enableAutoCert,\n customCertificates: {},\n };\n if (enableCustomCerts) {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: certificatesToBeRemoved,\n minio: minioCertificates\n .map((keyPair: KeyPair) => ({\n crt: keyPair.encoded_cert,\n key: keyPair.encoded_key,\n }))\n .filter((cert: any) => cert.crt && cert.key),\n minioCAs: minioCaCertificates\n .map((keyPair: KeyPair) => keyPair.encoded_cert)\n .filter((cert: any) => cert),\n };\n } else {\n payload[\"customCertificates\"] = {\n secretsToBeDeleted: [\n ...minioTLSCertificateSecrets.map((cert) => cert.name),\n ...minioTLSCaCertificateSecrets.map((cert) => cert.name),\n ],\n minio: [],\n minioCAs: [],\n };\n }\n api\n .invoke(\n \"POST\",\n `/api/v1/namespaces/${tenant?.namespace}/tenants/${tenant?.name}/security`,\n payload\n )\n .then(() => {\n setIsSending(false);\n // Close confirmation modal\n setDialogOpen(false);\n // Refresh Information and reset forms\n setMinioCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n setMinioCaCertificates([\n {\n cert: \"\",\n encoded_cert: \"\",\n encoded_key: \"\",\n id: Date.now().toString(),\n key: \"\",\n },\n ]);\n getTenantSecurityInfo();\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setIsSending(false);\n });\n };\n\n const removeCertificate = (certificateInfo: ICertificateInfo) => {\n // TLS certificate secrets can be referenced MinIO, Console or KES, we need to remove the secret from all list and update\n // the arrays\n // Add certificate to the global list of secrets to be removed\n setCertificatesToBeRemoved([\n ...certificatesToBeRemoved,\n certificateInfo.name,\n ]);\n\n // Update MinIO TLS certificate secrets\n const updatedMinIOTLSCertificateSecrets = minioTLSCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name\n );\n const updatedMinIOTLSCaCertificateSecrets =\n minioTLSCaCertificateSecrets.filter(\n (certificateSecret) => certificateSecret.name !== certificateInfo.name\n );\n setMinioTLSCertificateSecrets(updatedMinIOTLSCertificateSecrets);\n setMinioTLSCaCertificateSecrets(updatedMinIOTLSCaCertificateSecrets);\n };\n\n const addFileToKeyPair = (\n type: string,\n id: string,\n key: string,\n fileName: string,\n value: string\n ) => {\n let certificates = minioCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioCertificates;\n updateCertificates = setMinioCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n const NCertList = certificates.map((item: KeyPair) => {\n if (item.id === id) {\n return {\n ...item,\n [key]: fileName,\n [`encoded_${key}`]: value,\n };\n }\n return item;\n });\n updateCertificates(NCertList);\n };\n\n const deleteKeyPair = (type: string, id: string) => {\n let certificates = minioCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioCertificates;\n updateCertificates = setMinioCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n\n if (certificates.length > 1) {\n const cleanCertsList = certificates.filter(\n (item: KeyPair) => item.id !== id\n );\n updateCertificates(cleanCertsList);\n }\n };\n\n const addKeyPair = (type: string) => {\n let certificates = minioCertificates;\n let updateCertificates: any = () => {};\n\n switch (type) {\n case \"minio\": {\n certificates = minioCertificates;\n updateCertificates = setMinioCertificates;\n break;\n }\n case \"minioCAs\": {\n certificates = minioCaCertificates;\n updateCertificates = setMinioCaCertificates;\n break;\n }\n default:\n }\n const updatedCertificates = [\n ...certificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n updateCertificates(updatedCertificates);\n };\n return (\n \n setDialogOpen(false)}\n cancelOnClick={() => setDialogOpen(false)}\n okOnClick={updateTenantSecurity}\n cancelLabel=\"Cancel\"\n okLabel={\"Restart\"}\n />\n
\n {loadingTenant ? (\n \n
\n \n
\n
\n ) : (\n \n

Security

\n \n \n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableAutoCert(checked);\n }}\n label={\"Manage Inter-Node Certificates Automatically\"}\n description={\n \"The internode certificates will be generated and managed by MinIO Operator\"\n }\n />\n {\n const targetD = e.target;\n const checked = targetD.checked;\n setEnableCustomCerts(checked);\n }}\n label={\"Custom Certificates\"}\n />\n \n \n setDialogOpen(true)}\n >\n Save\n \n \n \n {enableCustomCerts && (\n \n
\n \n \n \n \n MinIO Certificates\n \n \n \n {minioTLSCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n \n \n {certificateInfo.name}\n \n \n {certificateInfo.domains &&\n certificateInfo.domains.map((dom) => {\n return
{dom}
;\n })}\n \n \n Expiry: \n \n \n \n {certificateInfo.expiry}\n \n \n
\n }\n onDelete={() => removeCertificate(certificateInfo)}\n />\n )\n )}\n \n \n
\n
\n \n {minioCertificates.map((keyPair) => (\n \n \n \n addFileToKeyPair(\n \"minio\",\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 addFileToKeyPair(\n \"minio\",\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 deleteKeyPair(\"minio\", keyPair.id)}\n color=\"secondary\"\n >\n Remove\n \n \n \n ))}\n \n \n \n \n \n
\n
\n\n \n \n MinIO CA Certificates\n \n \n \n {minioTLSCaCertificateSecrets.map(\n (certificateInfo: ICertificateInfo) => (\n \n \n {certificateInfo.name}\n \n \n {certificateInfo.domains &&\n certificateInfo.domains.map((dom) => {\n return
{dom}
;\n })}\n \n \n Expiry: \n \n \n \n {certificateInfo.expiry}\n \n \n
\n }\n onDelete={() => removeCertificate(certificateInfo)}\n />\n )\n )}\n \n \n
\n
\n \n {minioCaCertificates.map((keyPair: KeyPair) => (\n \n \n \n addFileToKeyPair(\n \"minioCAs\",\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(\"minioCAs\", keyPair.id)\n }\n color=\"secondary\"\n >\n Remove\n \n \n \n ))}\n \n \n addKeyPair(\"minioCAs\")}\n color=\"primary\"\n >\n Add CA Certificate\n \n \n \n setDialogOpen(true)}\n >\n Save\n \n \n \n \n
\n )}\n \n )}\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n selectedTenant: state.tenants.tenantDetails.currentTenant,\n tenant: state.tenants.tenantDetails.tenantInfo,\n});\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n setTenantDetailsLoad,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(TenantSecurity));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { TextField } from \"@material-ui/core\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Paper from \"@material-ui/core/Paper\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport api from \"../../../../../common/api\";\nimport {\n actionsTray,\n buttonsStyles,\n containerForHeader,\n searchField,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport { AppState } from \"../../../../../store\";\nimport SearchIcon from \"../../../../../icons/SearchIcon\";\n\ninterface IPodLogsProps {\n classes: any;\n tenant: string;\n namespace: string;\n podName: string;\n propLoading: boolean;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n loadingTenant: boolean;\n}\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 ...buttonsStyles,\n ...searchField,\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"15px 0 0\",\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 ...containerForHeader(theme.spacing(4)),\n });\n\nconst PodLogs = ({\n classes,\n tenant,\n namespace,\n podName,\n propLoading,\n setErrorSnackMessage,\n loadingTenant,\n}: IPodLogsProps) => {\n const [highlight, setHighlight] = useState(\"\");\n const [logLines, setLogLines] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n const renderLog = (logMessage: string, index: number) => {\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 {\n // for all remaining set default class\n return (\n \n {substr}\n
\n );\n }\n };\n\n const renderLines = logLines.map((m, i) => {\n return renderLog(m, i);\n });\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/tenants/${tenant}/pods/${podName}`\n )\n .then((res: string) => {\n setLogLines(res.split(\"\\n\"));\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setLoading(false);\n });\n }\n }, [loading, podName, namespace, tenant, setErrorSnackMessage]);\n\n return (\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 \n
{renderLines}
\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PodLogs));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 actionsTray,\n buttonsStyles,\n hrClass,\n searchField,\n} from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { IEvent } from \"../../ListTenants/types\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport { niceDays } from \"../../../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../../../common/types\";\nimport TableWrapper from \"../../../Common/TableWrapper/TableWrapper\";\nimport api from \"../../../../../common/api\";\nimport { AppState } from \"../../../../../store\";\n\ninterface IPodEventsProps {\n classes: any;\n tenant: string;\n namespace: string;\n podName: string;\n propLoading: boolean;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n loadingTenant: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...actionsTray,\n ...buttonsStyles,\n ...searchField,\n ...hrClass,\n actionsTray: {\n ...actionsTray.actionsTray,\n padding: \"15px 0 0\",\n },\n });\n\nconst PodEvents = ({\n classes,\n tenant,\n namespace,\n podName,\n propLoading,\n setErrorSnackMessage,\n loadingTenant,\n}: IPodEventsProps) => {\n const [event, setEvent] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (propLoading) {\n setLoading(true);\n }\n }, [propLoading]);\n\n useEffect(() => {\n if (loadingTenant) {\n setLoading(true);\n }\n }, [loadingTenant]);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${namespace}/tenants/${tenant}/pods/${podName}/events`\n )\n .then((res: IEvent[]) => {\n for (let i = 0; i < res.length; i++) {\n let currentTime = (Date.now() / 1000) | 0;\n\n res[i].seen = niceDays((currentTime - res[i].last_seen).toString());\n }\n setEvent(res);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setLoading(false);\n });\n }\n }, [loading, podName, namespace, tenant, setErrorSnackMessage]);\n\n return (\n \n \n \n \n \n );\n};\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n});\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n});\n\nexport default withStyles(styles)(connector(PodEvents));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useEffect, useState } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Tabs from \"@material-ui/core/Tabs\";\nimport Tab from \"@material-ui/core/Tab\";\nimport { Link } from \"react-router-dom\";\nimport { setErrorSnackMessage } from \"../../../../../actions\";\nimport PodLogs from \"./PodLogs\";\nimport PodEvents from \"./PodEvents\";\n\ninterface IPodDetailsProps {\n classes: any;\n match: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n breadcrumLink: {\n textDecoration: \"none\",\n color: \"black\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst PodDetails = ({ classes, match }: IPodDetailsProps) => {\n const [curTab, setCurTab] = useState(0);\n const [loading, setLoading] = useState(true);\n const tenantNamespace = match.params[\"tenantNamespace\"];\n const tenantName = match.params[\"tenantName\"];\n const podName = match.params[\"podName\"];\n\n function a11yProps(index: any) {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`,\n };\n }\n\n useEffect(() => {\n if (loading) {\n setLoading(false);\n }\n }, [loading]);\n\n return (\n \n \n
\n

\n \n Pods\n {\" \"}\n > {podName}\n

\n \n \n \n , newValue: number) => {\n setCurTab(newValue);\n }}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n aria-label=\"cluster-tabs\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n \n \n \n \n {curTab === 0 && (\n \n )}\n {curTab === 1 && (\n \n )}\n \n \n );\n};\n\nexport default withStyles(styles)(PodDetails);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { Link, Redirect, Route, Router, Switch } from \"react-router-dom\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { IconButton, Tooltip } from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { setErrorSnackMessage, setSnackBarMessage } from \"../../../../actions\";\nimport {\n setTenantDetailsLoad,\n setTenantInfo,\n setTenantName,\n setTenantTab,\n} from \"../actions\";\nimport { ITenant } from \"../ListTenants/types\";\nimport {\n containerForHeader,\n tenantDetailsStyles,\n} from \"../../Common/FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\nimport api from \"../../../../common/api\";\nimport PageHeader from \"../../Common/PageHeader/PageHeader\";\nimport TenantYAML from \"./TenantYAML\";\nimport TenantSummary from \"./TenantSummary\";\nimport TenantLicense from \"./TenantLicense\";\nimport PoolsSummary from \"./PoolsSummary\";\nimport PodsSummary from \"./PodsSummary\";\nimport TenantMetrics from \"./TenantMetrics\";\nimport TenantSecurity from \"./TenantSecurity\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { CircleIcon, DeleteIcon } from \"../../../../icons\";\nimport DeleteTenant from \"../ListTenants/DeleteTenant\";\nimport PodDetails from \"./pods/PodDetails\";\nimport { niceBytes } from \"../../../../common/utils\";\nimport ScreenTitle from \"../../Common/ScreenTitle/ScreenTitle\";\nimport EditIcon from \"../../../../icons/EditIcon\";\nimport RefreshIcon from \"../../../../icons/RefreshIcon\";\nimport TenantsIcon from \"../../../../icons/TenantsIcon\";\n\ninterface ITenantDetailsProps {\n classes: any;\n match: any;\n history: any;\n loadingTenant: boolean;\n currentTab: string;\n selectedTenant: string;\n tenantInfo: ITenant | null;\n selectedNamespace: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n setSnackBarMessage: typeof setSnackBarMessage;\n setTenantDetailsLoad: typeof setTenantDetailsLoad;\n setTenantName: typeof setTenantName;\n setTenantInfo: typeof setTenantInfo;\n setTenantTab: typeof setTenantTab;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...tenantDetailsStyles,\n redState: {\n color: theme.palette.error.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n },\n },\n yellowState: {\n color: theme.palette.warning.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n },\n },\n greenState: {\n color: theme.palette.success.main,\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n },\n },\n greyState: {\n color: \"grey\",\n \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n },\n },\n healthStatusIcon: {\n position: \"relative\",\n fontSize: 10,\n left: 26,\n height: 10,\n bottom: 16,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst TenantDetails = ({\n classes,\n match,\n history,\n loadingTenant,\n currentTab,\n selectedTenant,\n tenantInfo,\n selectedNamespace,\n setErrorSnackMessage,\n setSnackBarMessage,\n setTenantDetailsLoad,\n setTenantName,\n setTenantInfo,\n setTenantTab,\n}: ITenantDetailsProps) => {\n const [yamlScreenOpen, setYamlScreenOpen] = useState(false);\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n useEffect(() => {\n if (!loadingTenant) {\n if (\n tenantName !== selectedTenant ||\n tenantNamespace !== selectedNamespace\n ) {\n setTenantName(tenantName, tenantNamespace);\n setTenantDetailsLoad(true);\n }\n }\n }, [\n loadingTenant,\n selectedTenant,\n selectedNamespace,\n setTenantDetailsLoad,\n setTenantInfo,\n setTenantName,\n tenantName,\n tenantNamespace,\n ]);\n\n useEffect(() => {\n if (loadingTenant) {\n api\n .invoke(\n \"GET\",\n `/api/v1/namespaces/${tenantNamespace}/tenants/${tenantName}`\n )\n .then((res: ITenant) => {\n setTenantInfo(res);\n setTenantDetailsLoad(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setTenantDetailsLoad(false);\n });\n }\n }, [\n loadingTenant,\n tenantNamespace,\n tenantName,\n setTenantInfo,\n setTenantDetailsLoad,\n setErrorSnackMessage,\n ]);\n\n useEffect(() => {\n const path = get(match, \"path\", \"/\");\n const splitSections = path.split(\"/\");\n const section = splitSections[splitSections.length - 1];\n\n switch (section) {\n case \"pools\":\n case \"pods\":\n case \":podName\":\n case \"metrics\":\n case \"license\":\n case \"security\":\n setTenantTab(section);\n break;\n default:\n setTenantTab(\"summary\");\n }\n }, [match, setTenantTab]);\n\n const editYaml = () => {\n setYamlScreenOpen(true);\n };\n\n const closeYAMLModalAndRefresh = () => {\n setYamlScreenOpen(false);\n setTenantDetailsLoad(true);\n };\n\n const changeRoute = (newValue: string) => {\n setTenantTab(newValue);\n history.push(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}/${newValue}`\n );\n };\n\n const confirmDeleteTenant = () => {\n setDeleteOpen(true);\n };\n\n const closeDeleteModalAndRefresh = (reloadData: boolean) => {\n setDeleteOpen(false);\n\n if (reloadData) {\n setSnackBarMessage(\"Tenant Deleted\");\n history.push(`/tenants`);\n }\n };\n\n const healthStatusToClass = (health_status: string) => {\n return health_status === \"red\"\n ? classes.redState\n : health_status === \"yellow\"\n ? classes.yellowState\n : health_status === \"green\"\n ? classes.greenState\n : classes.greyState;\n };\n\n return (\n \n {yamlScreenOpen && (\n \n )}\n {deleteOpen && tenantInfo !== null && (\n \n )}\n \n \n Tenants\n \n \n }\n />\n \n \n \n \n
\n {tenantInfo && tenantInfo.status && (\n \n \n \n )}\n
\n \n }\n title={match.params[\"tenantName\"]}\n subTitle={\n \n Namespace: {tenantNamespace} / Capacity:{\" \"}\n {niceBytes((tenantInfo?.total_size || 0).toString(10))}\n \n }\n actions={\n \n \n {\n confirmDeleteTenant();\n }}\n >\n \n \n \n \n {\n editYaml();\n }}\n >\n \n \n \n \n {\n setTenantDetailsLoad(true);\n }}\n >\n \n \n \n \n }\n />\n
\n \n \n {\n changeRoute(\"summary\");\n }}\n >\n \n \n {\n changeRoute(\"metrics\");\n }}\n >\n \n \n {\n changeRoute(\"security\");\n }}\n >\n \n \n {\n changeRoute(\"pools\");\n }}\n >\n \n \n {\n changeRoute(\"pods\");\n }}\n >\n \n \n {\n changeRoute(\"license\");\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (\n \n )}\n />\n \n \n \n
\n \n );\n};\n\nconst mapState = (state: AppState) => ({\n loadingTenant: state.tenants.tenantDetails.loadingTenant,\n currentTab: state.tenants.tenantDetails.currentTab,\n selectedTenant: state.tenants.tenantDetails.currentTenant,\n selectedNamespace: state.tenants.tenantDetails.currentNamespace,\n tenantInfo: state.tenants.tenantDetails.tenantInfo,\n});\n\nconst connector = connect(mapState, {\n setErrorSnackMessage,\n setSnackBarMessage,\n setTenantDetailsLoad,\n setTenantName,\n setTenantInfo,\n setTenantTab,\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\";\nexport const REWIND_SET_ENABLE = \"REWIND/SET_ENABLE\";\nexport const REWIND_RESET_REWIND = \"REWIND/RESET_REWIND\";\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\ninterface RewindSetEnabled {\n type: typeof REWIND_SET_ENABLE;\n bucket: string;\n state: boolean;\n dateRewind: any;\n}\n\ninterface RewindReset {\n type: typeof REWIND_RESET_REWIND;\n}\n\nexport type ObjectBrowserActionTypes =\n | AddRouteAction\n | ResetRoutesList\n | RemoveRouteLevel\n | SetAllRoutes\n | CreateFolder\n | SetLastAsFile\n | SetFileDownload\n | FileDownloaded\n | RewindSetEnabled\n | RewindReset;\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\nexport const setRewindEnable = (\n state: boolean,\n bucket: string,\n dateRewind: any\n) => {\n return {\n type: REWIND_SET_ENABLE,\n state,\n bucket,\n dateRewind,\n };\n};\n\nexport const resetRewind = () => {\n return {\n type: REWIND_RESET_REWIND,\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 Moment from \"react-moment\";\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 rewindEnabled: boolean;\n rewindDate: any;\n removeRouteLevel: (path: string) => any;\n title?: boolean;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n ...objectBrowserCommon,\n });\n\nconst BrowserBreadcrumbs = ({\n classes,\n objectsList,\n rewindEnabled,\n rewindDate,\n removeRouteLevel,\n title = true,\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 return (\n \n {title && (\n \n
\n {objectsList && objectsList.length > 0\n ? objectsList.slice(-1)[0].label\n : \"\"}\n {rewindEnabled && objectsList.length > 1 && (\n \n  (Rewind:{\" \"}\n )\n \n )}\n
\n
\n )}\n\n \n {listBreadcrumbs}\n \n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n objectsList: get(objectBrowser, \"routesList\", []),\n rewindEnabled: get(objectBrowser, \"rewind.rewindEnabled\", false),\n rewindDate: get(objectBrowser, \"rewind.dateToRewind\", null),\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 { IconButton, Tooltip } from \"@material-ui/core\";\nimport { BucketsIcon, 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 { ErrorResponseHandler } from \"../../../common/types\";\nimport BrowserBreadcrumbs from \"./BrowserBreadcrumbs\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport AddBucket from \"../Buckets/ListBuckets/AddBucket\";\nimport api from \"../../../common/api\";\nimport ScreenTitle from \"../Common/ScreenTitle/ScreenTitle\";\nimport RefreshIcon from \"../../../icons/RefreshIcon\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\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 \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\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 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: ErrorResponseHandler) => {\n setLoadingPerms(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loadingPerms]);\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: ErrorResponseHandler) => {\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 title={\"All Buckets\"}\n subTitle={\n \n \n \n }\n actions={\n \n {canCreateBucket && (\n \n \n {\n setAddScreenOpen(true);\n }}\n >\n \n \n \n \n )}\n \n {\n setLoading(true);\n }}\n >\n \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 \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 { ErrorResponseHandler } from \"../../../../../../common/types\";\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 // Escape object name\n selectedObject = encodeURIComponent(selectedObject);\n\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: ErrorResponseHandler) => {\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 Go\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 { 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 encodedPath = encodeURIComponent(objectPath);\n let path = `/api/v1/buckets/${bucketName}/objects/download?prefix=${encodedPath}`;\n if (!isNullOrUndefined(versionID) && versionID !== \"null\") {\n path = path.concat(`&version_id=${versionID}`);\n }\n window.location.href = path;\n};\n\n// Review file extension by name & returns the type of preview browser that can be used\nexport const extensionPreview = (\n fileName: string\n): \"image\" | \"text\" | \"audio\" | \"video\" | \"none\" => {\n const imageExtensions = [\"jpg\", \"jpeg\", \"gif\", \"png\"];\n const textExtensions = [\"pdf\", \"txt\"];\n const audioExtensions = [\"wav\", \"mp3\", \"aac\"];\n const videoExtensions = [\"mp4\", \".avi\", \".mpg\"];\n\n const fileExtension = fileName.split(\".\").pop();\n\n if (!fileExtension) {\n return \"none\";\n }\n\n if (imageExtensions.includes(fileExtension)) {\n return \"image\";\n }\n\n if (textExtensions.includes(fileExtension)) {\n return \"text\";\n }\n\n if (audioExtensions.includes(fileExtension)) {\n return \"audio\";\n }\n\n if (videoExtensions.includes(fileExtension)) {\n return \"video\";\n }\n\n return \"none\";\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 { 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 { ObjectBrowserReducer } from \"../../../../ObjectBrowser/reducers\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport {\n resetRewind,\n setRewindEnable,\n} from \"../../../../ObjectBrowser/actions\";\nimport ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport DateTimePickerWrapper from \"../../../../Common/FormComponents/DateTimePickerWrapper/DateTimePickerWrapper\";\nimport FormSwitchWrapper from \"../../../../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IRewindEnable {\n closeModalAndRefresh: (reload: boolean) => void;\n classes: any;\n open: boolean;\n bucketName: string;\n bucketToRewind: string;\n rewindEnabled: boolean;\n dateRewind: any;\n resetRewind: typeof resetRewind;\n setRewindEnable: typeof setRewindEnable;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n buttonContainer: {\n textAlign: \"right\",\n },\n ...modalBasic,\n });\n\nconst RewindEnable = ({\n closeModalAndRefresh,\n classes,\n open,\n bucketName,\n bucketToRewind,\n rewindEnabled,\n dateRewind,\n resetRewind,\n setRewindEnable,\n}: IRewindEnable) => {\n const [rewindEnabling, setRewindEnabling] = useState(false);\n const [rewindEnableButton, setRewindEnableButton] = useState(true);\n const [dateSelected, setDateSelected] = useState(null);\n\n useEffect(() => {\n if (rewindEnabled) {\n setRewindEnableButton(true);\n setDateSelected(new Date(dateRewind));\n }\n }, [rewindEnabled, dateRewind]);\n\n const rewindApply = () => {\n if (!rewindEnableButton && rewindEnabled) {\n resetRewind();\n } else {\n setRewindEnabling(true);\n setRewindEnable(true, bucketName, dateSelected);\n }\n closeModalAndRefresh(true);\n };\n\n return (\n {\n closeModalAndRefresh(false);\n }}\n title={`Rewind - ${bucketName}`}\n >\n \n \n \n \n {rewindEnabled && (\n \n ) => {\n setRewindEnableButton(false);\n }}\n label={\"Current Status\"}\n indicatorLabels={[\"Enabled\", \"Disabled\"]}\n />\n \n )}\n \n \n {!rewindEnableButton && rewindEnabled\n ? \"Show Current Data\"\n : \"Show Rewind Data\"}\n \n \n {rewindEnabling && (\n \n \n \n )}\n \n \n );\n};\n\nconst mapStateToProps = ({ objectBrowser }: ObjectBrowserReducer) => ({\n bucketToRewind: objectBrowser.rewind.bucketToRewind,\n rewindEnabled: objectBrowser.rewind.rewindEnabled,\n dateRewind: objectBrowser.rewind.dateToRewind,\n});\n\nconst mapDispatchToProps = {\n resetRewind,\n setRewindEnable,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(RewindEnable));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport api from \"../../../../../../common/api\";\n\ninterface IDeleteObjectProps {\n closeDeleteModalAndRefresh: (refresh: boolean) => void;\n deleteOpen: boolean;\n selectedObjects: string[];\n selectedBucket: string;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst DeleteObject = ({\n closeDeleteModalAndRefresh,\n deleteOpen,\n selectedBucket,\n selectedObjects,\n setErrorSnackMessage,\n}: IDeleteObjectProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n let toSend = [];\n for (let i = 0; i < selectedObjects.length; i++) {\n if (selectedObjects[i].endsWith(\"/\")) {\n toSend.push({\n path: selectedObjects[i],\n versionID: \"\",\n recursive: true,\n });\n } else {\n toSend.push({\n path: selectedObjects[i],\n versionID: \"\",\n recursive: false,\n });\n }\n }\n setDeleteLoading(true);\n api\n .invoke(\n \"POST\",\n `/api/v1/buckets/${selectedBucket}/delete-objects`,\n toSend\n )\n .then(() => {\n setDeleteLoading(false);\n closeDeleteModalAndRefresh(true);\n })\n .catch((err: ErrorResponseHandler) => {\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 the selected objects?{\" \"}\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, { Fragment, useState } from \"react\";\nimport { createStyles, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, LinearProgress } from \"@material-ui/core\";\nimport { BucketObject } from \"../ListObjects/types\";\nimport { extensionPreview } from \"../utils\";\n\nconst styles = () =>\n createStyles({\n iframeContainer: {\n border: \"0px\",\n flex: \"1 1 auto\",\n width: \"100%\",\n height: 250,\n backgroundColor: \"transparent\",\n borderRadius: 5,\n\n \"&.image\": {\n height: 500,\n },\n \"&.text\": {\n height: 500,\n },\n \"&.audio\": {\n height: 150,\n },\n \"&.video\": {\n height: 350,\n },\n \"&.fullHeight\": {\n height: \"calc(100vh - 185px)\",\n },\n },\n iframeBase: {\n backgroundColor: \"#fff\",\n },\n iframeHidden: {\n display: \"none\",\n },\n });\n\ninterface IPreviewFileProps {\n bucketName: string;\n object: BucketObject | null;\n isFullscreen?: boolean;\n classes: any;\n}\n\nconst PreviewFile = ({\n bucketName,\n object,\n isFullscreen = false,\n classes,\n}: IPreviewFileProps) => {\n const [loading, setLoading] = useState(true);\n\n let path = \"\";\n\n if (object) {\n const encodedPath = encodeURIComponent(object.name);\n path = `${window.location.origin}/api/v1/buckets/${bucketName}/objects/download?preview=true&prefix=${encodedPath}`;\n if (object.version_id) {\n path = path.concat(`&version_id=${object.version_id}`);\n }\n }\n\n const objectType = extensionPreview(object?.name || \"\");\n\n const iframeLoaded = () => {\n setLoading(false);\n };\n\n return (\n \n {loading && (\n \n \n \n )}\n
\n \n File couldn't be loaded. Please try Download instead\n \n
\n
\n );\n};\n\nexport default withStyles(styles)(PreviewFile);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 ModalWrapper from \"../../../../Common/ModalWrapper/ModalWrapper\";\nimport PreviewFileContent from \"./PreviewFileContent\";\nimport { BucketObject } from \"../ListObjects/types\";\n\ninterface IPreviewFileProps {\n open: boolean;\n bucketName: string;\n object: BucketObject | null;\n onClosePreview: () => void;\n}\n\nconst PreviewFileModal = ({\n open,\n bucketName,\n object,\n onClosePreview,\n}: IPreviewFileProps) => {\n return (\n \n \n \n \n \n );\n};\n\nexport default PreviewFileModal;\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useEffect, useRef, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { withRouter } from \"react-router-dom\";\nimport Grid from \"@material-ui/core/Grid\";\nimport get from \"lodash/get\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport {\n BucketObject,\n BucketObjectsList,\n RewindObject,\n RewindObjectList,\n} 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 {\n Badge,\n Button,\n IconButton,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport * as reactMoment from \"react-moment\";\nimport BrowserBreadcrumbs from \"../../../../ObjectBrowser/BrowserBreadcrumbs\";\nimport {\n addRoute,\n fileDownloadStarted,\n fileIsBeingPrepared,\n resetRewind,\n setAllRoutes,\n setLastAsFile,\n} from \"../../../../ObjectBrowser/actions\";\nimport {\n ObjectBrowserReducer,\n Route,\n} from \"../../../../ObjectBrowser/reducers\";\nimport CreateFolderModal from \"./CreateFolderModal\";\nimport { download, extensionPreview } from \"../utils\";\nimport {\n setErrorSnackMessage,\n setLoadingProgress,\n setSnackBarMessage,\n} from \"../../../../../../actions\";\nimport { BucketVersioning } from \"../../../types\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport RewindEnable from \"./RewindEnable\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport DeleteMultipleObjects from \"./DeleteMultipleObjects\";\nimport PreviewFileModal from \"../Preview/PreviewFileModal\";\nimport { baseUrl } from \"../../../../../../history\";\nimport ScreenTitle from \"../../../../Common/ScreenTitle/ScreenTitle\";\nimport AddFolderIcon from \"../../../../../../icons/AddFolderIcon\";\nimport HistoryIcon from \"../../../../../../icons/HistoryIcon\";\nimport ObjectBrowserIcon from \"../../../../../../icons/ObjectBrowserIcon\";\nimport ObjectBrowserFolderIcon from \"../../../../../../icons/ObjectBrowserFolderIcon\";\nimport FolderIcon from \"../../../../../../icons/FolderIcon\";\nimport RefreshIcon from \"../../../../../../icons/RefreshIcon\";\nimport SearchIcon from \"../../../../../../icons/SearchIcon\";\nimport UploadIcon from \"../../../../../../icons/UploadIcon\";\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 \"& .MuiSvgIcon-root\": {\n width: 16,\n height: 16,\n marginRight: 4,\n },\n },\n fileNameText: {\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n iconFolder: {\n backgroundImage: \"url(/images/object-browser-folder-icn.svg)\",\n backgroundSize: \"auto\",\n ...commonIcon,\n },\n iconFile: {\n backgroundImage: \"url(/images/object-browser-icn.svg)\",\n backgroundSize: \"auto\",\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 listButton: {\n marginLeft: \"10px\",\n },\n badgeOverlap: {\n \"& .MuiBadge-badge\": {\n top: 35,\n right: 10,\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 rewindEnabled: boolean;\n rewindDate: any;\n bucketToRewind: string;\n setLoadingProgress: typeof setLoadingProgress;\n setSnackBarMessage: typeof setSnackBarMessage;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n fileIsBeingPrepared: typeof fileIsBeingPrepared;\n fileDownloadStarted: typeof fileDownloadStarted;\n resetRewind: typeof resetRewind;\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\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 rewindEnabled,\n rewindDate,\n bucketToRewind,\n setLastAsFile,\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n resetRewind,\n}: IListObjectsProps) => {\n const [records, setRecords] = useState([]);\n const [loading, setLoading] = useState(true);\n const [rewind, setRewind] = useState([]);\n const [loadingRewind, setLoadingRewind] = useState(true);\n const [deleteOpen, setDeleteOpen] = useState(false);\n const [deleteMultipleOpen, setDeleteMultipleOpen] = 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 [loadingStartTime, setLoadingStartTime] = useState(0);\n const [loadingMessage, setLoadingMessage] =\n useState(defLoading);\n const [loadingVersioning, setLoadingVersioning] = useState(true);\n const [isVersioned, setIsVersioned] = useState(false);\n const [rewindSelect, setRewindSelect] = useState(false);\n const [selectedObjects, setSelectedObjects] = useState([]);\n const [previewOpen, setPreviewOpen] = useState(false);\n const [selectedPreview, setSelectedPreview] = useState(\n null\n );\n\n const internalPaths = match.params[0];\n\n const bucketName = match.params[\"bucket\"];\n\n const fileUpload = useRef(null);\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 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: ErrorResponseHandler) => {\n setErrorSnackMessage(err);\n setLoadingVersioning(false);\n });\n }\n }, [bucketName, loadingVersioning, setErrorSnackMessage]);\n\n // Rewind\n useEffect(() => {\n if (rewindEnabled) {\n if (bucketToRewind !== bucketName) {\n resetRewind();\n return;\n }\n\n if (rewindDate) {\n setLoadingRewind(true);\n const rewindParsed = rewindDate.toISOString();\n\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/rewind/${rewindParsed}?prefix=${\n internalPaths ? `${internalPaths}/` : \"\"\n }`\n )\n .then((res: RewindObjectList) => {\n setLoadingRewind(false);\n if (res.objects) {\n setRewind(res.objects);\n } else {\n setRewind([]);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingRewind(false);\n setErrorSnackMessage(err);\n });\n }\n }\n }, [\n rewindEnabled,\n rewindDate,\n bucketToRewind,\n bucketName,\n match,\n setErrorSnackMessage,\n resetRewind,\n internalPaths,\n ]);\n\n useEffect(() => {\n const internalPaths = match.params[0];\n\n const verifyIfIsFile = () => {\n if (rewindEnabled) {\n const rewindParsed = rewindDate.toISOString();\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/rewind/${rewindParsed}?prefix=${\n internalPaths ? `${internalPaths}/` : \"\"\n }`\n )\n .then((res: RewindObjectList) => {\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 setLoadingRewind(false);\n setLoading(false);\n }\n })\n .catch((err: ErrorResponseHandler) => {\n setLoadingRewind(false);\n setLoading(false);\n setErrorSnackMessage(err);\n });\n } else {\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: ErrorResponseHandler) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\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 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: ErrorResponseHandler) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n loading,\n match,\n setLastAsFile,\n setErrorSnackMessage,\n bucketName,\n rewindEnabled,\n rewindDate,\n ]);\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 closeDeleteMultipleModalAndRefresh = (refresh: boolean) => {\n setDeleteMultipleOpen(false);\n\n if (refresh) {\n setSnackBarMessage(`Objects deleted successfully.`);\n setSelectedObjects([]);\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 = `${baseUrl}/api/v1/buckets/${bucketName}/objects/upload`;\n if (path !== \"\") {\n const encodedPath = encodeURIComponent(path);\n uploadUrl = `${uploadUrl}?prefix=${encodedPath}`;\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 displayDeleteFlag = (state: boolean) => {\n return state ? \"Yes\" : \"No\";\n };\n\n const downloadObject = (object: BucketObject) => {\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 openPreview = (fileObject: BucketObject) => {\n setSelectedPreview(fileObject);\n\n setPreviewOpen(true);\n };\n\n const tableActions = [\n { type: \"view\", onClick: openPath, sendOnlyId: true },\n {\n type: \"preview\",\n onClick: openPreview,\n disableButtonFunction: (item: string) =>\n extensionPreview(item) === \"none\",\n },\n {\n type: \"download\",\n onClick: downloadObject,\n showLoaderFunction: (item: string) =>\n downloadingFiles.includes(`${match.params[\"bucket\"]}/${item}`),\n disableButtonFunction: (item: string) => {\n if (rewindEnabled) {\n const element = rewind.find((elm) => elm.name === item);\n\n if (element && element.delete_flag) {\n return true;\n }\n }\n return false;\n },\n sendOnlyId: false,\n },\n {\n type: \"delete\",\n onClick: confirmDeleteObject,\n sendOnlyId: true,\n disableButtonFunction: () => {\n return rewindEnabled;\n },\n },\n ];\n\n const displayName = (element: string) => {\n let elementString = element;\n let icon = ;\n // Element is a folder\n if (element.endsWith(\"/\")) {\n icon = ;\n elementString = element.substr(0, element.length - 1);\n }\n\n const splitItem = elementString.split(\"/\");\n\n return (\n
\n {icon}\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 const rewindCloseModal = (refresh: boolean) => {\n setRewindSelect(false);\n\n if (refresh) {\n }\n };\n\n const closePreviewWindow = () => {\n setPreviewOpen(false);\n };\n\n const selectListObjects = (e: React.ChangeEvent) => {\n const targetD = e.target;\n const value = targetD.value;\n const checked = targetD.checked;\n\n let elements: string[] = [...selectedObjects]; // We clone the selectedBuckets array\n\n if (checked) {\n // If the user has checked this field we need to push this to selectedBucketsList\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 setSelectedObjects(elements);\n\n return elements;\n };\n\n const listModeColumns = [\n {\n label: \"Name\",\n elementKey: \"name\",\n renderFunction: displayName,\n },\n {\n label: \"Last Modified\",\n elementKey: \"last_modified\",\n renderFunction: displayParsedDate,\n renderFullObject: true,\n },\n {\n label: \"Size\",\n elementKey: \"size\",\n renderFunction: displayNiceBytes,\n renderFullObject: true,\n width: 60,\n contentTextAlign: \"right\",\n },\n ];\n\n const rewindModeColumns = [\n {\n label: \"Name\",\n elementKey: \"name\",\n renderFunction: displayName,\n },\n {\n label: \"Object Date\",\n elementKey: \"last_modified\",\n renderFunction: displayParsedDate,\n renderFullObject: true,\n },\n {\n label: \"Size\",\n elementKey: \"size\",\n renderFunction: displayNiceBytes,\n renderFullObject: true,\n width: 60,\n contentTextAlign: \"right\",\n },\n {\n label: \"Deleted\",\n elementKey: \"delete_flag\",\n renderFunction: displayDeleteFlag,\n width: 60,\n contentTextAlign: \"center\",\n },\n ];\n\n let pageTitle = \"Folder\";\n\n if (match) {\n if (\"bucket\" in match.params) {\n pageTitle = match.params[\"bucket\"];\n }\n if (\"0\" in match.params) {\n pageTitle = match.params[\"0\"].split(\"/\").pop();\n }\n }\n\n return (\n \n {deleteOpen && (\n \n )}\n {deleteMultipleOpen && (\n \n )}\n {createFolderOpen && (\n \n )}\n {rewindSelect && (\n \n )}\n {previewOpen && (\n \n )}\n\n \n \n \n \n \n \n }\n title={pageTitle}\n subTitle={\n \n \n \n }\n actions={\n \n \n {\n setCreateFolderOpen(true);\n }}\n disabled={rewindEnabled}\n >\n \n \n \n\n \n {\n if (fileUpload && fileUpload.current) {\n fileUpload.current.click();\n }\n }}\n disabled={rewindEnabled}\n >\n \n \n \n\n uploadObject(e)}\n id=\"file-input\"\n style={{ display: \"none\" }}\n ref={fileUpload}\n />\n \n \n {\n setRewindSelect(true);\n }}\n disabled={!isVersioned}\n >\n \n \n \n \n \n {\n setLoading(true);\n }}\n disabled={rewindEnabled}\n >\n \n \n \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 onClick={() => {\n setDeleteMultipleOpen(true);\n }}\n disabled={selectedObjects.length === 0}\n >\n Delete Selected\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 rewindEnabled: get(objectBrowser, \"rewind.rewindEnabled\", false),\n rewindDate: get(objectBrowser, \"rewind.dateToRewind\", null),\n bucketToRewind: get(objectBrowser, \"rewind.bucketToRewind\", \"\"),\n});\n\nconst mapDispatchToProps = {\n addRoute,\n setAllRoutes,\n setLastAsFile,\n setLoadingProgress,\n setSnackBarMessage,\n setErrorSnackMessage,\n fileIsBeingPrepared,\n fileDownloadStarted,\n resetRewind,\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\nimport React, { useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\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 { AppState } from \"../../../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\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 distributedSetup: boolean;\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 distributedSetup,\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 const versID = distributedSetup ? dataObject.version_id : \"null\";\n\n if (diffDate < 0) {\n setModalErrorSnackMessage({\n errorMessage: \"Selected date must be greater than current time.\",\n detailedError: \"\",\n });\n setShareURL(\"\");\n setIsLoadingFile(false);\n\n return;\n }\n\n if (diffDate > 604800000) {\n setModalErrorSnackMessage({\n errorMessage: \"You can share a file only for less than 7 days.\",\n detailedError: \"\",\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=${versID}${\n selectedDate !== \"\" ? `&expires=${diffDate}ms` : \"\"\n }`\n )\n .then((res: string) => {\n setShareURL(res);\n setIsLoadingFile(false);\n })\n .catch((error: ErrorResponseHandler) => {\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 distributedSetup,\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 mapStateToProps = ({ system }: AppState) => ({\n distributedSetup: get(system, \"distributedSetup\", false),\n});\n\nconst connector = connect(mapStateToProps, {\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, { 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 { twoDigitDate } from \"../../../../Common/FormComponents/DateSelector/utils\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\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\";\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: ErrorResponseHandler) => {\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: ErrorResponseHandler) => {\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 get from \"lodash/get\";\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 { AppState } from \"../../../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\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 distributedSetup: boolean;\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 distributedSetup,\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 const verID = distributedSetup ? versionId : \"null\";\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/tags?prefix=${selectedObject}&version_id=${verID}`,\n { tags: newTagList }\n )\n .then((res: any) => {\n setIsSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error: ErrorResponseHandler) => {\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 mapStateToProps = ({ system }: AppState) => ({\n distributedSetup: get(system, \"distributedSetup\", false),\n});\n\nconst mapDispatchToProps = {\n setModalErrorSnackMessage,\n};\n\nconst connector = connect(mapStateToProps, 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 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 { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { modalBasic } from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { setErrorSnackMessage } from \"../../../../../../actions\";\nimport { AppState } from \"../../../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\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 distributedSetup: boolean;\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 distributedSetup,\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 const verID = distributedSetup ? versionId : \"null\";\n\n api\n .invoke(\n \"PUT\",\n `/api/v1/buckets/${bucketName}/objects/tags?prefix=${selectedObject}&version_id=${verID}`,\n { tags: cleanObject }\n )\n .then((res: any) => {\n setDeleteSending(false);\n onCloseAndUpdate(true);\n })\n .catch((error: ErrorResponseHandler) => {\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 mapStateToProps = ({ system }: AppState) => ({\n distributedSetup: get(system, \"distributedSetup\", false),\n});\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(mapStateToProps, 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 { ErrorResponseHandler } from \"../../../../../../common/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: ErrorResponseHandler) => {\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, { Fragment, useEffect, useState } 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 {\n CircularProgress,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n} from \"@material-ui/core\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport List from \"@material-ui/core/List\";\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 AddIcon from \"@material-ui/icons/Add\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport ShareFile from \"./ShareFile\";\nimport {\n actionsTray,\n buttonsStyles,\n containerForHeader,\n hrClass,\n searchField,\n} from \"../../../../Common/FormComponents/common/styleLibrary\";\nimport { FileInfoResponse, IFileInfo } from \"./types\";\nimport {\n fileDownloadStarted,\n fileIsBeingPrepared,\n removeRouteLevel,\n} from \"../../../../ObjectBrowser/actions\";\nimport { Route } from \"../../../../ObjectBrowser/reducers\";\nimport { download, extensionPreview } from \"../utils\";\nimport { TabPanel } from \"../../../../../shared/tabs\";\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, {\n ItemActions,\n} from \"../../../../Common/TableWrapper/TableWrapper\";\nimport { AppState } from \"../../../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../../../common/types\";\nimport {\n setErrorSnackMessage,\n setSnackBarMessage,\n} from \"../../../../../../actions\";\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 ScreenTitle from \"../../../../Common/ScreenTitle/ScreenTitle\";\nimport EditIcon from \"../../../../../../icons/EditIcon\";\nimport SearchIcon from \"../../../../../../icons/SearchIcon\";\nimport ObjectBrowserIcon from \"../../../../../../icons/ObjectBrowserIcon\";\nimport PreviewFileContent from \"../Preview/PreviewFileContent\";\nimport { BucketObject } from \"../ListObjects/types\";\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 paperContainer: {\n padding: 15,\n paddingLeft: 50,\n display: \"flex\",\n },\n elementTitle: {\n fontWeight: 500,\n color: \"#777777\",\n fontSize: 14,\n marginTop: -9,\n },\n dualCardLeft: {\n paddingRight: \"5px\",\n },\n dualCardRight: {\n paddingLeft: \"5px\",\n },\n capitalizeFirst: {\n textTransform: \"capitalize\",\n },\n titleCol: {\n width: \"25%\",\n },\n titleItem: {\n width: \"35%\",\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 ...hrClass,\n ...buttonsStyles,\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IObjectDetailsProps {\n classes: any;\n routesList: Route[];\n downloadingFiles: string[];\n rewindEnabled: boolean;\n rewindDate: any;\n bucketToRewind: string;\n distributedSetup: boolean;\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 rewindEnabled,\n rewindDate,\n distributedSetup,\n bucketToRewind,\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 const [metadataLoad, setMetadataLoad] = useState(false);\n const [metadata, setMetadata] = useState({});\n const [selectedTab, setSelectedTab] = useState(0);\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 const previewObject: BucketObject = {\n name: actualInfo.name,\n version_id: actualInfo.version_id || \"null\",\n size: parseInt(actualInfo.size || \"0\"),\n content_type: \"\",\n last_modified: new Date(actualInfo.last_modified),\n };\n\n useEffect(() => {\n if (loadObjectData) {\n const encodedPath = encodeURIComponent(pathInBucket);\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${encodedPath}${\n distributedSetup ? \"&with_versions=true\" : \"\"\n }`\n )\n .then((res: IFileInfo[]) => {\n const result = get(res, \"objects\", []);\n if (distributedSetup) {\n setActualInfo(\n result.find((el: IFileInfo) => el.is_latest) || emptyFile\n );\n setVersions(result);\n } else {\n setActualInfo(result[0]);\n setVersions([]);\n }\n\n setLoadObjectData(false);\n setMetadataLoad(true);\n })\n .catch((error: ErrorResponseHandler) => {\n setErrorSnackMessage(error);\n setLoadObjectData(false);\n });\n }\n }, [\n loadObjectData,\n bucketName,\n pathInBucket,\n setErrorSnackMessage,\n distributedSetup,\n ]);\n\n useEffect(() => {\n if (metadataLoad) {\n const encodedPath = encodeURIComponent(pathInBucket);\n api\n .invoke(\n \"GET\",\n `/api/v1/buckets/${bucketName}/objects?prefix=${encodedPath}&with_metadata=true`\n )\n .then((res: FileInfoResponse) => {\n const fileData = res.objects[0];\n let metadata = get(fileData, \"user_metadata\", {});\n\n setMetadata(metadata);\n setMetadataLoad(false);\n })\n .catch((error: ErrorResponseHandler) => {\n setMetadataLoad(false);\n });\n }\n }, [bucketName, metadataLoad, pathInBucket]);\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 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: ItemActions[] = [\n {\n type: \"share\",\n onClick: shareObject,\n sendOnlyId: true,\n disableButtonFunction: (item: string) => {\n const element = versions.find((elm) => elm.version_id === item);\n if (element && element.is_delete_marker) {\n return true;\n }\n return false;\n },\n },\n {\n type: \"download\",\n onClick: (item: IFileInfo) => {\n downloadObject(item, true);\n },\n disableButtonFunction: (item: string) => {\n const element = versions.find((elm) => elm.version_id === item);\n if (element && element.is_delete_marker) {\n return true;\n }\n return false;\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 {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 title={objectName}\n subTitle={\n \n \n \n }\n actions={\n \n \n {\n shareObject();\n }}\n disabled={actualInfo.is_delete_marker}\n >\n \n \n \n\n {downloadingFiles.includes(\n `${bucketName}/${actualInfo.name}`\n ) ? (\n
\n \n
\n ) : (\n \n {\n downloadObject(actualInfo);\n }}\n disabled={actualInfo.is_delete_marker}\n >\n \n \n \n )}\n\n \n {\n setDeleteOpen(true);\n }}\n disabled={actualInfo.is_delete_marker}\n >\n \n \n \n
\n }\n />\n
\n \n \n {\n setSelectedTab(0);\n }}\n >\n \n \n {\n setSelectedTab(1);\n }}\n disabled={\n !(actualInfo.version_id && actualInfo.version_id !== \"null\")\n }\n >\n \n \n {\n setSelectedTab(2);\n }}\n disabled={extensionPreview(objectName) === \"none\"}\n >\n \n \n \n \n \n \n \n
\n

Details

\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Legal Hold:\n {actualInfo.version_id &&\n actualInfo.version_id !== \"null\" ? (\n \n {actualInfo.legal_hold_status\n ? actualInfo.legal_hold_status.toLowerCase()\n : \"Off\"}\n {\n setLegalholdOpen(true);\n }}\n >\n \n \n \n ) : (\n \"Disabled\"\n )}\n
Retention:\n {actualInfo.retention_mode\n ? actualInfo.retention_mode.toLowerCase()\n : \"Undefined\"}\n {\n openRetentionModal();\n }}\n >\n \n \n
Tags:\n {tagKeys &&\n tagKeys.map((tagKey, index) => {\n const tag = get(\n actualInfo,\n `tags.${tagKey}`,\n \"\"\n );\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
\n
\n
\n \n \n \n

Object Metadata

\n
\n
\n\n \n \n \n {Object.keys(metadata).map((element) => {\n return (\n \n \n {element}\n \n \n {metadata[element]}\n \n \n );\n })}\n \n
\n
\n
\n
\n
\n \n \n
\n

Versions

\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 const versOrd =\n versions.length - versions.indexOf(r);\n return `v${versOrd}`;\n },\n },\n { label: \"Version ID\", elementKey: \"version_id\" },\n {\n label: \"Last Modified\",\n elementKey: \"last_modified\",\n renderFunction: displayParsedDate,\n },\n {\n label: \"Deleted\",\n width: 60,\n contentTextAlign: \"center\",\n renderFullObject: true,\n renderFunction: (r) => {\n const versOrd = r.is_delete_marker ? \"Yes\" : \"No\";\n return `${versOrd}`;\n },\n },\n ]}\n isLoading={false}\n entityName=\"Versions\"\n idField=\"version_id\"\n records={filteredRecords}\n />\n )}\n \n
\n
\n \n {selectedTab === 2 && (\n \n )}\n \n
\n
\n
\n
\n );\n};\n\nconst mapStateToProps = ({ objectBrowser, system }: AppState) => ({\n downloadingFiles: get(objectBrowser, \"downloadingFiles\", []),\n rewindEnabled: get(objectBrowser, \"rewind.rewindEnabled\", false),\n rewindDate: get(objectBrowser, \"rewind.dateToRewind\", null),\n bucketToRewind: get(objectBrowser, \"rewind.bucketToRewind\", \"\"),\n distributedSetup: get(system, \"distributedSetup\", false),\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 { ErrorResponseHandler } from \"../../../common/types\";\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: ErrorResponseHandler) => {\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 { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n pageTitle: {\n fontSize: 18,\n marginBottom: 20,\n textAlign: \"center\",\n },\n pageSubTitle: {\n textAlign: \"center\",\n },\n paper: {\n padding: \"20px 52px 20px 28px\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ILicenseModalProps {\n classes: any;\n open: boolean;\n closeModal: () => void;\n}\n\nconst LicenseModal = ({ classes, open, closeModal }: ILicenseModalProps) => {\n return open ? (\n {\n closeModal();\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n {\" \"}\n \n \n \n GNU AFFERO GENERAL PUBLIC LICENSE\n \n

Version 3, 19 November 2007

\n
\n \n

\n Copyright © 2007 Free Software Foundation, Inc. <\n \n https://fsf.org/\n \n >\n

\n

\n {\" \"}\n Everyone is permitted to copy and distribute verbatim copies of this\n license document, but changing it is not allowed.\n

\n

Preamble

\n

\n The GNU Affero General Public License is a free, copyleft license\n for software and other kinds of works, specifically designed to\n ensure cooperation with the community in the case of network server\n software.\n

\n\n

\n The licenses for most software and other practical works are\n designed to take away your freedom to share and change the works. By\n contrast, our General Public Licenses are intended to guarantee your\n freedom to share and change all versions of a program--to make sure\n it remains free software for all its users.\n

\n\n

\n When we speak of free software, we are referring to freedom, not\n price. Our General Public Licenses are designed to make sure that\n you have the freedom to distribute copies of free software (and\n charge for them if you wish), that you receive source code or can\n get it if you want it, that you can change the software or use\n pieces of it in new free programs, and that you know you can do\n these things.\n

\n\n

\n Developers that use our General Public Licenses protect your rights\n with two steps: (1) assert copyright on the software, and (2) offer\n you this License which gives you legal permission to copy,\n distribute and/or modify the software.\n

\n\n

\n A secondary benefit of defending all users' freedom is that\n improvements made in alternate versions of the program, if they\n receive widespread use, become available for other developers to\n incorporate. Many developers of free software are heartened and\n encouraged by the resulting cooperation. However, in the case of\n software used on network servers, this result may fail to come\n about. The GNU General Public License permits making a modified\n version and letting the public access it on a server without ever\n releasing its source code to the public.\n

\n\n

\n The GNU Affero General Public License is designed specifically to\n ensure that, in such cases, the modified source code becomes\n available to the community. It requires the operator of a network\n server to provide the source code of the modified version running\n there to the users of that server. Therefore, public use of a\n modified version, on a publicly accessible server, gives the public\n access to the source code of the modified version.\n

\n\n

\n An older license, called the Affero General Public License and\n published by Affero, was designed to accomplish similar goals. This\n is a different license, not a version of the Affero GPL, but Affero\n has released a new version of the Affero GPL which permits\n relicensing under this license.\n

\n\n

\n The precise terms and conditions for copying, distribution and\n modification follow.\n

\n\n

TERMS AND CONDITIONS

\n

0. Definitions.

\n

\n "This License" refers to version 3 of the GNU Affero\n General Public License.\n

\n\n

\n "Copyright" also means copyright-like laws that apply to\n other kinds of works, such as semiconductor masks.\n

\n\n

\n "The Program" refers to any copyrightable work licensed\n under this License. Each licensee is addressed as "you".\n "Licensees" and "recipients" may be individuals\n or organizations.\n

\n\n

\n To "modify" a work means to copy from or adapt all or part\n of the work in a fashion requiring copyright permission, other than\n the making of an exact copy. The resulting work is called a\n "modified version" of the earlier work or a work\n "based on" the earlier work.\n

\n\n

\n A "covered work" means either the unmodified Program or a\n work based on the Program.\n

\n\n

\n To "propagate" a work means to do anything with it that,\n without permission, would make you directly or secondarily liable\n for infringement under applicable copyright law, except executing it\n on a computer or modifying a private copy. Propagation includes\n copying, distribution (with or without modification), making\n available to the public, and in some countries other activities as\n well.\n

\n\n

\n To "convey" a work means any kind of propagation that\n enables other parties to make or receive copies. Mere interaction\n with a user through a computer network, with no transfer of a copy,\n is not conveying.\n

\n\n

\n An interactive user interface displays "Appropriate Legal\n Notices" to the extent that it includes a convenient and\n prominently visible feature that (1) displays an appropriate\n copyright notice, and (2) tells the user that there is no warranty\n for the work (except to the extent that warranties are provided),\n that licensees may convey the work under this License, and how to\n view a copy of this License. If the interface presents a list of\n user commands or options, such as a menu, a prominent item in the\n list meets this criterion.\n

\n\n

1. Source Code.

\n

\n The "source code" for a work means the preferred form of\n the work for making modifications to it. "Object code"\n means any non-source form of a work.\n

\n\n

\n A "Standard Interface" means an interface that either is\n an official standard defined by a recognized standards body, or, in\n the case of interfaces specified for a particular programming\n language, one that is widely used among developers working in that\n language.\n

\n\n

\n The "System Libraries" of an executable work include\n anything, other than the work as a whole, that (a) is included in\n the normal form of packaging a Major Component, but which is not\n part of that Major Component, and (b) serves only to enable use of\n the work with that Major Component, or to implement a Standard\n Interface for which an implementation is available to the public in\n source code form. A "Major Component", in this context,\n means a major essential component (kernel, window system, and so on)\n of the specific operating system (if any) on which the executable\n work runs, or a compiler used to produce the work, or an object code\n interpreter used to run it.\n

\n\n

\n The "Corresponding Source" for a work in object code form\n means all the source code needed to generate, install, and (for an\n executable work) run the object code and to modify the work,\n including scripts to control those activities. However, it does not\n include the work's System Libraries, or general-purpose tools or\n generally available free programs which are used unmodified in\n performing those activities but which are not part of the work. For\n example, Corresponding Source includes interface definition files\n associated with source files for the work, and the source code for\n shared libraries and dynamically linked subprograms that the work is\n specifically designed to require, such as by intimate data\n communication or control flow between those subprograms and other\n parts of the work.\n

\n\n

\n The Corresponding Source need not include anything that users can\n regenerate automatically from other parts of the Corresponding\n Source.\n

\n\n

\n The Corresponding Source for a work in source code form is that same\n work.\n

\n\n

2. Basic Permissions.

\n

\n All rights granted under this License are granted for the term of\n copyright on the Program, and are irrevocable provided the stated\n conditions are met. This License explicitly affirms your unlimited\n permission to run the unmodified Program. The output from running a\n covered work is covered by this License only if the output, given\n its content, constitutes a covered work. This License acknowledges\n your rights of fair use or other equivalent, as provided by\n copyright law.\n

\n

\n You may make, run and propagate covered works that you do not\n convey, without conditions so long as your license otherwise remains\n in force. You may convey covered works to others for the sole\n purpose of having them make modifications exclusively for you, or\n provide you with facilities for running those works, provided that\n you comply with the terms of this License in conveying all material\n for which you do not control copyright. Those thus making or running\n the covered works for you must do so exclusively on your behalf,\n under your direction and control, on terms that prohibit them from\n making any copies of your copyrighted material outside their\n relationship with you.\n

\n

\n Conveying under any other circumstances is permitted solely under\n the conditions stated below. Sublicensing is not allowed; section 10\n makes it unnecessary.\n

\n

\n 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n

\n

\n No covered work shall be deemed part of an effective technological\n measure under any applicable law fulfilling obligations under\n article 11 of the WIPO copyright treaty adopted on 20 December 1996,\n or similar laws prohibiting or restricting circumvention of such\n measures.\n

\n

\n When you convey a covered work, you waive any legal power to forbid\n circumvention of technological measures to the extent such\n circumvention is effected by exercising rights under this License\n with respect to the covered work, and you disclaim any intention to\n limit operation or modification of the work as a means of enforcing,\n against the work's users, your or third parties' legal rights to\n forbid circumvention of technological measures.\n

\n

4. Conveying Verbatim Copies.

\n

\n You may convey verbatim copies of the Program's source code as you\n receive it, in any medium, provided that you conspicuously and\n appropriately publish on each copy an appropriate copyright notice;\n keep intact all notices stating that this License and any\n non-permissive terms added in accord with section 7 apply to the\n code; keep intact all notices of the absence of any warranty; and\n give all recipients a copy of this License along with the Program.\n

\n

\n You may charge any price or no price for each copy that you convey,\n and you may offer support or warranty protection for a fee.\n

\n

5. Conveying Modified Source Versions.

\n

\n You may convey a work based on the Program, or the modifications to\n produce it from the Program, in the form of source code under the\n terms of section 4, provided that you also meet all of these\n conditions:\n

\n

\n

    \n
  • \n a) The work must carry prominent notices stating that you\n modified it, and giving a relevant date.\n
  • \n
  • \n b) The work must carry prominent notices stating that it is\n released under this License and any conditions added under\n section 7. This requirement modifies the requirement in section\n 4 to "keep intact all notices".\n
  • \n
  • \n c) You must license the entire work, as a whole, under this\n License to anyone who comes into possession of a copy. This\n License will therefore apply, along with any applicable section\n 7 additional terms, to the whole of the work, and all its parts,\n regardless of how they are packaged. This License gives no\n permission to license the work in any other way, but it does not\n invalidate such permission if you have separately received it.\n
  • \n
  • \n d) If the work has interactive user interfaces, each must\n display Appropriate Legal Notices; however, if the Program has\n interactive interfaces that do not display Appropriate Legal\n Notices, your work need not make them do so.\n
  • \n
\n

\n

\n A compilation of a covered work with other separate and independent\n works, which are not by their nature extensions of the covered work,\n and which are not combined with it such as to form a larger program,\n in or on a volume of a storage or distribution medium, is called an\n "aggregate" if the compilation and its resulting copyright\n are not used to limit the access or legal rights of the\n compilation's users beyond what the individual works permit.\n Inclusion of a covered work in an aggregate does not cause this\n License to apply to the other parts of the aggregate.\n

\n

6. Conveying Non-Source Forms.

\n

\n You may convey a covered work in object code form under the terms of\n sections 4 and 5, provided that you also convey the machine-readable\n Corresponding Source under the terms of this License, in one of\n these ways:\n

\n

\n

    \n
  • \n a) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by the\n Corresponding Source fixed on a durable physical medium\n customarily used for software interchange.\n
  • \n
  • \n b) Convey the object code in, or embodied in, a physical product\n (including a physical distribution medium), accompanied by a\n written offer, valid for at least three years and valid for as\n long as you offer spare parts or customer support for that\n product model, to give anyone who possesses the object code\n either (1) a copy of the Corresponding Source for all the\n software in the product that is covered by this License, on a\n durable physical medium customarily used for software\n interchange, for a price no more than your reasonable cost of\n physically performing this conveying of source, or (2) access to\n copy the Corresponding Source from a network server at no\n charge.\n
  • \n
  • \n c) Convey individual copies of the object code with a copy of\n the written offer to provide the Corresponding Source. This\n alternative is allowed only occasionally and noncommercially,\n and only if you received the object code with such an offer, in\n accord with subsection 6b.\n
  • \n
  • \n d) Convey the object code by offering access from a designated\n place (gratis or for a charge), and offer equivalent access to\n the Corresponding Source in the same way through the same place\n at no further charge. You need not require recipients to copy\n the Corresponding Source along with the object code. If the\n place to copy the object code is a network server, the\n Corresponding Source may be on a different server (operated by\n you or a third party) that supports equivalent copying\n facilities, provided you maintain clear directions next to the\n object code saying where to find the Corresponding Source.\n Regardless of what server hosts the Corresponding Source, you\n remain obligated to ensure that it is available for as long as\n needed to satisfy these requirements.\n
  • \n
  • \n e) Convey the object code using peer-to-peer transmission,\n provided you inform other peers where the object code and\n Corresponding Source of the work are being offered to the\n general public at no charge under subsection 6d.\n
  • \n
\n

\n

\n A separable portion of the object code, whose source code is\n excluded from the Corresponding Source as a System Library, need not\n be included in conveying the object code work.\n

\n

\n A "User Product" is either (1) a "consumer\n product", which means any tangible personal property which is\n normally used for personal, family, or household purposes, or (2)\n anything designed or sold for incorporation into a dwelling. In\n determining whether a product is a consumer product, doubtful cases\n shall be resolved in favor of coverage. For a particular product\n received by a particular user, "normally used" refers to a\n typical or common use of that class of product, regardless of the\n status of the particular user or of the way in which the particular\n user actually uses, or expects or is expected to use, the product. A\n product is a consumer product regardless of whether the product has\n substantial commercial, industrial or non-consumer uses, unless such\n uses represent the only significant mode of use of the product.\n

\n

\n "Installation Information" for a User Product means any\n methods, procedures, authorization keys, or other information\n required to install and execute modified versions of a covered work\n in that User Product from a modified version of its Corresponding\n Source. The information must suffice to ensure that the continued\n functioning of the modified object code is in no case prevented or\n interfered with solely because modification has been made.\n

\n

\n If you convey an object code work under this section in, or with, or\n specifically for use in, a User Product, and the conveying occurs as\n part of a transaction in which the right of possession and use of\n the User Product is transferred to the recipient in perpetuity or\n for a fixed term (regardless of how the transaction is\n characterized), the Corresponding Source conveyed under this section\n must be accompanied by the Installation Information. But this\n requirement does not apply if neither you nor any third party\n retains the ability to install modified object code on the User\n Product (for example, the work has been installed in ROM).\n

\n

\n The requirement to provide Installation Information does not include\n a requirement to continue to provide support service, warranty, or\n updates for a work that has been modified or installed by the\n recipient, or for the User Product in which it has been modified or\n installed. Access to a network may be denied when the modification\n itself materially and adversely affects the operation of the network\n or violates the rules and protocols for communication across the\n network.\n

\n

\n Corresponding Source conveyed, and Installation Information\n provided, in accord with this section must be in a format that is\n publicly documented (and with an implementation available to the\n public in source code form), and must require no special password or\n key for unpacking, reading or copying.\n

\n

7. Additional Terms.

\n

\n "Additional permissions" are terms that supplement the\n terms of this License by making exceptions from one or more of its\n conditions. Additional permissions that are applicable to the entire\n Program shall be treated as though they were included in this\n License, to the extent that they are valid under applicable law. If\n additional permissions apply only to part of the Program, that part\n may be used separately under those permissions, but the entire\n Program remains governed by this License without regard to the\n additional permissions.\n

\n

\n When you convey a copy of a covered work, you may at your option\n remove any additional permissions from that copy, or from any part\n of it. (Additional permissions may be written to require their own\n removal in certain cases when you modify the work.) You may place\n additional permissions on material, added by you to a covered work,\n for which you have or can give appropriate copyright permission.\n

\n

\n Notwithstanding any other provision of this License, for material\n you add to a covered work, you may (if authorized by the copyright\n holders of that material) supplement the terms of this License with\n terms:\n

\n

\n

    \n
  • \n a) Disclaiming warranty or limiting liability differently from\n the terms of sections 15 and 16 of this License; or\n
  • \n
  • \n b) Requiring preservation of specified reasonable legal notices\n or author attributions in that material or in the Appropriate\n Legal Notices displayed by works containing it; or\n
  • \n
  • \n c) Prohibiting misrepresentation of the origin of that material,\n or requiring that modified versions of such material be marked\n in reasonable ways as different from the original version; or\n
  • \n
  • \n d) Limiting the use for publicity purposes of names of licensors\n or authors of the material; or\n
  • \n
  • \n e) Declining to grant rights under trademark law for use of some\n trade names, trademarks, or service marks; or\n
  • \n
  • \n f) Requiring indemnification of licensors and authors of that\n material by anyone who conveys the material (or modified\n versions of it) with contractual assumptions of liability to the\n recipient, for any liability that these contractual assumptions\n directly impose on those licensors and authors.\n
  • \n
\n

\n

\n All other non-permissive additional terms are considered\n "further restrictions" within the meaning of section 10.\n If the Program as you received it, or any part of it, contains a\n notice stating that it is governed by this License along with a term\n that is a further restriction, you may remove that term. If a\n license document contains a further restriction but permits\n relicensing or conveying under this License, you may add to a\n covered work material governed by the terms of that license\n document, provided that the further restriction does not survive\n such relicensing or conveying.\n

\n

\n If you add terms to a covered work in accord with this section, you\n must place, in the relevant source files, a statement of the\n additional terms that apply to those files, or a notice indicating\n where to find the applicable terms.\n

\n

\n Additional terms, permissive or non-permissive, may be stated in the\n form of a separately written license, or stated as exceptions; the\n above requirements apply either way.\n

\n

8. Termination.

\n

\n You may not propagate or modify a covered work except as expressly\n provided under this License. Any attempt otherwise to propagate or\n modify it is void, and will automatically terminate your rights\n under this License (including any patent licenses granted under the\n third paragraph of section 11).\n

\n

\n However, if you cease all violation of this License, then your\n license from a particular copyright holder is reinstated (a)\n provisionally, unless and until the copyright holder explicitly and\n finally terminates your license, and (b) permanently, if the\n copyright holder fails to notify you of the violation by some\n reasonable means prior to 60 days after the cessation.\n

\n

\n Moreover, your license from a particular copyright holder is\n reinstated permanently if the copyright holder notifies you of the\n violation by some reasonable means, this is the first time you have\n received notice of violation of this License (for any work) from\n that copyright holder, and you cure the violation prior to 30 days\n after your receipt of the notice.\n

\n\n

\n Termination of your rights under this section does not terminate the\n licenses of parties who have received copies or rights from you\n under this License. If your rights have been terminated and not\n permanently reinstated, you do not qualify to receive new licenses\n for the same material under section 10.\n

\n\n

9. Acceptance Not Required for Having Copies.

\n

\n You are not required to accept this License in order to receive or\n run a copy of the Program. Ancillary propagation of a covered work\n occurring solely as a consequence of using peer-to-peer transmission\n to receive a copy likewise does not require acceptance. However,\n nothing other than this License grants you permission to propagate\n or modify any covered work. These actions infringe copyright if you\n do not accept this License. Therefore, by modifying or propagating a\n covered work, you indicate your acceptance of this License to do so.\n

\n\n

10. Automatic Licensing of Downstream Recipients.

\n

\n Each time you convey a covered work, the recipient automatically\n receives a license from the original licensors, to run, modify and\n propagate that work, subject to this License. You are not\n responsible for enforcing compliance by third parties with this\n License.\n

\n\n

\n An "entity transaction" is a transaction transferring\n control of an organization, or substantially all assets of one, or\n subdividing an organization, or merging organizations. If\n propagation of a covered work results from an entity transaction,\n each party to that transaction who receives a copy of the work also\n receives whatever licenses to the work the party's predecessor in\n interest had or could give under the previous paragraph, plus a\n right to possession of the Corresponding Source of the work from the\n predecessor in interest, if the predecessor has it or can get it\n with reasonable efforts.\n

\n\n

\n You may not impose any further restrictions on the exercise of the\n rights granted or affirmed under this License. For example, you may\n not impose a license fee, royalty, or other charge for exercise of\n rights granted under this License, and you may not initiate\n litigation (including a cross-claim or counterclaim in a lawsuit)\n alleging that any patent claim is infringed by making, using,\n selling, offering for sale, or importing the Program or any portion\n of it.\n

\n\n

11. Patents.

\n

\n A "contributor" is a copyright holder who authorizes use\n under this License of the Program or a work on which the Program is\n based. The work thus licensed is called the contributor's\n "contributor version".\n

\n\n

\n A contributor's "essential patent claims" are all patent\n claims owned or controlled by the contributor, whether already\n acquired or hereafter acquired, that would be infringed by some\n manner, permitted by this License, of making, using, or selling its\n contributor version, but do not include claims that would be\n infringed only as a consequence of further modification of the\n contributor version. For purposes of this definition,\n "control" includes the right to grant patent sublicenses\n in a manner consistent with the requirements of this License.\n

\n\n

\n Each contributor grants you a non-exclusive, worldwide, royalty-free\n patent license under the contributor's essential patent claims, to\n make, use, sell, offer for sale, import and otherwise run, modify\n and propagate the contents of its contributor version.\n

\n\n

\n In the following three paragraphs, a "patent license" is\n any express agreement or commitment, however denominated, not to\n enforce a patent (such as an express permission to practice a patent\n or covenant not to sue for patent infringement). To\n "grant" such a patent license to a party means to make\n such an agreement or commitment not to enforce a patent against the\n party.\n

\n\n

\n If you convey a covered work, knowingly relying on a patent license,\n and the Corresponding Source of the work is not available for anyone\n to copy, free of charge and under the terms of this License, through\n a publicly available network server or other readily accessible\n means, then you must either (1) cause the Corresponding Source to be\n so available, or (2) arrange to deprive yourself of the benefit of\n the patent license for this particular work, or (3) arrange, in a\n manner consistent with the requirements of this License, to extend\n the patent license to downstream recipients. "Knowingly\n relying" means you have actual knowledge that, but for the\n patent license, your conveying the covered work in a country, or\n your recipient's use of the covered work in a country, would\n infringe one or more identifiable patents in that country that you\n have reason to believe are valid.\n

\n\n

\n If, pursuant to or in connection with a single transaction or\n arrangement, you convey, or propagate by procuring conveyance of, a\n covered work, and grant a patent license to some of the parties\n receiving the covered work authorizing them to use, propagate,\n modify or convey a specific copy of the covered work, then the\n patent license you grant is automatically extended to all recipients\n of the covered work and works based on it.\n

\n\n

\n A patent license is "discriminatory" if it does not\n include within the scope of its coverage, prohibits the exercise of,\n or is conditioned on the non-exercise of one or more of the rights\n that are specifically granted under this License. You may not convey\n a covered work if you are a party to an arrangement with a third\n party that is in the business of distributing software, under which\n you make payment to the third party based on the extent of your\n activity of conveying the work, and under which the third party\n grants, to any of the parties who would receive the covered work\n from you, a discriminatory patent license (a) in connection with\n copies of the covered work conveyed by you (or copies made from\n those copies), or (b) primarily for and in connection with specific\n products or compilations that contain the covered work, unless you\n entered into that arrangement, or that patent license was granted,\n prior to 28 March 2007.\n

\n\n

\n Nothing in this License shall be construed as excluding or limiting\n any implied license or other defenses to infringement that may\n otherwise be available to you under applicable patent law.\n

\n\n

12. No Surrender of Others' Freedom.

\n

\n If conditions are imposed on you (whether by court order, agreement\n or otherwise) that contradict the conditions of this License, they\n do not excuse you from the conditions of this License. If you cannot\n convey a covered work so as to satisfy simultaneously your\n obligations under this License and any other pertinent obligations,\n then as a consequence you may not convey it at all. For example, if\n you agree to terms that obligate you to collect a royalty for\n further conveying from those to whom you convey the Program, the\n only way you could satisfy both those terms and this License would\n be to refrain entirely from conveying the Program.\n

\n\n

\n 13. Remote Network Interaction; Use with the GNU General Public\n License.\n

\n

\n Notwithstanding any other provision of this License, if you modify\n the Program, your modified version must prominently offer all users\n interacting with it remotely through a computer network (if your\n version supports such interaction) an opportunity to receive the\n Corresponding Source of your version by providing access to the\n Corresponding Source from a network server at no charge, through\n some standard or customary means of facilitating copying of\n software. This Corresponding Source shall include the Corresponding\n Source for any work covered by version 3 of the GNU General Public\n License that is incorporated pursuant to the following paragraph.\n

\n\n

\n Notwithstanding any other provision of this License, you have\n permission to link or combine any covered work with a work licensed\n under version 3 of the GNU General Public License into a single\n combined work, and to convey the resulting work. The terms of this\n License will continue to apply to the part which is the covered\n work, but the work with which it is combined will remain governed by\n version 3 of the GNU General Public License.\n

\n\n

14. Revised Versions of this License.

\n

\n The Free Software Foundation may publish revised and/or new versions\n of the GNU Affero General Public License from time to time. Such new\n versions will be similar in spirit to the present version, but may\n differ in detail to address new problems or concerns.\n

\n\n

\n Each version is given a distinguishing version number. If the\n Program specifies that a certain numbered version of the GNU Affero\n General Public License "or any later version" applies to\n it, you have the option of following the terms and conditions either\n of that numbered version or of any later version published by the\n Free Software Foundation. If the Program does not specify a version\n number of the GNU Affero General Public License, you may choose any\n version ever published by the Free Software Foundation.\n

\n\n

\n Each version is given a distinguishing version number. If the\n Program specifies that a certain numbered version of the GNU Affero\n General Public License "or any later version" applies to\n it, you have the option of following the terms and conditions either\n of that numbered version or of any later version published by the\n Free Software Foundation. If the Program does not specify a version\n number of the GNU Affero General Public License, you may choose any\n version ever published by the Free Software Foundation.\n

\n\n

\n Later license versions may give you additional or different\n permissions. However, no additional obligations are imposed on any\n author or copyright holder as a result of your choosing to follow a\n later version.\n

\n\n

15. Disclaimer of Warranty.

\n

\n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE\n COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS\n IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,\n INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE\n RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.\n SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL\n NECESSARY SERVICING, REPAIR OR CORRECTION.\n

\n\n

16. Limitation of Liability.

\n

\n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\n WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES\n AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR\n DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL\n DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM\n (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED\n INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE\n OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH\n HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\n DAMAGES.\n

\n\n

17. Interpretation of Sections 15 and 16.

\n

\n If the disclaimer of warranty and limitation of liability provided\n above cannot be given local legal effect according to their terms,\n reviewing courts shall apply local law that most closely\n approximates an absolute waiver of all civil liability in connection\n with the Program, unless a warranty or assumption of liability\n accompanies a copy of the Program in return for a fee.\n

\n\n

END OF TERMS AND CONDITIONS

\n\n

How to Apply These Terms to Your New Programs

\n

\n If you develop a new program, and you want it to be of the greatest\n possible use to the public, the best way to achieve this is to make\n it free software which everyone can redistribute and change under\n these terms.\n

\n\n

\n To do so, attach the following notices to the program. It is safest\n to attach them to the start of each source file to most effectively\n state the exclusion of warranty; and each file should have at least\n the "copyright" line and a pointer to where the full\n notice is found.\n

\n\n

\n \n <one line to give the program's name and a brief idea of what\n it does.> Copyright (C) <year> <name of author>\n This program is free software: you can redistribute it and/or\n modify it under the terms of the GNU Affero General Public License\n as published by the Free Software Foundation, either version 3 of\n the License, or (at your option) any later version. This program\n is distributed in the hope that it will be useful, but WITHOUT ANY\n WARRANTY; without even the implied warranty of MERCHANTABILITY or\n FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General\n Public License for more details. You should have received a copy\n of the GNU Affero General Public License along with this program.\n If not, see <https://www.gnu.org/licenses/>.\n \n

\n\n

\n Also add information on how to contact you by electronic and paper\n mail.\n

\n\n

\n If your software can interact with users remotely through a computer\n network, you should also make sure that it provides a way for users\n to get its source. For example, if your program is a web\n application, its interface could display a "Source" link\n that leads users to an archive of the code. There are many ways you\n could offer source, and different solutions will be better for\n different programs; see section 13 for the specific requirements.\n

\n\n

\n You should also get your employer (if you work as a programmer) or\n school, if any, to sign a "copyright disclaimer" for the\n program, if necessary. For more information on this, and how to\n apply and follow the GNU AGPL, see <\n \n https://www.gnu.org/licenses/\n \n >.\n

\n
\n
\n \n ) : null;\n};\n\nexport default withStyles(styles)(LicenseModal);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { CircularProgress, LinearProgress } from \"@material-ui/core\";\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 Moment from \"react-moment\";\nimport Typography from \"@material-ui/core/Typography\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport { LicenseInfo } from \"./types\";\nimport { AppState } from \"../../../store\";\nimport { niceBytes } from \"../../../common/utils\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport { planDetails, planItems, planButtons } from \"./utils\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport ActivationModal from \"./ActivationModal\";\nimport LicenseModal from \"./LicenseModal\";\nimport api from \"../../../common/api\";\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 backgroundColor: \"#FFFFFF\",\n },\n licenseContainer: {\n display: \"flex\",\n flexWrap: \"wrap\",\n flexDirection: \"row\",\n padding: \"30px 30px 0px 30px\",\n background: \"#032F51\",\n boxShadow: \"0px 3px 7px #00000014\",\n \"& h2\": {\n color: \"#FFF\",\n flexDirection: \"row\",\n },\n \"& a\": {\n textDecoration: \"none\",\n flexDirection: \"row\",\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 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 alignSelf: \"flex-end\",\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 clickableBlock: {\n cursor: \"pointer\",\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(() => {\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: ErrorResponseHandler) => {\n setLoadingRefreshLicense(false);\n });\n };\n\n const [activateProductModal, setActivateProductModal] =\n useState(false);\n\n const [licenseModal, setLicenseModal] = useState(false);\n\n const [licenseInfo, setLicenseInfo] = useState();\n const [currentPlanID, setCurrentPlanID] = useState(0);\n const [loadingLicenseInfo, setLoadingLicenseInfo] = useState(true);\n const [loadingRefreshLicense, setLoadingRefreshLicense] =\n useState(false);\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 setLicenseModal(false)}\n />\n \n \"agpl\"\n \n \n \n GNU Affero General Public License\n \n \n \n setLicenseModal(true)}\n className={classes.clickableBlock}\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 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(\n `${button.link}/?ref=${\n operatorMode ? \"op\" : \"con\"\n }`,\n \"_blank\"\n );\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\";\nexport const TRACE_SET_STARTED = \"TRACE/SET_STARTED\";\n\ninterface TraceMessageReceivedAction {\n type: typeof TRACE_MESSAGE_RECEIVED;\n message: TraceMessage;\n}\n\ninterface TraceResetMessagesAction {\n type: typeof TRACE_RESET_MESSAGES;\n}\n\ninterface TraceSetStarted {\n type: typeof TRACE_SET_STARTED;\n status: boolean;\n}\n\nexport type TraceActionTypes =\n | TraceMessageReceivedAction\n | TraceResetMessagesAction\n | TraceSetStarted;\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\nexport function setTraceStarted(status: boolean) {\n return {\n type: TRACE_SET_STARTED,\n status,\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, { useState, Fragment } from \"react\";\nimport { Grid, Button, TextField } from \"@material-ui/core\";\nimport { IMessageEvent, w3cwebsocket as W3CWebSocket } from \"websocket\";\nimport { AppState } from \"../../../store\";\nimport { connect } from \"react-redux\";\nimport {\n traceMessageReceived,\n traceResetMessages,\n setTraceStarted,\n} 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 {\n containerForHeader,\n searchField,\n actionsTray,\n hrClass,\n inlineCheckboxes,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport CheckboxWrapper from \"../Common/FormComponents/CheckboxWrapper/CheckboxWrapper\";\nimport moment from \"moment/moment\";\n\nconst styles = (theme: Theme) =>\n createStyles({\n paperContainer: {\n padding: 15,\n paddingLeft: 50,\n display: \"flex\",\n },\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 labelCheckboxes: {\n fontSize: 16,\n fontWeight: 700,\n paddingTop: 19,\n },\n startButton: {\n textAlign: \"right\",\n },\n ...actionsTray,\n ...searchField,\n ...hrClass,\n ...inlineCheckboxes,\n searchField: {\n ...searchField.searchField,\n margin: \"0 5px\",\n \"&:first-of-type\": {\n marginLeft: 0,\n },\n \"&:last-of-type\": {\n marginRight: 0,\n },\n },\n tableWrapper: {\n height: \"calc(100vh - 292px)\",\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface ITrace {\n classes: any;\n traceMessageReceived: typeof traceMessageReceived;\n traceResetMessages: typeof traceResetMessages;\n setTraceStarted: typeof setTraceStarted;\n messages: TraceMessage[];\n namespace: string;\n tenant: string;\n traceStarted: boolean;\n}\n\nvar c: any = null;\n\nconst Trace = ({\n classes,\n traceMessageReceived,\n traceResetMessages,\n setTraceStarted,\n traceStarted,\n messages,\n}: ITrace) => {\n const [statusCode, setStatusCode] = useState(\"\");\n const [method, setMethod] = useState(\"\");\n const [func, setFunc] = useState(\"\");\n const [path, setPath] = useState(\"\");\n const [threshold, setThreshold] = useState(0);\n const [all, setAll] = useState(false);\n const [s3, setS3] = useState(true);\n const [internal, setInternal] = useState(false);\n const [storage, setStorage] = useState(false);\n const [os, setOS] = useState(false);\n const [errors, setErrors] = useState(false);\n\n const startTrace = () => {\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 let calls = `${s3 ? \"s3,\" : \"\"}${internal ? \"internal,\" : \"\"}${\n storage ? \"storage,\" : \"\"\n }${os ? \"os,\" : \"\"}`;\n\n if (all) {\n calls = \"all\";\n }\n\n const wsProt = wsProtocol(url.protocol);\n c = new W3CWebSocket(\n `${wsProt}://${\n url.hostname\n }:${port}/ws/trace?calls=${calls}&threshold=${threshold}&onlyErrors=${\n errors ? \"yes\" : \"no\"\n }&statusCode=${statusCode}&method=${method}&funcname=${func}&path=${path}`\n );\n\n let interval: any | null = null;\n if (c !== null) {\n c.onopen = () => {\n console.log(\"WebSocket Client Connected\");\n setTraceStarted(true);\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 setTraceStarted(false);\n };\n return () => {\n c.close(1000);\n clearInterval(interval);\n console.log(\"closing websockets\");\n setTraceStarted(false);\n };\n }\n };\n\n const stopTrace = () => {\n c.close(1000);\n setTraceStarted(false);\n };\n\n return (\n \n \n \n \n \n {\n setStatusCode(e.target.value);\n }}\n disabled={traceStarted}\n />\n {\n setMethod(e.target.value);\n }}\n disabled={traceStarted}\n />\n {\n setFunc(e.target.value);\n }}\n />\n {\n setPath(e.target.value);\n }}\n />\n {\n setThreshold(parseInt(e.target.value));\n }}\n />\n \n \n Calls to trace:\n {\n setAll(item.target.checked);\n }}\n value={\"all\"}\n disabled={traceStarted}\n />\n {\n setS3(item.target.checked);\n }}\n value={\"s3\"}\n disabled={all || traceStarted}\n />\n {\n setInternal(item.target.checked);\n }}\n value={\"internal\"}\n disabled={all || traceStarted}\n />\n {\n setStorage(item.target.checked);\n }}\n value={\"storage\"}\n disabled={all || traceStarted}\n />\n {\n setOS(item.target.checked);\n }}\n value={\"os\"}\n disabled={all || traceStarted}\n />\n \n       |      \n \n {\n setErrors(item.target.checked);\n }}\n value={\"only_errors\"}\n disabled={traceStarted}\n />\n \n \n {!traceStarted && (\n \n Start\n \n )}\n {traceStarted && (\n \n Stop\n \n )}\n \n\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={\n traceStarted\n ? \"No Traced elements received yet\"\n : \"Trace is not started yet\"\n }\n customPaperHeight={classes.tableWrapper}\n autoScrollToBottom\n />\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n messages: state.trace.messages,\n traceStarted: state.trace.traceStarted,\n});\n\nconst connector = connect(mapState, {\n traceMessageReceived: traceMessageReceived,\n traceResetMessages: traceResetMessages,\n setTraceStarted,\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 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\";\nimport SearchIcon from \"../../../../icons/SearchIcon\";\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 { AppState } from \"../../../../store\";\nimport { ErrorResponseHandler } from \"../../../../common/types\";\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 features: string[] | null;\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 = ({\n classes,\n features,\n setErrorSnackMessage,\n}: 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 const logSearchEnabled = features && features.includes(\"log-search\");\n\n const fetchRecords = useCallback(() => {\n if (!alreadyFetching && logSearchEnabled) {\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: ErrorResponseHandler) => {\n setLoading(false);\n setAlreadyFetching(false);\n setErrorSnackMessage(err);\n });\n }\n }, [\n alreadyFetching,\n logSearchEnabled,\n bucket,\n object,\n apiName,\n requestID,\n userAgent,\n responseStatus,\n nextPage,\n sortOrder,\n timeStart,\n timeEnd,\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 mapState = (state: AppState) => ({\n features: state.console.session.features,\n});\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(mapState, 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 } from \"react\";\nimport { connect } from \"react-redux\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport { Grid, List, ListItem, ListItemText } from \"@material-ui/core\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { containerForHeader } from \"../Common/FormComponents/common/styleLibrary\";\nimport ErrorLogs from \"./ErrorLogs/ErrorLogs\";\nimport LogsSearchMain from \"./LogSearch/LogsSearchMain\";\nimport { AppState } from \"../../../store\";\n\ninterface ILogsMainProps {\n classes: any;\n features: string[] | null;\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, features }: ILogsMainProps) => {\n const [currentTab, setCurrentTab] = useState(0);\n\n const logSearchEnabled = features && features.includes(\"log-search\");\n\n return (\n \n \n \n \n \n {\n setCurrentTab(0);\n }}\n >\n \n \n {\n setCurrentTab(1);\n }}\n >\n \n \n \n \n \n {currentTab === 0 && (\n \n

Error Logs

\n \n
\n )}\n {currentTab === 1 && logSearchEnabled && (\n \n

Audit Logs

\n \n
\n )}\n
\n
\n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n features: state.console.session.features,\n});\n\nconst connector = connect(mapState, null);\n\nexport default withStyles(styles)(connector(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 React, { useEffect, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport { HorizontalBar } from \"react-chartjs-2\";\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 { 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 inlineCheckboxes,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { AppState } from \"../../../store\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport CheckboxWrapper from \"../Common/FormComponents/CheckboxWrapper/CheckboxWrapper\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport api from \"../../../common/api\";\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 ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\ninterface IHeal {\n classes: any;\n distributedSetup: boolean;\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, distributedSetup }: 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: ErrorResponseHandler) => {\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 if (!distributedSetup) {\n return null;\n }\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\nconst mapState = (state: AppState) => ({\n distributedSetup: state.system.distributedSetup,\n});\n\nconst connector = connect(mapState, null);\n\nexport default connector(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 { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { AppState } from \"../../../store\";\nimport { watchMessageReceived, watchResetMessages } from \"./actions\";\nimport { EventInfo, BucketList, Bucket } from \"./types\";\nimport { niceBytes, timeFromDate } from \"../../../common/utils\";\nimport { wsProtocol } from \"../../../utils/wsUtils\";\nimport { FormControl, MenuItem, Select } from \"@material-ui/core\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\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 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: ErrorResponseHandler) => {\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 .\n\nimport React, { Fragment, useState, useEffect, useCallback } from \"react\";\nimport { connect } from \"react-redux\";\nimport get from \"lodash/get\";\nimport ArrowRightIcon from \"@material-ui/icons/ArrowRight\";\nimport ErrorOutlineIcon from \"@material-ui/icons/ErrorOutline\";\nimport CloseIcon from \"@material-ui/icons/Close\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { AppState } from \"../../../../store\";\nimport { setErrorSnackMessage } from \"../../../../actions\";\nimport { snackBarMessage } from \"../../../../types\";\n\ninterface IMainErrorProps {\n classes: any;\n snackBar: snackBarMessage;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n mainErrorContainer: {\n position: \"absolute\",\n width: \"100%\",\n backgroundColor: \"#fff\",\n border: \"#C72C48 1px solid\",\n borderLeftWidth: 12,\n borderRadius: 3,\n zIndex: 1000,\n padding: \"10px 15px\",\n maxWidth: 600,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n marginTop: 15,\n opacity: 0,\n transitionDuration: \"0.2s\",\n },\n mainErrorShow: {\n opacity: 1,\n },\n closeButton: {\n position: \"absolute\",\n right: 5,\n fontSize: \"small\",\n border: 0,\n backgroundColor: \"#fff\",\n cursor: \"pointer\",\n },\n errorTitle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n errorLabel: {\n color: \"#000\",\n fontSize: 18,\n fontWeight: 500,\n marginLeft: 5,\n },\n messageIcon: {\n color: \"#C72C48\",\n display: \"flex\",\n \"& svg\": {\n width: 32,\n height: 32,\n },\n },\n simpleError: {\n marginTop: 5,\n padding: \"2px 5px\",\n fontSize: 16,\n color: \"#000\",\n },\n detailsButton: {\n color: \"#9C9C9C\",\n display: \"flex\",\n alignItems: \"center\",\n border: 0,\n backgroundColor: \"transparent\",\n paddingLeft: 5,\n fontSize: 14,\n transformDuration: \"0.3s\",\n cursor: \"pointer\",\n },\n extraDetailsContainer: {\n fontStyle: \"italic\",\n color: \"#9C9C9C\",\n lineHeight: 0,\n padding: \"0 10px\",\n transition: \"all .2s ease-in-out\",\n overflow: \"hidden\",\n },\n extraDetailsOpen: {\n lineHeight: 1,\n padding: \"3px 10px\",\n },\n arrowElement: {\n marginLeft: -5,\n },\n arrowOpen: {\n transform: \"rotateZ(90deg)\",\n transformDuration: \"0.3s\",\n },\n });\n\nvar timerI: any;\n\nconst startHideTimer = (callbackFunction: () => void) => {\n timerI = setInterval(callbackFunction, 10000);\n};\n\nconst stopHideTimer = () => {\n clearInterval(timerI);\n};\n\nconst MainError = ({\n classes,\n snackBar,\n displayErrorMessage,\n}: IMainErrorProps) => {\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [displayErrorMsg, setDisplayErrorMsg] = useState(false);\n\n const closeErrorMessage = useCallback(() => {\n setDisplayErrorMsg(false);\n }, []);\n\n useEffect(() => {\n if (!displayErrorMsg) {\n displayErrorMessage({ detailedError: \"\", errorMessage: \"\" });\n setDetailsOpen(false);\n clearInterval(timerI);\n }\n }, [displayErrorMessage, displayErrorMsg]);\n\n useEffect(() => {\n if (snackBar.message !== \"\" && snackBar.type === \"error\") {\n //Error message received, we trigger the animation\n setDisplayErrorMsg(true);\n startHideTimer(closeErrorMessage);\n }\n }, [closeErrorMessage, snackBar.message, snackBar.type]);\n\n const detailsToggle = () => {\n setDetailsOpen(!detailsOpen);\n };\n\n const message = get(snackBar, \"message\", \"\");\n const messageDetails = get(snackBar, \"detailedErrorMsg\", \"\");\n\n if (snackBar.type !== \"error\" || message === \"\") {\n return null;\n }\n\n return (\n \n startHideTimer(closeErrorMessage)}\n >\n \n
\n \n \n \n Error\n
\n
{message}
\n {messageDetails !== \"\" && (\n \n
\n \n
\n \n {messageDetails}\n \n
\n )}\n \n
\n );\n};\n\nconst mapState = (state: AppState) => ({\n snackBar: state.system.snackBar,\n});\n\nconst mapDispatchToProps = {\n displayErrorMessage: setErrorSnackMessage,\n};\n\nconst connector = connect(mapState, mapDispatchToProps);\n\nexport default connector(withStyles(styles)(MainError));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more 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, useEffect, useState } from \"react\";\nimport get from \"lodash/get\";\nimport { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, InputAdornment, TextField } from \"@material-ui/core\";\nimport history from \"../../../history\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport { IPVCsResponse, IStoragePVCs } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\n\ninterface IStorageVolumesProps {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n breadcrumLink: {\n textDecoration: \"none\",\n color: \"black\",\n },\n tableWrapper: {\n height: \"calc(100vh - 267px)\",\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst StorageVolumes = ({\n classes,\n setErrorSnackMessage,\n}: IStorageVolumesProps) => {\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", `/api/v1/list-pvcs`)\n .then((res: IPVCsResponse) => {\n let volumes = get(res, \"pvcs\", []);\n setRecords(volumes ? volumes : []);\n setLoading(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setErrorSnackMessage(err);\n });\n }\n }, [loading, setErrorSnackMessage]);\n\n const filteredRecords: IStoragePVCs[] = records.filter((elementItem) =>\n elementItem.name.includes(filter)\n );\n\n const tableActions = [\n {\n type: \"view\",\n onClick: (record: any) => {\n history.push(\n `/namespaces/${record.namespace}/tenants/${record.tenant}`\n );\n },\n },\n ];\n\n return (\n \n

Volumes

\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n />\n \n \n
\n
\n \n \n `${record.namespace}/${record.tenant}`,\n },\n {\n label: \"Capacity\",\n elementKey: \"capacity\",\n width: 90,\n },\n {\n label: \"Storage Class\",\n elementKey: \"storageClass\",\n },\n ]}\n isLoading={loading}\n records={filteredRecords}\n entityName=\"PVCs\"\n idField=\"name\"\n customPaperHeight={classes.tableWrapper}\n />\n \n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(StorageVolumes));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\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 DIRECT_CSI_SELECT_DRIVE = \"DIRECT_CSI/SELECT_DRIVE\";\n\nexport interface IDirectCSIDrives {\n joinName: string;\n drive: string;\n capacity: string;\n allocated: string;\n volumes: number;\n node: string;\n status: \"Available\" | \"Unavailable\" | \"InUse\" | \"Ready\" | \"Terminating\";\n}\n\nexport interface IDirectCSIVolumes {\n volume: string;\n capacity: string;\n node: string;\n drive: string;\n}\n\nexport interface IDrivesResponse {\n drives: IDirectCSIDrives[];\n}\n\nexport interface IVolumesResponse {\n volumes: IDirectCSIVolumes[];\n}\n\nexport interface IDirectCSIFormatResult {\n formatIssuesList: IDirectCSIFormatResItem[];\n}\n\nexport interface IDirectCSIFormatResItem {\n node: string;\n drive: string;\n error: string;\n}\n\ninterface SelectDrive {\n type: typeof DIRECT_CSI_SELECT_DRIVE;\n driveName: string;\n}\n\nexport interface IDirectCSIState {\n selectedDrive: string;\n}\n\nexport type DirectCSITypes = SelectDrive;\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, { Fragment, useState } from \"react\";\nimport { connect } from \"react-redux\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Grid,\n LinearProgress,\n} from \"@material-ui/core\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { IDirectCSIFormatResItem, IDirectCSIFormatResult } from \"./types\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport InputBoxWrapper from \"../Common/FormComponents/InputBoxWrapper/InputBoxWrapper\";\nimport PredefinedList from \"../Common/FormComponents/PredefinedList/PredefinedList\";\nimport FormSwitchWrapper from \"../Common/FormComponents/FormSwitchWrapper/FormSwitchWrapper\";\n\ninterface IFormatAllDrivesProps {\n closeFormatModalAndRefresh: (\n refresh: boolean,\n formatIssuesList: IDirectCSIFormatResItem[]\n ) => void;\n deleteOpen: boolean;\n allDrives: boolean;\n drivesToFormat: string[];\n setErrorSnackMessage: typeof setErrorSnackMessage;\n}\n\nconst FormatDrives = ({\n closeFormatModalAndRefresh,\n deleteOpen,\n allDrives,\n drivesToFormat,\n setErrorSnackMessage,\n}: IFormatAllDrivesProps) => {\n const [deleteLoading, setDeleteLoading] = useState(false);\n const [formatAll, setFormatAll] = useState(\"\");\n const [force, setForce] = useState(false);\n\n const removeRecord = () => {\n if (deleteLoading) {\n return;\n }\n setDeleteLoading(true);\n api\n .invoke(\"POST\", `/api/v1/direct-csi/drives/format`, {\n drives: drivesToFormat,\n force,\n })\n .then((res: IDirectCSIFormatResult) => {\n setDeleteLoading(false);\n closeFormatModalAndRefresh(true, res.formatIssuesList);\n })\n .catch((err: ErrorResponseHandler) => {\n setDeleteLoading(false);\n setErrorSnackMessage(err);\n });\n };\n return (\n {\n closeFormatModalAndRefresh(false, []);\n }}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n \n Format {allDrives ? \"All \" : \"\"}Drives\n \n \n \n {!allDrives && (\n \n 1 ? \"s\" : \"\"}`}\n content={drivesToFormat.join(\", \")}\n />\n
\n
\n )}\n \n ) => {\n setForce(event.target.checked);\n }}\n label={\"Force Format\"}\n indicatorLabels={[\"Yes\", \"No\"]}\n />\n \n Are you sure you want to format{\" \"}\n {allDrives ? All : \"the selected\"} drive\n {drivesToFormat.length > 1 || allDrives ? \"s\" : \"\"}?.\n
\n
\n \n All information contained will be erased and cannot be recovered\n \n
\n
\n To continue please type YES, PROCEED in the box.\n \n ) => {\n setFormatAll(event.target.value);\n }}\n label=\"\"\n value={formatAll}\n />\n \n
\n
\n {deleteLoading && }\n \n {\n closeFormatModalAndRefresh(false, []);\n }}\n color=\"primary\"\n disabled={deleteLoading}\n >\n Cancel\n \n \n Format Drive{drivesToFormat.length > 1 || allDrives ? \"s\" : \"\"}\n \n \n \n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default connector(FormatDrives);\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 {\n Button,\n createStyles,\n Grid,\n Theme,\n withStyles,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport ModalWrapper from \"../Common/ModalWrapper/ModalWrapper\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport { IDirectCSIFormatResItem } from \"./types\";\n\ninterface IFormatErrorsProps {\n open: boolean;\n onCloseFormatErrorsList: () => void;\n errorsList: IDirectCSIFormatResItem[];\n classes: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n warningBlock: {\n color: \"red\",\n },\n buttonContainer: {\n textAlign: \"right\",\n },\n errorsList: {\n height: \"calc(100vh - 280px)\",\n },\n });\n\nconst download = (filename: string, text: string) => {\n let element = document.createElement(\"a\");\n element.setAttribute(\n \"href\",\n \"data:application/json;charset=utf-8,\" + encodeURIComponent(text)\n );\n console.log(filename);\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 FormatErrorsResult = ({\n open,\n onCloseFormatErrorsList,\n errorsList,\n classes,\n}: IFormatErrorsProps) => {\n return (\n \n \n \n There were some issues trying to format the selected CSI Drives,\n please fix the issues and try again.\n
\n \n
\n \n {\n download(\"csiFormatErrors.json\", JSON.stringify([...errorsList]));\n }}\n color=\"primary\"\n >\n Download\n \n \n \n
\n \n );\n};\n\nexport default withStyles(styles)(FormatErrorsResult);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { connect } from \"react-redux\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport {\n Button,\n Grid,\n InputAdornment,\n TextField,\n IconButton,\n} from \"@material-ui/core\";\nimport get from \"lodash/get\";\nimport GroupIcon from \"@material-ui/icons/Group\";\nimport { CreateIcon } from \"../../../icons\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport {\n IDirectCSIDrives,\n IDirectCSIFormatResItem,\n IDrivesResponse,\n} from \"./types\";\nimport { niceBytes } from \"../../../common/utils\";\nimport { selectDrive } from \"./actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport api from \"../../../common/api\";\nimport TableWrapper from \"../Common/TableWrapper/TableWrapper\";\nimport FormatDrives from \"./FormatDrives\";\nimport FormatErrorsResult from \"./FormatErrorsResult\";\nimport RefreshIcon from \"../../../icons/RefreshIcon\";\nimport SearchIcon from \"../../../icons/SearchIcon\";\n\ninterface IDirectCSIMain {\n classes: any;\n setErrorSnackMessage: typeof setErrorSnackMessage;\n selectDrive: typeof selectDrive;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n headerLabel: {\n fontSize: 22,\n fontWeight: 600,\n color: \"#000\",\n marginTop: 4,\n },\n tableWrapper: {\n height: \"calc(100vh - 275px)\",\n },\n notAvailableNotice: {\n border: \"#EAEDEE 1px solid\",\n backgroundColor: \"#FFF\",\n display: \"flex\",\n padding: \"19px 38px\",\n overflow: \"auto\",\n position: \"relative\",\n boxShadow: \"none\",\n minHeight: 200,\n overflowY: \"scroll\",\n borderRadius: 3,\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"calc(100vh - 275px)\",\n fontSize: 18,\n fontWeight: 600,\n textAlign: \"center\",\n },\n linkItem: {\n display: \"default\",\n color: \"#072F51\",\n textDecoration: \"none\",\n \"&:hover\": {\n textDecoration: \"underline\",\n color: \"#000\",\n },\n },\n ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst DirectCSIMain = ({\n classes,\n selectDrive,\n setErrorSnackMessage,\n}: IDirectCSIMain) => {\n const [records, setRecords] = useState([]);\n const [filter, setFilter] = useState(\"\");\n const [checkedDrives, setCheckedDrives] = useState([]);\n const [loading, setLoading] = useState(true);\n const [formatOpen, setFormatOpen] = useState(false);\n const [formatAll, setFormatAll] = useState(false);\n const [formatErrorsResult, setFormatErrorsResult] = useState<\n IDirectCSIFormatResItem[]\n >([]);\n const [formatErrorsOpen, setFormatErrorsOpen] = useState(false);\n const [drivesToFormat, setDrivesToFormat] = useState([]);\n const [notAvailable, setNotAvailable] = useState(true);\n\n useEffect(() => {\n if (loading) {\n api\n .invoke(\"GET\", \"/api/v1/direct-csi/drives\")\n .then((res: IDrivesResponse) => {\n let drives: IDirectCSIDrives[] = get(res, \"drives\", []);\n\n if (!drives) {\n drives = [];\n }\n\n drives = drives.map((item) => {\n const newItem = { ...item };\n newItem.joinName = `${newItem.node}:${newItem.drive}`;\n\n return newItem;\n });\n\n drives.sort((d1, d2) => {\n if (d1.drive > d2.drive) {\n return 1;\n }\n\n if (d1.drive < d2.drive) {\n return -1;\n }\n\n return 0;\n });\n\n setRecords(drives);\n setLoading(false);\n setNotAvailable(false);\n })\n .catch((err: ErrorResponseHandler) => {\n setLoading(false);\n setNotAvailable(true);\n });\n }\n }, [loading, setErrorSnackMessage, notAvailable]);\n\n const formatAllDrives = () => {\n const allDrives = records.map((item) => {\n return `${item.node}:${item.drive}`;\n });\n setFormatAll(true);\n setDrivesToFormat(allDrives);\n setFormatOpen(true);\n };\n\n const formatSingleUnit = (driveID: string) => {\n const selectedUnit = [driveID];\n setDrivesToFormat(selectedUnit);\n setFormatAll(false);\n setFormatOpen(true);\n };\n\n const formatSelectedDrives = () => {\n if (checkedDrives.length > 0) {\n setDrivesToFormat(checkedDrives);\n setFormatAll(false);\n setFormatOpen(true);\n }\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[] = [...checkedDrives]; // We clone the checkedDrives array\n\n if (checked) {\n // If the user has checked this field we need to push this to checkedDrivesList\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 setCheckedDrives(elements);\n\n return elements;\n };\n\n const closeFormatModal = (\n refresh: boolean,\n errorsList: IDirectCSIFormatResItem[]\n ) => {\n setFormatOpen(false);\n if (refresh) {\n // Errors are present, we trigger the modal box to show these changes.\n if (errorsList && errorsList.length > 0) {\n setFormatErrorsResult(errorsList);\n setFormatErrorsOpen(true);\n }\n setLoading(true);\n setCheckedDrives([]);\n }\n };\n\n const tableActions = [\n {\n type: \"format\",\n onClick: formatSingleUnit,\n sendOnlyId: true,\n },\n ];\n\n const filteredRecords: IDirectCSIDrives[] = records.filter((elementItem) =>\n elementItem.drive.includes(filter)\n );\n\n return (\n \n {formatOpen && (\n \n )}\n\n {formatErrorsOpen && (\n {\n setFormatErrorsOpen(false);\n }}\n />\n )}\n

Drives

\n \n \n \n \n ),\n }}\n onChange={(e) => {\n setFilter(e.target.value);\n }}\n disabled={notAvailable}\n />\n {\n setLoading(true);\n }}\n disabled={notAvailable}\n >\n \n \n }\n disabled={checkedDrives.length <= 0 || notAvailable}\n onClick={formatSelectedDrives}\n >\n Format Selected Drives\n \n }\n onClick={formatAllDrives}\n disabled={notAvailable}\n >\n Format All Drives\n \n \n\n \n
\n
\n \n {notAvailable && !loading ? (\n
\n To manage locally attached drives you need to install direct-csi,\n for more information\n
\n please follow this\n \n Link\n \n
\n ) : (\n \n )}\n
\n
\n );\n};\n\nconst mapDispatchToProps = {\n setErrorSnackMessage,\n selectDrive,\n};\n\nconst connector = connect(null, mapDispatchToProps);\n\nexport default withStyles(styles)(connector(DirectCSIMain));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\n// You should have received a copy of the GNU Affero General Public License\n// along with this program. If not, see .\n\nimport { DIRECT_CSI_SELECT_DRIVE } from \"./types\";\n\nexport const selectDrive = (driveName: string) => {\n return {\n type: DIRECT_CSI_SELECT_DRIVE,\n driveName,\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, { Fragment, useState, useEffect } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Grid, ListItem, ListItemText } from \"@material-ui/core\";\nimport { Route, Router, Switch, Redirect } from \"react-router-dom\";\nimport {\n actionsTray,\n containerForHeader,\n searchField,\n} from \"../Common/FormComponents/common/styleLibrary\";\nimport history from \"../../../history\";\nimport PageHeader from \"../Common/PageHeader/PageHeader\";\nimport StoragePVCs from \"./StoragePVCs\";\nimport DirectCSIDrives from \"../DirectCSI/DirectCSIDrives\";\nimport List from \"@material-ui/core/List\";\n\ninterface IStorageProps {\n classes: any;\n match: 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 ...actionsTray,\n ...searchField,\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst routes = [\"/storage/volumes\", \"/storage/drives\"];\n\nconst Storage = ({ classes, match }: IStorageProps) => {\n const [selectedTab, setSelectedTab] = useState(0);\n\n useEffect(() => {\n const index = routes.findIndex((route) => route === match.path);\n setSelectedTab(index);\n }, [match]);\n\n const routeChange = (newValue: number) => {\n history.push(routes[newValue]);\n };\n\n return (\n \n \n \n \n \n {\n routeChange(0);\n }}\n >\n \n \n {\n routeChange(1);\n }}\n >\n \n \n \n \n \n \n \n \n \n } />\n \n \n \n \n \n );\n};\n\nexport default withStyles(styles)(Storage);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 { LinearProgress } from \"@material-ui/core\";\nimport api from \"../../../common/api\";\nimport { Usage } from \"./types\";\nimport { setErrorSnackMessage } from \"../../../actions\";\nimport { ErrorResponseHandler } from \"../../../common/types\";\nimport PrDashboard from \"./Prometheus/PrDashboard\";\nimport BasicDashboard from \"./BasicDashboard/BasicDashboard\";\n\ninterface IMetricsSimple {\n classes: any;\n displayErrorMessage: typeof setErrorSnackMessage;\n}\n\nconst styles = (theme: Theme) => createStyles({});\n\nconst Metrics = ({ classes, displayErrorMessage }: IMetricsSimple) => {\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: ErrorResponseHandler) => {\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 {loading ? (\n \n \n \n ) : (\n \n {widgets !== null ? (\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(Metrics));\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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 } from \"react\";\nimport { createStyles, Theme, withStyles } from \"@material-ui/core/styles\";\nimport { Link } from \"react-router-dom\";\nimport { CircularProgress, IconButton } from \"@material-ui/core\";\nimport PageHeader from \"../../../Common/PageHeader/PageHeader\";\nimport { containerForHeader } from \"../../../Common/FormComponents/common/styleLibrary\";\nimport ExitToAppIcon from \"@material-ui/icons/ExitToApp\";\nimport history from \"./../../../../../history\";\nimport RefreshIcon from \"../../../../../icons/RefreshIcon\";\n\ninterface IHopSimple {\n classes: any;\n match: any;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n breadcrumLink: {\n textDecoration: \"none\",\n color: \"black\",\n },\n iframeStyle: {\n border: 0,\n position: \"absolute\",\n height: \"calc(100vh - 77px)\",\n width: \"100%\",\n },\n divContainer: {\n position: \"absolute\",\n left: 0,\n top: 77,\n height: \"calc(100vh - 77px)\",\n width: \"100%\",\n },\n loader: {\n width: 100,\n margin: \"auto\",\n marginTop: 80,\n },\n ...containerForHeader(theme.spacing(4)),\n });\n\nconst Hop = ({ classes, match }: IHopSimple) => {\n const [loading, setLoading] = useState(true);\n\n const tenantName = match.params[\"tenantName\"];\n const tenantNamespace = match.params[\"tenantNamespace\"];\n const consoleFrame = React.useRef(null);\n\n return (\n \n \n \n Tenants\n \n {` > `}\n \n {match.params[\"tenantName\"]}\n \n {` > Management`}\n
\n }\n actions={\n \n {\n if (\n consoleFrame !== null &&\n consoleFrame.current !== null &&\n consoleFrame.current.contentDocument !== null\n ) {\n const loc =\n consoleFrame.current.contentDocument.location.toString();\n\n let add = \"&\";\n\n if (loc.indexOf(\"?\") < 0) {\n add = `?`;\n }\n\n if (loc.indexOf(\"cp=y\") < 0) {\n const next = `${loc}${add}cp=y`;\n consoleFrame.current.contentDocument.location.replace(next);\n } else {\n consoleFrame.current.contentDocument.location.reload(true);\n }\n }\n }}\n >\n \n \n {\n history.push(\n `/namespaces/${tenantNamespace}/tenants/${tenantName}`\n );\n }}\n >\n \n \n \n }\n />\n
\n {loading && (\n
\n \n
\n )}\n {\n setLoading(false);\n }}\n />\n
\n \n );\n};\n\nexport default withStyles(styles)(Hop);\n","// This file is part of MinIO Console Server\n// Copyright (c) 2021 MinIO, Inc.\n//\n// This program is free software: you can redistribute it and/or modify\n// it under the terms of the GNU Affero General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// This program is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU Affero General Public License for more details.\n//\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, useLocation } 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 { ErrorResponseHandler } from \"../../common/types\";\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\";\nimport Storage from \"./Storage/Storage\";\nimport Metrics from \"./Dashboard/Metrics\";\nimport Hop from \"./Tenants/TenantDetails/hop/Hop\";\nimport MainError from \"./Common/MainError/MainError\";\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: ErrorResponseHandler) => {\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: Metrics,\n path: \"/metrics\",\n },\n {\n component: Buckets,\n path: \"/buckets\",\n },\n {\n component: Buckets,\n path: \"/buckets/*\",\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/:userName+\",\n },\n {\n component: Users,\n path: \"/users\",\n },\n {\n component: Groups,\n path: \"/groups\",\n },\n {\n component: Policies,\n path: \"/policies/:policyName\",\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: Storage,\n path: \"/storage\",\n },\n {\n component: Storage,\n path: \"/storage/volumes\",\n },\n {\n component: Storage,\n path: \"/storage/drives\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName\",\n },\n {\n component: Hop,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/hop\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/pods/:podName\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/summary\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/metrics\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/pods\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/pools\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/license\",\n },\n {\n component: TenantDetails,\n path: \"/namespaces/:tenantNamespace/tenants/:tenantName/security\",\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 if (snackBarMessage.type !== \"error\") {\n setOpenSnackbar(true);\n }\n }, [snackBarMessage]);\n\n const location = useLocation();\n\n let hideMenu = false;\n if (location.pathname === \"/metrics\") {\n hideMenu = true;\n } else if (location.pathname.endsWith(\"/hop\")) {\n hideMenu = true;\n }\n\n return (\n \n {session.status === \"ok\" ? (\n
\n \n {!hideMenu && (\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 {\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, useState } 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 const [error, setError] = useState(\"\");\n const [errorDescription, setErrorDescription] = useState(\"\");\n useEffect(() => {\n const code = (location.search.match(/code=([^&]+)/) || [])[1];\n const state = (location.search.match(/state=([^&]+)/) || [])[1];\n const error = (location.search.match(/error=([^&]+)/) || [])[1];\n const errorDescription = (location.search.match(\n /error_description=([^&]+)/\n ) || [])[1];\n if (error !== undefined || errorDescription !== undefined) {\n setError(error);\n setErrorDescription(errorDescription);\n } else {\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 }, [location.search]);\n return error !== \"\" || errorDescription !== \"\" ? (\n
\n

IDP Error:

\n

{error}

\n

{errorDescription}

\n
\n ) : 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 {\n consoleOperatorMode,\n userLoggedIn,\n setDistributedMode,\n} from \"./actions\";\nimport api from \"./common/api\";\nimport { saveSessionResponse } from \"./screens/Console/actions\";\nimport { ISessionResponse } from \"./screens/Console/types\";\n\ninterface ProtectedRouteProps {\n loggedIn: boolean;\n Component: any;\n userLoggedIn: typeof userLoggedIn;\n consoleOperatorMode: typeof consoleOperatorMode;\n saveSessionResponse: typeof saveSessionResponse;\n setDistributedMode: typeof setDistributedMode;\n}\n\nconst ProtectedRoute = ({\n Component,\n loggedIn,\n userLoggedIn,\n consoleOperatorMode,\n saveSessionResponse,\n setDistributedMode,\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 setDistributedMode(res.distributedMode || 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 }, [\n saveSessionResponse,\n consoleOperatorMode,\n userLoggedIn,\n setDistributedMode,\n ]);\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\nconst mapState = (state: AppState) => ({\n loggedIn: state.system.loggedIn,\n});\n\nconst connector = connect(mapState, {\n userLoggedIn,\n consoleOperatorMode,\n saveSessionResponse,\n setDistributedMode,\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 GLOBAL_SET_DISTRIBUTED_SETUP,\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 detailedErrorMsg: \"\",\n type: \"message\",\n },\n modalSnackBar: {\n message: \"\",\n detailedErrorMsg: \"\",\n type: \"message\",\n },\n serverDiagnosticStatus: \"\",\n distributedSetup: false,\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: {\n message: action.message,\n detailedErrorMsg: \"\",\n type: \"message\",\n },\n };\n case SET_ERROR_SNACK_MESSAGE:\n return {\n ...state,\n snackBar: {\n message: action.message.errorMessage,\n detailedErrorMsg: action.message.detailedError,\n type: \"error\",\n },\n };\n case SET_SNACK_MODAL_MESSAGE:\n return {\n ...state,\n modalSnackBar: {\n message: action.message,\n detailedErrorMsg: \"\",\n type: \"message\",\n },\n };\n case SET_MODAL_ERROR_MESSAGE:\n return {\n ...state,\n modalSnackBar: {\n message: action.message.errorMessage,\n detailedErrorMsg: action.message.detailedError,\n type: \"error\",\n },\n };\n case SET_SERVER_DIAG_STAT:\n return {\n ...state,\n serverDiagnosticStatus: action.serverDiagnosticStatus,\n };\n case GLOBAL_SET_DISTRIBUTED_SETUP:\n return {\n ...state,\n distributedSetup: action.distributedSetup,\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 TRACE_SET_STARTED,\n TraceActionTypes,\n} from \"./actions\";\nimport { TraceMessage } from \"./types\";\n\nexport interface TraceState {\n messages: TraceMessage[];\n traceStarted: boolean;\n}\n\nconst initialState: TraceState = {\n messages: [],\n traceStarted: false,\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 case TRACE_SET_STARTED:\n return {\n ...state,\n traceStarted: action.status,\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 features: [],\n distributedMode: false,\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_LOCKING,\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_RETENTION,\n ADD_BUCKET_RETENTION_MODE,\n ADD_BUCKET_RETENTION_UNIT,\n ADD_BUCKET_RETENTION_VALIDITY,\n ADD_BUCKET_VERSIONED,\n BUCKET_DETAILS_LOADING,\n BUCKET_DETAILS_SET_INFO,\n BUCKET_DETAILS_SET_TAB,\n BucketActionTypes,\n} from \"./actions\";\nimport { BucketInfo } from \"./types\";\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 bucketDetails: BucketDetailsState;\n}\n\nexport interface BucketDetailsState {\n selectedTab: string;\n loadingBucket: boolean;\n bucketInfo: BucketInfo | null;\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 bucketDetails: {\n selectedTab: \"summary\",\n loadingBucket: false,\n bucketInfo: null,\n },\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 case BUCKET_DETAILS_SET_TAB:\n return {\n ...state,\n bucketDetails: {\n ...state.bucketDetails,\n selectedTab: action.tab,\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 case BUCKET_DETAILS_LOADING:\n return {\n ...state,\n bucketDetails: {\n ...state.bucketDetails,\n loadingBucket: action.state,\n },\n };\n case BUCKET_DETAILS_SET_INFO:\n return {\n ...state,\n bucketDetails: {\n ...state.bucketDetails,\n bucketInfo: action.info,\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 .\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 REWIND_SET_ENABLE,\n REWIND_RESET_REWIND,\n ObjectBrowserActionTypes,\n} from \"./actions\";\n\nexport interface Route {\n route: string;\n label: string;\n type: string;\n}\n\nexport interface RewindItem {\n rewindEnabled: boolean;\n bucketToRewind: string;\n dateToRewind: any;\n}\n\nexport interface ObjectBrowserState {\n routesList: Route[];\n downloadingFiles: string[];\n rewind: RewindItem;\n}\n\nexport interface ObjectBrowserReducer {\n objectBrowser: ObjectBrowserState;\n}\n\nconst initialRoute = [\n { route: \"/object-browser\", label: \"All Buckets\", type: \"path\" },\n];\n\nconst defaultRewind = {\n rewindEnabled: false,\n bucketToRewind: \"\",\n dateToRewind: null,\n};\n\nconst initialState: ObjectBrowserState = {\n routesList: initialRoute,\n downloadingFiles: [],\n rewind: {\n ...defaultRewind,\n },\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 case REWIND_SET_ENABLE:\n const rewindSetEnabled = {\n ...state.rewind,\n rewindEnabled: action.state,\n bucketToRewind: action.bucket,\n dateToRewind: action.dateRewind,\n };\n return { ...state, rewind: rewindSetEnabled };\n case REWIND_RESET_REWIND:\n const resetItem = {\n rewindEnabled: false,\n bucketToRewind: \"\",\n dateToRewind: null,\n };\n return { ...state, rewind: resetItem };\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 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_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR,\n ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR,\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 TENANT_DETAILS_SET_LOADING,\n TENANT_DETAILS_SET_CURRENT_TENANT,\n TENANT_DETAILS_SET_TENANT,\n TENANT_DETAILS_SET_TAB,\n} from \"./types\";\nimport { KeyPair } from \"./ListTenants/utils\";\nimport { getRandomString } from \"./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 customDockerhub: false,\n imageRegistry: \"\",\n imageRegistryUsername: \"\",\n imageRegistryPassword: \"\",\n exposeMinIO: true,\n exposeConsole: true,\n logSearchCustom: false,\n prometheusCustom: false,\n logSearchVolumeSize: \"5\",\n logSearchSizeFactor: \"Gi\",\n logSearchImage: \"\",\n kesImage: \"\",\n logSearchPostgresImage: \"\",\n logSearchPostgresInitImage: \"\",\n prometheusVolumeSize: \"5\",\n prometheusSizeFactor: \"Gi\",\n logSearchSelectedStorageClass: \"\",\n prometheusSelectedStorageClass: \"\",\n prometheusImage: \"\",\n prometheusSidecarImage: \"\",\n prometheusInitImage: \"\",\n },\n identityProvider: {\n idpSelection: \"Built-in\",\n accessKeys: [getRandomString(16)],\n secretKeys: [getRandomString(32)],\n openIDURL: \"\",\n openIDConfigurationURL: \"\",\n openIDClientID: \"\",\n openIDSecretID: \"\",\n openIDCallbackURL: \"\",\n openIDClaimName: \"\",\n openIDScopes: \"\",\n ADURL: \"\",\n ADSkipTLS: false,\n ADServerInsecure: false,\n ADUserNameSearchFilter: \"\",\n ADGroupSearchBaseDN: \"\",\n ADGroupSearchFilter: \"\",\n ADGroupNameAttribute: \"\",\n ADUserDNs: [\"\"],\n ADUserNameFormat: \"\",\n ADLookupBindDN: \"\",\n ADLookupBindPassword: \"\",\n ADUserDNSearchBaseDN: \"\",\n ADUserDNSearchFilter: \"\",\n ADServerStartTLS: false,\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 affinity: {\n nodeSelectorLabels: \"\",\n podAffinity: \"default\",\n withPodAntiAffinity: true,\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 consoleCaCertificates: [\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 tenantDetails: {\n currentTenant: \"\",\n currentNamespace: \"\",\n loadingTenant: false,\n tenantInfo: null,\n currentTab: \"summary\",\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: any = {};\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.caCertificates;\n if (CACertsList.length > 1) {\n const cleanCaCertsList = CACertsList.filter(\n (item: KeyPair) => item.id !== action.id\n );\n newState.createTenant.certificates.caCertificates = [\n ...cleanCaCertsList,\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_ADD_CONSOLE_CA_KEYPAIR:\n const ConsoleCACerts = [\n ...state.createTenant.certificates.consoleCaCertificates,\n {\n id: Date.now().toString(),\n key: \"\",\n cert: \"\",\n encoded_key: \"\",\n encoded_cert: \"\",\n },\n ];\n newState.createTenant.certificates.consoleCaCertificates = [\n ...ConsoleCACerts,\n ];\n return { ...newState };\n case ADD_TENANT_ADD_FILE_TO_CONSOLE_CA_KEYPAIR:\n const consoleCaCertificates =\n state.createTenant.certificates.consoleCaCertificates;\n\n const consoleNACList = consoleCaCertificates.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.consoleCaCertificates = [\n ...consoleNACList,\n ];\n return { ...newState };\n case ADD_TENANT_DELETE_CONSOLE_CA_KEYPAIR:\n const consoleCACertsList =\n state.createTenant.certificates.consoleCaCertificates;\n if (consoleCACertsList.length > 1) {\n const cleanCaCertsList = consoleCACertsList.filter(\n (item: KeyPair) => item.id !== action.id\n );\n newState.createTenant.certificates.consoleCaCertificates = [\n ...cleanCaCertsList,\n ];\n return { ...newState };\n }\n return { ...state };\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 customDockerhub: false,\n imageRegistry: \"\",\n imageRegistryUsername: \"\",\n imageRegistryPassword: \"\",\n exposeMinIO: true,\n exposeConsole: true,\n logSearchCustom: false,\n prometheusCustom: false,\n logSearchVolumeSize: \"5\",\n logSearchSizeFactor: \"Gi\",\n logSearchSelectedStorageClass: \"\",\n logSearchImage: \"\",\n kesImage: \"\",\n logSearchPostgresImage: \"\",\n logSearchPostgresInitImage: \"\",\n prometheusVolumeSize: \"5\",\n prometheusSizeFactor: \"Gi\",\n prometheusSelectedStorageClass: \"\",\n prometheusImage: \"\",\n prometheusSidecarImage: \"\",\n prometheusInitImage: \"\",\n },\n identityProvider: {\n idpSelection: \"Built-in\",\n accessKeys: [getRandomString(16)],\n secretKeys: [getRandomString(32)],\n openIDURL: \"\",\n openIDConfigurationURL: \"\",\n openIDClientID: \"\",\n openIDSecretID: \"\",\n openIDCallbackURL: \"\",\n openIDClaimName: \"\",\n openIDScopes: \"\",\n ADURL: \"\",\n ADSkipTLS: false,\n ADServerInsecure: false,\n ADUserNameSearchFilter: \"\",\n ADGroupSearchBaseDN: \"\",\n ADGroupSearchFilter: \"\",\n ADGroupNameAttribute: \"\",\n ADUserDNs: [\"\"],\n ADUserNameFormat: \"\",\n ADLookupBindDN: \"\",\n ADLookupBindPassword: \"\",\n ADUserDNSearchBaseDN: \"\",\n ADUserDNSearchFilter: \"\",\n ADServerStartTLS: false,\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 affinity: {\n nodeSelectorLabels: \"\",\n podAffinity: \"default\",\n withPodAntiAffinity: true,\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 consoleCaCertificates: [\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 case TENANT_DETAILS_SET_LOADING:\n const tenantDetails = {\n ...state.tenantDetails,\n loadingTenant: action.state,\n };\n return {\n ...state,\n tenantDetails: {\n ...tenantDetails,\n },\n };\n case TENANT_DETAILS_SET_CURRENT_TENANT:\n const currentTenant = {\n ...state.tenantDetails,\n currentTenant: action.name,\n currentNamespace: action.namespace,\n };\n return {\n ...state,\n tenantDetails: {\n ...currentTenant,\n },\n };\n case TENANT_DETAILS_SET_TENANT:\n let tenantData = null;\n if (action.tenant) {\n tenantData = { tenantInfo: { ...action.tenant } };\n }\n const setTenant = { ...state.tenantDetails, ...tenantData };\n return {\n ...state,\n tenantDetails: {\n ...setTenant,\n },\n };\n case TENANT_DETAILS_SET_TAB:\n const newTab = { ...state.tenantDetails, currentTab: action.tab };\n return {\n ...state,\n tenantDetails: {\n ...newTab,\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 {\n DirectCSITypes,\n DIRECT_CSI_SELECT_DRIVE,\n IDirectCSIState,\n} from \"./types\";\n\nconst initialState: IDirectCSIState = {\n selectedDrive: \"\",\n};\n\nexport function directCSIReducer(\n state = initialState,\n action: DirectCSITypes\n): IDirectCSIState {\n switch (action.type) {\n case DIRECT_CSI_SELECT_DRIVE:\n if (action.driveName !== \"\") {\n const newState = { ...state };\n newState.selectedDrive = action.driveName;\n return newState;\n }\n return state;\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\";\nimport { directCSIReducer } from \"./screens/Console/DirectCSI/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 directCSI: directCSIReducer,\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: \"#FAFAFA\",\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 MuiPaper: {\n elevation1: {\n boxShadow: \"none\",\n border: \"#EAEDEE 1px solid\",\n borderRadius: 3,\n },\n },\n MuiListItem: {\n root: {\n \"&.MuiListItem-root.Mui-selected\": {\n background: \"inherit\",\n \"& .MuiTypography-root\": {\n fontWeight: \"bold\",\n },\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 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":""}