Compare commits

..

22 Commits

Author SHA1 Message Date
Daniel Valdivia
fc490a1ca8 Release v0.15.11 (#1830) 2022-04-11 20:32:10 -07:00
Daniel Valdivia
6e6aab580c Replace aws:username, jwt: and ldap: policy variables in session policies (#1828)
* Replace username variable in session policies

Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
2022-04-11 20:01:49 -07:00
Alex
dc5b1963ae Fixed typo in create tenant screen (#1829)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
2022-04-11 19:13:37 -07:00
Daniel Valdivia
564cfa2201 Remove ResponseHeaderTimeout from default http transport (#1827)
Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
2022-04-11 17:18:22 -07:00
Lenin Alevski
398ab028a4 Removing hardcoded timeouts (#1826)
Signed-off-by: Lenin Alevski <alevsk.8772@gmail.com>
2022-04-11 16:20:30 -07:00
jinapurapu
1de712c099 Added titleIcon to UserAddServiceAccount modal (#1825) 2022-04-11 14:15:20 -07:00
jinapurapu
2d26eb4a70 Updated Tiers help text for consistency with button (#1824) 2022-04-11 12:54:53 -07:00
Cesar Celis Hernandez
e9cc567977 correcting the testing package (#1819) 2022-04-11 09:56:16 -07:00
Daniel Valdivia
ee82748aeb Release v0.15.10 (#1820)
Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
2022-04-09 18:05:04 -07:00
Prakash Senthil Vel
ee3affd140 UI site replication (#1807) 2022-04-09 16:27:25 -07:00
dependabot[bot]
836090a0d5 Bump moment from 2.29.1 to 2.29.2 in /portal-ui (#1817)
Signed-off-by: dependabot[bot] <support@github.com>
2022-04-09 00:38:56 -07:00
Alex
e0e5e42af2 Remove duplicated versioned item in breadcrumbs (#1816) 2022-04-08 22:20:25 -06:00
Alex
49f340b5f8 Fixed assign policies screens (#1815) 2022-04-08 09:38:23 -07:00
Alex
404a10d3c7 Added fixed background color to pie chart (#1812)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
2022-04-07 21:03:17 -07:00
Daniel Valdivia
62e270e95e Tenant Forms alignment. Components Page. (#1811)
Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
2022-04-07 20:06:28 -07:00
Alex
bfbaaf12fb Add Edit pool capability (#1806)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
2022-04-07 19:24:37 -07:00
Lenin Alevski
0aa9c7b36e Updating operator dependency to latest (#1810)
Signed-off-by: Lenin Alevski <alevsk.8772@gmail.com>
2022-04-07 19:08:35 -07:00
Lenin Alevski
8540168133 Identity Provider screen for TenantDetails (#1809)
- fixing encryption page styles
- removing extra fields on gemalto configuration
- backend endpoints for tenant identity provider details
- force restart tenant pods when identity provider configuration change
- force restart tenant pods when tls certificates change
- existing tls secrets are not deleted from tenant namespace, just removed from the tenant

Signed-off-by: Lenin Alevski <alevsk.8772@gmail.com>
2022-04-07 18:40:09 -07:00
Daniel Valdivia
02a35fb8d1 Operator UI Adjustments (#1805)
Signed-off-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
2022-04-06 19:08:24 -07:00
Prakash Senthil Vel
4647671f07 UX Basic Dashboard (#1799) 2022-04-05 22:48:35 -07:00
adfost
f30450c3c1 Adding usage objects and versions to tiers (#1796) 2022-04-05 22:31:09 -07:00
CommanderRoot
731501ba27 refactor: replace deprecated String.prototype.substr() (#1800)
.substr() is deprecated so we replace it with functions which work similarily but aren't deprecated

Signed-off-by: Tobias Speicher <rootcommander@gmail.com>
2022-04-05 17:42:20 -05:00
565 changed files with 9799 additions and 4145 deletions

View File

@@ -1142,7 +1142,7 @@ jobs:
result=${result%\%}
echo "result:"
echo $result
threshold=54.00
threshold=35.20
if (( $(echo "$result >= $threshold" |bc -l) )); then
echo "It is equal or greater than threshold, passed!"
else

View File

@@ -182,7 +182,7 @@ test-sso-integration:
test-operator-integration:
@(echo "Start cd operator-integration && go test:")
@(pwd)
@(cd operator-integration && go test -coverpkg=../restapi -c -tags testrunmain . && mkdir -p coverage && ./operator-integration.test -test.v -test.run "^Test*" -test.coverprofile=coverage/operator-api.out)
@(cd operator-integration && go test -coverpkg=../operatorapi -c -tags testrunmain . && mkdir -p coverage && ./operator-integration.test -test.v -test.run "^Test*" -test.coverprofile=coverage/operator-api.out)
test-operator:
@(env bash $(PWD)/portal-ui/tests/scripts/operator.sh)

2
go.mod
View File

@@ -22,7 +22,7 @@ require (
github.com/minio/madmin-go v1.3.5
github.com/minio/mc v0.0.0-20220302011226-f13defa54577
github.com/minio/minio-go/v7 v7.0.23
github.com/minio/operator v0.0.0-20220401213108-1e35dbf22c40
github.com/minio/operator v0.0.0-20220408011517-5adaef906d93
github.com/minio/pkg v1.1.20
github.com/minio/selfupdate v0.4.0
github.com/mitchellh/go-homedir v1.1.0

967
go.sum

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,9 @@
package integration
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
@@ -70,3 +72,66 @@ func TestLoginStrategy(t *testing.T) {
}
}
func TestLogout(t *testing.T) {
assert := assert.New(t)
// image for now:
// minio: 9000
// console: 9090
client := &http.Client{
Timeout: 2 * time.Second,
}
requestData := map[string]string{
"accessKey": "minioadmin",
"secretKey": "minioadmin",
}
requestDataJSON, _ := json.Marshal(requestData)
requestDataBody := bytes.NewReader(requestDataJSON)
request, err := http.NewRequest("POST", "http://localhost:9090/api/v1/login", requestDataBody)
if err != nil {
log.Println(err)
return
}
request.Header.Add("Content-Type", "application/json")
response, err := client.Do(request)
assert.NotNil(response, "Login response is nil")
assert.Nil(err, "Login errored out")
var loginToken string
for _, cookie := range response.Cookies() {
if cookie.Name == "token" {
loginToken = cookie.Value
break
}
}
if loginToken == "" {
log.Println("authentication token not found in cookies response")
return
}
request, err = http.NewRequest("POST", "http://localhost:9090/api/v1/logout", requestDataBody)
if err != nil {
log.Println(err)
return
}
request.Header.Add("Cookie", fmt.Sprintf("token=%s", loginToken))
request.Header.Add("Content-Type", "application/json")
response, err = client.Do(request)
assert.NotNil(response, "Logout response is nil")
assert.Nil(err, "Logout errored out")
assert.Equal(response.StatusCode, 200)
}

55
integration/tiers_test.go Normal file
View File

@@ -0,0 +1,55 @@
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package integration
import (
"fmt"
"log"
"net/http"
"testing"
"time"
"github.com/stretchr/testify/assert"
)
func TestTiersList(t *testing.T) {
assert := assert.New(t)
// image for now:
// minio: 9000
// console: 9090
client := &http.Client{
Timeout: 2 * time.Second,
}
request, err := http.NewRequest("GET", "http://localhost:9090/api/v1/admin/tiers", nil)
if err != nil {
log.Println(err)
return
}
request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
request.Header.Add("Content-Type", "application/json")
response, err := client.Do(request)
assert.NotNil(response, "Tiers List response is nil")
assert.Nil(err, "Tiers List errored out")
assert.Equal(response.StatusCode, 200)
}

View File

@@ -15,7 +15,7 @@ spec:
serviceAccountName: console-sa
containers:
- name: console
image: 'minio/console:v0.15.9'
image: 'minio/console:v0.15.11'
imagePullPolicy: "IfNotPresent"
env:
- name: CONSOLE_OPERATOR_MODE

View File

@@ -32,7 +32,7 @@ spec:
spec:
containers:
- name: console
image: 'minio/console:v0.15.9'
image: 'minio/console:v0.15.11'
imagePullPolicy: "IfNotPresent"
env:
- name: CONSOLE_MINIO_SERVER

View File

@@ -237,7 +237,8 @@ type IdpConfigurationActiveDirectory struct {
GroupSearchFilter string `json:"group_search_filter,omitempty"`
// lookup bind dn
LookupBindDn string `json:"lookup_bind_dn,omitempty"`
// Required: true
LookupBindDn *string `json:"lookup_bind_dn"`
// lookup bind password
LookupBindPassword string `json:"lookup_bind_password,omitempty"`
@@ -269,6 +270,10 @@ type IdpConfigurationActiveDirectory struct {
func (m *IdpConfigurationActiveDirectory) Validate(formats strfmt.Registry) error {
var res []error
if err := m.validateLookupBindDn(formats); err != nil {
res = append(res, err)
}
if err := m.validateURL(formats); err != nil {
res = append(res, err)
}
@@ -279,6 +284,15 @@ func (m *IdpConfigurationActiveDirectory) Validate(formats strfmt.Registry) erro
return nil
}
func (m *IdpConfigurationActiveDirectory) validateLookupBindDn(formats strfmt.Registry) error {
if err := validate.Required("active_directory"+"."+"lookup_bind_dn", "body", m.LookupBindDn); err != nil {
return err
}
return nil
}
func (m *IdpConfigurationActiveDirectory) validateURL(formats strfmt.Registry) error {
if err := validate.Required("active_directory"+"."+"url", "body", m.URL); err != nil {

View File

@@ -49,11 +49,20 @@ type TierAzure struct {
// name
Name string `json:"name,omitempty"`
// objects
Objects string `json:"objects,omitempty"`
// prefix
Prefix string `json:"prefix,omitempty"`
// region
Region string `json:"region,omitempty"`
// usage
Usage string `json:"usage,omitempty"`
// versions
Versions string `json:"versions,omitempty"`
}
// Validate validates this tier azure

View File

@@ -46,11 +46,20 @@ type TierGcs struct {
// name
Name string `json:"name,omitempty"`
// objects
Objects string `json:"objects,omitempty"`
// prefix
Prefix string `json:"prefix,omitempty"`
// region
Region string `json:"region,omitempty"`
// usage
Usage string `json:"usage,omitempty"`
// versions
Versions string `json:"versions,omitempty"`
}
// Validate validates this tier gcs

View File

@@ -46,6 +46,9 @@ type TierS3 struct {
// name
Name string `json:"name,omitempty"`
// objects
Objects string `json:"objects,omitempty"`
// prefix
Prefix string `json:"prefix,omitempty"`
@@ -57,6 +60,12 @@ type TierS3 struct {
// storageclass
Storageclass string `json:"storageclass,omitempty"`
// usage
Usage string `json:"usage,omitempty"`
// versions
Versions string `json:"versions,omitempty"`
}
// Validate validates this tier s3

View File

@@ -34,8 +34,8 @@ import (
"github.com/go-openapi/loads"
"github.com/minio/console/models"
"github.com/minio/console/restapi"
"github.com/minio/console/restapi/operations"
"github.com/minio/console/operatorapi"
"github.com/minio/console/operatorapi/operations"
"github.com/stretchr/testify/assert"
)
@@ -87,11 +87,11 @@ func printEndFunc(functionName string) {
fmt.Println("")
}
func initConsoleServer() (*restapi.Server, error) {
func initConsoleServer() (*operatorapi.Server, error) {
//os.Setenv("CONSOLE_MINIO_SERVER", "localhost:9000")
swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
swaggerSpec, err := loads.Embedded(operatorapi.SwaggerJSON, operatorapi.FlatSwaggerJSON)
if err != nil {
return nil, err
}
@@ -101,24 +101,22 @@ func initConsoleServer() (*restapi.Server, error) {
}
// Initialize MinIO loggers
restapi.LogInfo = noLog
restapi.LogError = noLog
operatorapi.LogInfo = noLog
operatorapi.LogError = noLog
api := operations.NewConsoleAPI(swaggerSpec)
api := operations.NewOperatorAPI(swaggerSpec)
api.Logger = noLog
server := restapi.NewServer(api)
server := operatorapi.NewServer(api)
// register all APIs
server.ConfigureAPI()
//restapi.GlobalRootCAs, restapi.GlobalPublicCerts, restapi.GlobalTLSCertsManager = globalRootCAs, globalPublicCerts, globalTLSCerts
consolePort, _ := strconv.Atoi("9090")
server.Host = "0.0.0.0"
server.Port = consolePort
restapi.Port = "9090"
restapi.Hostname = "0.0.0.0"
operatorapi.Port = "9090"
operatorapi.Hostname = "0.0.0.0"
return server, nil
}
@@ -529,3 +527,40 @@ func TestListNodeLabels(t *testing.T) {
strings.Contains(finalResponse, "beta.kubernetes.io/arch"),
finalResponse)
}
func GetPodEvents(nameSpace string, tenant string, podName string) (*http.Response, error) {
/*
Helper function to get events for pod
URL: /namespaces/{namespace}/tenants/{tenant}/pods/{podName}/events
HTTP Verb: GET
*/
request, err := http.NewRequest(
"GET", "http://localhost:9090/api/v1/namespaces/"+nameSpace+"/tenants/"+tenant+"/pods/"+podName+"/events", nil)
if err != nil {
log.Println(err)
}
request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
request.Header.Add("Content-Type", "application/json")
client := &http.Client{
Timeout: 2 * time.Second,
}
response, err := client.Do(request)
return response, err
}
func TestGetPodEvents(t *testing.T) {
assert := assert.New(t)
namespace := "tenant-lite"
tenant := "storage-lite"
podName := "storage-lite-pool-0-0"
resp, err := GetPodEvents(namespace, tenant, podName)
assert.Nil(err)
if err != nil {
log.Println(err)
return
}
if resp != nil {
assert.Equal(
200, resp.StatusCode, "Status Code is incorrect")
}
}

View File

@@ -76,7 +76,8 @@ func checkServiceAccountTokenValid(ctx context.Context, operatorClient OperatorC
// GetConsoleCredentialsForOperator will validate the provided JWT (service account token) and return it in the form of credentials.Login
func GetConsoleCredentialsForOperator(jwt string) (*credentials.Credentials, error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(jwt)
if err != nil {
return nil, err

View File

@@ -803,6 +803,83 @@ func init() {
}
}
},
"/namespaces/{namespace}/tenants/{tenant}/identity-provider": {
"get": {
"tags": [
"OperatorAPI"
],
"summary": "Tenant Identity Provider",
"operationId": "TenantIdentityProvider",
"parameters": [
{
"type": "string",
"name": "namespace",
"in": "path",
"required": true
},
{
"type": "string",
"name": "tenant",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/idpConfiguration"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"post": {
"tags": [
"OperatorAPI"
],
"summary": "Update Tenant Identity Provider",
"operationId": "UpdateTenantIdentityProvider",
"parameters": [
{
"type": "string",
"name": "namespace",
"in": "path",
"required": true
},
{
"type": "string",
"name": "tenant",
"in": "path",
"required": true
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/idpConfiguration"
}
}
],
"responses": {
"204": {
"description": "A successful response."
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
},
"/namespaces/{namespace}/tenants/{tenant}/log": {
"get": {
"tags": [
@@ -2434,7 +2511,8 @@ func init() {
"active_directory": {
"type": "object",
"required": [
"url"
"url",
"lookup_bind_dn"
],
"properties": {
"group_search_base_dn": {
@@ -4719,6 +4797,83 @@ func init() {
}
}
},
"/namespaces/{namespace}/tenants/{tenant}/identity-provider": {
"get": {
"tags": [
"OperatorAPI"
],
"summary": "Tenant Identity Provider",
"operationId": "TenantIdentityProvider",
"parameters": [
{
"type": "string",
"name": "namespace",
"in": "path",
"required": true
},
{
"type": "string",
"name": "tenant",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/idpConfiguration"
}
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
},
"post": {
"tags": [
"OperatorAPI"
],
"summary": "Update Tenant Identity Provider",
"operationId": "UpdateTenantIdentityProvider",
"parameters": [
{
"type": "string",
"name": "namespace",
"in": "path",
"required": true
},
{
"type": "string",
"name": "tenant",
"in": "path",
"required": true
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/idpConfiguration"
}
}
],
"responses": {
"204": {
"description": "A successful response."
},
"default": {
"description": "Generic error response.",
"schema": {
"$ref": "#/definitions/error"
}
}
}
}
},
"/namespaces/{namespace}/tenants/{tenant}/log": {
"get": {
"tags": [
@@ -5971,7 +6126,8 @@ func init() {
"IdpConfigurationActiveDirectory": {
"type": "object",
"required": [
"url"
"url",
"lookup_bind_dn"
],
"properties": {
"group_search_base_dn": {
@@ -7192,7 +7348,8 @@ func init() {
"active_directory": {
"type": "object",
"required": [
"url"
"url",
"lookup_bind_dn"
],
"properties": {
"group_search_base_dn": {

View File

@@ -21,7 +21,6 @@ import (
"fmt"
"math/rand"
"net/http"
"time"
xoauth2 "golang.org/x/oauth2"
@@ -127,7 +126,7 @@ func verifyUserAgainstIDP(ctx context.Context, provider auth.IdentityProviderI,
}
func getLoginOauth2AuthResponse(r *http.Request, lr *models.LoginOauth2AuthRequest) (*models.LoginResponse, *models.Error) {
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if oauth2.IsIDPEnabled() {
// initialize new oauth2 client

View File

@@ -44,8 +44,8 @@ func registerNamespaceHandlers(api *operations.OperatorAPI) {
}
func getNamespaceCreatedResponse(session *models.Principal, params operator_api.CreateNamespaceParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {

View File

@@ -358,7 +358,8 @@ OUTER:
// Get allocatable resources response
func getAllocatableResourcesResponse(numNodes int32, session *models.Principal) (*models.AllocatableResourcesResponse, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
client, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)

View File

@@ -189,6 +189,9 @@ func NewOperatorAPI(spec *loads.Document) *OperatorAPI {
OperatorAPITenantEncryptionInfoHandler: operator_api.TenantEncryptionInfoHandlerFunc(func(params operator_api.TenantEncryptionInfoParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation operator_api.TenantEncryptionInfo has not yet been implemented")
}),
OperatorAPITenantIdentityProviderHandler: operator_api.TenantIdentityProviderHandlerFunc(func(params operator_api.TenantIdentityProviderParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation operator_api.TenantIdentityProvider has not yet been implemented")
}),
OperatorAPITenantSecurityHandler: operator_api.TenantSecurityHandlerFunc(func(params operator_api.TenantSecurityParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation operator_api.TenantSecurity has not yet been implemented")
}),
@@ -204,6 +207,9 @@ func NewOperatorAPI(spec *loads.Document) *OperatorAPI {
OperatorAPIUpdateTenantHandler: operator_api.UpdateTenantHandlerFunc(func(params operator_api.UpdateTenantParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation operator_api.UpdateTenant has not yet been implemented")
}),
OperatorAPIUpdateTenantIdentityProviderHandler: operator_api.UpdateTenantIdentityProviderHandlerFunc(func(params operator_api.UpdateTenantIdentityProviderParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation operator_api.UpdateTenantIdentityProvider has not yet been implemented")
}),
OperatorAPIUpdateTenantSecurityHandler: operator_api.UpdateTenantSecurityHandlerFunc(func(params operator_api.UpdateTenantSecurityParams, principal *models.Principal) middleware.Responder {
return middleware.NotImplemented("operation operator_api.UpdateTenantSecurity has not yet been implemented")
}),
@@ -340,6 +346,8 @@ type OperatorAPI struct {
OperatorAPITenantDetailsHandler operator_api.TenantDetailsHandler
// OperatorAPITenantEncryptionInfoHandler sets the operation handler for the tenant encryption info operation
OperatorAPITenantEncryptionInfoHandler operator_api.TenantEncryptionInfoHandler
// OperatorAPITenantIdentityProviderHandler sets the operation handler for the tenant identity provider operation
OperatorAPITenantIdentityProviderHandler operator_api.TenantIdentityProviderHandler
// OperatorAPITenantSecurityHandler sets the operation handler for the tenant security operation
OperatorAPITenantSecurityHandler operator_api.TenantSecurityHandler
// OperatorAPITenantUpdateCertificateHandler sets the operation handler for the tenant update certificate operation
@@ -350,6 +358,8 @@ type OperatorAPI struct {
OperatorAPITenantUpdatePoolsHandler operator_api.TenantUpdatePoolsHandler
// OperatorAPIUpdateTenantHandler sets the operation handler for the update tenant operation
OperatorAPIUpdateTenantHandler operator_api.UpdateTenantHandler
// OperatorAPIUpdateTenantIdentityProviderHandler sets the operation handler for the update tenant identity provider operation
OperatorAPIUpdateTenantIdentityProviderHandler operator_api.UpdateTenantIdentityProviderHandler
// OperatorAPIUpdateTenantSecurityHandler sets the operation handler for the update tenant security operation
OperatorAPIUpdateTenantSecurityHandler operator_api.UpdateTenantSecurityHandler
@@ -559,6 +569,9 @@ func (o *OperatorAPI) Validate() error {
if o.OperatorAPITenantEncryptionInfoHandler == nil {
unregistered = append(unregistered, "operator_api.TenantEncryptionInfoHandler")
}
if o.OperatorAPITenantIdentityProviderHandler == nil {
unregistered = append(unregistered, "operator_api.TenantIdentityProviderHandler")
}
if o.OperatorAPITenantSecurityHandler == nil {
unregistered = append(unregistered, "operator_api.TenantSecurityHandler")
}
@@ -574,6 +587,9 @@ func (o *OperatorAPI) Validate() error {
if o.OperatorAPIUpdateTenantHandler == nil {
unregistered = append(unregistered, "operator_api.UpdateTenantHandler")
}
if o.OperatorAPIUpdateTenantIdentityProviderHandler == nil {
unregistered = append(unregistered, "operator_api.UpdateTenantIdentityProviderHandler")
}
if o.OperatorAPIUpdateTenantSecurityHandler == nil {
unregistered = append(unregistered, "operator_api.UpdateTenantSecurityHandler")
}
@@ -846,6 +862,10 @@ func (o *OperatorAPI) initHandlerCache() {
if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler)
}
o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/identity-provider"] = operator_api.NewTenantIdentityProvider(o.context, o.OperatorAPITenantIdentityProviderHandler)
if o.handlers["GET"] == nil {
o.handlers["GET"] = make(map[string]http.Handler)
}
o.handlers["GET"]["/namespaces/{namespace}/tenants/{tenant}/security"] = operator_api.NewTenantSecurity(o.context, o.OperatorAPITenantSecurityHandler)
if o.handlers["PUT"] == nil {
o.handlers["PUT"] = make(map[string]http.Handler)
@@ -866,6 +886,10 @@ func (o *OperatorAPI) initHandlerCache() {
if o.handlers["POST"] == nil {
o.handlers["POST"] = make(map[string]http.Handler)
}
o.handlers["POST"]["/namespaces/{namespace}/tenants/{tenant}/identity-provider"] = operator_api.NewUpdateTenantIdentityProvider(o.context, o.OperatorAPIUpdateTenantIdentityProviderHandler)
if o.handlers["POST"] == nil {
o.handlers["POST"] = make(map[string]http.Handler)
}
o.handlers["POST"]["/namespaces/{namespace}/tenants/{tenant}/security"] = operator_api.NewUpdateTenantSecurity(o.context, o.OperatorAPIUpdateTenantSecurityHandler)
}

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// TenantIdentityProviderHandlerFunc turns a function with the right signature into a tenant identity provider handler
type TenantIdentityProviderHandlerFunc func(TenantIdentityProviderParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn TenantIdentityProviderHandlerFunc) Handle(params TenantIdentityProviderParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// TenantIdentityProviderHandler interface for that can handle valid tenant identity provider params
type TenantIdentityProviderHandler interface {
Handle(TenantIdentityProviderParams, *models.Principal) middleware.Responder
}
// NewTenantIdentityProvider creates a new http.Handler for the tenant identity provider operation
func NewTenantIdentityProvider(ctx *middleware.Context, handler TenantIdentityProviderHandler) *TenantIdentityProvider {
return &TenantIdentityProvider{Context: ctx, Handler: handler}
}
/* TenantIdentityProvider swagger:route GET /namespaces/{namespace}/tenants/{tenant}/identity-provider OperatorAPI tenantIdentityProvider
Tenant Identity Provider
*/
type TenantIdentityProvider struct {
Context *middleware.Context
Handler TenantIdentityProviderHandler
}
func (o *TenantIdentityProvider) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewTenantIdentityProviderParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,112 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
)
// NewTenantIdentityProviderParams creates a new TenantIdentityProviderParams object
//
// There are no default values defined in the spec.
func NewTenantIdentityProviderParams() TenantIdentityProviderParams {
return TenantIdentityProviderParams{}
}
// TenantIdentityProviderParams contains all the bound params for the tenant identity provider operation
// typically these are obtained from a http.Request
//
// swagger:parameters TenantIdentityProvider
type TenantIdentityProviderParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*
Required: true
In: path
*/
Namespace string
/*
Required: true
In: path
*/
Tenant string
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewTenantIdentityProviderParams() beforehand.
func (o *TenantIdentityProviderParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace")
if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil {
res = append(res, err)
}
rTenant, rhkTenant, _ := route.Params.GetOK("tenant")
if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// bindNamespace binds and validates parameter Namespace from path.
func (o *TenantIdentityProviderParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
// Parameter is provided by construction from the route
o.Namespace = raw
return nil
}
// bindTenant binds and validates parameter Tenant from path.
func (o *TenantIdentityProviderParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
// Parameter is provided by construction from the route
o.Tenant = raw
return nil
}

View File

@@ -0,0 +1,133 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// TenantIdentityProviderOKCode is the HTTP code returned for type TenantIdentityProviderOK
const TenantIdentityProviderOKCode int = 200
/*TenantIdentityProviderOK A successful response.
swagger:response tenantIdentityProviderOK
*/
type TenantIdentityProviderOK struct {
/*
In: Body
*/
Payload *models.IdpConfiguration `json:"body,omitempty"`
}
// NewTenantIdentityProviderOK creates TenantIdentityProviderOK with default headers values
func NewTenantIdentityProviderOK() *TenantIdentityProviderOK {
return &TenantIdentityProviderOK{}
}
// WithPayload adds the payload to the tenant identity provider o k response
func (o *TenantIdentityProviderOK) WithPayload(payload *models.IdpConfiguration) *TenantIdentityProviderOK {
o.Payload = payload
return o
}
// SetPayload sets the payload to the tenant identity provider o k response
func (o *TenantIdentityProviderOK) SetPayload(payload *models.IdpConfiguration) {
o.Payload = payload
}
// WriteResponse to the client
func (o *TenantIdentityProviderOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(200)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}
/*TenantIdentityProviderDefault Generic error response.
swagger:response tenantIdentityProviderDefault
*/
type TenantIdentityProviderDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewTenantIdentityProviderDefault creates TenantIdentityProviderDefault with default headers values
func NewTenantIdentityProviderDefault(code int) *TenantIdentityProviderDefault {
if code <= 0 {
code = 500
}
return &TenantIdentityProviderDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the tenant identity provider default response
func (o *TenantIdentityProviderDefault) WithStatusCode(code int) *TenantIdentityProviderDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the tenant identity provider default response
func (o *TenantIdentityProviderDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the tenant identity provider default response
func (o *TenantIdentityProviderDefault) WithPayload(payload *models.Error) *TenantIdentityProviderDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the tenant identity provider default response
func (o *TenantIdentityProviderDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *TenantIdentityProviderDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,124 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
"strings"
)
// TenantIdentityProviderURL generates an URL for the tenant identity provider operation
type TenantIdentityProviderURL struct {
Namespace string
Tenant string
_basePath string
// avoid unkeyed usage
_ struct{}
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *TenantIdentityProviderURL) WithBasePath(bp string) *TenantIdentityProviderURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *TenantIdentityProviderURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *TenantIdentityProviderURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/namespaces/{namespace}/tenants/{tenant}/identity-provider"
namespace := o.Namespace
if namespace != "" {
_path = strings.Replace(_path, "{namespace}", namespace, -1)
} else {
return nil, errors.New("namespace is required on TenantIdentityProviderURL")
}
tenant := o.Tenant
if tenant != "" {
_path = strings.Replace(_path, "{tenant}", tenant, -1)
} else {
return nil, errors.New("tenant is required on TenantIdentityProviderURL")
}
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *TenantIdentityProviderURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *TenantIdentityProviderURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *TenantIdentityProviderURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on TenantIdentityProviderURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on TenantIdentityProviderURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *TenantIdentityProviderURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -0,0 +1,88 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"net/http"
"github.com/go-openapi/runtime/middleware"
"github.com/minio/console/models"
)
// UpdateTenantIdentityProviderHandlerFunc turns a function with the right signature into a update tenant identity provider handler
type UpdateTenantIdentityProviderHandlerFunc func(UpdateTenantIdentityProviderParams, *models.Principal) middleware.Responder
// Handle executing the request and returning a response
func (fn UpdateTenantIdentityProviderHandlerFunc) Handle(params UpdateTenantIdentityProviderParams, principal *models.Principal) middleware.Responder {
return fn(params, principal)
}
// UpdateTenantIdentityProviderHandler interface for that can handle valid update tenant identity provider params
type UpdateTenantIdentityProviderHandler interface {
Handle(UpdateTenantIdentityProviderParams, *models.Principal) middleware.Responder
}
// NewUpdateTenantIdentityProvider creates a new http.Handler for the update tenant identity provider operation
func NewUpdateTenantIdentityProvider(ctx *middleware.Context, handler UpdateTenantIdentityProviderHandler) *UpdateTenantIdentityProvider {
return &UpdateTenantIdentityProvider{Context: ctx, Handler: handler}
}
/* UpdateTenantIdentityProvider swagger:route POST /namespaces/{namespace}/tenants/{tenant}/identity-provider OperatorAPI updateTenantIdentityProvider
Update Tenant Identity Provider
*/
type UpdateTenantIdentityProvider struct {
Context *middleware.Context
Handler UpdateTenantIdentityProviderHandler
}
func (o *UpdateTenantIdentityProvider) ServeHTTP(rw http.ResponseWriter, r *http.Request) {
route, rCtx, _ := o.Context.RouteInfo(r)
if rCtx != nil {
*r = *rCtx
}
var Params = NewUpdateTenantIdentityProviderParams()
uprinc, aCtx, err := o.Context.Authorize(r, route)
if err != nil {
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
if aCtx != nil {
*r = *aCtx
}
var principal *models.Principal
if uprinc != nil {
principal = uprinc.(*models.Principal) // this is really a models.Principal, I promise
}
if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params
o.Context.Respond(rw, r, route.Produces, route, err)
return
}
res := o.Handler.Handle(Params, principal) // actually handle the request
o.Context.Respond(rw, r, route.Produces, route, res)
}

View File

@@ -0,0 +1,151 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"context"
"io"
"net/http"
"github.com/go-openapi/errors"
"github.com/go-openapi/runtime"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/validate"
"github.com/minio/console/models"
)
// NewUpdateTenantIdentityProviderParams creates a new UpdateTenantIdentityProviderParams object
//
// There are no default values defined in the spec.
func NewUpdateTenantIdentityProviderParams() UpdateTenantIdentityProviderParams {
return UpdateTenantIdentityProviderParams{}
}
// UpdateTenantIdentityProviderParams contains all the bound params for the update tenant identity provider operation
// typically these are obtained from a http.Request
//
// swagger:parameters UpdateTenantIdentityProvider
type UpdateTenantIdentityProviderParams struct {
// HTTP Request Object
HTTPRequest *http.Request `json:"-"`
/*
Required: true
In: body
*/
Body *models.IdpConfiguration
/*
Required: true
In: path
*/
Namespace string
/*
Required: true
In: path
*/
Tenant string
}
// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface
// for simple values it will use straight method calls.
//
// To ensure default values, the struct must have been initialized with NewUpdateTenantIdentityProviderParams() beforehand.
func (o *UpdateTenantIdentityProviderParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error {
var res []error
o.HTTPRequest = r
if runtime.HasBody(r) {
defer r.Body.Close()
var body models.IdpConfiguration
if err := route.Consumer.Consume(r.Body, &body); err != nil {
if err == io.EOF {
res = append(res, errors.Required("body", "body", ""))
} else {
res = append(res, errors.NewParseError("body", "body", "", err))
}
} else {
// validate body object
if err := body.Validate(route.Formats); err != nil {
res = append(res, err)
}
ctx := validate.WithOperationRequest(context.Background())
if err := body.ContextValidate(ctx, route.Formats); err != nil {
res = append(res, err)
}
if len(res) == 0 {
o.Body = &body
}
}
} else {
res = append(res, errors.Required("body", "body", ""))
}
rNamespace, rhkNamespace, _ := route.Params.GetOK("namespace")
if err := o.bindNamespace(rNamespace, rhkNamespace, route.Formats); err != nil {
res = append(res, err)
}
rTenant, rhkTenant, _ := route.Params.GetOK("tenant")
if err := o.bindTenant(rTenant, rhkTenant, route.Formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
return nil
}
// bindNamespace binds and validates parameter Namespace from path.
func (o *UpdateTenantIdentityProviderParams) bindNamespace(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
// Parameter is provided by construction from the route
o.Namespace = raw
return nil
}
// bindTenant binds and validates parameter Tenant from path.
func (o *UpdateTenantIdentityProviderParams) bindTenant(rawData []string, hasKey bool, formats strfmt.Registry) error {
var raw string
if len(rawData) > 0 {
raw = rawData[len(rawData)-1]
}
// Required: true
// Parameter is provided by construction from the route
o.Tenant = raw
return nil
}

View File

@@ -0,0 +1,113 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the swagger generate command
import (
"net/http"
"github.com/go-openapi/runtime"
"github.com/minio/console/models"
)
// UpdateTenantIdentityProviderNoContentCode is the HTTP code returned for type UpdateTenantIdentityProviderNoContent
const UpdateTenantIdentityProviderNoContentCode int = 204
/*UpdateTenantIdentityProviderNoContent A successful response.
swagger:response updateTenantIdentityProviderNoContent
*/
type UpdateTenantIdentityProviderNoContent struct {
}
// NewUpdateTenantIdentityProviderNoContent creates UpdateTenantIdentityProviderNoContent with default headers values
func NewUpdateTenantIdentityProviderNoContent() *UpdateTenantIdentityProviderNoContent {
return &UpdateTenantIdentityProviderNoContent{}
}
// WriteResponse to the client
func (o *UpdateTenantIdentityProviderNoContent) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses
rw.WriteHeader(204)
}
/*UpdateTenantIdentityProviderDefault Generic error response.
swagger:response updateTenantIdentityProviderDefault
*/
type UpdateTenantIdentityProviderDefault struct {
_statusCode int
/*
In: Body
*/
Payload *models.Error `json:"body,omitempty"`
}
// NewUpdateTenantIdentityProviderDefault creates UpdateTenantIdentityProviderDefault with default headers values
func NewUpdateTenantIdentityProviderDefault(code int) *UpdateTenantIdentityProviderDefault {
if code <= 0 {
code = 500
}
return &UpdateTenantIdentityProviderDefault{
_statusCode: code,
}
}
// WithStatusCode adds the status to the update tenant identity provider default response
func (o *UpdateTenantIdentityProviderDefault) WithStatusCode(code int) *UpdateTenantIdentityProviderDefault {
o._statusCode = code
return o
}
// SetStatusCode sets the status to the update tenant identity provider default response
func (o *UpdateTenantIdentityProviderDefault) SetStatusCode(code int) {
o._statusCode = code
}
// WithPayload adds the payload to the update tenant identity provider default response
func (o *UpdateTenantIdentityProviderDefault) WithPayload(payload *models.Error) *UpdateTenantIdentityProviderDefault {
o.Payload = payload
return o
}
// SetPayload sets the payload to the update tenant identity provider default response
func (o *UpdateTenantIdentityProviderDefault) SetPayload(payload *models.Error) {
o.Payload = payload
}
// WriteResponse to the client
func (o *UpdateTenantIdentityProviderDefault) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
rw.WriteHeader(o._statusCode)
if o.Payload != nil {
payload := o.Payload
if err := producer.Produce(rw, payload); err != nil {
panic(err) // let the recovery middleware deal with this
}
}
}

View File

@@ -0,0 +1,124 @@
// Code generated by go-swagger; DO NOT EDIT.
// This file is part of MinIO Console Server
// Copyright (c) 2022 MinIO, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package operator_api
// This file was generated by the swagger tool.
// Editing this file might prove futile when you re-run the generate command
import (
"errors"
"net/url"
golangswaggerpaths "path"
"strings"
)
// UpdateTenantIdentityProviderURL generates an URL for the update tenant identity provider operation
type UpdateTenantIdentityProviderURL struct {
Namespace string
Tenant string
_basePath string
// avoid unkeyed usage
_ struct{}
}
// WithBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *UpdateTenantIdentityProviderURL) WithBasePath(bp string) *UpdateTenantIdentityProviderURL {
o.SetBasePath(bp)
return o
}
// SetBasePath sets the base path for this url builder, only required when it's different from the
// base path specified in the swagger spec.
// When the value of the base path is an empty string
func (o *UpdateTenantIdentityProviderURL) SetBasePath(bp string) {
o._basePath = bp
}
// Build a url path and query string
func (o *UpdateTenantIdentityProviderURL) Build() (*url.URL, error) {
var _result url.URL
var _path = "/namespaces/{namespace}/tenants/{tenant}/identity-provider"
namespace := o.Namespace
if namespace != "" {
_path = strings.Replace(_path, "{namespace}", namespace, -1)
} else {
return nil, errors.New("namespace is required on UpdateTenantIdentityProviderURL")
}
tenant := o.Tenant
if tenant != "" {
_path = strings.Replace(_path, "{tenant}", tenant, -1)
} else {
return nil, errors.New("tenant is required on UpdateTenantIdentityProviderURL")
}
_basePath := o._basePath
if _basePath == "" {
_basePath = "/api/v1"
}
_result.Path = golangswaggerpaths.Join(_basePath, _path)
return &_result, nil
}
// Must is a helper function to panic when the url builder returns an error
func (o *UpdateTenantIdentityProviderURL) Must(u *url.URL, err error) *url.URL {
if err != nil {
panic(err)
}
if u == nil {
panic("url can't be nil")
}
return u
}
// String returns the string representation of the path with query string
func (o *UpdateTenantIdentityProviderURL) String() string {
return o.Must(o.Build()).String()
}
// BuildFull builds a full url with scheme, host, path and query string
func (o *UpdateTenantIdentityProviderURL) BuildFull(scheme, host string) (*url.URL, error) {
if scheme == "" {
return nil, errors.New("scheme is required for a full url on UpdateTenantIdentityProviderURL")
}
if host == "" {
return nil, errors.New("host is required for a full url on UpdateTenantIdentityProviderURL")
}
base, err := o.Build()
if err != nil {
return nil, err
}
base.Scheme = scheme
base.Host = host
return base, nil
}
// StringFull returns the string representation of a complete url
func (o *UpdateTenantIdentityProviderURL) StringFull(scheme, host string) string {
return o.Must(o.BuildFull(scheme, host)).String()
}

View File

@@ -94,7 +94,8 @@ func getResourceQuota(ctx context.Context, client K8sClientI, namespace, resourc
}
func getResourceQuotaResponse(session *models.Principal, params operator_api.GetResourceQuotaParams) (*models.ResourceQuota, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
client, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)

View File

@@ -74,7 +74,8 @@ func Test_ResourceQuota(t *testing.T) {
// k8sclientGetResourceQuotaMock = func(ctx context.Context, namespace, resource string, opts metav1.GetOptions) (*v1.ResourceQuota, error) {
// return nil, nil
// }
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
kClient := k8sClientMock{}
type args struct {
ctx context.Context

View File

@@ -41,7 +41,8 @@ import (
func getTenantCreatedResponse(session *models.Principal, params operator_api.CreateTenantParams) (response *models.CreateTenantResponse, mError *models.Error) {
tenantReq := params.Body
minioImage := tenantReq.Image
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if minioImage == "" {
minImg, err := cluster.GetMinioImage()
// we can live without figuring out the latest version of MinIO, Operator will use a hardcoded value
@@ -153,7 +154,7 @@ func getTenantCreatedResponse(session *models.Principal, params operator_api.Cre
serverAddress := *tenantReq.Idp.ActiveDirectory.URL
tlsSkipVerify := tenantReq.Idp.ActiveDirectory.SkipTLSVerification
serverInsecure := tenantReq.Idp.ActiveDirectory.ServerInsecure
lookupBindDN := tenantReq.Idp.ActiveDirectory.LookupBindDn
lookupBindDN := *tenantReq.Idp.ActiveDirectory.LookupBindDn
lookupBindPassword := tenantReq.Idp.ActiveDirectory.LookupBindPassword
userDNSearchBaseDN := tenantReq.Idp.ActiveDirectory.UserDnSearchBaseDn
userDNSearchFilter := tenantReq.Idp.ActiveDirectory.UserDnSearchFilter

View File

@@ -19,7 +19,6 @@ package operatorapi
import (
"context"
"fmt"
"time"
"github.com/minio/console/cluster"
"github.com/minio/console/models"
@@ -30,8 +29,7 @@ import (
)
func getTenantDetailsResponse(session *models.Principal, params operator_api.TenantDetailsParams) (*models.Tenant, *models.Error) {
// 5 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {

View File

@@ -33,9 +33,10 @@ import (
"strings"
"time"
utils2 "github.com/minio/console/pkg/utils"
"github.com/dustin/go-humanize"
"github.com/minio/madmin-go"
utils2 "github.com/minio/console/pkg/utils"
"github.com/minio/console/restapi"
@@ -51,11 +52,9 @@ import (
corev1 "k8s.io/api/core/v1"
"github.com/minio/console/cluster"
"github.com/minio/madmin-go"
"github.com/go-openapi/runtime/middleware"
"github.com/go-openapi/swag"
"github.com/minio/console/cluster"
"github.com/minio/console/models"
"github.com/minio/console/operatorapi/operations"
miniov2 "github.com/minio/operator/pkg/apis/minio.min.io/v2"
@@ -132,6 +131,26 @@ func registerTenantHandlers(api *operations.OperatorAPI) {
})
// Tenant identity provider details
api.OperatorAPITenantIdentityProviderHandler = operator_api.TenantIdentityProviderHandlerFunc(func(params operator_api.TenantIdentityProviderParams, session *models.Principal) middleware.Responder {
resp, err := getTenantIdentityProviderResponse(session, params)
if err != nil {
return operator_api.NewTenantIdentityProviderDefault(int(err.Code)).WithPayload(err)
}
return operator_api.NewTenantIdentityProviderOK().WithPayload(resp)
})
// Update Tenant identity provider configuration
api.OperatorAPIUpdateTenantIdentityProviderHandler = operator_api.UpdateTenantIdentityProviderHandlerFunc(func(params operator_api.UpdateTenantIdentityProviderParams, session *models.Principal) middleware.Responder {
err := getUpdateTenantIdentityProviderResponse(session, params)
if err != nil {
return operator_api.NewUpdateTenantIdentityProviderDefault(int(err.Code)).WithPayload(err)
}
return operator_api.NewUpdateTenantIdentityProviderNoContent()
})
// Delete Tenant
api.OperatorAPIDeleteTenantHandler = operator_api.DeleteTenantHandlerFunc(func(params operator_api.DeleteTenantParams, session *models.Principal) middleware.Responder {
err := getDeleteTenantResponse(session, params)
@@ -413,7 +432,8 @@ func deleteTenantAction(
// getDeleteTenantResponse gets the output of deleting a minio instance
func getDeletePodResponse(session *models.Principal, params operator_api.DeletePodParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// get Kubernetes Client
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
@@ -635,9 +655,242 @@ func getTenantSecurity(ctx context.Context, clientSet K8sClientI, tenant *miniov
}, nil
}
func getTenantIdentityProvider(ctx context.Context, clientSet K8sClientI, tenant *miniov2.Tenant) (response *models.IdpConfiguration, err error) {
tenantConfiguration, err := GetTenantConfiguration(ctx, clientSet, tenant)
if err != nil {
return nil, err
}
var idpConfiguration *models.IdpConfiguration
if tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"] != "" {
callbackURL := tenantConfiguration["MINIO_IDENTITY_OPENID_REDIRECT_URI"]
claimName := tenantConfiguration["MINIO_IDENTITY_OPENID_CLAIM_NAME"]
clientID := tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_ID"]
configurationURL := tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"]
scopes := tenantConfiguration["MINIO_IDENTITY_OPENID_SCOPES"]
secretID := tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_SECRET"]
idpConfiguration = &models.IdpConfiguration{
Oidc: &models.IdpConfigurationOidc{
CallbackURL: callbackURL,
ClaimName: &claimName,
ClientID: &clientID,
ConfigurationURL: &configurationURL,
Scopes: scopes,
SecretID: &secretID,
},
}
}
if tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"] != "" {
groupSearchBaseDN := tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN"]
groupSearchFilter := tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER"]
lookupBindDN := tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN"]
lookupBindPassword := tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD"]
serverInsecure := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_INSECURE"] == "on"
serverStartTLS := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_STARTTLS"] == "on"
tlsSkipVerify := tenantConfiguration["MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY"] == "on"
serverAddress := tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"]
userDNSearchBaseDN := tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN"]
userDNSearchFilter := tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER"]
idpConfiguration = &models.IdpConfiguration{
ActiveDirectory: &models.IdpConfigurationActiveDirectory{
GroupSearchBaseDn: groupSearchBaseDN,
GroupSearchFilter: groupSearchFilter,
LookupBindDn: &lookupBindDN,
LookupBindPassword: lookupBindPassword,
ServerInsecure: serverInsecure,
ServerStartTLS: serverStartTLS,
SkipTLSVerification: tlsSkipVerify,
URL: &serverAddress,
UserDnSearchBaseDn: userDNSearchBaseDN,
UserDnSearchFilter: userDNSearchFilter,
},
}
}
return idpConfiguration, nil
}
func updateTenantIdentityProvider(ctx context.Context, operatorClient OperatorClientI, client K8sClientI, namespace string, params operator_api.UpdateTenantIdentityProviderParams) error {
tenant, err := operatorClient.TenantGet(ctx, namespace, params.Tenant, metav1.GetOptions{})
if err != nil {
return err
}
tenantConfiguration, err := GetTenantConfiguration(ctx, client, tenant)
if err != nil {
return err
}
delete(tenantConfiguration, "accesskey")
delete(tenantConfiguration, "secretkey")
oidcConfig := params.Body.Oidc
// set new oidc configuration fields
if oidcConfig != nil {
configurationURL := *oidcConfig.ConfigurationURL
clientID := *oidcConfig.ClientID
secretID := *oidcConfig.SecretID
claimName := *oidcConfig.ClaimName
scopes := oidcConfig.Scopes
callbackURL := oidcConfig.CallbackURL
// oidc config
tenantConfiguration["MINIO_IDENTITY_OPENID_CONFIG_URL"] = configurationURL
tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_ID"] = clientID
tenantConfiguration["MINIO_IDENTITY_OPENID_CLIENT_SECRET"] = secretID
tenantConfiguration["MINIO_IDENTITY_OPENID_CLAIM_NAME"] = claimName
tenantConfiguration["MINIO_IDENTITY_OPENID_REDIRECT_URI"] = callbackURL
if scopes == "" {
scopes = "openid,profile,email"
}
tenantConfiguration["MINIO_IDENTITY_OPENID_SCOPES"] = scopes
} else {
// reset oidc configuration fields
delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CLAIM_NAME")
delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CLIENT_ID")
delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CONFIG_URL")
delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_SCOPES")
delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_CLIENT_SECRET")
delete(tenantConfiguration, "MINIO_IDENTITY_OPENID_REDIRECT_URI")
}
ldapConfig := params.Body.ActiveDirectory
// set new active directory configuration fields
if ldapConfig != nil {
// ldap config
serverAddress := *ldapConfig.URL
tlsSkipVerify := ldapConfig.SkipTLSVerification
serverInsecure := ldapConfig.ServerInsecure
lookupBindDN := *ldapConfig.LookupBindDn
lookupBindPassword := ldapConfig.LookupBindPassword
userDNSearchBaseDN := ldapConfig.UserDnSearchBaseDn
userDNSearchFilter := ldapConfig.UserDnSearchFilter
groupSearchBaseDN := ldapConfig.GroupSearchBaseDn
groupSearchFilter := ldapConfig.GroupSearchFilter
serverStartTLS := ldapConfig.ServerStartTLS
// LDAP Server
tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_ADDR"] = serverAddress
if tlsSkipVerify {
tenantConfiguration["MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY"] = "on"
}
if serverInsecure {
tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_INSECURE"] = "on"
}
if serverStartTLS {
tenantConfiguration["MINIO_IDENTITY_LDAP_SERVER_STARTTLS"] = "on"
}
// LDAP Lookup
tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN"] = lookupBindDN
tenantConfiguration["MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD"] = lookupBindPassword
// LDAP User DN
tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN"] = userDNSearchBaseDN
tenantConfiguration["MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER"] = userDNSearchFilter
// LDAP Group
tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN"] = groupSearchBaseDN
tenantConfiguration["MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER"] = groupSearchFilter
} else {
// reset active directory configuration fields
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_SERVER_INSECURE")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_SERVER_STARTTLS")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_SERVER_ADDR")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN")
delete(tenantConfiguration, "MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER")
}
// write tenant configuration to secret that contains config.env
tenantConfigurationName := fmt.Sprintf("%s-env-configuration", tenant.Name)
_, err = createOrReplaceSecrets(ctx, client, tenant.Namespace, []tenantSecret{
{
Name: tenantConfigurationName,
Content: map[string][]byte{
"config.env": []byte(GenerateTenantConfigurationFile(tenantConfiguration)),
},
},
}, tenant.Name)
if err != nil {
return err
}
tenant.Spec.Configuration = &corev1.LocalObjectReference{Name: tenantConfigurationName}
tenant.EnsureDefaults()
// update tenant CRD
_, err = operatorClient.TenantUpdate(ctx, tenant, metav1.UpdateOptions{})
if err != nil {
return err
}
// restart all MinIO pods at the same time
err = client.deletePodCollection(ctx, namespace, metav1.DeleteOptions{}, metav1.ListOptions{
LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, tenant.Name),
})
if err != nil {
return err
}
return nil
}
func getTenantIdentityProviderResponse(session *models.Principal, params operator_api.TenantIdentityProviderParams) (*models.IdpConfiguration, *models.Error) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)
}
opClient := &operatorClient{
client: opClientClientSet,
}
minTenant, err := getTenant(ctx, opClient, params.Namespace, params.Tenant)
if err != nil {
return nil, prepareError(err)
}
// get Kubernetes Client
clientSet, err := cluster.K8sClient(session.STSSessionToken)
k8sClient := k8sClient{
client: clientSet,
}
if err != nil {
return nil, prepareError(err)
}
info, err := getTenantIdentityProvider(ctx, &k8sClient, minTenant)
if err != nil {
return nil, prepareError(err)
}
return info, nil
}
func getUpdateTenantIdentityProviderResponse(session *models.Principal, params operator_api.UpdateTenantIdentityProviderParams) *models.Error {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return prepareError(err)
}
// get Kubernetes Client
clientSet, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return prepareError(err)
}
k8sClient := k8sClient{
client: clientSet,
}
opClient := &operatorClient{
client: opClientClientSet,
}
if err := updateTenantIdentityProvider(ctx, opClient, &k8sClient, params.Namespace, params); err != nil {
return prepareError(err, errors.New("unable to update tenant"))
}
return nil
}
func getTenantSecurityResponse(session *models.Principal, params operator_api.TenantSecurityParams) (*models.TenantSecurityResponse, *models.Error) {
// 5 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
@@ -666,8 +919,8 @@ func getTenantSecurityResponse(session *models.Principal, params operator_api.Te
}
func getUpdateTenantSecurityResponse(session *models.Principal, params operator_api.UpdateTenantSecurityParams) *models.Error {
// 5 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
@@ -764,12 +1017,12 @@ func updateTenantSecurity(ctx context.Context, operatorClient OperatorClientI, c
if err != nil {
return err
}
// Remove Certificate Secrets from Tenant namespace
for _, secretName := range params.Body.CustomCertificates.SecretsToBeDeleted {
err = client.deleteSecret(ctx, minInst.Namespace, secretName, metav1.DeleteOptions{})
if err != nil {
restapi.LogError("error deleting secret: %v", err)
}
// restart all MinIO pods at the same time
err = client.deletePodCollection(ctx, namespace, metav1.DeleteOptions{}, metav1.ListOptions{
LabelSelector: fmt.Sprintf("%s=%s", miniov2.TenantLabel, minInst.Name),
})
if err != nil {
return err
}
return nil
}
@@ -846,7 +1099,8 @@ func listTenants(ctx context.Context, operatorClient OperatorClientI, namespace
}
func getListAllTenantsResponse(session *models.Principal, params operator_api.ListAllTenantsParams) (*models.ListTenantsResponse, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)
@@ -863,7 +1117,8 @@ func getListAllTenantsResponse(session *models.Principal, params operator_api.Li
// getListTenantsResponse list tenants by namespace
func getListTenantsResponse(session *models.Principal, params operator_api.ListTenantsParams) (*models.ListTenantsResponse, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)
@@ -960,7 +1215,8 @@ func removeAnnotations(annotationsOne, annotationsTwo map[string]string) map[str
}
func getUpdateTenantResponse(session *models.Principal, params operator_api.UpdateTenantParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return prepareError(err)
@@ -1002,7 +1258,7 @@ func addTenantPool(ctx context.Context, operatorClient OperatorClientI, params o
return err
}
_, err = operatorClient.TenantPatch(ctx, params.Namespace, tenant.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{})
_, err = operatorClient.TenantPatch(ctx, tenant.Namespace, tenant.Name, types.MergePatchType, payloadBytes, metav1.PatchOptions{})
if err != nil {
return err
}
@@ -1010,7 +1266,8 @@ func addTenantPool(ctx context.Context, operatorClient OperatorClientI, params o
}
func getTenantAddPoolResponse(session *models.Principal, params operator_api.TenantAddPoolParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return prepareError(err)
@@ -1026,8 +1283,8 @@ func getTenantAddPoolResponse(session *models.Principal, params operator_api.Ten
// getTenantUsageResponse returns the usage of a tenant
func getTenantUsageResponse(session *models.Principal, params operator_api.GetTenantUsageParams) (*models.TenantUsage, *models.Error) {
// 30 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
@@ -1077,8 +1334,8 @@ func getTenantUsageResponse(session *models.Principal, params operator_api.GetTe
// getTenantLogsResponse returns the logs of a tenant
func getTenantLogsResponse(session *models.Principal, params operator_api.GetTenantLogsParams) (*models.TenantLogs, *models.Error) {
// 30 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
@@ -1175,8 +1432,7 @@ func getTenantLogsResponse(session *models.Principal, params operator_api.GetTen
// setTenantLogsResponse returns the logs of a tenant
func setTenantLogsResponse(session *models.Principal, params operator_api.SetTenantLogsParams) (bool, *models.Error) {
// 30 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
@@ -1342,8 +1598,8 @@ func setTenantLogsResponse(session *models.Principal, params operator_api.SetTen
// enableTenantLoggingResponse enables Tenant Logging
func enableTenantLoggingResponse(session *models.Principal, params operator_api.EnableTenantLoggingParams) (bool, *models.Error) {
// 30 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
@@ -1403,8 +1659,8 @@ func enableTenantLoggingResponse(session *models.Principal, params operator_api.
// disableTenantLoggingResponse disables Tenant Logging
func disableTenantLoggingResponse(session *models.Principal, params operator_api.DisableTenantLoggingParams) (bool, *models.Error) {
// 30 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
@@ -1434,7 +1690,8 @@ func disableTenantLoggingResponse(session *models.Principal, params operator_api
}
func getTenantPodsResponse(session *models.Principal, params operator_api.GetTenantPodsParams) ([]*models.TenantPod, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)
@@ -1468,7 +1725,8 @@ func getTenantPodsResponse(session *models.Principal, params operator_api.GetTen
}
func getPodLogsResponse(session *models.Principal, params operator_api.GetPodLogsParams) (string, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return "", prepareError(err)
@@ -1483,7 +1741,8 @@ func getPodLogsResponse(session *models.Principal, params operator_api.GetPodLog
}
func getPodEventsResponse(session *models.Principal, params operator_api.GetPodEventsParams) (models.EventListWrapper, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)
@@ -1514,7 +1773,8 @@ func getPodEventsResponse(session *models.Principal, params operator_api.GetPodE
//get values for prometheus metrics
func getTenantMonitoringResponse(session *models.Principal, params operator_api.GetTenantMonitoringParams) (*models.TenantMonitoringInfo, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
@@ -1607,8 +1867,8 @@ func getTenantMonitoringResponse(session *models.Principal, params operator_api.
//sets tenant Prometheus monitoring cofiguration fields to values provided
func setTenantMonitoringResponse(session *models.Principal, params operator_api.SetTenantMonitoringParams) (bool, *models.Error) {
// 30 seconds timeout
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
@@ -2068,6 +2328,21 @@ func parseTenantPool(pool *miniov2.Pool) *models.Pool {
tolerations = append(tolerations, toleration)
}
var securityContext models.SecurityContext
if pool.SecurityContext != nil {
fsGroup := strconv.Itoa(int(*pool.SecurityContext.FSGroup))
runAsGroup := strconv.Itoa(int(*pool.SecurityContext.RunAsGroup))
runAsUser := strconv.Itoa(int(*pool.SecurityContext.RunAsUser))
securityContext = models.SecurityContext{
FsGroup: &fsGroup,
RunAsGroup: &runAsGroup,
RunAsNonRoot: pool.SecurityContext.RunAsNonRoot,
RunAsUser: &runAsUser,
}
}
poolModel := &models.Pool{
Name: pool.Name,
Servers: swag.Int64(int64(pool.Servers)),
@@ -2076,10 +2351,11 @@ func parseTenantPool(pool *miniov2.Pool) *models.Pool {
Size: size,
StorageClassName: storageClassName,
},
NodeSelector: pool.NodeSelector,
Resources: resources,
Affinity: affinity,
Tolerations: tolerations,
NodeSelector: pool.NodeSelector,
Resources: resources,
Affinity: affinity,
Tolerations: tolerations,
SecurityContext: &securityContext,
}
return poolModel
}
@@ -2128,7 +2404,8 @@ func parseNodeSelectorTerm(term *corev1.NodeSelectorTerm) *models.NodeSelectorTe
}
func getTenantUpdatePoolResponse(session *models.Principal, params operator_api.TenantUpdatePoolsParams) (*models.Tenant, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)
@@ -2207,7 +2484,7 @@ func getTenantYAML(session *models.Principal, params operator_api.GetTenantYAMLP
tenant.ManagedFields = []metav1.ManagedFieldsEntry{}
//yb, err := yaml.Marshal(tenant)
serializer := k8sJson.NewSerializerWithOptions(
j8sJSONSerializer := k8sJson.NewSerializerWithOptions(
k8sJson.DefaultMetaFactory, nil, nil,
k8sJson.SerializerOptions{
Yaml: true,
@@ -2217,7 +2494,7 @@ func getTenantYAML(session *models.Principal, params operator_api.GetTenantYAMLP
)
buf := new(bytes.Buffer)
err = serializer.Encode(tenant, buf)
err = j8sJSONSerializer.Encode(tenant, buf)
if err != nil {
return nil, prepareError(err)
}
@@ -2259,7 +2536,7 @@ func getUpdateTenantYAML(session *models.Principal, params operator_api.PutTenan
upTenant.Finalizers = inTenant.Finalizers
upTenant.Spec = inTenant.Spec
_, err = opClient.MinioV2().Tenants(params.Namespace).Update(params.HTTPRequest.Context(), upTenant, metav1.UpdateOptions{})
_, err = opClient.MinioV2().Tenants(upTenant.Namespace).Update(params.HTTPRequest.Context(), upTenant, metav1.UpdateOptions{})
if err != nil {
return &models.Error{Code: 400, Message: swag.String(err.Error())}
}
@@ -2268,7 +2545,8 @@ func getUpdateTenantYAML(session *models.Principal, params operator_api.PutTenan
}
func getTenantEventsResponse(session *models.Principal, params operator_api.GetTenantEventsParams) (models.EventListWrapper, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
client, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)

View File

@@ -108,7 +108,8 @@ func tenantUpdateCertificates(ctx context.Context, operatorClient OperatorClient
// getTenantUpdateCertificatesResponse wrapper of tenantUpdateCertificates
func getTenantUpdateCertificatesResponse(session *models.Principal, params operator_api.TenantUpdateCertificateParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// get Kubernetes Client
clientSet, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
@@ -238,7 +239,8 @@ func tenantUpdateEncryption(ctx context.Context, operatorClient OperatorClientI,
// getTenantDeleteEncryptionResponse is a wrapper for tenantDeleteEncryption
func getTenantDeleteEncryptionResponse(session *models.Principal, params operator_api.TenantDeleteEncryptionParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
opClientClientSet, err := cluster.OperatorClient(session.STSSessionToken)
if err != nil {
return prepareError(err, errorDeletingEncryptionConfig)
@@ -254,7 +256,8 @@ func getTenantDeleteEncryptionResponse(session *models.Principal, params operato
// getTenantUpdateEncryptionResponse is a wrapper for tenantUpdateEncryption
func getTenantUpdateEncryptionResponse(session *models.Principal, params operator_api.TenantUpdateEncryptionParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// get Kubernetes Client
clientSet, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
@@ -450,7 +453,8 @@ func tenantEncryptionInfo(ctx context.Context, operatorClient OperatorClientI, c
// getTenantEncryptionResponse is a wrapper for tenantEncryptionInfo
func getTenantEncryptionInfoResponse(session *models.Principal, params operator_api.TenantEncryptionInfoParams) (*models.EncryptionConfigurationResponse, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// get Kubernetes Client
clientSet, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {

View File

@@ -106,7 +106,8 @@ func (c k8sClientMock) getService(ctx context.Context, namespace, serviceName st
}
func Test_TenantInfoTenantAdminClient(t *testing.T) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
kClient := k8sClientMock{}
type args struct {
ctx context.Context

View File

@@ -73,7 +73,8 @@ func registerVolumesHandlers(api *operations.OperatorAPI) {
}
func getPVCsResponse(session *models.Principal) (*models.ListPVCsResponse, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
@@ -120,7 +121,8 @@ func getPVCsResponse(session *models.Principal) (*models.ListPVCsResponse, *mode
}
func getPVCsForTenantResponse(session *models.Principal, params operator_api.ListPVCsForTenantParams) (*models.ListPVCsResponse, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
@@ -167,7 +169,8 @@ func getPVCsForTenantResponse(session *models.Principal, params operator_api.Lis
}
func getDeletePVCResponse(session *models.Principal, params operator_api.DeletePVCParams) *models.Error {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// get Kubernetes Client
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
@@ -184,7 +187,8 @@ func getDeletePVCResponse(session *models.Principal, params operator_api.DeleteP
}
func getPVCEventsResponse(session *models.Principal, params operator_api.GetPVCEventsParams) (models.EventListWrapper, *models.Error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
clientset, err := cluster.K8sClient(session.STSSessionToken)
if err != nil {
return nil, prepareError(err)

View File

@@ -234,7 +234,8 @@ func LoadX509KeyPair(certFile, keyFile string) (tls.Certificate, error) {
}
func GetTLSConfig() (x509Certs []*x509.Certificate, manager *xcerts.Manager, err error) {
ctx := context.Background()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if !(isFile(getPublicCertFile()) && isFile(getPrivateKeyFile())) {
return nil, nil, nil

View File

@@ -1,122 +1,121 @@
{
"files": {
"main.css": "./static/css/main.90d417ae.css",
"main.js": "./static/js/main.5a7c25ee.js",
"main.js": "./static/js/main.303eddef.js",
"static/js/2483.511e6a32.chunk.js": "./static/js/2483.511e6a32.chunk.js",
"static/js/6914.e9919921.chunk.js": "./static/js/6914.e9919921.chunk.js",
"static/js/4209.7c3855ef.chunk.js": "./static/js/4209.7c3855ef.chunk.js",
"static/js/1829.202650e3.chunk.js": "./static/js/1829.202650e3.chunk.js",
"static/js/6041.a11c2e9a.chunk.js": "./static/js/6041.a11c2e9a.chunk.js",
"static/js/5088.921b2534.chunk.js": "./static/js/5088.921b2534.chunk.js",
"static/js/5140.8f5521e6.chunk.js": "./static/js/5140.8f5521e6.chunk.js",
"static/js/1434.2cbee404.chunk.js": "./static/js/1434.2cbee404.chunk.js",
"static/js/3176.640e537b.chunk.js": "./static/js/3176.640e537b.chunk.js",
"static/js/6137.ac2c3fb7.chunk.js": "./static/js/6137.ac2c3fb7.chunk.js",
"static/js/7045.e30cf01e.chunk.js": "./static/js/7045.e30cf01e.chunk.js",
"static/js/9635.083b4e05.chunk.js": "./static/js/9635.083b4e05.chunk.js",
"static/js/2338.8b9b592f.chunk.js": "./static/js/2338.8b9b592f.chunk.js",
"static/js/4335.71899795.chunk.js": "./static/js/4335.71899795.chunk.js",
"static/js/321.eedfb3a5.chunk.js": "./static/js/321.eedfb3a5.chunk.js",
"static/js/6763.1da82d5c.chunk.js": "./static/js/6763.1da82d5c.chunk.js",
"static/js/3543.24923c9d.chunk.js": "./static/js/3543.24923c9d.chunk.js",
"static/js/4061.8bd849a7.chunk.js": "./static/js/4061.8bd849a7.chunk.js",
"static/js/2249.39222819.chunk.js": "./static/js/2249.39222819.chunk.js",
"static/js/9611.30185102.chunk.js": "./static/js/9611.30185102.chunk.js",
"static/js/4209.875682c6.chunk.js": "./static/js/4209.875682c6.chunk.js",
"static/js/1829.2cab6045.chunk.js": "./static/js/1829.2cab6045.chunk.js",
"static/js/4455.b20c0c9c.chunk.js": "./static/js/4455.b20c0c9c.chunk.js",
"static/js/5088.4c9e1b8c.chunk.js": "./static/js/5088.4c9e1b8c.chunk.js",
"static/js/5140.e9043b63.chunk.js": "./static/js/5140.e9043b63.chunk.js",
"static/js/1434.9ad9fa51.chunk.js": "./static/js/1434.9ad9fa51.chunk.js",
"static/js/3176.43953acc.chunk.js": "./static/js/3176.43953acc.chunk.js",
"static/js/6137.c0b24aaa.chunk.js": "./static/js/6137.c0b24aaa.chunk.js",
"static/js/7045.7a56a854.chunk.js": "./static/js/7045.7a56a854.chunk.js",
"static/js/9251.ad432876.chunk.js": "./static/js/9251.ad432876.chunk.js",
"static/js/2338.2294f835.chunk.js": "./static/js/2338.2294f835.chunk.js",
"static/js/4335.50f86695.chunk.js": "./static/js/4335.50f86695.chunk.js",
"static/js/321.2af53d6e.chunk.js": "./static/js/321.2af53d6e.chunk.js",
"static/js/6763.e14ad9c3.chunk.js": "./static/js/6763.e14ad9c3.chunk.js",
"static/js/3543.46c5055f.chunk.js": "./static/js/3543.46c5055f.chunk.js",
"static/js/4061.776bbbf3.chunk.js": "./static/js/4061.776bbbf3.chunk.js",
"static/js/2249.922e46ea.chunk.js": "./static/js/2249.922e46ea.chunk.js",
"static/js/9611.c217768e.chunk.js": "./static/js/9611.c217768e.chunk.js",
"static/js/2637.79b0ea29.chunk.js": "./static/js/2637.79b0ea29.chunk.js",
"static/css/380.f0806840.chunk.css": "./static/css/380.f0806840.chunk.css",
"static/js/380.1b0b26c2.chunk.js": "./static/js/380.1b0b26c2.chunk.js",
"static/js/380.cb95766e.chunk.js": "./static/js/380.cb95766e.chunk.js",
"static/js/5926.c044ad6b.chunk.js": "./static/js/5926.c044ad6b.chunk.js",
"static/js/701.06a6587d.chunk.js": "./static/js/701.06a6587d.chunk.js",
"static/js/7821.f798ffe1.chunk.js": "./static/js/7821.f798ffe1.chunk.js",
"static/js/2625.eff40583.chunk.js": "./static/js/2625.eff40583.chunk.js",
"static/js/701.55960ffe.chunk.js": "./static/js/701.55960ffe.chunk.js",
"static/js/7821.a2c85c06.chunk.js": "./static/js/7821.a2c85c06.chunk.js",
"static/js/2625.6d6e6809.chunk.js": "./static/js/2625.6d6e6809.chunk.js",
"static/css/9033.f0806840.chunk.css": "./static/css/9033.f0806840.chunk.css",
"static/js/9033.d40f5fa2.chunk.js": "./static/js/9033.d40f5fa2.chunk.js",
"static/css/9299.f0806840.chunk.css": "./static/css/9299.f0806840.chunk.css",
"static/js/9299.5442941e.chunk.js": "./static/js/9299.5442941e.chunk.js",
"static/js/191.92f7d06b.chunk.js": "./static/js/191.92f7d06b.chunk.js",
"static/js/7585.2a9cb3d4.chunk.js": "./static/js/7585.2a9cb3d4.chunk.js",
"static/js/1836.761ade1e.chunk.js": "./static/js/1836.761ade1e.chunk.js",
"static/js/4653.957113df.chunk.js": "./static/js/4653.957113df.chunk.js",
"static/js/255.7603092b.chunk.js": "./static/js/255.7603092b.chunk.js",
"static/js/4394.2fa16d38.chunk.js": "./static/js/4394.2fa16d38.chunk.js",
"static/js/4781.ca99434f.chunk.js": "./static/js/4781.ca99434f.chunk.js",
"static/js/9299.43a5d81d.chunk.js": "./static/js/9299.43a5d81d.chunk.js",
"static/js/2555.1aef7cca.chunk.js": "./static/js/2555.1aef7cca.chunk.js",
"static/js/7585.a54f7c72.chunk.js": "./static/js/7585.a54f7c72.chunk.js",
"static/js/1836.083f36ae.chunk.js": "./static/js/1836.083f36ae.chunk.js",
"static/js/4653.a6dfdf0c.chunk.js": "./static/js/4653.a6dfdf0c.chunk.js",
"static/js/4219.c24a76ef.chunk.js": "./static/js/4219.c24a76ef.chunk.js",
"static/js/3208.c0b88007.chunk.js": "./static/js/3208.c0b88007.chunk.js",
"static/js/4394.4efb3ddd.chunk.js": "./static/js/4394.4efb3ddd.chunk.js",
"static/js/4781.785d14ba.chunk.js": "./static/js/4781.785d14ba.chunk.js",
"static/js/9478.c2c2c220.chunk.js": "./static/js/9478.c2c2c220.chunk.js",
"static/js/7164.e4aebe46.chunk.js": "./static/js/7164.e4aebe46.chunk.js",
"static/js/4414.80189a53.chunk.js": "./static/js/4414.80189a53.chunk.js",
"static/js/7798.9bd6994f.chunk.js": "./static/js/7798.9bd6994f.chunk.js",
"static/js/8833.d4d792a2.chunk.js": "./static/js/8833.d4d792a2.chunk.js",
"static/js/471.3ac500ed.chunk.js": "./static/js/471.3ac500ed.chunk.js",
"static/js/7164.5542a849.chunk.js": "./static/js/7164.5542a849.chunk.js",
"static/js/4414.453618d3.chunk.js": "./static/js/4414.453618d3.chunk.js",
"static/js/7798.21fc6f4a.chunk.js": "./static/js/7798.21fc6f4a.chunk.js",
"static/js/8833.5d3a1948.chunk.js": "./static/js/8833.5d3a1948.chunk.js",
"static/js/471.bc12301a.chunk.js": "./static/js/471.bc12301a.chunk.js",
"static/js/483.3fa229ad.chunk.js": "./static/js/483.3fa229ad.chunk.js",
"static/js/9467.d4860f23.chunk.js": "./static/js/9467.d4860f23.chunk.js",
"static/js/6895.af17fed5.chunk.js": "./static/js/6895.af17fed5.chunk.js",
"static/js/6233.589f83fe.chunk.js": "./static/js/6233.589f83fe.chunk.js",
"static/js/5588.1a32c1c3.chunk.js": "./static/js/5588.1a32c1c3.chunk.js",
"static/js/4874.80bf31e6.chunk.js": "./static/js/4874.80bf31e6.chunk.js",
"static/js/9467.50ab01b6.chunk.js": "./static/js/9467.50ab01b6.chunk.js",
"static/js/6895.c4b3ab71.chunk.js": "./static/js/6895.c4b3ab71.chunk.js",
"static/js/6233.f8460b26.chunk.js": "./static/js/6233.f8460b26.chunk.js",
"static/js/5588.3894176c.chunk.js": "./static/js/5588.3894176c.chunk.js",
"static/js/4133.37c68d0f.chunk.js": "./static/js/4133.37c68d0f.chunk.js",
"static/css/1955.f0806840.chunk.css": "./static/css/1955.f0806840.chunk.css",
"static/js/1955.95db0000.chunk.js": "./static/js/1955.95db0000.chunk.js",
"static/js/1955.27cc0d9b.chunk.js": "./static/js/1955.27cc0d9b.chunk.js",
"static/js/2653.d0c6bbf1.chunk.js": "./static/js/2653.d0c6bbf1.chunk.js",
"static/js/3956.74bfef51.chunk.js": "./static/js/3956.74bfef51.chunk.js",
"static/js/3956.418abe3f.chunk.js": "./static/js/3956.418abe3f.chunk.js",
"static/js/7015.bf4c7dc4.chunk.js": "./static/js/7015.bf4c7dc4.chunk.js",
"static/js/7524.c226828c.chunk.js": "./static/js/7524.c226828c.chunk.js",
"static/js/8771.b2727bdd.chunk.js": "./static/js/8771.b2727bdd.chunk.js",
"static/js/9076.bfebbb14.chunk.js": "./static/js/9076.bfebbb14.chunk.js",
"static/js/8771.475684ba.chunk.js": "./static/js/8771.475684ba.chunk.js",
"static/js/9076.4450f2f8.chunk.js": "./static/js/9076.4450f2f8.chunk.js",
"static/js/9221.505f4336.chunk.js": "./static/js/9221.505f4336.chunk.js",
"static/js/8896.e9be20fb.chunk.js": "./static/js/8896.e9be20fb.chunk.js",
"static/js/7413.a6fe6f9f.chunk.js": "./static/js/7413.a6fe6f9f.chunk.js",
"static/js/9134.9336f36c.chunk.js": "./static/js/9134.9336f36c.chunk.js",
"static/js/8896.984a3f17.chunk.js": "./static/js/8896.984a3f17.chunk.js",
"static/js/7413.76c38a02.chunk.js": "./static/js/7413.76c38a02.chunk.js",
"static/js/9134.0538c268.chunk.js": "./static/js/9134.0538c268.chunk.js",
"static/css/8138.f0806840.chunk.css": "./static/css/8138.f0806840.chunk.css",
"static/js/8138.4c6a5b7f.chunk.js": "./static/js/8138.4c6a5b7f.chunk.js",
"static/js/8183.8c64a361.chunk.js": "./static/js/8183.8c64a361.chunk.js",
"static/js/9145.1af8c238.chunk.js": "./static/js/9145.1af8c238.chunk.js",
"static/js/8822.6030f20d.chunk.js": "./static/js/8822.6030f20d.chunk.js",
"static/js/7331.106a6938.chunk.js": "./static/js/7331.106a6938.chunk.js",
"static/js/9605.e2f1ac95.chunk.js": "./static/js/9605.e2f1ac95.chunk.js",
"static/js/426.0124a3b9.chunk.js": "./static/js/426.0124a3b9.chunk.js",
"static/js/2878.174d0b14.chunk.js": "./static/js/2878.174d0b14.chunk.js",
"static/js/8138.5e1c08de.chunk.js": "./static/js/8138.5e1c08de.chunk.js",
"static/js/2794.ee6b7b2c.chunk.js": "./static/js/2794.ee6b7b2c.chunk.js",
"static/js/9145.363b2352.chunk.js": "./static/js/9145.363b2352.chunk.js",
"static/js/1379.8207ed7c.chunk.js": "./static/js/1379.8207ed7c.chunk.js",
"static/js/1501.b5696037.chunk.js": "./static/js/1501.b5696037.chunk.js",
"static/js/9605.fd87a53e.chunk.js": "./static/js/9605.fd87a53e.chunk.js",
"static/js/426.e738683c.chunk.js": "./static/js/426.e738683c.chunk.js",
"static/js/2878.fca6e2cf.chunk.js": "./static/js/2878.fca6e2cf.chunk.js",
"static/js/8495.bdd215dc.chunk.js": "./static/js/8495.bdd215dc.chunk.js",
"static/js/4934.4a573b0b.chunk.js": "./static/js/4934.4a573b0b.chunk.js",
"static/js/3518.0178dcf1.chunk.js": "./static/js/3518.0178dcf1.chunk.js",
"static/js/2684.3e7eb9b1.chunk.js": "./static/js/2684.3e7eb9b1.chunk.js",
"static/js/6683.18e77b71.chunk.js": "./static/js/6683.18e77b71.chunk.js",
"static/js/8350.501e9b49.chunk.js": "./static/js/8350.501e9b49.chunk.js",
"static/js/2676.47150957.chunk.js": "./static/js/2676.47150957.chunk.js",
"static/js/9449.035d0f2d.chunk.js": "./static/js/9449.035d0f2d.chunk.js",
"static/js/7659.5504cc60.chunk.js": "./static/js/7659.5504cc60.chunk.js",
"static/js/9968.f0284b3d.chunk.js": "./static/js/9968.f0284b3d.chunk.js",
"static/js/2180.f0842e9e.chunk.js": "./static/js/2180.f0842e9e.chunk.js",
"static/js/3518.e1923a22.chunk.js": "./static/js/3518.e1923a22.chunk.js",
"static/js/7021.ee631825.chunk.js": "./static/js/7021.ee631825.chunk.js",
"static/js/2684.013ba254.chunk.js": "./static/js/2684.013ba254.chunk.js",
"static/js/6683.0a047d81.chunk.js": "./static/js/6683.0a047d81.chunk.js",
"static/js/8350.feed1db5.chunk.js": "./static/js/8350.feed1db5.chunk.js",
"static/js/2676.bd3d9df3.chunk.js": "./static/js/2676.bd3d9df3.chunk.js",
"static/js/9449.281102d6.chunk.js": "./static/js/9449.281102d6.chunk.js",
"static/js/7659.e4cc39f9.chunk.js": "./static/js/7659.e4cc39f9.chunk.js",
"static/js/9968.676114b2.chunk.js": "./static/js/9968.676114b2.chunk.js",
"static/js/2180.c83301fc.chunk.js": "./static/js/2180.c83301fc.chunk.js",
"static/js/8253.964026c0.chunk.js": "./static/js/8253.964026c0.chunk.js",
"static/js/3328.04821285.chunk.js": "./static/js/3328.04821285.chunk.js",
"static/js/1440.146b37eb.chunk.js": "./static/js/1440.146b37eb.chunk.js",
"static/js/9002.8057e34f.chunk.js": "./static/js/9002.8057e34f.chunk.js",
"static/js/51.76f011ea.chunk.js": "./static/js/51.76f011ea.chunk.js",
"static/js/711.121af87a.chunk.js": "./static/js/711.121af87a.chunk.js",
"static/js/3328.c99fe6b3.chunk.js": "./static/js/3328.c99fe6b3.chunk.js",
"static/js/1440.74dce637.chunk.js": "./static/js/1440.74dce637.chunk.js",
"static/js/2512.b0d0c6a4.chunk.js": "./static/js/2512.b0d0c6a4.chunk.js",
"static/js/51.8e7e99eb.chunk.js": "./static/js/51.8e7e99eb.chunk.js",
"static/js/711.971db52a.chunk.js": "./static/js/711.971db52a.chunk.js",
"static/js/6901.5bbc1914.chunk.js": "./static/js/6901.5bbc1914.chunk.js",
"static/js/3678.568378f8.chunk.js": "./static/js/3678.568378f8.chunk.js",
"static/css/3320.f0806840.chunk.css": "./static/css/3320.f0806840.chunk.css",
"static/js/3320.b01c2bc8.chunk.js": "./static/js/3320.b01c2bc8.chunk.js",
"static/js/312.256db0f7.chunk.js": "./static/js/312.256db0f7.chunk.js",
"static/js/2112.6991f0b0.chunk.js": "./static/js/2112.6991f0b0.chunk.js",
"static/js/4619.c6ef5989.chunk.js": "./static/js/4619.c6ef5989.chunk.js",
"static/js/8990.4fcc1b0f.chunk.js": "./static/js/8990.4fcc1b0f.chunk.js",
"static/js/8455.f9b61de1.chunk.js": "./static/js/8455.f9b61de1.chunk.js",
"static/js/3320.6e852bd3.chunk.js": "./static/js/3320.6e852bd3.chunk.js",
"static/js/312.f6f66e6c.chunk.js": "./static/js/312.f6f66e6c.chunk.js",
"static/js/2112.4cc30535.chunk.js": "./static/js/2112.4cc30535.chunk.js",
"static/js/4619.c13fce95.chunk.js": "./static/js/4619.c13fce95.chunk.js",
"static/js/8990.57055bc2.chunk.js": "./static/js/8990.57055bc2.chunk.js",
"static/js/8455.802bf15b.chunk.js": "./static/js/8455.802bf15b.chunk.js",
"static/css/3631.f0806840.chunk.css": "./static/css/3631.f0806840.chunk.css",
"static/js/3631.a3bc3d9b.chunk.js": "./static/js/3631.a3bc3d9b.chunk.js",
"static/js/1604.c6070715.chunk.js": "./static/js/1604.c6070715.chunk.js",
"static/js/8391.cf78366d.chunk.js": "./static/js/8391.cf78366d.chunk.js",
"static/js/402.3ec8985e.chunk.js": "./static/js/402.3ec8985e.chunk.js",
"static/js/1705.b90dd0eb.chunk.js": "./static/js/1705.b90dd0eb.chunk.js",
"static/js/1581.3e4f9436.chunk.js": "./static/js/1581.3e4f9436.chunk.js",
"static/js/455.855a38c2.chunk.js": "./static/js/455.855a38c2.chunk.js",
"static/js/2661.ed2f4fc2.chunk.js": "./static/js/2661.ed2f4fc2.chunk.js",
"static/js/3631.45996dad.chunk.js": "./static/js/3631.45996dad.chunk.js",
"static/js/1604.a9d0b62b.chunk.js": "./static/js/1604.a9d0b62b.chunk.js",
"static/js/8391.4ea39138.chunk.js": "./static/js/8391.4ea39138.chunk.js",
"static/js/402.ab077b85.chunk.js": "./static/js/402.ab077b85.chunk.js",
"static/js/1705.7586dfce.chunk.js": "./static/js/1705.7586dfce.chunk.js",
"static/js/1581.e753ce61.chunk.js": "./static/js/1581.e753ce61.chunk.js",
"static/js/455.1720a69d.chunk.js": "./static/js/455.1720a69d.chunk.js",
"static/js/2661.bb4d5ff4.chunk.js": "./static/js/2661.bb4d5ff4.chunk.js",
"static/js/889.73054a10.chunk.js": "./static/js/889.73054a10.chunk.js",
"static/js/9088.2ed52eb5.chunk.js": "./static/js/9088.2ed52eb5.chunk.js",
"static/js/9088.d0330189.chunk.js": "./static/js/9088.d0330189.chunk.js",
"static/js/247.64d57eaf.chunk.js": "./static/js/247.64d57eaf.chunk.js",
"static/js/2763.02f8a4d8.chunk.js": "./static/js/2763.02f8a4d8.chunk.js",
"static/js/3772.8f7b248e.chunk.js": "./static/js/3772.8f7b248e.chunk.js",
"static/js/2763.58b7220d.chunk.js": "./static/js/2763.58b7220d.chunk.js",
"static/js/5171.2cf876b1.chunk.js": "./static/js/5171.2cf876b1.chunk.js",
"static/js/2442.c325186c.chunk.js": "./static/js/2442.c325186c.chunk.js",
"static/js/1520.5385d6f6.chunk.js": "./static/js/1520.5385d6f6.chunk.js",
"static/js/2426.bc0cfae1.chunk.js": "./static/js/2426.bc0cfae1.chunk.js",
"static/js/2426.172b5361.chunk.js": "./static/js/2426.172b5361.chunk.js",
"static/js/5561.c5000912.chunk.js": "./static/js/5561.c5000912.chunk.js",
"static/js/5609.0399a94c.chunk.js": "./static/js/5609.0399a94c.chunk.js",
"static/js/3801.a06455a2.chunk.js": "./static/js/3801.a06455a2.chunk.js",
@@ -124,150 +123,145 @@
"static/js/6431.5f2e5e6e.chunk.js": "./static/js/6431.5f2e5e6e.chunk.js",
"static/js/7757.3650a6cc.chunk.js": "./static/js/7757.3650a6cc.chunk.js",
"static/js/6523.f3c7724a.chunk.js": "./static/js/6523.f3c7724a.chunk.js",
"static/js/8760.e06a6adc.chunk.js": "./static/js/8760.e06a6adc.chunk.js",
"static/js/5315.f76aa5f9.chunk.js": "./static/js/5315.f76aa5f9.chunk.js",
"static/js/2011.53c6f61f.chunk.js": "./static/js/2011.53c6f61f.chunk.js",
"static/js/8810.b52e1e05.chunk.js": "./static/js/8810.b52e1e05.chunk.js",
"static/js/8152.83273cfb.chunk.js": "./static/js/8152.83273cfb.chunk.js",
"static/js/8354.e837d480.chunk.js": "./static/js/8354.e837d480.chunk.js",
"static/js/9437.1a158c7b.chunk.js": "./static/js/9437.1a158c7b.chunk.js",
"static/js/6172.098bf62e.chunk.js": "./static/js/6172.098bf62e.chunk.js",
"static/js/3909.cdbddaab.chunk.js": "./static/js/3909.cdbddaab.chunk.js",
"static/js/7315.f1bb4245.chunk.js": "./static/js/7315.f1bb4245.chunk.js",
"static/js/5317.c7a235b3.chunk.js": "./static/js/5317.c7a235b3.chunk.js",
"static/js/2723.c7e2034f.chunk.js": "./static/js/2723.c7e2034f.chunk.js",
"static/js/2076.e7bf07b8.chunk.js": "./static/js/2076.e7bf07b8.chunk.js",
"static/js/1326.19aa2326.chunk.js": "./static/js/1326.19aa2326.chunk.js",
"static/js/4509.0cb642e8.chunk.js": "./static/js/4509.0cb642e8.chunk.js",
"static/js/8396.49ac6668.chunk.js": "./static/js/8396.49ac6668.chunk.js",
"static/js/5085.49076139.chunk.js": "./static/js/5085.49076139.chunk.js",
"static/js/3854.68ad3372.chunk.js": "./static/js/3854.68ad3372.chunk.js",
"static/js/7002.c23dc7cf.chunk.js": "./static/js/7002.c23dc7cf.chunk.js",
"static/js/3461.f7b91f8d.chunk.js": "./static/js/3461.f7b91f8d.chunk.js",
"static/js/7142.957288ed.chunk.js": "./static/js/7142.957288ed.chunk.js",
"static/js/7931.9fe0101a.chunk.js": "./static/js/7931.9fe0101a.chunk.js",
"static/js/9362.63d03757.chunk.js": "./static/js/9362.63d03757.chunk.js",
"static/js/2879.69834509.chunk.js": "./static/js/2879.69834509.chunk.js",
"static/js/7923.552889f9.chunk.js": "./static/js/7923.552889f9.chunk.js",
"static/js/5586.a2da5401.chunk.js": "./static/js/5586.a2da5401.chunk.js",
"static/js/1788.280ca1f4.chunk.js": "./static/js/1788.280ca1f4.chunk.js",
"static/js/9785.7ccf0212.chunk.js": "./static/js/9785.7ccf0212.chunk.js",
"static/js/8735.52726eac.chunk.js": "./static/js/8735.52726eac.chunk.js",
"static/js/8915.be25a5c1.chunk.js": "./static/js/8915.be25a5c1.chunk.js",
"static/js/3096.63d4ac67.chunk.js": "./static/js/3096.63d4ac67.chunk.js",
"static/js/63.830fd6fc.chunk.js": "./static/js/63.830fd6fc.chunk.js",
"static/js/2983.26ce456f.chunk.js": "./static/js/2983.26ce456f.chunk.js",
"static/js/770.c5b57a95.chunk.js": "./static/js/770.c5b57a95.chunk.js",
"static/js/5662.0998d919.chunk.js": "./static/js/5662.0998d919.chunk.js",
"static/js/5165.0fcf4d2d.chunk.js": "./static/js/5165.0fcf4d2d.chunk.js",
"static/js/6496.0cee9f03.chunk.js": "./static/js/6496.0cee9f03.chunk.js",
"static/js/1687.72fad20d.chunk.js": "./static/js/1687.72fad20d.chunk.js",
"static/js/5289.2cf708de.chunk.js": "./static/js/5289.2cf708de.chunk.js",
"static/js/5026.0b30f6e2.chunk.js": "./static/js/5026.0b30f6e2.chunk.js",
"index.html": "./index.html",
"main.90d417ae.css.map": "./static/css/main.90d417ae.css.map",
"main.5a7c25ee.js.map": "./static/js/main.5a7c25ee.js.map",
"main.303eddef.js.map": "./static/js/main.303eddef.js.map",
"2483.511e6a32.chunk.js.map": "./static/js/2483.511e6a32.chunk.js.map",
"6914.e9919921.chunk.js.map": "./static/js/6914.e9919921.chunk.js.map",
"4209.7c3855ef.chunk.js.map": "./static/js/4209.7c3855ef.chunk.js.map",
"1829.202650e3.chunk.js.map": "./static/js/1829.202650e3.chunk.js.map",
"6041.a11c2e9a.chunk.js.map": "./static/js/6041.a11c2e9a.chunk.js.map",
"5088.921b2534.chunk.js.map": "./static/js/5088.921b2534.chunk.js.map",
"5140.8f5521e6.chunk.js.map": "./static/js/5140.8f5521e6.chunk.js.map",
"1434.2cbee404.chunk.js.map": "./static/js/1434.2cbee404.chunk.js.map",
"3176.640e537b.chunk.js.map": "./static/js/3176.640e537b.chunk.js.map",
"6137.ac2c3fb7.chunk.js.map": "./static/js/6137.ac2c3fb7.chunk.js.map",
"7045.e30cf01e.chunk.js.map": "./static/js/7045.e30cf01e.chunk.js.map",
"9635.083b4e05.chunk.js.map": "./static/js/9635.083b4e05.chunk.js.map",
"2338.8b9b592f.chunk.js.map": "./static/js/2338.8b9b592f.chunk.js.map",
"4335.71899795.chunk.js.map": "./static/js/4335.71899795.chunk.js.map",
"321.eedfb3a5.chunk.js.map": "./static/js/321.eedfb3a5.chunk.js.map",
"6763.1da82d5c.chunk.js.map": "./static/js/6763.1da82d5c.chunk.js.map",
"3543.24923c9d.chunk.js.map": "./static/js/3543.24923c9d.chunk.js.map",
"4061.8bd849a7.chunk.js.map": "./static/js/4061.8bd849a7.chunk.js.map",
"2249.39222819.chunk.js.map": "./static/js/2249.39222819.chunk.js.map",
"9611.30185102.chunk.js.map": "./static/js/9611.30185102.chunk.js.map",
"4209.875682c6.chunk.js.map": "./static/js/4209.875682c6.chunk.js.map",
"1829.2cab6045.chunk.js.map": "./static/js/1829.2cab6045.chunk.js.map",
"4455.b20c0c9c.chunk.js.map": "./static/js/4455.b20c0c9c.chunk.js.map",
"5088.4c9e1b8c.chunk.js.map": "./static/js/5088.4c9e1b8c.chunk.js.map",
"5140.e9043b63.chunk.js.map": "./static/js/5140.e9043b63.chunk.js.map",
"1434.9ad9fa51.chunk.js.map": "./static/js/1434.9ad9fa51.chunk.js.map",
"3176.43953acc.chunk.js.map": "./static/js/3176.43953acc.chunk.js.map",
"6137.c0b24aaa.chunk.js.map": "./static/js/6137.c0b24aaa.chunk.js.map",
"7045.7a56a854.chunk.js.map": "./static/js/7045.7a56a854.chunk.js.map",
"9251.ad432876.chunk.js.map": "./static/js/9251.ad432876.chunk.js.map",
"2338.2294f835.chunk.js.map": "./static/js/2338.2294f835.chunk.js.map",
"4335.50f86695.chunk.js.map": "./static/js/4335.50f86695.chunk.js.map",
"321.2af53d6e.chunk.js.map": "./static/js/321.2af53d6e.chunk.js.map",
"6763.e14ad9c3.chunk.js.map": "./static/js/6763.e14ad9c3.chunk.js.map",
"3543.46c5055f.chunk.js.map": "./static/js/3543.46c5055f.chunk.js.map",
"4061.776bbbf3.chunk.js.map": "./static/js/4061.776bbbf3.chunk.js.map",
"2249.922e46ea.chunk.js.map": "./static/js/2249.922e46ea.chunk.js.map",
"9611.c217768e.chunk.js.map": "./static/js/9611.c217768e.chunk.js.map",
"2637.79b0ea29.chunk.js.map": "./static/js/2637.79b0ea29.chunk.js.map",
"380.f0806840.chunk.css.map": "./static/css/380.f0806840.chunk.css.map",
"380.1b0b26c2.chunk.js.map": "./static/js/380.1b0b26c2.chunk.js.map",
"380.cb95766e.chunk.js.map": "./static/js/380.cb95766e.chunk.js.map",
"5926.c044ad6b.chunk.js.map": "./static/js/5926.c044ad6b.chunk.js.map",
"701.06a6587d.chunk.js.map": "./static/js/701.06a6587d.chunk.js.map",
"7821.f798ffe1.chunk.js.map": "./static/js/7821.f798ffe1.chunk.js.map",
"2625.eff40583.chunk.js.map": "./static/js/2625.eff40583.chunk.js.map",
"701.55960ffe.chunk.js.map": "./static/js/701.55960ffe.chunk.js.map",
"7821.a2c85c06.chunk.js.map": "./static/js/7821.a2c85c06.chunk.js.map",
"2625.6d6e6809.chunk.js.map": "./static/js/2625.6d6e6809.chunk.js.map",
"9033.f0806840.chunk.css.map": "./static/css/9033.f0806840.chunk.css.map",
"9033.d40f5fa2.chunk.js.map": "./static/js/9033.d40f5fa2.chunk.js.map",
"9299.f0806840.chunk.css.map": "./static/css/9299.f0806840.chunk.css.map",
"9299.5442941e.chunk.js.map": "./static/js/9299.5442941e.chunk.js.map",
"191.92f7d06b.chunk.js.map": "./static/js/191.92f7d06b.chunk.js.map",
"7585.2a9cb3d4.chunk.js.map": "./static/js/7585.2a9cb3d4.chunk.js.map",
"1836.761ade1e.chunk.js.map": "./static/js/1836.761ade1e.chunk.js.map",
"4653.957113df.chunk.js.map": "./static/js/4653.957113df.chunk.js.map",
"255.7603092b.chunk.js.map": "./static/js/255.7603092b.chunk.js.map",
"4394.2fa16d38.chunk.js.map": "./static/js/4394.2fa16d38.chunk.js.map",
"4781.ca99434f.chunk.js.map": "./static/js/4781.ca99434f.chunk.js.map",
"9299.43a5d81d.chunk.js.map": "./static/js/9299.43a5d81d.chunk.js.map",
"2555.1aef7cca.chunk.js.map": "./static/js/2555.1aef7cca.chunk.js.map",
"7585.a54f7c72.chunk.js.map": "./static/js/7585.a54f7c72.chunk.js.map",
"1836.083f36ae.chunk.js.map": "./static/js/1836.083f36ae.chunk.js.map",
"4653.a6dfdf0c.chunk.js.map": "./static/js/4653.a6dfdf0c.chunk.js.map",
"4219.c24a76ef.chunk.js.map": "./static/js/4219.c24a76ef.chunk.js.map",
"3208.c0b88007.chunk.js.map": "./static/js/3208.c0b88007.chunk.js.map",
"4394.4efb3ddd.chunk.js.map": "./static/js/4394.4efb3ddd.chunk.js.map",
"4781.785d14ba.chunk.js.map": "./static/js/4781.785d14ba.chunk.js.map",
"9478.c2c2c220.chunk.js.map": "./static/js/9478.c2c2c220.chunk.js.map",
"7164.e4aebe46.chunk.js.map": "./static/js/7164.e4aebe46.chunk.js.map",
"4414.80189a53.chunk.js.map": "./static/js/4414.80189a53.chunk.js.map",
"7798.9bd6994f.chunk.js.map": "./static/js/7798.9bd6994f.chunk.js.map",
"8833.d4d792a2.chunk.js.map": "./static/js/8833.d4d792a2.chunk.js.map",
"471.3ac500ed.chunk.js.map": "./static/js/471.3ac500ed.chunk.js.map",
"7164.5542a849.chunk.js.map": "./static/js/7164.5542a849.chunk.js.map",
"4414.453618d3.chunk.js.map": "./static/js/4414.453618d3.chunk.js.map",
"7798.21fc6f4a.chunk.js.map": "./static/js/7798.21fc6f4a.chunk.js.map",
"8833.5d3a1948.chunk.js.map": "./static/js/8833.5d3a1948.chunk.js.map",
"471.bc12301a.chunk.js.map": "./static/js/471.bc12301a.chunk.js.map",
"483.3fa229ad.chunk.js.map": "./static/js/483.3fa229ad.chunk.js.map",
"9467.d4860f23.chunk.js.map": "./static/js/9467.d4860f23.chunk.js.map",
"6895.af17fed5.chunk.js.map": "./static/js/6895.af17fed5.chunk.js.map",
"6233.589f83fe.chunk.js.map": "./static/js/6233.589f83fe.chunk.js.map",
"5588.1a32c1c3.chunk.js.map": "./static/js/5588.1a32c1c3.chunk.js.map",
"4874.80bf31e6.chunk.js.map": "./static/js/4874.80bf31e6.chunk.js.map",
"9467.50ab01b6.chunk.js.map": "./static/js/9467.50ab01b6.chunk.js.map",
"6895.c4b3ab71.chunk.js.map": "./static/js/6895.c4b3ab71.chunk.js.map",
"6233.f8460b26.chunk.js.map": "./static/js/6233.f8460b26.chunk.js.map",
"5588.3894176c.chunk.js.map": "./static/js/5588.3894176c.chunk.js.map",
"4133.37c68d0f.chunk.js.map": "./static/js/4133.37c68d0f.chunk.js.map",
"1955.f0806840.chunk.css.map": "./static/css/1955.f0806840.chunk.css.map",
"1955.95db0000.chunk.js.map": "./static/js/1955.95db0000.chunk.js.map",
"1955.27cc0d9b.chunk.js.map": "./static/js/1955.27cc0d9b.chunk.js.map",
"2653.d0c6bbf1.chunk.js.map": "./static/js/2653.d0c6bbf1.chunk.js.map",
"3956.74bfef51.chunk.js.map": "./static/js/3956.74bfef51.chunk.js.map",
"3956.418abe3f.chunk.js.map": "./static/js/3956.418abe3f.chunk.js.map",
"7015.bf4c7dc4.chunk.js.map": "./static/js/7015.bf4c7dc4.chunk.js.map",
"7524.c226828c.chunk.js.map": "./static/js/7524.c226828c.chunk.js.map",
"8771.b2727bdd.chunk.js.map": "./static/js/8771.b2727bdd.chunk.js.map",
"9076.bfebbb14.chunk.js.map": "./static/js/9076.bfebbb14.chunk.js.map",
"8771.475684ba.chunk.js.map": "./static/js/8771.475684ba.chunk.js.map",
"9076.4450f2f8.chunk.js.map": "./static/js/9076.4450f2f8.chunk.js.map",
"9221.505f4336.chunk.js.map": "./static/js/9221.505f4336.chunk.js.map",
"8896.e9be20fb.chunk.js.map": "./static/js/8896.e9be20fb.chunk.js.map",
"7413.a6fe6f9f.chunk.js.map": "./static/js/7413.a6fe6f9f.chunk.js.map",
"9134.9336f36c.chunk.js.map": "./static/js/9134.9336f36c.chunk.js.map",
"8896.984a3f17.chunk.js.map": "./static/js/8896.984a3f17.chunk.js.map",
"7413.76c38a02.chunk.js.map": "./static/js/7413.76c38a02.chunk.js.map",
"9134.0538c268.chunk.js.map": "./static/js/9134.0538c268.chunk.js.map",
"8138.f0806840.chunk.css.map": "./static/css/8138.f0806840.chunk.css.map",
"8138.4c6a5b7f.chunk.js.map": "./static/js/8138.4c6a5b7f.chunk.js.map",
"8183.8c64a361.chunk.js.map": "./static/js/8183.8c64a361.chunk.js.map",
"9145.1af8c238.chunk.js.map": "./static/js/9145.1af8c238.chunk.js.map",
"8822.6030f20d.chunk.js.map": "./static/js/8822.6030f20d.chunk.js.map",
"7331.106a6938.chunk.js.map": "./static/js/7331.106a6938.chunk.js.map",
"9605.e2f1ac95.chunk.js.map": "./static/js/9605.e2f1ac95.chunk.js.map",
"426.0124a3b9.chunk.js.map": "./static/js/426.0124a3b9.chunk.js.map",
"2878.174d0b14.chunk.js.map": "./static/js/2878.174d0b14.chunk.js.map",
"8138.5e1c08de.chunk.js.map": "./static/js/8138.5e1c08de.chunk.js.map",
"2794.ee6b7b2c.chunk.js.map": "./static/js/2794.ee6b7b2c.chunk.js.map",
"9145.363b2352.chunk.js.map": "./static/js/9145.363b2352.chunk.js.map",
"1379.8207ed7c.chunk.js.map": "./static/js/1379.8207ed7c.chunk.js.map",
"1501.b5696037.chunk.js.map": "./static/js/1501.b5696037.chunk.js.map",
"9605.fd87a53e.chunk.js.map": "./static/js/9605.fd87a53e.chunk.js.map",
"426.e738683c.chunk.js.map": "./static/js/426.e738683c.chunk.js.map",
"2878.fca6e2cf.chunk.js.map": "./static/js/2878.fca6e2cf.chunk.js.map",
"8495.bdd215dc.chunk.js.map": "./static/js/8495.bdd215dc.chunk.js.map",
"4934.4a573b0b.chunk.js.map": "./static/js/4934.4a573b0b.chunk.js.map",
"3518.0178dcf1.chunk.js.map": "./static/js/3518.0178dcf1.chunk.js.map",
"2684.3e7eb9b1.chunk.js.map": "./static/js/2684.3e7eb9b1.chunk.js.map",
"6683.18e77b71.chunk.js.map": "./static/js/6683.18e77b71.chunk.js.map",
"8350.501e9b49.chunk.js.map": "./static/js/8350.501e9b49.chunk.js.map",
"2676.47150957.chunk.js.map": "./static/js/2676.47150957.chunk.js.map",
"9449.035d0f2d.chunk.js.map": "./static/js/9449.035d0f2d.chunk.js.map",
"7659.5504cc60.chunk.js.map": "./static/js/7659.5504cc60.chunk.js.map",
"9968.f0284b3d.chunk.js.map": "./static/js/9968.f0284b3d.chunk.js.map",
"2180.f0842e9e.chunk.js.map": "./static/js/2180.f0842e9e.chunk.js.map",
"3518.e1923a22.chunk.js.map": "./static/js/3518.e1923a22.chunk.js.map",
"7021.ee631825.chunk.js.map": "./static/js/7021.ee631825.chunk.js.map",
"2684.013ba254.chunk.js.map": "./static/js/2684.013ba254.chunk.js.map",
"6683.0a047d81.chunk.js.map": "./static/js/6683.0a047d81.chunk.js.map",
"8350.feed1db5.chunk.js.map": "./static/js/8350.feed1db5.chunk.js.map",
"2676.bd3d9df3.chunk.js.map": "./static/js/2676.bd3d9df3.chunk.js.map",
"9449.281102d6.chunk.js.map": "./static/js/9449.281102d6.chunk.js.map",
"7659.e4cc39f9.chunk.js.map": "./static/js/7659.e4cc39f9.chunk.js.map",
"9968.676114b2.chunk.js.map": "./static/js/9968.676114b2.chunk.js.map",
"2180.c83301fc.chunk.js.map": "./static/js/2180.c83301fc.chunk.js.map",
"8253.964026c0.chunk.js.map": "./static/js/8253.964026c0.chunk.js.map",
"3328.04821285.chunk.js.map": "./static/js/3328.04821285.chunk.js.map",
"1440.146b37eb.chunk.js.map": "./static/js/1440.146b37eb.chunk.js.map",
"9002.8057e34f.chunk.js.map": "./static/js/9002.8057e34f.chunk.js.map",
"51.76f011ea.chunk.js.map": "./static/js/51.76f011ea.chunk.js.map",
"711.121af87a.chunk.js.map": "./static/js/711.121af87a.chunk.js.map",
"3328.c99fe6b3.chunk.js.map": "./static/js/3328.c99fe6b3.chunk.js.map",
"1440.74dce637.chunk.js.map": "./static/js/1440.74dce637.chunk.js.map",
"2512.b0d0c6a4.chunk.js.map": "./static/js/2512.b0d0c6a4.chunk.js.map",
"51.8e7e99eb.chunk.js.map": "./static/js/51.8e7e99eb.chunk.js.map",
"711.971db52a.chunk.js.map": "./static/js/711.971db52a.chunk.js.map",
"6901.5bbc1914.chunk.js.map": "./static/js/6901.5bbc1914.chunk.js.map",
"3678.568378f8.chunk.js.map": "./static/js/3678.568378f8.chunk.js.map",
"3320.f0806840.chunk.css.map": "./static/css/3320.f0806840.chunk.css.map",
"3320.b01c2bc8.chunk.js.map": "./static/js/3320.b01c2bc8.chunk.js.map",
"312.256db0f7.chunk.js.map": "./static/js/312.256db0f7.chunk.js.map",
"2112.6991f0b0.chunk.js.map": "./static/js/2112.6991f0b0.chunk.js.map",
"4619.c6ef5989.chunk.js.map": "./static/js/4619.c6ef5989.chunk.js.map",
"8990.4fcc1b0f.chunk.js.map": "./static/js/8990.4fcc1b0f.chunk.js.map",
"8455.f9b61de1.chunk.js.map": "./static/js/8455.f9b61de1.chunk.js.map",
"3320.6e852bd3.chunk.js.map": "./static/js/3320.6e852bd3.chunk.js.map",
"312.f6f66e6c.chunk.js.map": "./static/js/312.f6f66e6c.chunk.js.map",
"2112.4cc30535.chunk.js.map": "./static/js/2112.4cc30535.chunk.js.map",
"4619.c13fce95.chunk.js.map": "./static/js/4619.c13fce95.chunk.js.map",
"8990.57055bc2.chunk.js.map": "./static/js/8990.57055bc2.chunk.js.map",
"8455.802bf15b.chunk.js.map": "./static/js/8455.802bf15b.chunk.js.map",
"3631.f0806840.chunk.css.map": "./static/css/3631.f0806840.chunk.css.map",
"3631.a3bc3d9b.chunk.js.map": "./static/js/3631.a3bc3d9b.chunk.js.map",
"1604.c6070715.chunk.js.map": "./static/js/1604.c6070715.chunk.js.map",
"8391.cf78366d.chunk.js.map": "./static/js/8391.cf78366d.chunk.js.map",
"402.3ec8985e.chunk.js.map": "./static/js/402.3ec8985e.chunk.js.map",
"1705.b90dd0eb.chunk.js.map": "./static/js/1705.b90dd0eb.chunk.js.map",
"1581.3e4f9436.chunk.js.map": "./static/js/1581.3e4f9436.chunk.js.map",
"455.855a38c2.chunk.js.map": "./static/js/455.855a38c2.chunk.js.map",
"2661.ed2f4fc2.chunk.js.map": "./static/js/2661.ed2f4fc2.chunk.js.map",
"3631.45996dad.chunk.js.map": "./static/js/3631.45996dad.chunk.js.map",
"1604.a9d0b62b.chunk.js.map": "./static/js/1604.a9d0b62b.chunk.js.map",
"8391.4ea39138.chunk.js.map": "./static/js/8391.4ea39138.chunk.js.map",
"402.ab077b85.chunk.js.map": "./static/js/402.ab077b85.chunk.js.map",
"1705.7586dfce.chunk.js.map": "./static/js/1705.7586dfce.chunk.js.map",
"1581.e753ce61.chunk.js.map": "./static/js/1581.e753ce61.chunk.js.map",
"455.1720a69d.chunk.js.map": "./static/js/455.1720a69d.chunk.js.map",
"2661.bb4d5ff4.chunk.js.map": "./static/js/2661.bb4d5ff4.chunk.js.map",
"889.73054a10.chunk.js.map": "./static/js/889.73054a10.chunk.js.map",
"9088.2ed52eb5.chunk.js.map": "./static/js/9088.2ed52eb5.chunk.js.map",
"9088.d0330189.chunk.js.map": "./static/js/9088.d0330189.chunk.js.map",
"247.64d57eaf.chunk.js.map": "./static/js/247.64d57eaf.chunk.js.map",
"2763.02f8a4d8.chunk.js.map": "./static/js/2763.02f8a4d8.chunk.js.map",
"3772.8f7b248e.chunk.js.map": "./static/js/3772.8f7b248e.chunk.js.map",
"2763.58b7220d.chunk.js.map": "./static/js/2763.58b7220d.chunk.js.map",
"5171.2cf876b1.chunk.js.map": "./static/js/5171.2cf876b1.chunk.js.map",
"2442.c325186c.chunk.js.map": "./static/js/2442.c325186c.chunk.js.map",
"1520.5385d6f6.chunk.js.map": "./static/js/1520.5385d6f6.chunk.js.map",
"2426.bc0cfae1.chunk.js.map": "./static/js/2426.bc0cfae1.chunk.js.map",
"2426.172b5361.chunk.js.map": "./static/js/2426.172b5361.chunk.js.map",
"5561.c5000912.chunk.js.map": "./static/js/5561.c5000912.chunk.js.map",
"5609.0399a94c.chunk.js.map": "./static/js/5609.0399a94c.chunk.js.map",
"3801.a06455a2.chunk.js.map": "./static/js/3801.a06455a2.chunk.js.map",
@@ -275,35 +269,31 @@
"6431.5f2e5e6e.chunk.js.map": "./static/js/6431.5f2e5e6e.chunk.js.map",
"7757.3650a6cc.chunk.js.map": "./static/js/7757.3650a6cc.chunk.js.map",
"6523.f3c7724a.chunk.js.map": "./static/js/6523.f3c7724a.chunk.js.map",
"8760.e06a6adc.chunk.js.map": "./static/js/8760.e06a6adc.chunk.js.map",
"5315.f76aa5f9.chunk.js.map": "./static/js/5315.f76aa5f9.chunk.js.map",
"2011.53c6f61f.chunk.js.map": "./static/js/2011.53c6f61f.chunk.js.map",
"8810.b52e1e05.chunk.js.map": "./static/js/8810.b52e1e05.chunk.js.map",
"8152.83273cfb.chunk.js.map": "./static/js/8152.83273cfb.chunk.js.map",
"8354.e837d480.chunk.js.map": "./static/js/8354.e837d480.chunk.js.map",
"9437.1a158c7b.chunk.js.map": "./static/js/9437.1a158c7b.chunk.js.map",
"6172.098bf62e.chunk.js.map": "./static/js/6172.098bf62e.chunk.js.map",
"3909.cdbddaab.chunk.js.map": "./static/js/3909.cdbddaab.chunk.js.map",
"7315.f1bb4245.chunk.js.map": "./static/js/7315.f1bb4245.chunk.js.map",
"5317.c7a235b3.chunk.js.map": "./static/js/5317.c7a235b3.chunk.js.map",
"2723.c7e2034f.chunk.js.map": "./static/js/2723.c7e2034f.chunk.js.map",
"2076.e7bf07b8.chunk.js.map": "./static/js/2076.e7bf07b8.chunk.js.map",
"1326.19aa2326.chunk.js.map": "./static/js/1326.19aa2326.chunk.js.map",
"4509.0cb642e8.chunk.js.map": "./static/js/4509.0cb642e8.chunk.js.map",
"8396.49ac6668.chunk.js.map": "./static/js/8396.49ac6668.chunk.js.map",
"5085.49076139.chunk.js.map": "./static/js/5085.49076139.chunk.js.map",
"3854.68ad3372.chunk.js.map": "./static/js/3854.68ad3372.chunk.js.map",
"7002.c23dc7cf.chunk.js.map": "./static/js/7002.c23dc7cf.chunk.js.map",
"3461.f7b91f8d.chunk.js.map": "./static/js/3461.f7b91f8d.chunk.js.map",
"7142.957288ed.chunk.js.map": "./static/js/7142.957288ed.chunk.js.map",
"7931.9fe0101a.chunk.js.map": "./static/js/7931.9fe0101a.chunk.js.map",
"9362.63d03757.chunk.js.map": "./static/js/9362.63d03757.chunk.js.map",
"2879.69834509.chunk.js.map": "./static/js/2879.69834509.chunk.js.map",
"7923.552889f9.chunk.js.map": "./static/js/7923.552889f9.chunk.js.map",
"5586.a2da5401.chunk.js.map": "./static/js/5586.a2da5401.chunk.js.map",
"1788.280ca1f4.chunk.js.map": "./static/js/1788.280ca1f4.chunk.js.map",
"9785.7ccf0212.chunk.js.map": "./static/js/9785.7ccf0212.chunk.js.map",
"8735.52726eac.chunk.js.map": "./static/js/8735.52726eac.chunk.js.map",
"8915.be25a5c1.chunk.js.map": "./static/js/8915.be25a5c1.chunk.js.map",
"3096.63d4ac67.chunk.js.map": "./static/js/3096.63d4ac67.chunk.js.map",
"63.830fd6fc.chunk.js.map": "./static/js/63.830fd6fc.chunk.js.map",
"2983.26ce456f.chunk.js.map": "./static/js/2983.26ce456f.chunk.js.map",
"770.c5b57a95.chunk.js.map": "./static/js/770.c5b57a95.chunk.js.map",
"5662.0998d919.chunk.js.map": "./static/js/5662.0998d919.chunk.js.map",
"5165.0fcf4d2d.chunk.js.map": "./static/js/5165.0fcf4d2d.chunk.js.map",
"6496.0cee9f03.chunk.js.map": "./static/js/6496.0cee9f03.chunk.js.map",
"1687.72fad20d.chunk.js.map": "./static/js/1687.72fad20d.chunk.js.map"
"5289.2cf708de.chunk.js.map": "./static/js/5289.2cf708de.chunk.js.map",
"5026.0b30f6e2.chunk.js.map": "./static/js/5026.0b30f6e2.chunk.js.map"
},
"entrypoints": [
"static/css/main.90d417ae.css",
"static/js/main.5a7c25ee.js"
"static/js/main.303eddef.js"
]
}

View File

@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="/"/><meta content="width=device-width,initial-scale=1" name="viewport"/><meta content="#081C42" media="(prefers-color-scheme: light)" name="theme-color"/><meta content="#081C42" media="(prefers-color-scheme: dark)" name="theme-color"/><meta content="MinIO Console" name="description"/><link href="./styles/root-styles.css" rel="stylesheet"/><link href="./apple-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"/><link href="./favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link href="./favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="./favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link href="./manifest.json" rel="manifest"/><link color="#3a4e54" href="./safari-pinned-tab.svg" rel="mask-icon"/><title>MinIO Console</title><script defer="defer" src="./static/js/main.5a7c25ee.js"></script><link href="./static/css/main.90d417ae.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="preload"><img src="./images/background.svg"/> <img src="./images/background-wave-orig2.svg"/></div><div id="loader-block"><img src="./Loader.svg"/></div></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="/"/><meta content="width=device-width,initial-scale=1" name="viewport"/><meta content="#081C42" media="(prefers-color-scheme: light)" name="theme-color"/><meta content="#081C42" media="(prefers-color-scheme: dark)" name="theme-color"/><meta content="MinIO Console" name="description"/><link href="./styles/root-styles.css" rel="stylesheet"/><link href="./apple-icon-180x180.png" rel="apple-touch-icon" sizes="180x180"/><link href="./favicon-32x32.png" rel="icon" sizes="32x32" type="image/png"/><link href="./favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"/><link href="./favicon-16x16.png" rel="icon" sizes="16x16" type="image/png"/><link href="./manifest.json" rel="manifest"/><link color="#3a4e54" href="./safari-pinned-tab.svg" rel="mask-icon"/><title>MinIO Console</title><script defer="defer" src="./static/js/main.303eddef.js"></script><link href="./static/css/main.90d417ae.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"><div id="preload"><img src="./images/background.svg"/> <img src="./images/background-wave-orig2.svg"/></div><div id="loader-block"><img src="./Loader.svg"/></div></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +1,2 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1581],{1581:function(e,a,t){t.r(a);var n=t(29439),s=t(1413),o=t(72791),i=t(60364),l=t(36151),c=t(40986),r=t(11135),d=t(25787),u=t(61889),m=t(45248),f=t(42649),h=t(23814),Z=t(37516),x=t(21435),p=t(56028),j=t(81207),g=t(93656),k=t(56578),v=t(80184),b=(0,i.$j)(null,{setModalErrorSnackMessage:f.zb});a.default=(0,d.Z)((function(e){return(0,r.Z)((0,s.Z)((0,s.Z)({},h.DF),h.ID))}))(b((function(e){var a=e.classes,t=e.open,s=e.enabled,i=e.cfg,r=e.selectedBucket,d=e.closeModalAndRefresh,f=e.setModalErrorSnackMessage,h=(0,o.useState)(!1),b=(0,n.Z)(h,2),M=b[0],S=b[1],C=(0,o.useState)(!1),q=(0,n.Z)(C,2),N=q[0],B=q[1],P=(0,o.useState)("1"),y=(0,n.Z)(P,2),w=y[0],E=y[1],_=(0,o.useState)("TiB"),z=(0,n.Z)(_,2),D=z[0],F=z[1];(0,o.useEffect)((function(){if(s&&(B(!0),i)){E("".concat(i.quota)),F("Gi");for(var e="B",a=i.quota,t=0;t<m.Dl.length&&i.quota%Math.pow(1024,t)===0;t++)a=i.quota/Math.pow(1024,t),e=m.Dl[t];E("".concat(a)),F(e)}}),[s,i]);return(0,v.jsx)(p.Z,{modalOpen:t,onClose:function(){d()},title:"Enable Bucket Quota",titleIcon:(0,v.jsx)(g.Wq,{}),children:(0,v.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),function(){if(!M){var e={enabled:N,amount:parseInt((0,m.Pw)(w,D,!0)),quota_type:"hard"};j.Z.invoke("PUT","/api/v1/buckets/".concat(r,"/quota"),e).then((function(){S(!1),d()})).catch((function(e){S(!1),f(e)}))}}()},children:(0,v.jsxs)(u.ZP,{container:!0,children:[(0,v.jsxs)(u.ZP,{item:!0,xs:12,className:a.formScrollable,children:[(0,v.jsx)(u.ZP,{item:!0,xs:12,className:a.formFieldRow,children:(0,v.jsx)(Z.Z,{value:"bucket_quota",id:"bucket_quota",name:"bucket_quota",checked:N,onChange:function(e){B(e.target.checked)},label:"Enabled"})}),N&&(0,v.jsx)(o.Fragment,{children:(0,v.jsx)(u.ZP,{item:!0,xs:12,className:a.formFieldRow,children:(0,v.jsx)(u.ZP,{container:!0,children:(0,v.jsx)(u.ZP,{item:!0,xs:12,children:(0,v.jsx)(x.Z,{id:"quota_size",name:"quota_size",onChange:function(e){e.target.validity.valid&&E(e.target.value)},pattern:"[0-9]*",label:"Quota",value:w,required:!0,min:"1",overlayObject:(0,v.jsx)(k.Z,{id:"quota_unit",onUnitChange:function(e){F(e)},unitSelected:D,unitsList:(0,m.zQ)(["Ki"]),disabled:!1})})})})})})]}),(0,v.jsxs)(u.ZP,{item:!0,xs:12,className:a.modalButtonBar,children:[(0,v.jsx)(l.Z,{type:"button",variant:"outlined",color:"primary",disabled:M,onClick:function(){d()},children:"Cancel"}),(0,v.jsx)(l.Z,{type:"submit",variant:"contained",color:"primary",disabled:M,children:"Save"})]}),M&&(0,v.jsx)(u.ZP,{item:!0,xs:12,children:(0,v.jsx)(c.Z,{})})]})})})})))},56028:function(e,a,t){var n=t(29439),s=t(1413),o=t(72791),i=t(60364),l=t(13400),c=t(55646),r=t(5574),d=t(65661),u=t(39157),m=t(11135),f=t(25787),h=t(23814),Z=t(42649),x=t(29823),p=t(28057),j=t(80184),g=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:Z.MK});a.Z=(0,f.Z)((function(e){return(0,m.Z)((0,s.Z)((0,s.Z)({},h.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},h.sN))}))(g((function(e){var a=e.onClose,t=e.modalOpen,i=e.title,m=e.children,f=e.classes,h=e.wideLimit,Z=void 0===h||h,g=e.modalSnackMessage,k=e.noContentPadding,v=e.setModalSnackMessage,b=e.titleIcon,M=void 0===b?null:b,S=(0,o.useState)(!1),C=(0,n.Z)(S,2),q=C[0],N=C[1];(0,o.useEffect)((function(){v("")}),[v]),(0,o.useEffect)((function(){if(g){if(""===g.message)return void N(!1);"error"!==g.type&&N(!0)}}),[g]);var B=Z?{classes:{paper:f.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},P="";return g&&(P=g.detailedErrorMsg,(""===g.detailedErrorMsg||g.detailedErrorMsg.length<5)&&(P=g.message)),(0,j.jsxs)(r.Z,(0,s.Z)((0,s.Z)({open:t,classes:f},B),{},{scroll:"paper",onClose:function(e,t){"backdropClick"!==t&&a()},className:f.root,children:[(0,j.jsxs)(d.Z,{className:f.title,children:[(0,j.jsxs)("div",{className:f.titleText,children:[M," ",i]}),(0,j.jsx)("div",{className:f.closeContainer,children:(0,j.jsx)(l.Z,{"aria-label":"close",id:"close",className:f.closeButton,onClick:a,disableRipple:!0,size:"small",children:(0,j.jsx)(x.Z,{})})})]}),(0,j.jsx)(p.Z,{isModal:!0}),(0,j.jsx)(c.Z,{open:q,className:f.snackBarModal,onClose:function(){N(!1),v("")},message:P,ContentProps:{className:"".concat(f.snackBar," ").concat(g&&"error"===g.type?f.errorSnackBar:"")},autoHideDuration:g&&"error"===g.type?1e4:5e3}),(0,j.jsx)(u.Z,{className:k?"":f.content,children:m})]}))})))},29823:function(e,a,t){var n=t(95318);a.Z=void 0;var s=n(t(45649)),o=t(80184),i=(0,s.default)((0,o.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close");a.Z=i}}]);
//# sourceMappingURL=1581.3e4f9436.chunk.js.map
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1581],{1581:function(e,a,t){t.r(a);var n=t(29439),s=t(1413),o=t(72791),i=t(60364),l=t(36151),c=t(40986),r=t(11135),d=t(25787),u=t(61889),m=t(45248),f=t(42649),h=t(23814),Z=t(37516),x=t(21435),p=t(56028),j=t(81207),g=t(93656),k=t(56578),b=t(80184),v=(0,i.$j)(null,{setModalErrorSnackMessage:f.zb});a.default=(0,d.Z)((function(e){return(0,r.Z)((0,s.Z)((0,s.Z)({},h.DF),h.ID))}))(v((function(e){var a=e.classes,t=e.open,s=e.enabled,i=e.cfg,r=e.selectedBucket,d=e.closeModalAndRefresh,f=e.setModalErrorSnackMessage,h=(0,o.useState)(!1),v=(0,n.Z)(h,2),M=v[0],S=v[1],C=(0,o.useState)(!1),q=(0,n.Z)(C,2),N=q[0],B=q[1],P=(0,o.useState)("1"),y=(0,n.Z)(P,2),w=y[0],E=y[1],_=(0,o.useState)("TiB"),D=(0,n.Z)(_,2),z=D[0],F=D[1];(0,o.useEffect)((function(){if(s&&(B(!0),i)){E("".concat(i.quota)),F("Gi");for(var e="B",a=i.quota,t=0;t<m.Dl.length&&i.quota%Math.pow(1024,t)===0;t++)a=i.quota/Math.pow(1024,t),e=m.Dl[t];E("".concat(a)),F(e)}}),[s,i]);return(0,b.jsx)(p.Z,{modalOpen:t,onClose:function(){d()},title:"Enable Bucket Quota",titleIcon:(0,b.jsx)(g.Wq,{}),children:(0,b.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),function(){if(!M){var e={enabled:N,amount:parseInt((0,m.Pw)(w,z,!0)),quota_type:"hard"};j.Z.invoke("PUT","/api/v1/buckets/".concat(r,"/quota"),e).then((function(){S(!1),d()})).catch((function(e){S(!1),f(e)}))}}()},children:(0,b.jsxs)(u.ZP,{container:!0,children:[(0,b.jsxs)(u.ZP,{item:!0,xs:12,className:a.formScrollable,children:[(0,b.jsx)(u.ZP,{item:!0,xs:12,className:a.formFieldRow,children:(0,b.jsx)(Z.Z,{value:"bucket_quota",id:"bucket_quota",name:"bucket_quota",checked:N,onChange:function(e){B(e.target.checked)},label:"Enabled"})}),N&&(0,b.jsx)(o.Fragment,{children:(0,b.jsx)(u.ZP,{item:!0,xs:12,className:a.formFieldRow,children:(0,b.jsx)(u.ZP,{container:!0,children:(0,b.jsx)(u.ZP,{item:!0,xs:12,children:(0,b.jsx)(x.Z,{id:"quota_size",name:"quota_size",onChange:function(e){e.target.validity.valid&&E(e.target.value)},pattern:"[0-9]*",label:"Quota",value:w,required:!0,min:"1",overlayObject:(0,b.jsx)(k.Z,{id:"quota_unit",onUnitChange:function(e){F(e)},unitSelected:z,unitsList:(0,m.zQ)(["Ki"]),disabled:!1})})})})})})]}),(0,b.jsxs)(u.ZP,{item:!0,xs:12,className:a.modalButtonBar,children:[(0,b.jsx)(l.Z,{type:"button",variant:"outlined",color:"primary",disabled:M,onClick:function(){d()},children:"Cancel"}),(0,b.jsx)(l.Z,{type:"submit",variant:"contained",color:"primary",disabled:M,children:"Save"})]}),M&&(0,b.jsx)(u.ZP,{item:!0,xs:12,children:(0,b.jsx)(c.Z,{})})]})})})})))},56028:function(e,a,t){var n=t(29439),s=t(1413),o=t(72791),i=t(60364),l=t(13400),c=t(55646),r=t(5574),d=t(65661),u=t(39157),m=t(11135),f=t(25787),h=t(23814),Z=t(42649),x=t(29823),p=t(28057),j=t(80184),g=(0,i.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:Z.MK});a.Z=(0,f.Z)((function(e){return(0,m.Z)((0,s.Z)((0,s.Z)({},h.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},h.sN))}))(g((function(e){var a=e.onClose,t=e.modalOpen,i=e.title,m=e.children,f=e.classes,h=e.wideLimit,Z=void 0===h||h,g=e.modalSnackMessage,k=e.noContentPadding,b=e.setModalSnackMessage,v=e.titleIcon,M=void 0===v?null:v,S=(0,o.useState)(!1),C=(0,n.Z)(S,2),q=C[0],N=C[1];(0,o.useEffect)((function(){b("")}),[b]),(0,o.useEffect)((function(){if(g){if(""===g.message)return void N(!1);"error"!==g.type&&N(!0)}}),[g]);var B=Z?{classes:{paper:f.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},P="";return g&&(P=g.detailedErrorMsg,(""===g.detailedErrorMsg||g.detailedErrorMsg.length<5)&&(P=g.message)),(0,j.jsxs)(r.Z,(0,s.Z)((0,s.Z)({open:t,classes:f},B),{},{scroll:"paper",onClose:function(e,t){"backdropClick"!==t&&a()},className:f.root,children:[(0,j.jsxs)(d.Z,{className:f.title,children:[(0,j.jsxs)("div",{className:f.titleText,children:[M," ",i]}),(0,j.jsx)("div",{className:f.closeContainer,children:(0,j.jsx)(l.Z,{"aria-label":"close",id:"close",className:f.closeButton,onClick:a,disableRipple:!0,size:"small",children:(0,j.jsx)(x.Z,{})})})]}),(0,j.jsx)(p.Z,{isModal:!0}),(0,j.jsx)(c.Z,{open:q,className:f.snackBarModal,onClose:function(){N(!1),b("")},message:P,ContentProps:{className:"".concat(f.snackBar," ").concat(g&&"error"===g.type?f.errorSnackBar:"")},autoHideDuration:g&&"error"===g.type?1e4:5e3}),(0,j.jsx)(u.Z,{className:k?"":f.content,children:m})]}))})))}}]);
//# sourceMappingURL=1581.e753ce61.chunk.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1604],{1604:function(e,n,t){t.r(n);var a=t(29439),s=t(1413),i=t(72791),o=t(60364),l=t(36151),r=t(40986),c=t(11135),d=t(25787),u=t(61889),m=t(23814),f=t(42649),Z=t(81207),h=t(56028),p=t(83679),x=t(21435),v=t(72401),g=t(80184),j=(0,o.$j)(null,{setModalErrorSnackMessage:f.zb});n.default=(0,d.Z)((function(e){return(0,c.Z)((0,s.Z)((0,s.Z)((0,s.Z)((0,s.Z)({},m.bK),m.QV),m.DF),m.ID))}))(j((function(e){var n=e.classes,t=e.open,s=e.bucketName,o=e.closeModalAndRefresh,c=e.setModalErrorSnackMessage,d=(0,i.useState)(!1),m=(0,a.Z)(d,2),f=m[0],j=m[1],b=(0,i.useState)(!0),S=(0,a.Z)(b,2),k=S[0],y=S[1],C=(0,i.useState)("compliance"),N=(0,a.Z)(C,2),M=N[0],E=N[1],P=(0,i.useState)("days"),w=(0,a.Z)(P,2),R=w[0],B=w[1],_=(0,i.useState)(1),D=(0,a.Z)(_,2),F=D[0],z=D[1],O=(0,i.useState)(!1),T=(0,a.Z)(O,2),V=T[0],W=T[1];return(0,i.useEffect)((function(){Number.isNaN(F)||F<1?W(!1):W(!0)}),[F]),(0,i.useEffect)((function(){k&&Z.Z.invoke("GET","/api/v1/buckets/".concat(s,"/retention")).then((function(e){y(!1),E(e.mode),z(e.validity),B(e.unit)})).catch((function(e){y(!1)}))}),[k,s]),(0,g.jsx)(h.Z,{title:"Set Retention Configuration",modalOpen:t,onClose:function(){o()},children:k?(0,g.jsx)(v.Z,{style:{width:16,height:16}}):(0,g.jsx)("form",{noValidate:!0,autoComplete:"off",onSubmit:function(e){e.preventDefault(),f||(j(!0),Z.Z.invoke("PUT","/api/v1/buckets/".concat(s,"/retention"),{mode:M,unit:R,validity:F}).then((function(){j(!1),o()})).catch((function(e){j(!1),c(e)})))},children:(0,g.jsxs)(u.ZP,{container:!0,children:[(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:n.modalFormScrollable,children:[(0,g.jsx)(u.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,g.jsx)(p.Z,{currentSelection:M,id:"retention_mode",name:"retention_mode",label:"Retention Mode",onChange:function(e){E(e.target.value)},selectorOptions:[{value:"compliance",label:"Compliance"},{value:"governance",label:"Governance"}]})}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,g.jsx)(p.Z,{currentSelection:R,id:"retention_unit",name:"retention_unit",label:"Retention Unit",onChange:function(e){B(e.target.value)},selectorOptions:[{value:"days",label:"Days"},{value:"years",label:"Years"}]})}),(0,g.jsx)(u.ZP,{item:!0,xs:12,className:n.formFieldRow,children:(0,g.jsx)(x.Z,{type:"number",id:"retention_validity",name:"retention_validity",onChange:function(e){z(e.target.valueAsNumber)},label:"Retention Validity",value:String(F),required:!0,min:"1"})})]}),(0,g.jsxs)(u.ZP,{item:!0,xs:12,className:n.modalButtonBar,children:[(0,g.jsx)(l.Z,{type:"button",variant:"outlined",color:"primary",disabled:f,onClick:function(){o()},children:"Cancel"}),(0,g.jsx)(l.Z,{type:"submit",variant:"contained",color:"primary",disabled:f||!V,children:"Set"})]}),f&&(0,g.jsx)(u.ZP,{item:!0,xs:12,children:(0,g.jsx)(r.Z,{})})]})})})})))},56028:function(e,n,t){var a=t(29439),s=t(1413),i=t(72791),o=t(60364),l=t(13400),r=t(55646),c=t(5574),d=t(65661),u=t(39157),m=t(11135),f=t(25787),Z=t(23814),h=t(42649),p=t(29823),x=t(28057),v=t(80184),g=(0,o.$j)((function(e){return{modalSnackMessage:e.system.modalSnackBar}}),{setModalSnackMessage:h.MK});n.Z=(0,f.Z)((function(e){return(0,m.Z)((0,s.Z)((0,s.Z)({},Z.Qw),{},{content:{padding:25,paddingBottom:0},customDialogSize:{width:"100%",maxWidth:765}},Z.sN))}))(g((function(e){var n=e.onClose,t=e.modalOpen,o=e.title,m=e.children,f=e.classes,Z=e.wideLimit,h=void 0===Z||Z,g=e.modalSnackMessage,j=e.noContentPadding,b=e.setModalSnackMessage,S=e.titleIcon,k=void 0===S?null:S,y=(0,i.useState)(!1),C=(0,a.Z)(y,2),N=C[0],M=C[1];(0,i.useEffect)((function(){b("")}),[b]),(0,i.useEffect)((function(){if(g){if(""===g.message)return void M(!1);"error"!==g.type&&M(!0)}}),[g]);var E=h?{classes:{paper:f.customDialogSize}}:{maxWidth:"lg",fullWidth:!0},P="";return g&&(P=g.detailedErrorMsg,(""===g.detailedErrorMsg||g.detailedErrorMsg.length<5)&&(P=g.message)),(0,v.jsxs)(c.Z,(0,s.Z)((0,s.Z)({open:t,classes:f},E),{},{scroll:"paper",onClose:function(e,t){"backdropClick"!==t&&n()},className:f.root,children:[(0,v.jsxs)(d.Z,{className:f.title,children:[(0,v.jsxs)("div",{className:f.titleText,children:[k," ",o]}),(0,v.jsx)("div",{className:f.closeContainer,children:(0,v.jsx)(l.Z,{"aria-label":"close",id:"close",className:f.closeButton,onClick:n,disableRipple:!0,size:"small",children:(0,v.jsx)(p.Z,{})})})]}),(0,v.jsx)(x.Z,{isModal:!0}),(0,v.jsx)(r.Z,{open:N,className:f.snackBarModal,onClose:function(){M(!1),b("")},message:P,ContentProps:{className:"".concat(f.snackBar," ").concat(g&&"error"===g.type?f.errorSnackBar:"")},autoHideDuration:g&&"error"===g.type?1e4:5e3}),(0,v.jsx)(u.Z,{className:j?"":f.content,children:m})]}))})))}}]);
//# sourceMappingURL=1604.a9d0b62b.chunk.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1705],{71705:function(e,n,t){t.r(n);var l=t(29439),o=t(72791),c=t(9505),s=t(64554),a=t(56087),i=t(38442),u=t(26181),r=t.n(u),d=t(81918),f=t(29823),h=t(42419),v=t(75578),p=t(72401),Z=t(80184),x=(0,v.Z)(o.lazy((function(){return t.e(247).then(t.bind(t,40247))}))),j=(0,v.Z)(o.lazy((function(){return t.e(2763).then(t.bind(t,22763))})));n.default=function(e){var n=e.setErrorSnackMessage,t=e.bucketName,u=(0,o.useState)(null),v=(0,l.Z)(u,2),m=v[0],T=v[1],k=(0,o.useState)(!1),b=(0,l.Z)(k,2),g=b[0],G=b[1],_=(0,o.useState)([]),S=(0,l.Z)(_,2),y=S[0],C=S[1],A=(0,o.useState)(["",""]),E=(0,l.Z)(A,2),U=E[0],N=E[1],z=(0,o.useState)(!1),I=(0,l.Z)(z,2),w=I[0],F=I[1],P=(0,c.Z)((function(e){var n,t;null!=e&&null!=(null===e||void 0===e?void 0:e.details)&&(T(null===e||void 0===e||null===(n=e.details)||void 0===n?void 0:n.tags),C(Object.keys(null===e||void 0===e||null===(t=e.details)||void 0===t?void 0:t.tags)))}),(function(e){n(e)})),B=(0,l.Z)(P,2),K=B[0],O=B[1],D=function(){O("GET","/api/v1/buckets/".concat(t))};return(0,o.useEffect)((function(){D()}),[t]),(0,Z.jsxs)(s.Z,{children:[K?(0,Z.jsx)(p.Z,{style:{width:16,height:16}}):null,(0,Z.jsx)(i.s,{scopes:[a.Ft.S3_GET_BUCKET_TAGGING],resource:t,children:(0,Z.jsxs)(s.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,Z.jsx)(s.Z,{children:y&&y.map((function(e,n){var l=r()(m,"".concat(e),"");return""!==l?(0,Z.jsx)(i.s,{scopes:[a.Ft.S3_PUT_BUCKET_TAGGING],resource:t,matchAll:!0,errorProps:{deleteIcon:null,onDelete:null},children:(0,Z.jsx)(d.Z,{style:{textTransform:"none",marginRight:"5px"},size:"small",label:"".concat(e," : ").concat(l),color:"primary",deleteIcon:(0,Z.jsx)(f.Z,{}),onDelete:function(){!function(e,n){N([e,n]),F(!0)}(e,l)}})},"chip-".concat(n)):null}))}),(0,Z.jsx)(i.s,{scopes:[a.Ft.S3_PUT_BUCKET_TAGGING],resource:t,errorProps:{disabled:!0,onClick:null},children:(0,Z.jsx)(d.Z,{style:{maxWidth:80,marginTop:"10px"},icon:(0,Z.jsx)(h.Z,{}),clickable:!0,size:"small",label:"Add tag",color:"primary",variant:"outlined",onClick:function(){G(!0)}})})]})}),g&&(0,Z.jsx)(x,{modalOpen:g,currentTags:m,bucketName:t,onCloseAndUpdate:function(e){G(!1),e&&D()}}),w&&(0,Z.jsx)(j,{deleteOpen:w,currentTags:m,bucketName:t,onCloseAndUpdate:function(e){F(!1),e&&D()},selectedTag:U})]})}},9505:function(e,n,t){var l=t(29439),o=t(72791),c=t(81207);n.Z=function(e,n){var t=(0,o.useState)(!1),s=(0,l.Z)(t,2),a=s[0],i=s[1];return[a,function(t,l,o){i(!0),c.Z.invoke(t,l,o).then((function(n){i(!1),e(n)})).catch((function(e){i(!1),n(e)}))}]}},42419:function(e,n,t){var l=t(95318);n.Z=void 0;var o=l(t(45649)),c=t(80184),s=(0,o.default)((0,c.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.Z=s}}]);
//# sourceMappingURL=1705.7586dfce.chunk.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1705],{71705:function(e,n,t){t.r(n);var l=t(29439),o=t(72791),s=t(9505),a=t(64554),c=t(56087),i=t(38442),u=t(26181),r=t.n(u),d=t(81918),f=t(29823),v=t(42419),h=t(75578),p=t(72401),Z=t(80184),x=(0,h.Z)(o.lazy((function(){return Promise.all([t.e(3772),t.e(247)]).then(t.bind(t,40247))}))),m=(0,h.Z)(o.lazy((function(){return Promise.all([t.e(3772),t.e(2442),t.e(2763)]).then(t.bind(t,22763))})));n.default=function(e){var n=e.setErrorSnackMessage,t=e.bucketName,u=(0,o.useState)(null),h=(0,l.Z)(u,2),j=h[0],T=h[1],k=(0,o.useState)(!1),b=(0,l.Z)(k,2),g=b[0],G=b[1],_=(0,o.useState)([]),C=(0,l.Z)(_,2),S=C[0],y=C[1],A=(0,o.useState)(["",""]),E=(0,l.Z)(A,2),U=E[0],z=E[1],N=(0,o.useState)(!1),P=(0,l.Z)(N,2),I=P[0],w=P[1],F=(0,s.Z)((function(e){var n,t;null!=e&&null!=(null===e||void 0===e?void 0:e.details)&&(T(null===e||void 0===e||null===(n=e.details)||void 0===n?void 0:n.tags),y(Object.keys(null===e||void 0===e||null===(t=e.details)||void 0===t?void 0:t.tags)))}),(function(e){n(e)})),B=(0,l.Z)(F,2),K=B[0],M=B[1],O=function(){M("GET","/api/v1/buckets/".concat(t))};return(0,o.useEffect)((function(){O()}),[t]),(0,Z.jsxs)(a.Z,{children:[K?(0,Z.jsx)(p.Z,{style:{width:16,height:16}}):null,(0,Z.jsx)(i.s,{scopes:[c.Ft.S3_GET_BUCKET_TAGGING],resource:t,children:(0,Z.jsxs)(a.Z,{sx:{display:"flex",flexFlow:"column"},children:[(0,Z.jsx)(a.Z,{children:S&&S.map((function(e,n){var l=r()(j,"".concat(e),"");return""!==l?(0,Z.jsx)(i.s,{scopes:[c.Ft.S3_PUT_BUCKET_TAGGING],resource:t,matchAll:!0,errorProps:{deleteIcon:null,onDelete:null},children:(0,Z.jsx)(d.Z,{style:{textTransform:"none",marginRight:"5px"},size:"small",label:"".concat(e," : ").concat(l),color:"primary",deleteIcon:(0,Z.jsx)(f.Z,{}),onDelete:function(){!function(e,n){z([e,n]),w(!0)}(e,l)}})},"chip-".concat(n)):null}))}),(0,Z.jsx)(i.s,{scopes:[c.Ft.S3_PUT_BUCKET_TAGGING],resource:t,errorProps:{disabled:!0,onClick:null},children:(0,Z.jsx)(d.Z,{style:{maxWidth:80,marginTop:"10px"},icon:(0,Z.jsx)(v.Z,{}),clickable:!0,size:"small",label:"Add tag",color:"primary",variant:"outlined",onClick:function(){G(!0)}})})]})}),g&&(0,Z.jsx)(x,{modalOpen:g,currentTags:j,bucketName:t,onCloseAndUpdate:function(e){G(!1),e&&O()}}),I&&(0,Z.jsx)(m,{deleteOpen:I,currentTags:j,bucketName:t,onCloseAndUpdate:function(e){w(!1),e&&O()},selectedTag:U})]})}},9505:function(e,n,t){var l=t(29439),o=t(72791),s=t(81207);n.Z=function(e,n){var t=(0,o.useState)(!1),a=(0,l.Z)(t,2),c=a[0],i=a[1];return[c,function(t,l,o){i(!0),s.Z.invoke(t,l,o).then((function(n){i(!1),e(n)})).catch((function(e){i(!1),n(e)}))}]}},42419:function(e,n,t){var l=t(95318);n.Z=void 0;var o=l(t(45649)),s=t(80184),a=(0,o.default)((0,s.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");n.Z=a},29823:function(e,n,t){var l=t(95318);n.Z=void 0;var o=l(t(45649)),s=t(80184),a=(0,o.default)((0,s.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close");n.Z=a}}]);
//# sourceMappingURL=1705.b90dd0eb.chunk.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[2112],{9505:function(e,n,t){var a=t(29439),r=t(72791),o=t(81207);n.Z=function(e,n){var t=(0,r.useState)(!1),c=(0,a.Z)(t,2),i=c[0],s=c[1];return[i,function(t,a,r){s(!0),o.Z.invoke(t,a,r).then((function(n){s(!1),e(n)})).catch((function(e){s(!1),n(e)}))}]}},32112:function(e,n,t){t.r(n);var a=t(29439),r=t(72791),o=t(51691),c=t(21435),i=t(61889),s=t(60364),u=t(42649),l=t(9505),f=t(2148),p=t(93656),d=t(80184),m=(0,s.$j)(null,{setErrorSnackMessage:u.Ih});n.default=m((function(e){var n=e.deleteOpen,t=e.selectedPVC,s=e.closeDeleteModalAndRefresh,u=e.setErrorSnackMessage,m=(0,r.useState)(""),h=(0,a.Z)(m,2),C=h[0],v=h[1],Z=(0,l.Z)((function(){return s(!0)}),(function(e){return u(e)})),x=(0,a.Z)(Z,2),j=x[0],k=x[1];return(0,d.jsx)(f.Z,{title:"Delete PVC",confirmText:"Delete",isOpen:n,titleIcon:(0,d.jsx)(p.Nv,{}),isLoading:j,onConfirm:function(){C===t.name?k("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.tenant,"/pvc/").concat(t.name)):u({errorMessage:"PVC name is incorrect",detailedError:""})},onClose:function(){return s(!1)},confirmButtonProps:{disabled:C!==t.name||j},confirmationContent:(0,d.jsxs)(o.Z,{children:["To continue please type ",(0,d.jsx)("b",{children:t.name})," in the box.",(0,d.jsx)(i.ZP,{item:!0,xs:12,children:(0,d.jsx)(c.Z,{id:"retype-PVC",name:"retype-PVC",onChange:function(e){v(e.target.value)},label:"",value:C})})]})})}))}}]);
//# sourceMappingURL=2112.4cc30535.chunk.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[2112],{9505:function(e,n,t){var o=t(29439),i=t(72791),a=t(81207);n.Z=function(e,n){var t=(0,i.useState)(!1),c=(0,o.Z)(t,2),s=c[0],r=c[1];return[s,function(t,o,i){r(!0),a.Z.invoke(t,o,i).then((function(n){r(!1),e(n)})).catch((function(e){r(!1),n(e)}))}]}},23508:function(e,n,t){var o=t(1413),i=t(72791),a=t(5574),c=t(65661),s=t(39157),r=t(97123),l=t(36151),d=t(59860),u=t(13400),m=t(29823),f=t(11135),p=t(25787),Z=t(23814),v=t(80184);n.Z=(0,p.Z)((function(e){return(0,f.Z)((0,o.Z)({},Z.Qw))}))((function(e){var n=e.isOpen,t=void 0!==n&&n,f=e.onClose,p=e.onCancel,Z=e.onConfirm,x=e.classes,C=void 0===x?{}:x,h=e.title,j=void 0===h?"":h,b=e.isLoading,k=e.confirmationContent,g=e.cancelText,P=void 0===g?"Cancel":g,N=e.confirmText,y=void 0===N?"Confirm":N,B=e.confirmButtonProps,E=void 0===B?{}:B,M=e.cancelButtonProps,T=void 0===M?{}:M,V=e.titleIcon,D=void 0===V?null:V;return(0,v.jsxs)(a.Z,{open:t,onClose:function(e,n){"backdropClick"!==n&&f()},className:C.root,sx:{"& .MuiPaper-root":{padding:"1rem 2rem 2rem 1rem"}},children:[(0,v.jsxs)(c.Z,{className:C.title,children:[(0,v.jsxs)("div",{className:C.titleText,children:[D," ",j]}),(0,v.jsx)("div",{className:C.closeContainer,children:(0,v.jsx)(u.Z,{"aria-label":"close",className:C.closeButton,onClick:f,disableRipple:!0,size:"small",children:(0,v.jsx)(m.Z,{})})})]}),(0,v.jsx)(s.Z,{className:C.content,children:k}),(0,v.jsxs)(r.Z,{className:C.actions,children:[(0,v.jsx)(l.Z,(0,o.Z)((0,o.Z)({className:C.cancelButton,onClick:p||f,disabled:b,type:"button"},T),{},{variant:"outlined",color:"primary",id:"confirm-cancel",children:P})),(0,v.jsx)(d.Z,(0,o.Z)((0,o.Z)({className:C.confirmButton,type:"button",onClick:Z,loading:b,disabled:b,variant:"outlined",color:"secondary",loadingPosition:"start",startIcon:(0,v.jsx)(i.Fragment,{}),autoFocus:!0,id:"confirm-ok"},E),{},{children:y}))]})]})}))},32112:function(e,n,t){t.r(n);var o=t(29439),i=t(72791),a=t(51691),c=t(21435),s=t(61889),r=t(60364),l=t(42649),d=t(9505),u=t(23508),m=t(93656),f=t(80184),p=(0,r.$j)(null,{setErrorSnackMessage:l.Ih});n.default=p((function(e){var n=e.deleteOpen,t=e.selectedPVC,r=e.closeDeleteModalAndRefresh,l=e.setErrorSnackMessage,p=(0,i.useState)(""),Z=(0,o.Z)(p,2),v=Z[0],x=Z[1],C=(0,d.Z)((function(){return r(!0)}),(function(e){return l(e)})),h=(0,o.Z)(C,2),j=h[0],b=h[1];return(0,f.jsx)(u.Z,{title:"Delete PVC",confirmText:"Delete",isOpen:n,titleIcon:(0,f.jsx)(m.Nv,{}),isLoading:j,onConfirm:function(){v===t.name?b("DELETE","/api/v1/namespaces/".concat(t.namespace,"/tenants/").concat(t.tenant,"/pvc/").concat(t.name)):l({errorMessage:"PVC name is incorrect",detailedError:""})},onClose:function(){return r(!1)},confirmButtonProps:{disabled:v!==t.name||j},confirmationContent:(0,f.jsxs)(a.Z,{children:["To continue please type ",(0,f.jsx)("b",{children:t.name})," in the box.",(0,f.jsx)(s.ZP,{item:!0,xs:12,children:(0,f.jsx)(c.Z,{id:"retype-PVC",name:"retype-PVC",onChange:function(e){x(e.target.value)},label:"",value:v})})]})})}))},29823:function(e,n,t){var o=t(95318);n.Z=void 0;var i=o(t(45649)),a=t(80184),c=(0,i.default)((0,a.jsx)("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close");n.Z=c}}]);
//# sourceMappingURL=2112.6991f0b0.chunk.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[2338],{72338:function(e,t,n){n.r(t),n.d(t,{default:function(){return d}});var r=n(72791),i=n(32291),o=n(34345),s=n(84669),a=n(74794),l=n(64554),c=n(80184),u=function(e){var t=e.onClick,n=e.icon,r=e.name;return(0,c.jsxs)("button",{style:{display:"flex",alignItems:"center",justifyContent:"flex-start",padding:10,background:"transparent",border:"1px solid #E5E5E5",borderRadius:2,cursor:"pointer"},onClick:function(){t(r)},children:[n?(0,c.jsx)(l.Z,{sx:{"& .min-icon":{height:"60px",width:"60px"}},children:n}):null,(0,c.jsx)("div",{style:{fontWeight:600,marginLeft:20},children:r})]})},g=n(56087),d=function(e){var t=e.history;return(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(i.Z,{label:(0,c.jsx)(r.Fragment,{children:(0,c.jsx)(s.Z,{to:g.gA.TIERS,label:"Tier Types"})}),actions:(0,c.jsx)(r.Fragment,{})}),(0,c.jsx)(a.Z,{children:(0,c.jsxs)(l.Z,{sx:{border:"1px solid #eaeaea",padding:"40px"},children:[(0,c.jsx)("div",{style:{fontSize:16,fontWeight:600,paddingBottom:15},children:"Select Tier Type"}),(0,c.jsx)(l.Z,{sx:{margin:"0 auto",display:"grid",gridGap:"47px",gridTemplateColumns:{xs:"repeat(1, 1fr)",sm:"repeat(2, 1fr)",md:"repeat(3, 1fr)",lg:"repeat(4, 1fr)"}},children:o.Bh.map((function(e,n){return(0,c.jsx)(u,{name:e.targetTitle,onClick:function(){var n;n=e.serviceName,t.push("".concat(g.gA.TIERS_ADD,"/").concat(n))},icon:e.logo},"tierOpt-".concat(n.toString,"-").concat(e.targetTitle))}))})]})})]})}},34345:function(e,t,n){n.d(t,{Bh:function(){return c},Pp:function(){return o},b2:function(){return a},f0:function(){return s},vB:function(){return l}});var r=n(93656),i=n(80184),o="minio",s="gcs",a="s3",l="azure",c=[{serviceName:o,targetTitle:"MinIO",logo:(0,i.jsx)(r.$E,{}),logoXs:(0,i.jsx)(r.YE,{})},{serviceName:s,targetTitle:"Google Cloud Storage",logo:(0,i.jsx)(r.UQ,{}),logoXs:(0,i.jsx)(r.Vw,{})},{serviceName:a,targetTitle:"AWS S3",logo:(0,i.jsx)(r.fe,{}),logoXs:(0,i.jsx)(r.Xj,{})},{serviceName:l,targetTitle:"Azure",logo:(0,i.jsx)(r.jz,{}),logoXs:(0,i.jsx)(r.nA,{})}]}}]);
//# sourceMappingURL=2338.2294f835.chunk.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More