Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc490a1ca8 | ||
|
|
6e6aab580c | ||
|
|
dc5b1963ae | ||
|
|
564cfa2201 | ||
|
|
398ab028a4 | ||
|
|
1de712c099 | ||
|
|
2d26eb4a70 | ||
|
|
e9cc567977 | ||
|
|
ee82748aeb | ||
|
|
ee3affd140 | ||
|
|
836090a0d5 | ||
|
|
e0e5e42af2 | ||
|
|
49f340b5f8 | ||
|
|
404a10d3c7 | ||
|
|
62e270e95e | ||
|
|
bfbaaf12fb | ||
|
|
0aa9c7b36e | ||
|
|
8540168133 | ||
|
|
02a35fb8d1 | ||
|
|
4647671f07 | ||
|
|
f30450c3c1 | ||
|
|
731501ba27 |
2
.github/workflows/jobs.yaml
vendored
2
.github/workflows/jobs.yaml
vendored
@@ -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
|
||||
|
||||
2
Makefile
2
Makefile
@@ -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
2
go.mod
@@ -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
|
||||
|
||||
@@ -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
55
integration/tiers_test.go
Normal 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)
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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
2
portal-ui/build/static/js/1379.8207ed7c.chunk.js
Normal file
2
portal-ui/build/static/js/1379.8207ed7c.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1379.8207ed7c.chunk.js.map
Normal file
1
portal-ui/build/static/js/1379.8207ed7c.chunk.js.map
Normal file
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
2
portal-ui/build/static/js/1434.9ad9fa51.chunk.js
Normal file
2
portal-ui/build/static/js/1434.9ad9fa51.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1434.9ad9fa51.chunk.js.map
Normal file
1
portal-ui/build/static/js/1434.9ad9fa51.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/1440.74dce637.chunk.js
Normal file
2
portal-ui/build/static/js/1440.74dce637.chunk.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/1501.b5696037.chunk.js
Normal file
2
portal-ui/build/static/js/1501.b5696037.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1501.b5696037.chunk.js.map
Normal file
1
portal-ui/build/static/js/1501.b5696037.chunk.js.map
Normal file
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
@@ -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
|
||||
1
portal-ui/build/static/js/1581.e753ce61.chunk.js.map
Normal file
1
portal-ui/build/static/js/1581.e753ce61.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/1604.a9d0b62b.chunk.js
Normal file
2
portal-ui/build/static/js/1604.a9d0b62b.chunk.js
Normal 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
|
||||
1
portal-ui/build/static/js/1604.a9d0b62b.chunk.js.map
Normal file
1
portal-ui/build/static/js/1604.a9d0b62b.chunk.js.map
Normal file
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
2
portal-ui/build/static/js/1705.7586dfce.chunk.js
Normal file
2
portal-ui/build/static/js/1705.7586dfce.chunk.js
Normal 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
|
||||
1
portal-ui/build/static/js/1705.7586dfce.chunk.js.map
Normal file
1
portal-ui/build/static/js/1705.7586dfce.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -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
2
portal-ui/build/static/js/1788.280ca1f4.chunk.js
Normal file
2
portal-ui/build/static/js/1788.280ca1f4.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1788.280ca1f4.chunk.js.map
Normal file
1
portal-ui/build/static/js/1788.280ca1f4.chunk.js.map
Normal file
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
2
portal-ui/build/static/js/1829.2cab6045.chunk.js
Normal file
2
portal-ui/build/static/js/1829.2cab6045.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1829.2cab6045.chunk.js.map
Normal file
1
portal-ui/build/static/js/1829.2cab6045.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/1836.083f36ae.chunk.js
Normal file
2
portal-ui/build/static/js/1836.083f36ae.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1836.083f36ae.chunk.js.map
Normal file
1
portal-ui/build/static/js/1836.083f36ae.chunk.js.map
Normal file
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
2
portal-ui/build/static/js/1955.27cc0d9b.chunk.js
Normal file
2
portal-ui/build/static/js/1955.27cc0d9b.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1955.27cc0d9b.chunk.js.map
Normal file
1
portal-ui/build/static/js/1955.27cc0d9b.chunk.js.map
Normal file
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
1
portal-ui/build/static/js/2011.53c6f61f.chunk.js.map
Normal file
1
portal-ui/build/static/js/2011.53c6f61f.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/2112.4cc30535.chunk.js
Normal file
2
portal-ui/build/static/js/2112.4cc30535.chunk.js
Normal 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
|
||||
1
portal-ui/build/static/js/2112.4cc30535.chunk.js.map
Normal file
1
portal-ui/build/static/js/2112.4cc30535.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -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
2
portal-ui/build/static/js/2180.c83301fc.chunk.js
Normal file
2
portal-ui/build/static/js/2180.c83301fc.chunk.js
Normal file
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
2
portal-ui/build/static/js/2249.922e46ea.chunk.js
Normal file
2
portal-ui/build/static/js/2249.922e46ea.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/2249.922e46ea.chunk.js.map
Normal file
1
portal-ui/build/static/js/2249.922e46ea.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/2338.2294f835.chunk.js
Normal file
2
portal-ui/build/static/js/2338.2294f835.chunk.js
Normal 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
|
||||
1
portal-ui/build/static/js/2338.2294f835.chunk.js.map
Normal file
1
portal-ui/build/static/js/2338.2294f835.chunk.js.map
Normal file
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
Reference in New Issue
Block a user