Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58c53cbe0a | ||
|
|
144979b372 | ||
|
|
e29fa04051 | ||
|
|
5ab5232474 | ||
|
|
d7fef8d89e | ||
|
|
3a09361899 | ||
|
|
6ca17a3f9c | ||
|
|
6d40ff7e1b | ||
|
|
0b29eee9ed | ||
|
|
c7fdfdd035 | ||
|
|
d7626e187c | ||
|
|
39453de8fb | ||
|
|
0c38e93b83 | ||
|
|
bf8db812b8 | ||
|
|
0e35da8370 | ||
|
|
b11fa26162 | ||
|
|
e3836538fc |
2
.github/workflows/jobs.yaml
vendored
2
.github/workflows/jobs.yaml
vendored
@@ -830,7 +830,7 @@ jobs:
|
||||
result=${result%\%}
|
||||
echo "result:"
|
||||
echo $result
|
||||
threshold=50.5
|
||||
threshold=52.1
|
||||
if (( $(echo "$result >= $threshold" |bc -l) )); then
|
||||
echo "It is equal or greater than threshold, passed!"
|
||||
else
|
||||
|
||||
10
Makefile
10
Makefile
@@ -72,10 +72,10 @@ test-integration:
|
||||
@(docker network create --subnet=173.18.0.0/29 mynet123)
|
||||
@echo "docker run with MinIO Version below:"
|
||||
@echo $(MINIO_VERSION)
|
||||
@(docker run -v /data1 -v /data2 -v /data3 -v /data4 --net=mynet123 -d --name minio --rm -p 9000:9000 -e MINIO_KMS_SECRET_KEY=my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw= $(MINIO_VERSION) server /data{1...4} && sleep 5)
|
||||
@(docker run -v /data1 -v /data2 -v /data3 -v /data4 --net=mynet123 -d --name minio --rm -p 9000:9000 -p 9001:9001 -e MINIO_KMS_SECRET_KEY=my-minio-key:OSMM+vkKUTCvQs9YL/CVMIMt43HFhkUpqJxTmGl6rYw= $(MINIO_VERSION) server /data{1...4} --console-address ':9001' && sleep 5)
|
||||
@(docker run --net=mynet123 --ip=173.18.0.3 --name pgsqlcontainer --rm -p 5432:5432 -e POSTGRES_PASSWORD=password -d postgres && sleep 5)
|
||||
@echo "execute test and get coverage"
|
||||
@(cd integration && go test -coverpkg=../restapi -c -tags testrunmain . && mkdir -p coverage && ./integration.test -test.run "^Test*" -test.coverprofile=coverage/system.out)
|
||||
@(cd integration && go test -coverpkg=../restapi -c -tags testrunmain . && mkdir -p coverage && ./integration.test -test.v -test.run "^Test*" -test.coverprofile=coverage/system.out)
|
||||
@(docker stop pgsqlcontainer)
|
||||
@(docker stop minio)
|
||||
@(docker network rm mynet123)
|
||||
@@ -83,7 +83,7 @@ test-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.run "^Test*" -test.coverprofile=coverage/operator-api.out)
|
||||
@(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)
|
||||
|
||||
test-operator:
|
||||
@(env bash $(PWD)/portal-ui/tests/scripts/operator.sh)
|
||||
@@ -112,11 +112,11 @@ cleanup-permissions:
|
||||
|
||||
test:
|
||||
@echo "execute test and get coverage"
|
||||
@(cd restapi && mkdir coverage && GO111MODULE=on go test -coverprofile=coverage/coverage.out)
|
||||
@(cd restapi && mkdir coverage && GO111MODULE=on go test -test.v -coverprofile=coverage/coverage.out)
|
||||
|
||||
test-pkg:
|
||||
@echo "execute test and get coverage"
|
||||
@(cd pkg && mkdir coverage && GO111MODULE=on go test -coverprofile=coverage/coverage-pkg.out)
|
||||
@(cd pkg && mkdir coverage && GO111MODULE=on go test -test.v -coverprofile=coverage/coverage-pkg.out)
|
||||
|
||||
coverage:
|
||||
@(GO111MODULE=on go test -v -coverprofile=coverage.out github.com/minio/console/restapi/... && go tool cover -html=coverage.out && open coverage.html)
|
||||
|
||||
@@ -58,9 +58,6 @@ func GetNsFromFile() string {
|
||||
return string(dat)
|
||||
}
|
||||
|
||||
// Namespace will run only once at console startup
|
||||
var Namespace = GetNsFromFile()
|
||||
|
||||
// GetMinioImage returns the image URL to be used when deploying a MinIO instance, if there is
|
||||
// a preferred image to be used (configured via ENVIRONMENT VARIABLES) GetMinioImage will return that
|
||||
// if not, GetMinioImage will try to obtain the image URL for the latest version of MinIO and return that
|
||||
|
||||
@@ -20,5 +20,4 @@ const (
|
||||
ConsoleK8sAPIServer = "CONSOLE_K8S_API_SERVER"
|
||||
ConsoleK8SAPIServerTLSRootCA = "CONSOLE_K8S_API_SERVER_TLS_ROOT_CA"
|
||||
ConsoleMinioImage = "CONSOLE_MINIO_IMAGE"
|
||||
ConsoleMCImage = "CONSOLE_MC_IMAGE"
|
||||
)
|
||||
|
||||
@@ -131,7 +131,7 @@ func NotifyPostgres() (*http.Response, error) {
|
||||
}
|
||||
|
||||
func TestNotifyPostgres(t *testing.T) {
|
||||
printStartFunc("TestNotifyPostgres")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
|
||||
@@ -147,11 +147,11 @@ func TestNotifyPostgres(t *testing.T) {
|
||||
if response != nil {
|
||||
assert.Equal(200, response.StatusCode, finalResponse)
|
||||
}
|
||||
printEndFunc("TestNotifyPostgres")
|
||||
|
||||
}
|
||||
|
||||
func TestRestartService(t *testing.T) {
|
||||
printStartFunc("TestRestartService")
|
||||
|
||||
assert := assert.New(t)
|
||||
restartResponse, restartError := RestartService()
|
||||
assert.Nil(restartError)
|
||||
@@ -167,5 +167,5 @@ func TestRestartService(t *testing.T) {
|
||||
addObjRsp,
|
||||
)
|
||||
}
|
||||
printEndFunc("TestRestartService")
|
||||
|
||||
}
|
||||
|
||||
@@ -55,37 +55,6 @@ func inspectHTTPResponse(httpResponse *http.Response) string {
|
||||
return "Http Response: " + string(b)
|
||||
}
|
||||
|
||||
func printMessage(message string) {
|
||||
/*
|
||||
Helper function to print HTTP response.
|
||||
*/
|
||||
fmt.Println(message)
|
||||
}
|
||||
|
||||
func printLoggingMessage(message string, functionName string) {
|
||||
/*
|
||||
Helper function to have standard output across the tests.
|
||||
*/
|
||||
finalString := "......................." + functionName + "(): " + message
|
||||
printMessage(finalString)
|
||||
}
|
||||
|
||||
func printStartFunc(functionName string) {
|
||||
/*
|
||||
Common function for all tests to tell that test has started
|
||||
*/
|
||||
printMessage("")
|
||||
printLoggingMessage("started", functionName)
|
||||
}
|
||||
|
||||
func printEndFunc(functionName string) {
|
||||
/*
|
||||
Helper function for all tests to tell that test has ended, is completed
|
||||
*/
|
||||
printLoggingMessage("completed", functionName)
|
||||
printMessage("")
|
||||
}
|
||||
|
||||
func initConsoleServer() (*restapi.Server, error) {
|
||||
|
||||
//os.Setenv("CONSOLE_MINIO_SERVER", "localhost:9000")
|
||||
@@ -123,7 +92,7 @@ func initConsoleServer() (*restapi.Server, error) {
|
||||
}
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
printStartFunc("TestMain")
|
||||
|
||||
// start console server
|
||||
go func() {
|
||||
fmt.Println("start server")
|
||||
@@ -212,6 +181,6 @@ func TestMain(m *testing.M) {
|
||||
if response != nil {
|
||||
fmt.Println("DELETE StatusCode:", response.StatusCode)
|
||||
}
|
||||
printEndFunc("TestMain")
|
||||
|
||||
os.Exit(code)
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
)
|
||||
|
||||
func TestLoginStrategy(t *testing.T) {
|
||||
printStartFunc("TestLoginStrategy")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// image for now:
|
||||
@@ -68,5 +68,5 @@ func TestLoginStrategy(t *testing.T) {
|
||||
assert.Equal(models.LoginDetailsLoginStrategyForm, loginDetails.LoginStrategy, "Login Details don't match")
|
||||
|
||||
}
|
||||
printEndFunc("TestLoginStrategy")
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/go-openapi/swag"
|
||||
|
||||
iampolicy "github.com/minio/pkg/iam/policy"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
@@ -38,7 +40,7 @@ func TestAddServiceAccount(t *testing.T) {
|
||||
tests like users.ts can run over clean data and we don't collide against
|
||||
it.
|
||||
*/
|
||||
printStartFunc("TestAddServiceAccount")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
client := &http.Client{
|
||||
@@ -159,5 +161,249 @@ func TestAddServiceAccount(t *testing.T) {
|
||||
fmt.Println("DELETE StatusCode:", response.StatusCode)
|
||||
assert.Equal(204, response.StatusCode, "has to be 204 when delete user")
|
||||
}
|
||||
printEndFunc("TestAddServiceAccount")
|
||||
|
||||
}
|
||||
|
||||
func Test_ServiceAccountsAPI(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
type args struct {
|
||||
api string
|
||||
policy *string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
expectedStatus int
|
||||
expectedError error
|
||||
}{
|
||||
{
|
||||
name: "Create Service Account - Default",
|
||||
args: args{
|
||||
api: "/service-accounts",
|
||||
policy: nil,
|
||||
},
|
||||
expectedStatus: 201,
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "Create Service Account - Valid Policy",
|
||||
args: args{
|
||||
api: "/service-accounts",
|
||||
policy: swag.String(`
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"s3:GetBucketLocation",
|
||||
"s3:GetObject"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:s3:::*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}`),
|
||||
},
|
||||
expectedStatus: 201,
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "Create Service Account - Invalid Policy",
|
||||
args: args{
|
||||
api: "/service-accounts",
|
||||
policy: swag.String(`
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": [
|
||||
"s3:GetBucketLocation"
|
||||
"s3:GetObject"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:s3:::*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}`),
|
||||
},
|
||||
expectedStatus: 500,
|
||||
expectedError: nil,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
|
||||
client := &http.Client{
|
||||
Timeout: 3 * time.Second,
|
||||
}
|
||||
|
||||
// Add service account
|
||||
|
||||
requestDataPolicy := map[string]interface{}{}
|
||||
if tt.args.policy != nil {
|
||||
requestDataPolicy["policy"] = *tt.args.policy
|
||||
}
|
||||
|
||||
requestDataJSON, _ := json.Marshal(requestDataPolicy)
|
||||
requestDataBody := bytes.NewReader(requestDataJSON)
|
||||
request, err := http.NewRequest(
|
||||
"POST", fmt.Sprintf("http://localhost:9090/api/v1%s", tt.args.api), requestDataBody)
|
||||
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)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if response != nil {
|
||||
assert.Equal(tt.expectedStatus, response.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func DeleteMultipleServiceAccounts(serviceAccounts []string) (*http.Response, error) {
|
||||
/*
|
||||
Helper function to delete multiple service accounts
|
||||
URL: http://localhost:9001/api/v1/service-accounts/delete-multi
|
||||
HTTP Verb: DELETE
|
||||
Data: ["U3RADB7J2ZZHELR0WSBB","ZE8H1HYOA6AVGKFCV6YU"]
|
||||
Response: Status Code: 204 No Content
|
||||
*/
|
||||
client := &http.Client{
|
||||
Timeout: 3 * time.Second,
|
||||
}
|
||||
requestDataJSON, _ := json.Marshal(serviceAccounts)
|
||||
requestDataBody := bytes.NewReader(requestDataJSON)
|
||||
request, err := http.NewRequest(
|
||||
"DELETE", "http://localhost:9090/api/v1/service-accounts/delete-multi", requestDataBody)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
|
||||
request.Header.Add("Content-Type", "application/json")
|
||||
response, err := client.Do(request)
|
||||
return response, err
|
||||
}
|
||||
|
||||
func TestCreateServiceAccountForUserWithCredentials(t *testing.T) {
|
||||
/*
|
||||
To test creation of service account for a user.
|
||||
*/
|
||||
|
||||
// Test's variables
|
||||
userName := "testcreateserviceaccountforuserwithcredentials1"
|
||||
assert := assert.New(t)
|
||||
policy := ""
|
||||
serviceAccountLengthInBytes := 40 // As observed, update as needed
|
||||
|
||||
// 1. Create the user
|
||||
var groups = []string{}
|
||||
var policies = []string{}
|
||||
var secretKey = "testcreateserviceaccountforuserwithcrede"
|
||||
response, err := AddUser(userName, "secretKey", groups, policies)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if response != nil {
|
||||
fmt.Println("StatusCode:", response.StatusCode)
|
||||
assert.Equal(201, response.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
|
||||
// Table driven testing part
|
||||
type args struct {
|
||||
accessKey string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
expectedStatus int
|
||||
}{
|
||||
{
|
||||
name: "Service Account With Valid Credentials",
|
||||
expectedStatus: 201,
|
||||
args: args{
|
||||
accessKey: "testcreateserviceacc",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Service Account With Invalid Credentials",
|
||||
expectedStatus: 500,
|
||||
args: args{
|
||||
accessKey: "tooooooooooooooooooooolongggggggggggggggggg",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
// 2. Create the service account for the user
|
||||
createServiceAccountWithCredentialsResponse,
|
||||
createServiceAccountWithCredentialsError := CreateServiceAccountForUserWithCredentials(
|
||||
userName,
|
||||
policy,
|
||||
tt.args.accessKey,
|
||||
secretKey,
|
||||
)
|
||||
if createServiceAccountWithCredentialsError != nil {
|
||||
log.Println(createServiceAccountWithCredentialsError)
|
||||
assert.Fail("Error in createServiceAccountWithCredentialsError")
|
||||
}
|
||||
if createServiceAccountWithCredentialsResponse != nil {
|
||||
fmt.Println("StatusCode:", createServiceAccountWithCredentialsResponse.StatusCode)
|
||||
assert.Equal(
|
||||
tt.expectedStatus, // different status expected per table's row
|
||||
createServiceAccountWithCredentialsResponse.StatusCode,
|
||||
inspectHTTPResponse(createServiceAccountWithCredentialsResponse),
|
||||
)
|
||||
}
|
||||
|
||||
// 3. Verify the service account for the user
|
||||
listOfAccountsResponse,
|
||||
listOfAccountsError := ReturnsAListOfServiceAccountsForAUser(userName)
|
||||
if listOfAccountsError != nil {
|
||||
log.Println(listOfAccountsError)
|
||||
assert.Fail("Error in listOfAccountsError")
|
||||
}
|
||||
finalResponse := inspectHTTPResponse(listOfAccountsResponse)
|
||||
if listOfAccountsResponse != nil {
|
||||
fmt.Println("StatusCode:", listOfAccountsResponse.StatusCode)
|
||||
assert.Equal(
|
||||
200, listOfAccountsResponse.StatusCode,
|
||||
finalResponse,
|
||||
)
|
||||
}
|
||||
assert.Equal(len(finalResponse), serviceAccountLengthInBytes, finalResponse)
|
||||
})
|
||||
}
|
||||
|
||||
// Delete Multiple Service Accounts
|
||||
serviceAccount := make([]string, 1)
|
||||
serviceAccount[0] = "testcreateserviceacc"
|
||||
response, err = DeleteMultipleServiceAccounts(serviceAccount)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if response != nil {
|
||||
fmt.Println("StatusCode:", response.StatusCode)
|
||||
assert.Equal(
|
||||
204,
|
||||
response.StatusCode,
|
||||
inspectHTTPResponse(response),
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -232,25 +232,23 @@ func PutObjectTags(bucketName string, prefix string, tags map[string]string, ver
|
||||
|
||||
func DeleteMultipleObjects(bucketName string, files []map[string]interface{}) (*http.Response, error) {
|
||||
/*
|
||||
Helper function to delete multiple objects in a container.
|
||||
POST: /buckets/{bucket_name}/delete-objects
|
||||
files: [
|
||||
{
|
||||
"path": "veniam tempor in",
|
||||
"versionID": "ea dolor Duis",
|
||||
"recursive": false
|
||||
},
|
||||
{
|
||||
"path": "proident eu esse",
|
||||
"versionID": "eiusmod amet commodo",
|
||||
"recursive": true
|
||||
}
|
||||
]
|
||||
Helper function to delete multiple objects in a container.
|
||||
POST: /buckets/{bucket_name}/delete-objects
|
||||
Example of the data being sent:
|
||||
[
|
||||
{
|
||||
"path": "testdeletemultipleobjs1.txt",
|
||||
"versionID": "",
|
||||
"recursive": false
|
||||
},
|
||||
{
|
||||
"path": "testdeletemultipleobjs2.txt",
|
||||
"versionID": "",
|
||||
"recursive": false
|
||||
},
|
||||
]
|
||||
*/
|
||||
requestDataAdd := map[string]interface{}{
|
||||
"files": files,
|
||||
}
|
||||
requestDataJSON, _ := json.Marshal(requestDataAdd)
|
||||
requestDataJSON, _ := json.Marshal(files)
|
||||
requestDataBody := bytes.NewReader(requestDataJSON)
|
||||
request, err := http.NewRequest(
|
||||
"POST",
|
||||
@@ -656,7 +654,7 @@ func PutObjectsLegalholdStatus(bucketName string, prefix string, status string,
|
||||
}
|
||||
|
||||
func TestPutObjectsLegalholdStatus(t *testing.T) {
|
||||
printStartFunc("TestPutObjectsLegalholdStatus")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testputobjectslegalholdstatus"
|
||||
@@ -744,11 +742,11 @@ func TestPutObjectsLegalholdStatus(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestPutObjectsLegalholdStatus")
|
||||
|
||||
}
|
||||
|
||||
func TestGetBucketQuota(t *testing.T) {
|
||||
printStartFunc("TestGetBucketQuota")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
validBucket := "testgetbucketquota"
|
||||
@@ -823,11 +821,11 @@ func TestGetBucketQuota(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestGetBucketQuota")
|
||||
|
||||
}
|
||||
|
||||
func TestPutBucketQuota(t *testing.T) {
|
||||
printStartFunc("TestPutBucketQuota")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
validBucket := "testputbucketquota"
|
||||
@@ -884,11 +882,11 @@ func TestPutBucketQuota(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestPutBucketQuota")
|
||||
|
||||
}
|
||||
|
||||
func TestListBucketEvents(t *testing.T) {
|
||||
printStartFunc("TestListBucketEvents")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
validBucket := "testlistbucketevents"
|
||||
@@ -944,11 +942,11 @@ func TestListBucketEvents(t *testing.T) {
|
||||
|
||||
})
|
||||
}
|
||||
printEndFunc("TestListBucketEvents")
|
||||
|
||||
}
|
||||
|
||||
func TestDeleteObjectsRetentionStatus(t *testing.T) {
|
||||
printStartFunc("TestDeleteObjectsRetentionStatus")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testdeleteobjectslegalholdstatus"
|
||||
@@ -1055,11 +1053,11 @@ func TestDeleteObjectsRetentionStatus(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestDeleteObjectsRetentionStatus")
|
||||
|
||||
}
|
||||
|
||||
func TestBucketSetPolicy(t *testing.T) {
|
||||
printStartFunc("TestBucketSetPolicy")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
validBucketName := "testbucketsetpolicy"
|
||||
@@ -1118,11 +1116,11 @@ func TestBucketSetPolicy(t *testing.T) {
|
||||
|
||||
})
|
||||
}
|
||||
printEndFunc("TestBucketSetPolicy")
|
||||
|
||||
}
|
||||
|
||||
func TestRestoreObjectToASelectedVersion(t *testing.T) {
|
||||
printStartFunc("TestRestoreObjectToASelectedVersion")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testrestoreobjectstoselectedversion"
|
||||
@@ -1210,11 +1208,11 @@ func TestRestoreObjectToASelectedVersion(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestRestoreObjectToASelectedVersion")
|
||||
|
||||
}
|
||||
|
||||
func TestPutBucketsTags(t *testing.T) {
|
||||
printStartFunc("TestPutBucketsTags")
|
||||
|
||||
// Focused test for "Put Bucket's tags" endpoint
|
||||
|
||||
// 1. Create the bucket
|
||||
@@ -1268,11 +1266,11 @@ func TestPutBucketsTags(t *testing.T) {
|
||||
|
||||
})
|
||||
}
|
||||
printEndFunc("TestPutBucketsTags")
|
||||
|
||||
}
|
||||
|
||||
func TestGetsTheMetadataOfAnObject(t *testing.T) {
|
||||
printStartFunc("TestGetsTheMetadataOfAnObject")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
bucketName := "testgetsthemetadataofanobject"
|
||||
@@ -1345,11 +1343,11 @@ func TestGetsTheMetadataOfAnObject(t *testing.T) {
|
||||
|
||||
})
|
||||
}
|
||||
printEndFunc("TestGetsTheMetadataOfAnObject")
|
||||
|
||||
}
|
||||
|
||||
func TestPutObjectsRetentionStatus(t *testing.T) {
|
||||
printStartFunc("TestPutObjectsRetentionStatus")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testputobjectsretentionstatus"
|
||||
@@ -1438,14 +1436,14 @@ func TestPutObjectsRetentionStatus(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestPutObjectsRetentionStatus")
|
||||
|
||||
}
|
||||
|
||||
func TestShareObjectOnURL(t *testing.T) {
|
||||
/*
|
||||
Test to share an object via URL
|
||||
*/
|
||||
printStartFunc("TestShareObjectOnURL")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
bucketName := "testshareobjectonurl"
|
||||
@@ -1519,14 +1517,14 @@ func TestShareObjectOnURL(t *testing.T) {
|
||||
|
||||
})
|
||||
}
|
||||
printEndFunc("TestShareObjectOnURL")
|
||||
|
||||
}
|
||||
|
||||
func TestListObjects(t *testing.T) {
|
||||
/*
|
||||
To test list objects end point.
|
||||
*/
|
||||
printStartFunc("TestListObjects")
|
||||
|
||||
// Test's variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testlistobjecttobucket1"
|
||||
@@ -1566,14 +1564,14 @@ func TestListObjects(t *testing.T) {
|
||||
assert.True(
|
||||
strings.Contains(finalResponse, "testlistobjecttobucket1"),
|
||||
finalResponse)
|
||||
printEndFunc("TestListObjects")
|
||||
|
||||
}
|
||||
|
||||
func TestDeleteObject(t *testing.T) {
|
||||
/*
|
||||
Test to delete an object from a given bucket.
|
||||
*/
|
||||
printStartFunc("TestDeleteObject")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testdeleteobjectbucket1"
|
||||
@@ -1635,14 +1633,14 @@ func TestDeleteObject(t *testing.T) {
|
||||
strings.Contains(
|
||||
finalResponse,
|
||||
"testdeleteobjectfile1.txt"), finalResponse) // Gone
|
||||
printEndFunc("TestDeleteObject")
|
||||
|
||||
}
|
||||
|
||||
func TestUploadObjectToBucket(t *testing.T) {
|
||||
/*
|
||||
Function to test the upload of an object to a bucket.
|
||||
*/
|
||||
printStartFunc("TestUploadObjectToBucket")
|
||||
|
||||
// Test's variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testuploadobjecttobucket1"
|
||||
@@ -1666,14 +1664,14 @@ func TestUploadObjectToBucket(t *testing.T) {
|
||||
if uploadResponse != nil {
|
||||
assert.Equal(200, uploadResponse.StatusCode, finalResponse)
|
||||
}
|
||||
printEndFunc("TestUploadObjectToBucket")
|
||||
|
||||
}
|
||||
|
||||
func TestDownloadObject(t *testing.T) {
|
||||
/*
|
||||
Test to download an object from a given bucket.
|
||||
*/
|
||||
printStartFunc("TestDownloadObject")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
bucketName := "testdownloadobjbucketone"
|
||||
@@ -1733,14 +1731,14 @@ func TestDownloadObject(t *testing.T) {
|
||||
// path/to/whatever does not exist
|
||||
assert.Fail("File wasn't downloaded")
|
||||
}
|
||||
printEndFunc("TestDownloadObject")
|
||||
|
||||
}
|
||||
|
||||
func TestDeleteMultipleObjects(t *testing.T) {
|
||||
/*
|
||||
Function to test the deletion of multiple objects from a given bucket.
|
||||
*/
|
||||
printStartFunc("TestDeleteMultipleObjects")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "testdeletemultipleobjsbucket1"
|
||||
@@ -1767,22 +1765,31 @@ func TestDeleteMultipleObjects(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Delete these objects
|
||||
// Prepare the files for deletion
|
||||
files := make([]map[string]interface{}, numberOfFiles)
|
||||
for i := 1; i <= numberOfFiles; i++ {
|
||||
deleteResponse, deleteError := DeleteObject(
|
||||
bucketName, encodeBase64(
|
||||
fileName+strconv.Itoa(i)+".txt"), false, false)
|
||||
assert.Nil(deleteError)
|
||||
if deleteError != nil {
|
||||
log.Println(deleteError)
|
||||
return
|
||||
}
|
||||
if deleteResponse != nil {
|
||||
assert.Equal(200, deleteResponse.StatusCode,
|
||||
inspectHTTPResponse(deleteResponse))
|
||||
files[i-1] = map[string]interface{}{
|
||||
"path": fileName + strconv.Itoa(i) + ".txt",
|
||||
"versionID": "",
|
||||
"recursive": false,
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Delete these objects all at once
|
||||
deleteResponse, deleteError := DeleteMultipleObjects(
|
||||
bucketName,
|
||||
files,
|
||||
)
|
||||
assert.Nil(deleteError)
|
||||
if deleteError != nil {
|
||||
log.Println(deleteError)
|
||||
return
|
||||
}
|
||||
if deleteResponse != nil {
|
||||
assert.Equal(200, deleteResponse.StatusCode,
|
||||
inspectHTTPResponse(deleteResponse))
|
||||
}
|
||||
|
||||
// 4. List the objects, empty list is expected!
|
||||
listResponse, listError := ListObjects(bucketName, "", "false")
|
||||
assert.Nil(listError)
|
||||
@@ -1799,14 +1806,14 @@ func TestDeleteMultipleObjects(t *testing.T) {
|
||||
// 5. Verify empty list is obtained as we deleted all the objects
|
||||
expected := "Http Response: {\"objects\":null}\n"
|
||||
assert.Equal(expected, finalResponse, finalResponse)
|
||||
printEndFunc("TestDeleteMultipleObjects")
|
||||
|
||||
}
|
||||
|
||||
func TestPutObjectTag(t *testing.T) {
|
||||
/*
|
||||
Test to put a tag to an object
|
||||
*/
|
||||
printStartFunc("TestPutObjectTag")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
bucketName := "testputobjecttagbucketone"
|
||||
@@ -1865,14 +1872,14 @@ func TestPutObjectTag(t *testing.T) {
|
||||
assert.True(
|
||||
strings.Contains(finalResponse, tags["tag"]),
|
||||
finalResponse)
|
||||
printEndFunc("TestPutObjectTag")
|
||||
|
||||
}
|
||||
|
||||
func TestBucketRetention(t *testing.T) {
|
||||
/*
|
||||
To test bucket retention feature
|
||||
*/
|
||||
printStartFunc("TestBucketRetention")
|
||||
|
||||
// 1. Create the bucket with 2 years validity retention
|
||||
assert := assert.New(t)
|
||||
/*
|
||||
@@ -1934,14 +1941,14 @@ func TestBucketRetention(t *testing.T) {
|
||||
}
|
||||
expected := "Http Response: {\"mode\":\"compliance\",\"unit\":\"years\",\"validity\":3}\n"
|
||||
assert.Equal(expected, finalResponse, finalResponse)
|
||||
printEndFunc("TestBucketRetention")
|
||||
|
||||
}
|
||||
|
||||
func TestBucketInformationGenericErrorResponse(t *testing.T) {
|
||||
/*
|
||||
Test Bucket Info End Point with a Generic Error Response.
|
||||
*/
|
||||
printStartFunc("TestBucketInformationGenericErrorResponse")
|
||||
|
||||
// 1. Create the bucket
|
||||
assert := assert.New(t)
|
||||
if !BucketGotAdded("bucketinformation2", false, false, nil, nil, assert, 201) {
|
||||
@@ -1980,14 +1987,14 @@ func TestBucketInformationGenericErrorResponse(t *testing.T) {
|
||||
// Since bucketinformation3 hasn't been created, then it is expected that
|
||||
// tag2 is not part of the response, this is why assert.False is used.
|
||||
assert.False(strings.Contains(finalResponse, "tag2"), finalResponse)
|
||||
printEndFunc("TestBucketInformationGenericErrorResponse")
|
||||
|
||||
}
|
||||
|
||||
func TestBucketInformationSuccessfulResponse(t *testing.T) {
|
||||
/*
|
||||
Test Bucket Info End Point with a Successful Response.
|
||||
*/
|
||||
printStartFunc("TestBucketInformationSuccessfulResponse")
|
||||
|
||||
// 1. Create the bucket
|
||||
assert := assert.New(t)
|
||||
if !BucketGotAdded("bucketinformation1", false, false, nil, nil, assert, 201) {
|
||||
@@ -2022,7 +2029,7 @@ func TestBucketInformationSuccessfulResponse(t *testing.T) {
|
||||
assert.Equal(200, bucketInfoResponse.StatusCode,
|
||||
debugResponse)
|
||||
}
|
||||
printMessage(debugResponse)
|
||||
fmt.Println(debugResponse)
|
||||
|
||||
// 4. Verify the information
|
||||
assert.True(
|
||||
@@ -2031,14 +2038,14 @@ func TestBucketInformationSuccessfulResponse(t *testing.T) {
|
||||
assert.True(
|
||||
strings.Contains(debugResponse, "tag1"),
|
||||
inspectHTTPResponse(bucketInfoResponse))
|
||||
printEndFunc("TestBucketInformationSuccessfulResponse")
|
||||
|
||||
}
|
||||
|
||||
func TestDeleteBucket(t *testing.T) {
|
||||
/*
|
||||
Test to delete a bucket
|
||||
*/
|
||||
printStartFunc("TestDeleteBucket")
|
||||
|
||||
// 1. Create the bucket
|
||||
assert := assert.New(t)
|
||||
if !BucketGotAdded("testdeletebucket1", false, false, nil, nil, assert, 201) {
|
||||
@@ -2075,14 +2082,14 @@ func TestDeleteBucket(t *testing.T) {
|
||||
}
|
||||
assert.True(
|
||||
strings.Contains(finalResponse, "The specified bucket does not exist"))
|
||||
printEndFunc("TestDeleteBucket")
|
||||
|
||||
}
|
||||
|
||||
func TestListBuckets(t *testing.T) {
|
||||
/*
|
||||
Test the list of buckets without query parameters.
|
||||
*/
|
||||
printStartFunc("TestListBuckets")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// 1. Create buckets
|
||||
@@ -2115,11 +2122,11 @@ func TestListBuckets(t *testing.T) {
|
||||
assert.True(strings.Contains(string(b),
|
||||
"testlistbuckets"+strconv.Itoa(i)))
|
||||
}
|
||||
printEndFunc("TestListBuckets")
|
||||
|
||||
}
|
||||
|
||||
func TestBucketsGet(t *testing.T) {
|
||||
printStartFunc("TestListBuckets")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
client := &http.Client{
|
||||
@@ -2157,11 +2164,11 @@ func TestBucketsGet(t *testing.T) {
|
||||
assert.Greater(listBuckets.Total, int64(0), "Total buckets is 0")
|
||||
|
||||
}
|
||||
printEndFunc("TestListBuckets")
|
||||
|
||||
}
|
||||
|
||||
func TestBucketVersioning(t *testing.T) {
|
||||
printStartFunc("TestBucketVersioning")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
client := &http.Client{
|
||||
@@ -2261,11 +2268,11 @@ func TestBucketVersioning(t *testing.T) {
|
||||
if response != nil {
|
||||
fmt.Println("DELETE StatusCode:", response.StatusCode)
|
||||
}
|
||||
printEndFunc("TestBucketVersioning")
|
||||
|
||||
}
|
||||
|
||||
func TestSetBucketTags(t *testing.T) {
|
||||
printStartFunc("TestSetBucketTags")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
client := &http.Client{
|
||||
@@ -2331,11 +2338,11 @@ func TestSetBucketTags(t *testing.T) {
|
||||
}
|
||||
|
||||
assert.Equal("TAG", bucket.Details.Tags["test"], "Failed to add tag")
|
||||
printEndFunc("TestSetBucketTags")
|
||||
|
||||
}
|
||||
|
||||
func TestGetBucket(t *testing.T) {
|
||||
printStartFunc("TestGetBucket")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
client := &http.Client{
|
||||
@@ -2366,11 +2373,11 @@ func TestGetBucket(t *testing.T) {
|
||||
if response != nil {
|
||||
assert.Equal(200, response.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
printEndFunc("TestGetBucket")
|
||||
|
||||
}
|
||||
|
||||
func TestAddBucket(t *testing.T) {
|
||||
printStartFunc("TestAddBucket")
|
||||
|
||||
assert := assert.New(t)
|
||||
type args struct {
|
||||
bucketName string
|
||||
@@ -2402,7 +2409,7 @@ func TestAddBucket(t *testing.T) {
|
||||
}
|
||||
})
|
||||
}
|
||||
printEndFunc("TestAddBucket")
|
||||
|
||||
}
|
||||
|
||||
func CreateBucketEvent(bucketName string, ignoreExisting bool, arn string, prefix string, suffix string, events []string) (*http.Response, error) {
|
||||
@@ -2484,7 +2491,7 @@ func DeleteBucketEvent(bucketName string, arn string, events []string, prefix st
|
||||
}
|
||||
|
||||
func TestDeleteBucketEvent(t *testing.T) {
|
||||
printStartFunc("TestDeleteBucketEvent")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
|
||||
@@ -2564,7 +2571,7 @@ func TestDeleteBucketEvent(t *testing.T) {
|
||||
efinalResponseEvent,
|
||||
)
|
||||
}
|
||||
printEndFunc("TestDeleteBucketEvent")
|
||||
|
||||
}
|
||||
|
||||
func SetMultiBucketReplication(accessKey string, secretKey string, targetURL string, region string, originBucket string, destinationBucket string, syncMode string, bandwidth int, healthCheckPeriod int, prefix string, tags string, replicateDeleteMarkers bool, replicateDeletes bool, priority int, storageClass string, replicateMetadata bool) (*http.Response, error) {
|
||||
@@ -2705,7 +2712,7 @@ func DeleteBucketReplicationRule(bucketName string, ruleID string) (*http.Respon
|
||||
}
|
||||
|
||||
func TestReplication(t *testing.T) {
|
||||
printStartFunc("TestReplication")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
originBucket := "testputobjectslegalholdstatus"
|
||||
@@ -2763,6 +2770,10 @@ func TestReplication(t *testing.T) {
|
||||
assert.Nil(err)
|
||||
}
|
||||
|
||||
assert.Greater(len(structBucketRepl.Rules), 0, "Number of expected rules is 0")
|
||||
if len(structBucketRepl.Rules) == 0 {
|
||||
return
|
||||
}
|
||||
// 4. Verify rules are enabled
|
||||
for index := 0; index < 2; index++ {
|
||||
Status := structBucketRepl.Rules[index].Status
|
||||
@@ -2800,7 +2811,7 @@ func TestReplication(t *testing.T) {
|
||||
if response != nil {
|
||||
assert.Equal(204, response.StatusCode, finalResponse)
|
||||
}
|
||||
printEndFunc("TestReplication")
|
||||
|
||||
}
|
||||
|
||||
func GetBucketVersioning(bucketName string) (*http.Response, error) {
|
||||
@@ -2839,7 +2850,7 @@ func BaseGetFunction(bucketName string, endPoint string) (*http.Response, error)
|
||||
|
||||
func TestReturnsTheStatusOfObjectLockingSupportOnTheBucket(t *testing.T) {
|
||||
// Test for end point: /buckets/{bucket_name}/object-locking
|
||||
printStartFunc("TestReturnsTheStatusOfObjectLockingSupportOnTheBucket")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
bucketName := "testputobjectslegalholdstatus"
|
||||
@@ -2870,7 +2881,7 @@ func TestReturnsTheStatusOfObjectLockingSupportOnTheBucket(t *testing.T) {
|
||||
true,
|
||||
structBucketLocking,
|
||||
)
|
||||
printEndFunc("TestReturnsTheStatusOfObjectLockingSupportOnTheBucket")
|
||||
|
||||
}
|
||||
|
||||
func SetBucketVersioning(bucketName string, versioning bool) (*http.Response, error) {
|
||||
@@ -2898,7 +2909,7 @@ func SetBucketVersioning(bucketName string, versioning bool) (*http.Response, er
|
||||
}
|
||||
|
||||
func TestSetBucketVersioning(t *testing.T) {
|
||||
printStartFunc("TestSetBucketVersioning")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucket := "test-set-bucket-versioning"
|
||||
@@ -2941,7 +2952,7 @@ func TestSetBucketVersioning(t *testing.T) {
|
||||
assert.Nil(err)
|
||||
}
|
||||
assert.Equal(false, result.IsVersioned, result)
|
||||
printEndFunc("TestSetBucketVersioning")
|
||||
|
||||
}
|
||||
|
||||
func EnableBucketEncryption(bucketName string, encType string, kmsKeyID string) (*http.Response, error) {
|
||||
@@ -2978,7 +2989,7 @@ func EnableBucketEncryption(bucketName string, encType string, kmsKeyID string)
|
||||
}
|
||||
|
||||
func TestEnableBucketEncryption(t *testing.T) {
|
||||
printStartFunc("TestEnableBucketEncryption")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "test-enable-bucket-encryption"
|
||||
@@ -3023,7 +3034,6 @@ func TestEnableBucketEncryption(t *testing.T) {
|
||||
assert.Nil(err)
|
||||
}
|
||||
assert.Equal("AES256", result.Algorithm, result)
|
||||
printEndFunc("TestEnableBucketEncryption")
|
||||
|
||||
// 4. Disable Bucket's Encryption
|
||||
resp, err = DisableBucketEncryption(bucketName)
|
||||
@@ -3057,7 +3067,7 @@ func TestEnableBucketEncryption(t *testing.T) {
|
||||
}
|
||||
dereferencedPointerDetailedMessage := *result2.DetailedMessage
|
||||
assert.Equal("error server side encryption configuration not found", dereferencedPointerDetailedMessage, dereferencedPointerDetailedMessage)
|
||||
printEndFunc("TestEnableBucketEncryption")
|
||||
|
||||
}
|
||||
|
||||
func GetBucketEncryptionInformation(bucketName string) (*http.Response, error) {
|
||||
@@ -3252,8 +3262,6 @@ func DeleteLifecycleRule(bucketName string, lifecycleID string) (*http.Response,
|
||||
|
||||
func TestBucketLifeCycle(t *testing.T) {
|
||||
|
||||
printStartFunc("TestBucketLifeCycle")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "test-bucket-life-cycle"
|
||||
@@ -3384,7 +3392,6 @@ func TestBucketLifeCycle(t *testing.T) {
|
||||
404, resp.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
|
||||
printEndFunc("TestBucketLifeCycle")
|
||||
}
|
||||
|
||||
func SetAccessRuleWithBucket(bucketName string, prefix string, access string) (*http.Response, error) {
|
||||
@@ -3473,8 +3480,6 @@ func DeleteAccessRuleWithBucket(bucketName string, prefix string) (*http.Respons
|
||||
|
||||
func TestAccessRule(t *testing.T) {
|
||||
|
||||
printStartFunc("TestAccessRule")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
bucketName := "test-access-rule-bucket"
|
||||
@@ -3562,10 +3567,9 @@ func TestAccessRule(t *testing.T) {
|
||||
}
|
||||
AccessRules := &result.AccessRules // The array has to be empty, no index accessible
|
||||
if len(*AccessRules) == 0 {
|
||||
printMessage("Cool, access rules are gone from this bucket")
|
||||
fmt.Println("Cool, access rules are gone from this bucket")
|
||||
} else {
|
||||
assert.Fail("Access Rule not deleted")
|
||||
}
|
||||
|
||||
printEndFunc("TestAccessRule")
|
||||
}
|
||||
|
||||
@@ -359,7 +359,7 @@ func TestAddUser(t *testing.T) {
|
||||
tests like users.ts can run over clean data and we don't collide against
|
||||
it.
|
||||
*/
|
||||
printStartFunc("TestAddUser")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// With no groups & no policies
|
||||
@@ -384,7 +384,7 @@ func TestAddUser(t *testing.T) {
|
||||
fmt.Println("DELETE StatusCode:", response.StatusCode)
|
||||
assert.Equal(204, response.StatusCode, "has to be 204 when delete user")
|
||||
}
|
||||
printEndFunc("TestAddUser")
|
||||
|
||||
}
|
||||
|
||||
func TestListUsers(t *testing.T) {
|
||||
@@ -394,7 +394,7 @@ func TestListUsers(t *testing.T) {
|
||||
2. Then, it lists the users <------ 200 is expected when listing them.
|
||||
3. Finally, it deletes the users
|
||||
*/
|
||||
printStartFunc("TestListUsers")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// With no groups & no policies
|
||||
@@ -454,14 +454,14 @@ func TestListUsers(t *testing.T) {
|
||||
response.StatusCode, "has to be 204 when delete user")
|
||||
}
|
||||
}
|
||||
printEndFunc("TestListUsers")
|
||||
|
||||
}
|
||||
|
||||
func TestGetUserInfo(t *testing.T) {
|
||||
/*
|
||||
Test to get the user information via API.
|
||||
*/
|
||||
printStartFunc("TestGetUserInfo")
|
||||
|
||||
// 1. Create the user
|
||||
fmt.Println("TestGetUserInfo(): 1. Create the user")
|
||||
assert := assert.New(t)
|
||||
@@ -500,14 +500,14 @@ func TestGetUserInfo(t *testing.T) {
|
||||
expected := "{\"accessKey\":\"accessKey\",\"memberOf\":null,\"policy\":[],\"status\":\"enabled\"}\n"
|
||||
obtained := string(b)
|
||||
assert.Equal(expected, obtained, "User Information is wrong")
|
||||
printEndFunc("TestGetUserInfo")
|
||||
|
||||
}
|
||||
|
||||
func TestUpdateUserInfoSuccessfulResponse(t *testing.T) {
|
||||
/*
|
||||
Update User Information Test with Successful Response
|
||||
*/
|
||||
printStartFunc("TestGetUserInfo")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// 1. Create an active user
|
||||
@@ -545,14 +545,14 @@ func TestUpdateUserInfoSuccessfulResponse(t *testing.T) {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
assert.True(strings.Contains(string(b), "disabled"))
|
||||
printEndFunc("TestGetUserInfo")
|
||||
|
||||
}
|
||||
|
||||
func TestUpdateUserInfoGenericErrorResponse(t *testing.T) {
|
||||
/*
|
||||
Update User Information Test with Generic Error Response
|
||||
*/
|
||||
printStartFunc("TestUpdateUserInfoGenericErrorResponse")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// 1. Create an active user
|
||||
@@ -590,14 +590,14 @@ func TestUpdateUserInfoGenericErrorResponse(t *testing.T) {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
assert.True(strings.Contains(string(b), "status not valid"))
|
||||
printEndFunc("TestUpdateUserInfoGenericErrorResponse")
|
||||
|
||||
}
|
||||
|
||||
func TestRemoveUserSuccessfulResponse(t *testing.T) {
|
||||
/*
|
||||
To test removing a user from API
|
||||
*/
|
||||
printStartFunc("TestRemoveUserSuccessfulResponse")
|
||||
|
||||
assert := assert.New(t)
|
||||
|
||||
// 1. Create an active user
|
||||
@@ -641,17 +641,17 @@ func TestRemoveUserSuccessfulResponse(t *testing.T) {
|
||||
404, getUserInfoResponse.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
finalResponse := inspectHTTPResponse(getUserInfoResponse)
|
||||
printMessage(finalResponse)
|
||||
fmt.Println(finalResponse)
|
||||
assert.True(strings.Contains(
|
||||
finalResponse, "The specified user does not exist"), finalResponse)
|
||||
printEndFunc("TestRemoveUserSuccessfulResponse")
|
||||
|
||||
}
|
||||
|
||||
func TestUpdateGroupsForAUser(t *testing.T) {
|
||||
/*
|
||||
To test Update Groups For a User End Point.
|
||||
*/
|
||||
printStartFunc("TestUpdateGroupsForAUser")
|
||||
|
||||
// 1. Create the user
|
||||
numberOfGroups := 3
|
||||
groupName := "updategroupforausergroup"
|
||||
@@ -701,14 +701,14 @@ func TestUpdateGroupsForAUser(t *testing.T) {
|
||||
assert.True(strings.Contains(
|
||||
finalResponse, groupName+strconv.Itoa(i)), finalResponse)
|
||||
}
|
||||
printEndFunc("TestUpdateGroupsForAUser")
|
||||
|
||||
}
|
||||
|
||||
func TestCreateServiceAccountForUser(t *testing.T) {
|
||||
/*
|
||||
To test creation of service account for a user.
|
||||
*/
|
||||
printStartFunc("TestCreateServiceAccountForUser")
|
||||
|
||||
// Test's variables
|
||||
userName := "testcreateserviceaccountforuser1"
|
||||
assert := assert.New(t)
|
||||
@@ -762,107 +762,14 @@ func TestCreateServiceAccountForUser(t *testing.T) {
|
||||
)
|
||||
}
|
||||
assert.Equal(len(finalResponse), serviceAccountLengthInBytes, finalResponse)
|
||||
printEndFunc("TestCreateServiceAccountForUser")
|
||||
}
|
||||
|
||||
func TestCreateServiceAccountForUserWithCredentials(t *testing.T) {
|
||||
/*
|
||||
To test creation of service account for a user.
|
||||
*/
|
||||
printStartFunc("TestCreateServiceAccountForUserWithCredentials")
|
||||
// Test's variables
|
||||
userName := "testcreateserviceaccountforuserwithcredentials1"
|
||||
assert := assert.New(t)
|
||||
policy := ""
|
||||
serviceAccountLengthInBytes := 40 // As observed, update as needed
|
||||
|
||||
// 1. Create the user
|
||||
var groups = []string{}
|
||||
var policies = []string{}
|
||||
var secretKey = "testcreateserviceaccountforuserwithcrede"
|
||||
response, err := AddUser(userName, "secretKey", groups, policies)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if response != nil {
|
||||
fmt.Println("StatusCode:", response.StatusCode)
|
||||
assert.Equal(201, response.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
|
||||
// Table driven testing part
|
||||
type args struct {
|
||||
accessKey string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
expectedStatus int
|
||||
}{
|
||||
{
|
||||
name: "Service Account With Valid Credentials",
|
||||
expectedStatus: 201,
|
||||
args: args{
|
||||
accessKey: "testcreateserviceacc",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Service Account With Invalid Credentials",
|
||||
expectedStatus: 500,
|
||||
args: args{
|
||||
accessKey: "tooooooooooooooooooooolongggggggggggggggggg",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
// 2. Create the service account for the user
|
||||
createServiceAccountWithCredentialsResponse,
|
||||
createServiceAccountWithCredentialsError := CreateServiceAccountForUserWithCredentials(
|
||||
userName,
|
||||
policy,
|
||||
tt.args.accessKey,
|
||||
secretKey,
|
||||
)
|
||||
if createServiceAccountWithCredentialsError != nil {
|
||||
log.Println(createServiceAccountWithCredentialsError)
|
||||
assert.Fail("Error in createServiceAccountWithCredentialsError")
|
||||
}
|
||||
if createServiceAccountWithCredentialsResponse != nil {
|
||||
fmt.Println("StatusCode:", createServiceAccountWithCredentialsResponse.StatusCode)
|
||||
assert.Equal(
|
||||
tt.expectedStatus, // different status expected per table's row
|
||||
createServiceAccountWithCredentialsResponse.StatusCode,
|
||||
inspectHTTPResponse(createServiceAccountWithCredentialsResponse),
|
||||
)
|
||||
}
|
||||
|
||||
// 3. Verify the service account for the user
|
||||
listOfAccountsResponse,
|
||||
listOfAccountsError := ReturnsAListOfServiceAccountsForAUser(userName)
|
||||
if listOfAccountsError != nil {
|
||||
log.Println(listOfAccountsError)
|
||||
assert.Fail("Error in listOfAccountsError")
|
||||
}
|
||||
finalResponse := inspectHTTPResponse(listOfAccountsResponse)
|
||||
if listOfAccountsResponse != nil {
|
||||
fmt.Println("StatusCode:", listOfAccountsResponse.StatusCode)
|
||||
assert.Equal(
|
||||
200, listOfAccountsResponse.StatusCode,
|
||||
finalResponse,
|
||||
)
|
||||
}
|
||||
assert.Equal(len(finalResponse), serviceAccountLengthInBytes, finalResponse)
|
||||
})
|
||||
}
|
||||
printEndFunc("TestCreateServiceAccountForUserWithCredentials")
|
||||
}
|
||||
|
||||
func TestUsersGroupsBulk(t *testing.T) {
|
||||
/*
|
||||
To test UsersGroupsBulk End Point
|
||||
*/
|
||||
printStartFunc("TestUsersGroupsBulk")
|
||||
|
||||
// Vars
|
||||
assert := assert.New(t)
|
||||
numberOfUsers := 5
|
||||
@@ -945,5 +852,5 @@ func TestUsersGroupsBulk(t *testing.T) {
|
||||
// Make sure the user belongs to the created group
|
||||
assert.True(strings.Contains(string(finalResponse), groupName))
|
||||
}
|
||||
printEndFunc("TestUsersGroupsBulk")
|
||||
|
||||
}
|
||||
|
||||
75
integration/version_test.go
Normal file
75
integration/version_test.go
Normal file
@@ -0,0 +1,75 @@
|
||||
// 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 Test_VersionAPI(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
|
||||
type args struct {
|
||||
api string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
expectedStatus int
|
||||
expectedError error
|
||||
}{
|
||||
{
|
||||
name: "Check Version",
|
||||
args: args{
|
||||
api: "/check-version",
|
||||
},
|
||||
expectedStatus: 200,
|
||||
expectedError: nil,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
client := &http.Client{
|
||||
Timeout: 3 * time.Second,
|
||||
}
|
||||
request, err := http.NewRequest(
|
||||
"GET", fmt.Sprintf("http://localhost:9090/api/v1%s", tt.args.api), nil)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
request.Header.Add("Content-Type", "application/json")
|
||||
response, err := client.Do(request)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if response != nil {
|
||||
assert.Equal(tt.expectedStatus, response.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,7 +15,7 @@ spec:
|
||||
serviceAccountName: console-sa
|
||||
containers:
|
||||
- name: console
|
||||
image: 'minio/console:v0.15.3'
|
||||
image: 'minio/console:v0.15.4'
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
env:
|
||||
- name: CONSOLE_OPERATOR_MODE
|
||||
|
||||
@@ -32,7 +32,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: console
|
||||
image: 'minio/console:v0.15.3'
|
||||
image: 'minio/console:v0.15.4'
|
||||
imagePullPolicy: "IfNotPresent"
|
||||
env:
|
||||
- name: CONSOLE_MINIO_SERVER
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
// 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 models
|
||||
|
||||
// This file was generated by the swagger tool.
|
||||
// Editing this file might prove futile when you re-run the swagger generate command
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/go-openapi/errors"
|
||||
"github.com/go-openapi/strfmt"
|
||||
"github.com/go-openapi/validate"
|
||||
)
|
||||
|
||||
// ProfilerType profiler type
|
||||
//
|
||||
// swagger:model profilerType
|
||||
type ProfilerType string
|
||||
|
||||
func NewProfilerType(value ProfilerType) *ProfilerType {
|
||||
return &value
|
||||
}
|
||||
|
||||
// Pointer returns a pointer to a freshly-allocated ProfilerType.
|
||||
func (m ProfilerType) Pointer() *ProfilerType {
|
||||
return &m
|
||||
}
|
||||
|
||||
const (
|
||||
|
||||
// ProfilerTypeCPU captures enum value "cpu"
|
||||
ProfilerTypeCPU ProfilerType = "cpu"
|
||||
|
||||
// ProfilerTypeMem captures enum value "mem"
|
||||
ProfilerTypeMem ProfilerType = "mem"
|
||||
|
||||
// ProfilerTypeBlock captures enum value "block"
|
||||
ProfilerTypeBlock ProfilerType = "block"
|
||||
|
||||
// ProfilerTypeMutex captures enum value "mutex"
|
||||
ProfilerTypeMutex ProfilerType = "mutex"
|
||||
|
||||
// ProfilerTypeTrace captures enum value "trace"
|
||||
ProfilerTypeTrace ProfilerType = "trace"
|
||||
|
||||
// ProfilerTypeThreads captures enum value "threads"
|
||||
ProfilerTypeThreads ProfilerType = "threads"
|
||||
|
||||
// ProfilerTypeGoroutines captures enum value "goroutines"
|
||||
ProfilerTypeGoroutines ProfilerType = "goroutines"
|
||||
)
|
||||
|
||||
// for schema
|
||||
var profilerTypeEnum []interface{}
|
||||
|
||||
func init() {
|
||||
var res []ProfilerType
|
||||
if err := json.Unmarshal([]byte(`["cpu","mem","block","mutex","trace","threads","goroutines"]`), &res); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
for _, v := range res {
|
||||
profilerTypeEnum = append(profilerTypeEnum, v)
|
||||
}
|
||||
}
|
||||
|
||||
func (m ProfilerType) validateProfilerTypeEnum(path, location string, value ProfilerType) error {
|
||||
if err := validate.EnumCase(path, location, value, profilerTypeEnum, true); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate validates this profiler type
|
||||
func (m ProfilerType) Validate(formats strfmt.Registry) error {
|
||||
var res []error
|
||||
|
||||
// value enum
|
||||
if err := m.validateProfilerTypeEnum("", "body", m); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if len(res) > 0 {
|
||||
return errors.CompositeValidationError(res...)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ContextValidate validates this profiler type based on context it is used
|
||||
func (m ProfilerType) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
|
||||
return nil
|
||||
}
|
||||
@@ -38,7 +38,7 @@ type ProfilingStartRequest struct {
|
||||
|
||||
// type
|
||||
// Required: true
|
||||
Type *ProfilerType `json:"type"`
|
||||
Type *string `json:"type"`
|
||||
}
|
||||
|
||||
// Validate validates this profiling start request
|
||||
@@ -61,51 +61,11 @@ func (m *ProfilingStartRequest) validateType(formats strfmt.Registry) error {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := validate.Required("type", "body", m.Type); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if m.Type != nil {
|
||||
if err := m.Type.Validate(formats); err != nil {
|
||||
if ve, ok := err.(*errors.Validation); ok {
|
||||
return ve.ValidateName("type")
|
||||
} else if ce, ok := err.(*errors.CompositeError); ok {
|
||||
return ce.ValidateName("type")
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ContextValidate validate this profiling start request based on the context it is used
|
||||
// ContextValidate validates this profiling start request based on context it is used
|
||||
func (m *ProfilingStartRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
|
||||
var res []error
|
||||
|
||||
if err := m.contextValidateType(ctx, formats); err != nil {
|
||||
res = append(res, err)
|
||||
}
|
||||
|
||||
if len(res) > 0 {
|
||||
return errors.CompositeValidationError(res...)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ProfilingStartRequest) contextValidateType(ctx context.Context, formats strfmt.Registry) error {
|
||||
|
||||
if m.Type != nil {
|
||||
if err := m.Type.ContextValidate(ctx, formats); err != nil {
|
||||
if ve, ok := err.(*errors.Validation); ok {
|
||||
return ve.ValidateName("type")
|
||||
} else if ce, ok := err.(*errors.CompositeError); ok {
|
||||
return ce.ValidateName("type")
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -50,26 +50,19 @@ func decodeBase64(value string) string {
|
||||
return string(result)
|
||||
}
|
||||
|
||||
func printMessage(message string) {
|
||||
/*
|
||||
Helper function to print HTTP response.
|
||||
*/
|
||||
fmt.Println(message)
|
||||
}
|
||||
|
||||
func printLoggingMessage(message string, functionName string) {
|
||||
/*
|
||||
Helper function to have standard output across the tests.
|
||||
*/
|
||||
finalString := "......................." + functionName + "(): " + message
|
||||
printMessage(finalString)
|
||||
fmt.Println(finalString)
|
||||
}
|
||||
|
||||
func printStartFunc(functionName string) {
|
||||
/*
|
||||
Common function for all tests to tell that test has started
|
||||
*/
|
||||
printMessage("")
|
||||
fmt.Println("")
|
||||
printLoggingMessage("started", functionName)
|
||||
}
|
||||
|
||||
@@ -78,7 +71,7 @@ func printEndFunc(functionName string) {
|
||||
Helper function for all tests to tell that test has ended, is completed
|
||||
*/
|
||||
printLoggingMessage("completed", functionName)
|
||||
printMessage("")
|
||||
fmt.Println("")
|
||||
}
|
||||
|
||||
func initConsoleServer() (*restapi.Server, error) {
|
||||
@@ -267,3 +260,220 @@ func TestListTenants(t *testing.T) {
|
||||
assert.Equal("storage-lite", *TenantName, *TenantName)
|
||||
printEndFunc("TestListTenants")
|
||||
}
|
||||
|
||||
func CreateTenant(tenantName string, namespace string, accessKey string, secretKey string, accessKeys []string, idp map[string]interface{}, tls map[string]interface{}, prometheusConfiguration map[string]interface{}, logSearchConfiguration map[string]interface{}, erasureCodingParity int, pools []map[string]interface{}, exposeConsole bool, exposeMinIO bool, image string, serviceName string, enablePrometheus bool, enableConsole bool, enableTLS bool, secretKeys []string) (*http.Response, error) {
|
||||
/*
|
||||
Helper function to create a tenant
|
||||
HTTP Verb: POST
|
||||
API: /api/v1/tenants
|
||||
*/
|
||||
requestDataAdd := map[string]interface{}{
|
||||
"name": tenantName,
|
||||
"namespace": namespace,
|
||||
"access_key": accessKey,
|
||||
"secret_key": secretKey,
|
||||
"access_keys": accessKeys,
|
||||
"secret_keys": secretKeys,
|
||||
"enable_tls": enableTLS,
|
||||
"enable_console": enableConsole,
|
||||
"enable_prometheus": enablePrometheus,
|
||||
"service_name": serviceName,
|
||||
"image": image,
|
||||
"expose_minio": exposeMinIO,
|
||||
"expose_console": exposeConsole,
|
||||
"pools": pools,
|
||||
"erasureCodingParity": erasureCodingParity,
|
||||
"logSearchConfiguration": logSearchConfiguration,
|
||||
"prometheusConfiguration": prometheusConfiguration,
|
||||
"tls": tls,
|
||||
"idp": idp,
|
||||
}
|
||||
requestDataJSON, _ := json.Marshal(requestDataAdd)
|
||||
requestDataBody := bytes.NewReader(requestDataJSON)
|
||||
request, err := http.NewRequest(
|
||||
"POST",
|
||||
"http://localhost:9090/api/v1/tenants",
|
||||
requestDataBody,
|
||||
)
|
||||
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 TestCreateTenant(t *testing.T) {
|
||||
printStartFunc("TestCreateTenant")
|
||||
|
||||
// Variables
|
||||
assert := assert.New(t)
|
||||
erasureCodingParity := 2
|
||||
tenantName := "new-tenant"
|
||||
namespace := "default"
|
||||
accessKey := ""
|
||||
secretKey := ""
|
||||
var accessKeys []string
|
||||
var secretKeys []string
|
||||
var minio []string
|
||||
var caCertificates []string
|
||||
var consoleCAcertificates []string
|
||||
enableTLS := true
|
||||
enableConsole := true
|
||||
enablePrometheus := true
|
||||
serviceName := ""
|
||||
image := ""
|
||||
exposeMinIO := true
|
||||
exposeConsole := true
|
||||
values := make([]string, 1)
|
||||
values[0] = "new-tenant"
|
||||
values2 := make([]string, 1)
|
||||
values2[0] = "pool-0"
|
||||
keys := make([]map[string]interface{}, 1)
|
||||
keys[0] = map[string]interface{}{
|
||||
"access_key": "IGLksSXdiU3fjcRI",
|
||||
"secret_key": "EqeCPZ1xBYdnygizxxRWnkH09N2350nO",
|
||||
}
|
||||
pools := make([]map[string]interface{}, 1)
|
||||
matchExpressions := make([]map[string]interface{}, 2)
|
||||
matchExpressions[0] = map[string]interface{}{
|
||||
"key": "v1.min.io/tenant",
|
||||
"operator": "In",
|
||||
"values": values,
|
||||
}
|
||||
matchExpressions[1] = map[string]interface{}{
|
||||
"key": "v1.min.io/pool",
|
||||
"operator": "In",
|
||||
"values": values2,
|
||||
}
|
||||
requiredDuringSchedulingIgnoredDuringExecution := make([]map[string]interface{}, 1)
|
||||
requiredDuringSchedulingIgnoredDuringExecution[0] = map[string]interface{}{
|
||||
"labelSelector": map[string]interface{}{
|
||||
"matchExpressions": matchExpressions,
|
||||
},
|
||||
"topologyKey": "kubernetes.io/hostname",
|
||||
}
|
||||
pools0 := map[string]interface{}{
|
||||
"name": "pool-0",
|
||||
"servers": 4,
|
||||
"volumes_per_server": 1,
|
||||
"volume_configuration": map[string]interface{}{
|
||||
"size": 26843545600,
|
||||
"storage_class_name": "standard",
|
||||
},
|
||||
"securityContext": nil,
|
||||
"affinity": map[string]interface{}{
|
||||
"podAntiAffinity": map[string]interface{}{
|
||||
"requiredDuringSchedulingIgnoredDuringExecution": requiredDuringSchedulingIgnoredDuringExecution,
|
||||
},
|
||||
},
|
||||
"resources": map[string]interface{}{
|
||||
"requests": map[string]interface{}{
|
||||
"cpu": 2,
|
||||
"memory": 2,
|
||||
},
|
||||
},
|
||||
}
|
||||
logSearchConfiguration := map[string]interface{}{
|
||||
"image": "",
|
||||
"postgres_image": "",
|
||||
"postgres_init_image": "",
|
||||
}
|
||||
prometheusConfiguration := map[string]interface{}{
|
||||
"image": "",
|
||||
"sidecar_image": "",
|
||||
"init_image": "",
|
||||
}
|
||||
tls := map[string]interface{}{
|
||||
"minio": minio,
|
||||
"ca_certificates": caCertificates,
|
||||
"console_ca_certificates": consoleCAcertificates,
|
||||
}
|
||||
idp := map[string]interface{}{
|
||||
"keys": keys,
|
||||
}
|
||||
pools[0] = pools0
|
||||
|
||||
// 1. Create Tenant
|
||||
resp, err := CreateTenant(
|
||||
tenantName,
|
||||
namespace,
|
||||
accessKey,
|
||||
secretKey,
|
||||
accessKeys,
|
||||
idp,
|
||||
tls,
|
||||
prometheusConfiguration,
|
||||
logSearchConfiguration,
|
||||
erasureCodingParity,
|
||||
pools,
|
||||
exposeConsole,
|
||||
exposeMinIO,
|
||||
image,
|
||||
serviceName,
|
||||
enablePrometheus,
|
||||
enableConsole,
|
||||
enableTLS,
|
||||
secretKeys,
|
||||
)
|
||||
assert.Nil(err)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if resp != nil {
|
||||
assert.Equal(
|
||||
200, resp.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
|
||||
printEndFunc("TestCreateTenant")
|
||||
}
|
||||
|
||||
func ListTenantsByNameSpace(namespace string) (*http.Response, error) {
|
||||
/*
|
||||
Helper function to list buckets
|
||||
HTTP Verb: GET
|
||||
URL: http://localhost:9090/api/v1/namespaces/{namespace}/tenants
|
||||
*/
|
||||
request, err := http.NewRequest(
|
||||
"GET", "http://localhost:9090/api/v1/namespaces/"+namespace+"/tenants", 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 TestListTenantsByNameSpace(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
namespace := "default"
|
||||
resp, err := ListTenantsByNameSpace(namespace)
|
||||
assert.Nil(err)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return
|
||||
}
|
||||
if resp != nil {
|
||||
assert.Equal(
|
||||
200, resp.StatusCode, "Status Code is incorrect")
|
||||
}
|
||||
bodyBytes, _ := ioutil.ReadAll(resp.Body)
|
||||
result := models.ListTenantsResponse{}
|
||||
err = json.Unmarshal(bodyBytes, &result)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
assert.Nil(err)
|
||||
}
|
||||
TenantName := &result.Tenants[0].Name // The array has to be empty, no index accessible
|
||||
fmt.Println(*TenantName)
|
||||
assert.Equal("new-tenant", *TenantName, *TenantName)
|
||||
}
|
||||
|
||||
@@ -47,7 +47,6 @@ var (
|
||||
|
||||
// LicenseKey in memory license key used by console ui
|
||||
LicenseKey = ""
|
||||
|
||||
// GlobalRootCAs is CA root certificates, a nil value means system certs pool will be used
|
||||
GlobalRootCAs *x509.CertPool
|
||||
// GlobalPublicCerts has certificates Console will use to serve clients
|
||||
|
||||
@@ -34,8 +34,6 @@ var (
|
||||
// SchemeBuilder points to a list of functions added to Scheme.
|
||||
SchemeBuilder runtime.SchemeBuilder
|
||||
localSchemeBuilder = &SchemeBuilder
|
||||
// AddToScheme applies all stored functions to Scheme.
|
||||
AddToScheme = localSchemeBuilder.AddToScheme
|
||||
)
|
||||
|
||||
func init() {
|
||||
|
||||
@@ -1,116 +1,117 @@
|
||||
{
|
||||
"files": {
|
||||
"main.css": "./static/css/main.90d417ae.css",
|
||||
"main.js": "./static/js/main.fd4d26b1.js",
|
||||
"static/js/1660.1a3b5397.chunk.js": "./static/js/1660.1a3b5397.chunk.js",
|
||||
"main.js": "./static/js/main.1bb3fb60.js",
|
||||
"static/js/1660.3421b1d3.chunk.js": "./static/js/1660.3421b1d3.chunk.js",
|
||||
"static/js/5282.cb13b8c4.chunk.js": "./static/js/5282.cb13b8c4.chunk.js",
|
||||
"static/js/2818.21be97b7.chunk.js": "./static/js/2818.21be97b7.chunk.js",
|
||||
"static/js/9560.bf1e7276.chunk.js": "./static/js/9560.bf1e7276.chunk.js",
|
||||
"static/js/9661.1e636902.chunk.js": "./static/js/9661.1e636902.chunk.js",
|
||||
"static/js/9330.ea489cb0.chunk.js": "./static/js/9330.ea489cb0.chunk.js",
|
||||
"static/js/7436.d9fafb61.chunk.js": "./static/js/7436.d9fafb61.chunk.js",
|
||||
"static/js/8428.d94dd7f0.chunk.js": "./static/js/8428.d94dd7f0.chunk.js",
|
||||
"static/js/9779.868ea932.chunk.js": "./static/js/9779.868ea932.chunk.js",
|
||||
"static/js/3617.c5deb048.chunk.js": "./static/js/3617.c5deb048.chunk.js",
|
||||
"static/js/7274.5c2a8fde.chunk.js": "./static/js/7274.5c2a8fde.chunk.js",
|
||||
"static/js/7842.151c41a8.chunk.js": "./static/js/7842.151c41a8.chunk.js",
|
||||
"static/js/4745.3fab4951.chunk.js": "./static/js/4745.3fab4951.chunk.js",
|
||||
"static/js/1796.840a4e41.chunk.js": "./static/js/1796.840a4e41.chunk.js",
|
||||
"static/js/8259.7c8fbb38.chunk.js": "./static/js/8259.7c8fbb38.chunk.js",
|
||||
"static/js/6023.d2f6ea4d.chunk.js": "./static/js/6023.d2f6ea4d.chunk.js",
|
||||
"static/js/6147.f2a7d841.chunk.js": "./static/js/6147.f2a7d841.chunk.js",
|
||||
"static/js/9275.2fec5cc7.chunk.js": "./static/js/9275.2fec5cc7.chunk.js",
|
||||
"static/js/8190.13d7b7e6.chunk.js": "./static/js/8190.13d7b7e6.chunk.js",
|
||||
"static/js/7314.01eaeb0f.chunk.js": "./static/js/7314.01eaeb0f.chunk.js",
|
||||
"static/js/7456.e2ad891d.chunk.js": "./static/js/7456.e2ad891d.chunk.js",
|
||||
"static/js/2818.c0f03eba.chunk.js": "./static/js/2818.c0f03eba.chunk.js",
|
||||
"static/js/9560.f2ba1718.chunk.js": "./static/js/9560.f2ba1718.chunk.js",
|
||||
"static/js/9661.4c7a22fb.chunk.js": "./static/js/9661.4c7a22fb.chunk.js",
|
||||
"static/js/9330.e6ac3543.chunk.js": "./static/js/9330.e6ac3543.chunk.js",
|
||||
"static/js/7436.318091b1.chunk.js": "./static/js/7436.318091b1.chunk.js",
|
||||
"static/js/8428.428b783d.chunk.js": "./static/js/8428.428b783d.chunk.js",
|
||||
"static/js/9779.6e9dc0a5.chunk.js": "./static/js/9779.6e9dc0a5.chunk.js",
|
||||
"static/js/3617.f650b975.chunk.js": "./static/js/3617.f650b975.chunk.js",
|
||||
"static/js/7274.06bad40d.chunk.js": "./static/js/7274.06bad40d.chunk.js",
|
||||
"static/js/7842.b4e66936.chunk.js": "./static/js/7842.b4e66936.chunk.js",
|
||||
"static/js/4745.8fd307b8.chunk.js": "./static/js/4745.8fd307b8.chunk.js",
|
||||
"static/js/1796.78eb9602.chunk.js": "./static/js/1796.78eb9602.chunk.js",
|
||||
"static/js/8259.cfeb6efe.chunk.js": "./static/js/8259.cfeb6efe.chunk.js",
|
||||
"static/js/6023.cc494962.chunk.js": "./static/js/6023.cc494962.chunk.js",
|
||||
"static/js/6147.d0d2ef6f.chunk.js": "./static/js/6147.d0d2ef6f.chunk.js",
|
||||
"static/js/9275.53928a1e.chunk.js": "./static/js/9275.53928a1e.chunk.js",
|
||||
"static/js/8190.37ec01c3.chunk.js": "./static/js/8190.37ec01c3.chunk.js",
|
||||
"static/js/7314.8d7e9d5d.chunk.js": "./static/js/7314.8d7e9d5d.chunk.js",
|
||||
"static/js/7456.5b6965d0.chunk.js": "./static/js/7456.5b6965d0.chunk.js",
|
||||
"static/css/5822.dd80c1b6.chunk.css": "./static/css/5822.dd80c1b6.chunk.css",
|
||||
"static/js/5822.fa49be62.chunk.js": "./static/js/5822.fa49be62.chunk.js",
|
||||
"static/js/2699.3102be0f.chunk.js": "./static/js/2699.3102be0f.chunk.js",
|
||||
"static/js/5808.8da21793.chunk.js": "./static/js/5808.8da21793.chunk.js",
|
||||
"static/js/5822.2e5ca929.chunk.js": "./static/js/5822.2e5ca929.chunk.js",
|
||||
"static/js/2699.4954d948.chunk.js": "./static/js/2699.4954d948.chunk.js",
|
||||
"static/js/5808.d0d08e62.chunk.js": "./static/js/5808.d0d08e62.chunk.js",
|
||||
"static/js/1237.b46ec019.chunk.js": "./static/js/1237.b46ec019.chunk.js",
|
||||
"static/js/189.06df2d49.chunk.js": "./static/js/189.06df2d49.chunk.js",
|
||||
"static/js/189.f0f79745.chunk.js": "./static/js/189.f0f79745.chunk.js",
|
||||
"static/css/964.dd80c1b6.chunk.css": "./static/css/964.dd80c1b6.chunk.css",
|
||||
"static/js/964.c1751e75.chunk.js": "./static/js/964.c1751e75.chunk.js",
|
||||
"static/js/964.4083c9c4.chunk.js": "./static/js/964.4083c9c4.chunk.js",
|
||||
"static/css/9807.dd80c1b6.chunk.css": "./static/css/9807.dd80c1b6.chunk.css",
|
||||
"static/js/9807.ee1a2bdb.chunk.js": "./static/js/9807.ee1a2bdb.chunk.js",
|
||||
"static/js/3806.8464efb7.chunk.js": "./static/js/3806.8464efb7.chunk.js",
|
||||
"static/js/8661.e8f2397f.chunk.js": "./static/js/8661.e8f2397f.chunk.js",
|
||||
"static/js/2886.92b60a3b.chunk.js": "./static/js/2886.92b60a3b.chunk.js",
|
||||
"static/js/4577.cd5b16fc.chunk.js": "./static/js/4577.cd5b16fc.chunk.js",
|
||||
"static/js/4298.e6c437dd.chunk.js": "./static/js/4298.e6c437dd.chunk.js",
|
||||
"static/js/9807.bb735f71.chunk.js": "./static/js/9807.bb735f71.chunk.js",
|
||||
"static/js/3806.3f0f185b.chunk.js": "./static/js/3806.3f0f185b.chunk.js",
|
||||
"static/js/8661.4f560fbb.chunk.js": "./static/js/8661.4f560fbb.chunk.js",
|
||||
"static/js/2886.7fb64ae7.chunk.js": "./static/js/2886.7fb64ae7.chunk.js",
|
||||
"static/js/4577.3e6de606.chunk.js": "./static/js/4577.3e6de606.chunk.js",
|
||||
"static/js/4298.2fa3347c.chunk.js": "./static/js/4298.2fa3347c.chunk.js",
|
||||
"static/js/2805.b4302353.chunk.js": "./static/js/2805.b4302353.chunk.js",
|
||||
"static/js/6873.27fbf284.chunk.js": "./static/js/6873.27fbf284.chunk.js",
|
||||
"static/js/428.ad58c353.chunk.js": "./static/js/428.ad58c353.chunk.js",
|
||||
"static/js/1069.77bb316e.chunk.js": "./static/js/1069.77bb316e.chunk.js",
|
||||
"static/js/9080.d84213b3.chunk.js": "./static/js/9080.d84213b3.chunk.js",
|
||||
"static/js/3276.1afa9e35.chunk.js": "./static/js/3276.1afa9e35.chunk.js",
|
||||
"static/js/6458.c6bf60f8.chunk.js": "./static/js/6458.c6bf60f8.chunk.js",
|
||||
"static/js/7551.b8d5fd21.chunk.js": "./static/js/7551.b8d5fd21.chunk.js",
|
||||
"static/js/7950.0e4eac80.chunk.js": "./static/js/7950.0e4eac80.chunk.js",
|
||||
"static/js/290.8bfc0b83.chunk.js": "./static/js/290.8bfc0b83.chunk.js",
|
||||
"static/js/8961.37cf027e.chunk.js": "./static/js/8961.37cf027e.chunk.js",
|
||||
"static/js/3967.2cb35507.chunk.js": "./static/js/3967.2cb35507.chunk.js",
|
||||
"static/js/1069.deaa3eb0.chunk.js": "./static/js/1069.deaa3eb0.chunk.js",
|
||||
"static/js/9080.ec6f0469.chunk.js": "./static/js/9080.ec6f0469.chunk.js",
|
||||
"static/js/3276.ef1e5b52.chunk.js": "./static/js/3276.ef1e5b52.chunk.js",
|
||||
"static/js/6458.c39b77e2.chunk.js": "./static/js/6458.c39b77e2.chunk.js",
|
||||
"static/js/6973.aa8569ff.chunk.js": "./static/js/6973.aa8569ff.chunk.js",
|
||||
"static/js/7551.6040d86d.chunk.js": "./static/js/7551.6040d86d.chunk.js",
|
||||
"static/js/7950.f9de3165.chunk.js": "./static/js/7950.f9de3165.chunk.js",
|
||||
"static/js/3575.b8f7afc0.chunk.js": "./static/js/3575.b8f7afc0.chunk.js",
|
||||
"static/js/8961.ab396d91.chunk.js": "./static/js/8961.ab396d91.chunk.js",
|
||||
"static/js/3967.689e32b8.chunk.js": "./static/js/3967.689e32b8.chunk.js",
|
||||
"static/css/4084.dd80c1b6.chunk.css": "./static/css/4084.dd80c1b6.chunk.css",
|
||||
"static/js/4084.34cce774.chunk.js": "./static/js/4084.34cce774.chunk.js",
|
||||
"static/js/8394.fa043a82.chunk.js": "./static/js/8394.fa043a82.chunk.js",
|
||||
"static/js/7664.b099b462.chunk.js": "./static/js/7664.b099b462.chunk.js",
|
||||
"static/js/1140.ab5579e6.chunk.js": "./static/js/1140.ab5579e6.chunk.js",
|
||||
"static/js/5961.7a71f2c5.chunk.js": "./static/js/5961.7a71f2c5.chunk.js",
|
||||
"static/js/4084.bb2e5658.chunk.js": "./static/js/4084.bb2e5658.chunk.js",
|
||||
"static/js/8394.83c40291.chunk.js": "./static/js/8394.83c40291.chunk.js",
|
||||
"static/js/7664.07c56295.chunk.js": "./static/js/7664.07c56295.chunk.js",
|
||||
"static/js/1140.f3c8431a.chunk.js": "./static/js/1140.f3c8431a.chunk.js",
|
||||
"static/js/5961.6a63abf6.chunk.js": "./static/js/5961.6a63abf6.chunk.js",
|
||||
"static/js/2401.dcfa0659.chunk.js": "./static/js/2401.dcfa0659.chunk.js",
|
||||
"static/js/7498.adcacaca.chunk.js": "./static/js/7498.adcacaca.chunk.js",
|
||||
"static/js/9421.a6974f61.chunk.js": "./static/js/9421.a6974f61.chunk.js",
|
||||
"static/js/4860.3bea7736.chunk.js": "./static/js/4860.3bea7736.chunk.js",
|
||||
"static/js/5245.04e84402.chunk.js": "./static/js/5245.04e84402.chunk.js",
|
||||
"static/js/6549.bc76401b.chunk.js": "./static/js/6549.bc76401b.chunk.js",
|
||||
"static/js/7498.629a64a4.chunk.js": "./static/js/7498.629a64a4.chunk.js",
|
||||
"static/js/9421.5b5d9937.chunk.js": "./static/js/9421.5b5d9937.chunk.js",
|
||||
"static/js/4860.dee4560c.chunk.js": "./static/js/4860.dee4560c.chunk.js",
|
||||
"static/js/5245.884da645.chunk.js": "./static/js/5245.884da645.chunk.js",
|
||||
"static/js/6549.7e3c2603.chunk.js": "./static/js/6549.7e3c2603.chunk.js",
|
||||
"static/css/8724.dd80c1b6.chunk.css": "./static/css/8724.dd80c1b6.chunk.css",
|
||||
"static/js/8724.2fda7628.chunk.js": "./static/js/8724.2fda7628.chunk.js",
|
||||
"static/js/2182.45ee7ad0.chunk.js": "./static/js/2182.45ee7ad0.chunk.js",
|
||||
"static/js/8724.6112baf2.chunk.js": "./static/js/8724.6112baf2.chunk.js",
|
||||
"static/js/2182.ac6bf5cd.chunk.js": "./static/js/2182.ac6bf5cd.chunk.js",
|
||||
"static/js/7764.7133a78a.chunk.js": "./static/js/7764.7133a78a.chunk.js",
|
||||
"static/js/4220.8d9a9028.chunk.js": "./static/js/4220.8d9a9028.chunk.js",
|
||||
"static/js/1719.a1c5fbc9.chunk.js": "./static/js/1719.a1c5fbc9.chunk.js",
|
||||
"static/js/3320.cf0913be.chunk.js": "./static/js/3320.cf0913be.chunk.js",
|
||||
"static/js/4220.4e76aa0b.chunk.js": "./static/js/4220.4e76aa0b.chunk.js",
|
||||
"static/js/1719.e7bff050.chunk.js": "./static/js/1719.e7bff050.chunk.js",
|
||||
"static/js/3320.8bb47140.chunk.js": "./static/js/3320.8bb47140.chunk.js",
|
||||
"static/js/6645.1d65ce48.chunk.js": "./static/js/6645.1d65ce48.chunk.js",
|
||||
"static/js/9923.3911a310.chunk.js": "./static/js/9923.3911a310.chunk.js",
|
||||
"static/js/9586.f3d3466d.chunk.js": "./static/js/9586.f3d3466d.chunk.js",
|
||||
"static/js/9125.a86e3119.chunk.js": "./static/js/9125.a86e3119.chunk.js",
|
||||
"static/js/5781.33738b7f.chunk.js": "./static/js/5781.33738b7f.chunk.js",
|
||||
"static/js/7261.916fdbf6.chunk.js": "./static/js/7261.916fdbf6.chunk.js",
|
||||
"static/js/7261.5c17f33b.chunk.js": "./static/js/7261.5c17f33b.chunk.js",
|
||||
"static/js/8306.047e9e54.chunk.js": "./static/js/8306.047e9e54.chunk.js",
|
||||
"static/js/6436.690eb2b9.chunk.js": "./static/js/6436.690eb2b9.chunk.js",
|
||||
"static/js/6436.9bc8fe43.chunk.js": "./static/js/6436.9bc8fe43.chunk.js",
|
||||
"static/js/8343.67a940b1.chunk.js": "./static/js/8343.67a940b1.chunk.js",
|
||||
"static/js/2841.9d475dfe.chunk.js": "./static/js/2841.9d475dfe.chunk.js",
|
||||
"static/js/6167.d5f52864.chunk.js": "./static/js/6167.d5f52864.chunk.js",
|
||||
"static/js/7346.47702cc8.chunk.js": "./static/js/7346.47702cc8.chunk.js",
|
||||
"static/js/2841.b0b47c73.chunk.js": "./static/js/2841.b0b47c73.chunk.js",
|
||||
"static/js/6167.63825f7e.chunk.js": "./static/js/6167.63825f7e.chunk.js",
|
||||
"static/js/7346.be91e98c.chunk.js": "./static/js/7346.be91e98c.chunk.js",
|
||||
"static/js/5144.19c094a4.chunk.js": "./static/js/5144.19c094a4.chunk.js",
|
||||
"static/js/5125.58c2feff.chunk.js": "./static/js/5125.58c2feff.chunk.js",
|
||||
"static/js/528.d01b02af.chunk.js": "./static/js/528.d01b02af.chunk.js",
|
||||
"static/js/528.9bb66bbe.chunk.js": "./static/js/528.9bb66bbe.chunk.js",
|
||||
"static/js/7187.171b28f4.chunk.js": "./static/js/7187.171b28f4.chunk.js",
|
||||
"static/js/6173.925ab9b7.chunk.js": "./static/js/6173.925ab9b7.chunk.js",
|
||||
"static/js/953.677ddb95.chunk.js": "./static/js/953.677ddb95.chunk.js",
|
||||
"static/js/9193.feaac1ba.chunk.js": "./static/js/9193.feaac1ba.chunk.js",
|
||||
"static/js/6173.f2666144.chunk.js": "./static/js/6173.f2666144.chunk.js",
|
||||
"static/js/953.163e31bc.chunk.js": "./static/js/953.163e31bc.chunk.js",
|
||||
"static/js/9193.7b929008.chunk.js": "./static/js/9193.7b929008.chunk.js",
|
||||
"static/js/7451.dabaf18f.chunk.js": "./static/js/7451.dabaf18f.chunk.js",
|
||||
"static/js/9924.020057ee.chunk.js": "./static/js/9924.020057ee.chunk.js",
|
||||
"static/js/9924.22b7a131.chunk.js": "./static/js/9924.22b7a131.chunk.js",
|
||||
"static/css/9645.dd80c1b6.chunk.css": "./static/css/9645.dd80c1b6.chunk.css",
|
||||
"static/js/9645.71cc858a.chunk.js": "./static/js/9645.71cc858a.chunk.js",
|
||||
"static/js/5710.7386de50.chunk.js": "./static/js/5710.7386de50.chunk.js",
|
||||
"static/js/4121.0e3d5ae5.chunk.js": "./static/js/4121.0e3d5ae5.chunk.js",
|
||||
"static/js/3421.666af5cb.chunk.js": "./static/js/3421.666af5cb.chunk.js",
|
||||
"static/js/2892.f87668de.chunk.js": "./static/js/2892.f87668de.chunk.js",
|
||||
"static/js/7926.c65ecfc3.chunk.js": "./static/js/7926.c65ecfc3.chunk.js",
|
||||
"static/js/6145.9665a7b2.chunk.js": "./static/js/6145.9665a7b2.chunk.js",
|
||||
"static/js/9645.7cc9e705.chunk.js": "./static/js/9645.7cc9e705.chunk.js",
|
||||
"static/js/5710.bbaa8215.chunk.js": "./static/js/5710.bbaa8215.chunk.js",
|
||||
"static/js/4121.c824f4ac.chunk.js": "./static/js/4121.c824f4ac.chunk.js",
|
||||
"static/js/3421.53573188.chunk.js": "./static/js/3421.53573188.chunk.js",
|
||||
"static/js/2892.076d9a7f.chunk.js": "./static/js/2892.076d9a7f.chunk.js",
|
||||
"static/js/7926.75e27e9b.chunk.js": "./static/js/7926.75e27e9b.chunk.js",
|
||||
"static/js/6145.82597755.chunk.js": "./static/js/6145.82597755.chunk.js",
|
||||
"static/css/3816.dd80c1b6.chunk.css": "./static/css/3816.dd80c1b6.chunk.css",
|
||||
"static/js/3816.c0b2fb6b.chunk.js": "./static/js/3816.c0b2fb6b.chunk.js",
|
||||
"static/js/2966.0b278e3b.chunk.js": "./static/js/2966.0b278e3b.chunk.js",
|
||||
"static/js/4177.381caad6.chunk.js": "./static/js/4177.381caad6.chunk.js",
|
||||
"static/js/9679.c1fd0ae5.chunk.js": "./static/js/9679.c1fd0ae5.chunk.js",
|
||||
"static/js/3816.ebc07860.chunk.js": "./static/js/3816.ebc07860.chunk.js",
|
||||
"static/js/2966.ced4dcf6.chunk.js": "./static/js/2966.ced4dcf6.chunk.js",
|
||||
"static/js/4177.6d04f760.chunk.js": "./static/js/4177.6d04f760.chunk.js",
|
||||
"static/js/9679.d9cbab57.chunk.js": "./static/js/9679.d9cbab57.chunk.js",
|
||||
"static/js/8333.d2ede110.chunk.js": "./static/js/8333.d2ede110.chunk.js",
|
||||
"static/js/1711.dfdfce0a.chunk.js": "./static/js/1711.dfdfce0a.chunk.js",
|
||||
"static/js/9.caa73b0e.chunk.js": "./static/js/9.caa73b0e.chunk.js",
|
||||
"static/js/4487.8cae9359.chunk.js": "./static/js/4487.8cae9359.chunk.js",
|
||||
"static/js/6866.a519feef.chunk.js": "./static/js/6866.a519feef.chunk.js",
|
||||
"static/js/8564.16b674dd.chunk.js": "./static/js/8564.16b674dd.chunk.js",
|
||||
"static/js/1666.9098f0d4.chunk.js": "./static/js/1666.9098f0d4.chunk.js",
|
||||
"static/js/7007.d9ef3b97.chunk.js": "./static/js/7007.d9ef3b97.chunk.js",
|
||||
"static/js/1711.2657a246.chunk.js": "./static/js/1711.2657a246.chunk.js",
|
||||
"static/js/9.a243680e.chunk.js": "./static/js/9.a243680e.chunk.js",
|
||||
"static/js/4487.8631b03a.chunk.js": "./static/js/4487.8631b03a.chunk.js",
|
||||
"static/js/6866.08dfeb70.chunk.js": "./static/js/6866.08dfeb70.chunk.js",
|
||||
"static/js/8564.efb201a4.chunk.js": "./static/js/8564.efb201a4.chunk.js",
|
||||
"static/js/1666.d207aa88.chunk.js": "./static/js/1666.d207aa88.chunk.js",
|
||||
"static/js/7007.14937910.chunk.js": "./static/js/7007.14937910.chunk.js",
|
||||
"static/js/14.25ecb28d.chunk.js": "./static/js/14.25ecb28d.chunk.js",
|
||||
"static/js/3152.d03e4df4.chunk.js": "./static/js/3152.d03e4df4.chunk.js",
|
||||
"static/js/2066.16320a68.chunk.js": "./static/js/2066.16320a68.chunk.js",
|
||||
@@ -147,125 +148,126 @@
|
||||
"static/js/6554.53f930ae.chunk.js": "./static/js/6554.53f930ae.chunk.js",
|
||||
"static/js/9831.1b5a6bb6.chunk.js": "./static/js/9831.1b5a6bb6.chunk.js",
|
||||
"static/js/9382.581734f3.chunk.js": "./static/js/9382.581734f3.chunk.js",
|
||||
"static/js/8174.6e95ea0c.chunk.js": "./static/js/8174.6e95ea0c.chunk.js",
|
||||
"static/js/1116.824f2d28.chunk.js": "./static/js/1116.824f2d28.chunk.js",
|
||||
"static/js/6430.e747de7c.chunk.js": "./static/js/6430.e747de7c.chunk.js",
|
||||
"static/js/4966.c825dc1c.chunk.js": "./static/js/4966.c825dc1c.chunk.js",
|
||||
"static/js/2363.5fc6aebe.chunk.js": "./static/js/2363.5fc6aebe.chunk.js",
|
||||
"static/js/2464.ea29031c.chunk.js": "./static/js/2464.ea29031c.chunk.js",
|
||||
"static/js/7520.609b689b.chunk.js": "./static/js/7520.609b689b.chunk.js",
|
||||
"static/js/8174.c861b202.chunk.js": "./static/js/8174.c861b202.chunk.js",
|
||||
"static/js/1116.3ac451e2.chunk.js": "./static/js/1116.3ac451e2.chunk.js",
|
||||
"static/js/1296.566439b0.chunk.js": "./static/js/1296.566439b0.chunk.js",
|
||||
"static/js/6430.2fc358b0.chunk.js": "./static/js/6430.2fc358b0.chunk.js",
|
||||
"static/js/2363.eb05fc0a.chunk.js": "./static/js/2363.eb05fc0a.chunk.js",
|
||||
"static/js/2464.7d37692f.chunk.js": "./static/js/2464.7d37692f.chunk.js",
|
||||
"static/js/7520.a0deee21.chunk.js": "./static/js/7520.a0deee21.chunk.js",
|
||||
"index.html": "./index.html",
|
||||
"main.90d417ae.css.map": "./static/css/main.90d417ae.css.map",
|
||||
"main.fd4d26b1.js.map": "./static/js/main.fd4d26b1.js.map",
|
||||
"1660.1a3b5397.chunk.js.map": "./static/js/1660.1a3b5397.chunk.js.map",
|
||||
"main.1bb3fb60.js.map": "./static/js/main.1bb3fb60.js.map",
|
||||
"1660.3421b1d3.chunk.js.map": "./static/js/1660.3421b1d3.chunk.js.map",
|
||||
"5282.cb13b8c4.chunk.js.map": "./static/js/5282.cb13b8c4.chunk.js.map",
|
||||
"2818.21be97b7.chunk.js.map": "./static/js/2818.21be97b7.chunk.js.map",
|
||||
"9560.bf1e7276.chunk.js.map": "./static/js/9560.bf1e7276.chunk.js.map",
|
||||
"9661.1e636902.chunk.js.map": "./static/js/9661.1e636902.chunk.js.map",
|
||||
"9330.ea489cb0.chunk.js.map": "./static/js/9330.ea489cb0.chunk.js.map",
|
||||
"7436.d9fafb61.chunk.js.map": "./static/js/7436.d9fafb61.chunk.js.map",
|
||||
"8428.d94dd7f0.chunk.js.map": "./static/js/8428.d94dd7f0.chunk.js.map",
|
||||
"9779.868ea932.chunk.js.map": "./static/js/9779.868ea932.chunk.js.map",
|
||||
"3617.c5deb048.chunk.js.map": "./static/js/3617.c5deb048.chunk.js.map",
|
||||
"7274.5c2a8fde.chunk.js.map": "./static/js/7274.5c2a8fde.chunk.js.map",
|
||||
"7842.151c41a8.chunk.js.map": "./static/js/7842.151c41a8.chunk.js.map",
|
||||
"4745.3fab4951.chunk.js.map": "./static/js/4745.3fab4951.chunk.js.map",
|
||||
"1796.840a4e41.chunk.js.map": "./static/js/1796.840a4e41.chunk.js.map",
|
||||
"8259.7c8fbb38.chunk.js.map": "./static/js/8259.7c8fbb38.chunk.js.map",
|
||||
"6023.d2f6ea4d.chunk.js.map": "./static/js/6023.d2f6ea4d.chunk.js.map",
|
||||
"6147.f2a7d841.chunk.js.map": "./static/js/6147.f2a7d841.chunk.js.map",
|
||||
"9275.2fec5cc7.chunk.js.map": "./static/js/9275.2fec5cc7.chunk.js.map",
|
||||
"8190.13d7b7e6.chunk.js.map": "./static/js/8190.13d7b7e6.chunk.js.map",
|
||||
"7314.01eaeb0f.chunk.js.map": "./static/js/7314.01eaeb0f.chunk.js.map",
|
||||
"7456.e2ad891d.chunk.js.map": "./static/js/7456.e2ad891d.chunk.js.map",
|
||||
"2818.c0f03eba.chunk.js.map": "./static/js/2818.c0f03eba.chunk.js.map",
|
||||
"9560.f2ba1718.chunk.js.map": "./static/js/9560.f2ba1718.chunk.js.map",
|
||||
"9661.4c7a22fb.chunk.js.map": "./static/js/9661.4c7a22fb.chunk.js.map",
|
||||
"9330.e6ac3543.chunk.js.map": "./static/js/9330.e6ac3543.chunk.js.map",
|
||||
"7436.318091b1.chunk.js.map": "./static/js/7436.318091b1.chunk.js.map",
|
||||
"8428.428b783d.chunk.js.map": "./static/js/8428.428b783d.chunk.js.map",
|
||||
"9779.6e9dc0a5.chunk.js.map": "./static/js/9779.6e9dc0a5.chunk.js.map",
|
||||
"3617.f650b975.chunk.js.map": "./static/js/3617.f650b975.chunk.js.map",
|
||||
"7274.06bad40d.chunk.js.map": "./static/js/7274.06bad40d.chunk.js.map",
|
||||
"7842.b4e66936.chunk.js.map": "./static/js/7842.b4e66936.chunk.js.map",
|
||||
"4745.8fd307b8.chunk.js.map": "./static/js/4745.8fd307b8.chunk.js.map",
|
||||
"1796.78eb9602.chunk.js.map": "./static/js/1796.78eb9602.chunk.js.map",
|
||||
"8259.cfeb6efe.chunk.js.map": "./static/js/8259.cfeb6efe.chunk.js.map",
|
||||
"6023.cc494962.chunk.js.map": "./static/js/6023.cc494962.chunk.js.map",
|
||||
"6147.d0d2ef6f.chunk.js.map": "./static/js/6147.d0d2ef6f.chunk.js.map",
|
||||
"9275.53928a1e.chunk.js.map": "./static/js/9275.53928a1e.chunk.js.map",
|
||||
"8190.37ec01c3.chunk.js.map": "./static/js/8190.37ec01c3.chunk.js.map",
|
||||
"7314.8d7e9d5d.chunk.js.map": "./static/js/7314.8d7e9d5d.chunk.js.map",
|
||||
"7456.5b6965d0.chunk.js.map": "./static/js/7456.5b6965d0.chunk.js.map",
|
||||
"5822.dd80c1b6.chunk.css.map": "./static/css/5822.dd80c1b6.chunk.css.map",
|
||||
"5822.fa49be62.chunk.js.map": "./static/js/5822.fa49be62.chunk.js.map",
|
||||
"2699.3102be0f.chunk.js.map": "./static/js/2699.3102be0f.chunk.js.map",
|
||||
"5808.8da21793.chunk.js.map": "./static/js/5808.8da21793.chunk.js.map",
|
||||
"5822.2e5ca929.chunk.js.map": "./static/js/5822.2e5ca929.chunk.js.map",
|
||||
"2699.4954d948.chunk.js.map": "./static/js/2699.4954d948.chunk.js.map",
|
||||
"5808.d0d08e62.chunk.js.map": "./static/js/5808.d0d08e62.chunk.js.map",
|
||||
"1237.b46ec019.chunk.js.map": "./static/js/1237.b46ec019.chunk.js.map",
|
||||
"189.06df2d49.chunk.js.map": "./static/js/189.06df2d49.chunk.js.map",
|
||||
"189.f0f79745.chunk.js.map": "./static/js/189.f0f79745.chunk.js.map",
|
||||
"964.dd80c1b6.chunk.css.map": "./static/css/964.dd80c1b6.chunk.css.map",
|
||||
"964.c1751e75.chunk.js.map": "./static/js/964.c1751e75.chunk.js.map",
|
||||
"964.4083c9c4.chunk.js.map": "./static/js/964.4083c9c4.chunk.js.map",
|
||||
"9807.dd80c1b6.chunk.css.map": "./static/css/9807.dd80c1b6.chunk.css.map",
|
||||
"9807.ee1a2bdb.chunk.js.map": "./static/js/9807.ee1a2bdb.chunk.js.map",
|
||||
"3806.8464efb7.chunk.js.map": "./static/js/3806.8464efb7.chunk.js.map",
|
||||
"8661.e8f2397f.chunk.js.map": "./static/js/8661.e8f2397f.chunk.js.map",
|
||||
"2886.92b60a3b.chunk.js.map": "./static/js/2886.92b60a3b.chunk.js.map",
|
||||
"4577.cd5b16fc.chunk.js.map": "./static/js/4577.cd5b16fc.chunk.js.map",
|
||||
"4298.e6c437dd.chunk.js.map": "./static/js/4298.e6c437dd.chunk.js.map",
|
||||
"9807.bb735f71.chunk.js.map": "./static/js/9807.bb735f71.chunk.js.map",
|
||||
"3806.3f0f185b.chunk.js.map": "./static/js/3806.3f0f185b.chunk.js.map",
|
||||
"8661.4f560fbb.chunk.js.map": "./static/js/8661.4f560fbb.chunk.js.map",
|
||||
"2886.7fb64ae7.chunk.js.map": "./static/js/2886.7fb64ae7.chunk.js.map",
|
||||
"4577.3e6de606.chunk.js.map": "./static/js/4577.3e6de606.chunk.js.map",
|
||||
"4298.2fa3347c.chunk.js.map": "./static/js/4298.2fa3347c.chunk.js.map",
|
||||
"2805.b4302353.chunk.js.map": "./static/js/2805.b4302353.chunk.js.map",
|
||||
"6873.27fbf284.chunk.js.map": "./static/js/6873.27fbf284.chunk.js.map",
|
||||
"428.ad58c353.chunk.js.map": "./static/js/428.ad58c353.chunk.js.map",
|
||||
"1069.77bb316e.chunk.js.map": "./static/js/1069.77bb316e.chunk.js.map",
|
||||
"9080.d84213b3.chunk.js.map": "./static/js/9080.d84213b3.chunk.js.map",
|
||||
"3276.1afa9e35.chunk.js.map": "./static/js/3276.1afa9e35.chunk.js.map",
|
||||
"6458.c6bf60f8.chunk.js.map": "./static/js/6458.c6bf60f8.chunk.js.map",
|
||||
"7551.b8d5fd21.chunk.js.map": "./static/js/7551.b8d5fd21.chunk.js.map",
|
||||
"7950.0e4eac80.chunk.js.map": "./static/js/7950.0e4eac80.chunk.js.map",
|
||||
"290.8bfc0b83.chunk.js.map": "./static/js/290.8bfc0b83.chunk.js.map",
|
||||
"8961.37cf027e.chunk.js.map": "./static/js/8961.37cf027e.chunk.js.map",
|
||||
"3967.2cb35507.chunk.js.map": "./static/js/3967.2cb35507.chunk.js.map",
|
||||
"1069.deaa3eb0.chunk.js.map": "./static/js/1069.deaa3eb0.chunk.js.map",
|
||||
"9080.ec6f0469.chunk.js.map": "./static/js/9080.ec6f0469.chunk.js.map",
|
||||
"3276.ef1e5b52.chunk.js.map": "./static/js/3276.ef1e5b52.chunk.js.map",
|
||||
"6458.c39b77e2.chunk.js.map": "./static/js/6458.c39b77e2.chunk.js.map",
|
||||
"6973.aa8569ff.chunk.js.map": "./static/js/6973.aa8569ff.chunk.js.map",
|
||||
"7551.6040d86d.chunk.js.map": "./static/js/7551.6040d86d.chunk.js.map",
|
||||
"7950.f9de3165.chunk.js.map": "./static/js/7950.f9de3165.chunk.js.map",
|
||||
"3575.b8f7afc0.chunk.js.map": "./static/js/3575.b8f7afc0.chunk.js.map",
|
||||
"8961.ab396d91.chunk.js.map": "./static/js/8961.ab396d91.chunk.js.map",
|
||||
"3967.689e32b8.chunk.js.map": "./static/js/3967.689e32b8.chunk.js.map",
|
||||
"4084.dd80c1b6.chunk.css.map": "./static/css/4084.dd80c1b6.chunk.css.map",
|
||||
"4084.34cce774.chunk.js.map": "./static/js/4084.34cce774.chunk.js.map",
|
||||
"8394.fa043a82.chunk.js.map": "./static/js/8394.fa043a82.chunk.js.map",
|
||||
"7664.b099b462.chunk.js.map": "./static/js/7664.b099b462.chunk.js.map",
|
||||
"1140.ab5579e6.chunk.js.map": "./static/js/1140.ab5579e6.chunk.js.map",
|
||||
"5961.7a71f2c5.chunk.js.map": "./static/js/5961.7a71f2c5.chunk.js.map",
|
||||
"4084.bb2e5658.chunk.js.map": "./static/js/4084.bb2e5658.chunk.js.map",
|
||||
"8394.83c40291.chunk.js.map": "./static/js/8394.83c40291.chunk.js.map",
|
||||
"7664.07c56295.chunk.js.map": "./static/js/7664.07c56295.chunk.js.map",
|
||||
"1140.f3c8431a.chunk.js.map": "./static/js/1140.f3c8431a.chunk.js.map",
|
||||
"5961.6a63abf6.chunk.js.map": "./static/js/5961.6a63abf6.chunk.js.map",
|
||||
"2401.dcfa0659.chunk.js.map": "./static/js/2401.dcfa0659.chunk.js.map",
|
||||
"7498.adcacaca.chunk.js.map": "./static/js/7498.adcacaca.chunk.js.map",
|
||||
"9421.a6974f61.chunk.js.map": "./static/js/9421.a6974f61.chunk.js.map",
|
||||
"4860.3bea7736.chunk.js.map": "./static/js/4860.3bea7736.chunk.js.map",
|
||||
"5245.04e84402.chunk.js.map": "./static/js/5245.04e84402.chunk.js.map",
|
||||
"6549.bc76401b.chunk.js.map": "./static/js/6549.bc76401b.chunk.js.map",
|
||||
"7498.629a64a4.chunk.js.map": "./static/js/7498.629a64a4.chunk.js.map",
|
||||
"9421.5b5d9937.chunk.js.map": "./static/js/9421.5b5d9937.chunk.js.map",
|
||||
"4860.dee4560c.chunk.js.map": "./static/js/4860.dee4560c.chunk.js.map",
|
||||
"5245.884da645.chunk.js.map": "./static/js/5245.884da645.chunk.js.map",
|
||||
"6549.7e3c2603.chunk.js.map": "./static/js/6549.7e3c2603.chunk.js.map",
|
||||
"8724.dd80c1b6.chunk.css.map": "./static/css/8724.dd80c1b6.chunk.css.map",
|
||||
"8724.2fda7628.chunk.js.map": "./static/js/8724.2fda7628.chunk.js.map",
|
||||
"2182.45ee7ad0.chunk.js.map": "./static/js/2182.45ee7ad0.chunk.js.map",
|
||||
"8724.6112baf2.chunk.js.map": "./static/js/8724.6112baf2.chunk.js.map",
|
||||
"2182.ac6bf5cd.chunk.js.map": "./static/js/2182.ac6bf5cd.chunk.js.map",
|
||||
"7764.7133a78a.chunk.js.map": "./static/js/7764.7133a78a.chunk.js.map",
|
||||
"4220.8d9a9028.chunk.js.map": "./static/js/4220.8d9a9028.chunk.js.map",
|
||||
"1719.a1c5fbc9.chunk.js.map": "./static/js/1719.a1c5fbc9.chunk.js.map",
|
||||
"3320.cf0913be.chunk.js.map": "./static/js/3320.cf0913be.chunk.js.map",
|
||||
"4220.4e76aa0b.chunk.js.map": "./static/js/4220.4e76aa0b.chunk.js.map",
|
||||
"1719.e7bff050.chunk.js.map": "./static/js/1719.e7bff050.chunk.js.map",
|
||||
"3320.8bb47140.chunk.js.map": "./static/js/3320.8bb47140.chunk.js.map",
|
||||
"6645.1d65ce48.chunk.js.map": "./static/js/6645.1d65ce48.chunk.js.map",
|
||||
"9923.3911a310.chunk.js.map": "./static/js/9923.3911a310.chunk.js.map",
|
||||
"9586.f3d3466d.chunk.js.map": "./static/js/9586.f3d3466d.chunk.js.map",
|
||||
"9125.a86e3119.chunk.js.map": "./static/js/9125.a86e3119.chunk.js.map",
|
||||
"5781.33738b7f.chunk.js.map": "./static/js/5781.33738b7f.chunk.js.map",
|
||||
"7261.916fdbf6.chunk.js.map": "./static/js/7261.916fdbf6.chunk.js.map",
|
||||
"7261.5c17f33b.chunk.js.map": "./static/js/7261.5c17f33b.chunk.js.map",
|
||||
"8306.047e9e54.chunk.js.map": "./static/js/8306.047e9e54.chunk.js.map",
|
||||
"6436.690eb2b9.chunk.js.map": "./static/js/6436.690eb2b9.chunk.js.map",
|
||||
"6436.9bc8fe43.chunk.js.map": "./static/js/6436.9bc8fe43.chunk.js.map",
|
||||
"8343.67a940b1.chunk.js.map": "./static/js/8343.67a940b1.chunk.js.map",
|
||||
"2841.9d475dfe.chunk.js.map": "./static/js/2841.9d475dfe.chunk.js.map",
|
||||
"6167.d5f52864.chunk.js.map": "./static/js/6167.d5f52864.chunk.js.map",
|
||||
"7346.47702cc8.chunk.js.map": "./static/js/7346.47702cc8.chunk.js.map",
|
||||
"2841.b0b47c73.chunk.js.map": "./static/js/2841.b0b47c73.chunk.js.map",
|
||||
"6167.63825f7e.chunk.js.map": "./static/js/6167.63825f7e.chunk.js.map",
|
||||
"7346.be91e98c.chunk.js.map": "./static/js/7346.be91e98c.chunk.js.map",
|
||||
"5144.19c094a4.chunk.js.map": "./static/js/5144.19c094a4.chunk.js.map",
|
||||
"5125.58c2feff.chunk.js.map": "./static/js/5125.58c2feff.chunk.js.map",
|
||||
"528.d01b02af.chunk.js.map": "./static/js/528.d01b02af.chunk.js.map",
|
||||
"528.9bb66bbe.chunk.js.map": "./static/js/528.9bb66bbe.chunk.js.map",
|
||||
"7187.171b28f4.chunk.js.map": "./static/js/7187.171b28f4.chunk.js.map",
|
||||
"6173.925ab9b7.chunk.js.map": "./static/js/6173.925ab9b7.chunk.js.map",
|
||||
"953.677ddb95.chunk.js.map": "./static/js/953.677ddb95.chunk.js.map",
|
||||
"9193.feaac1ba.chunk.js.map": "./static/js/9193.feaac1ba.chunk.js.map",
|
||||
"6173.f2666144.chunk.js.map": "./static/js/6173.f2666144.chunk.js.map",
|
||||
"953.163e31bc.chunk.js.map": "./static/js/953.163e31bc.chunk.js.map",
|
||||
"9193.7b929008.chunk.js.map": "./static/js/9193.7b929008.chunk.js.map",
|
||||
"7451.dabaf18f.chunk.js.map": "./static/js/7451.dabaf18f.chunk.js.map",
|
||||
"9924.020057ee.chunk.js.map": "./static/js/9924.020057ee.chunk.js.map",
|
||||
"9924.22b7a131.chunk.js.map": "./static/js/9924.22b7a131.chunk.js.map",
|
||||
"9645.dd80c1b6.chunk.css.map": "./static/css/9645.dd80c1b6.chunk.css.map",
|
||||
"9645.71cc858a.chunk.js.map": "./static/js/9645.71cc858a.chunk.js.map",
|
||||
"5710.7386de50.chunk.js.map": "./static/js/5710.7386de50.chunk.js.map",
|
||||
"4121.0e3d5ae5.chunk.js.map": "./static/js/4121.0e3d5ae5.chunk.js.map",
|
||||
"3421.666af5cb.chunk.js.map": "./static/js/3421.666af5cb.chunk.js.map",
|
||||
"2892.f87668de.chunk.js.map": "./static/js/2892.f87668de.chunk.js.map",
|
||||
"7926.c65ecfc3.chunk.js.map": "./static/js/7926.c65ecfc3.chunk.js.map",
|
||||
"6145.9665a7b2.chunk.js.map": "./static/js/6145.9665a7b2.chunk.js.map",
|
||||
"9645.7cc9e705.chunk.js.map": "./static/js/9645.7cc9e705.chunk.js.map",
|
||||
"5710.bbaa8215.chunk.js.map": "./static/js/5710.bbaa8215.chunk.js.map",
|
||||
"4121.c824f4ac.chunk.js.map": "./static/js/4121.c824f4ac.chunk.js.map",
|
||||
"3421.53573188.chunk.js.map": "./static/js/3421.53573188.chunk.js.map",
|
||||
"2892.076d9a7f.chunk.js.map": "./static/js/2892.076d9a7f.chunk.js.map",
|
||||
"7926.75e27e9b.chunk.js.map": "./static/js/7926.75e27e9b.chunk.js.map",
|
||||
"6145.82597755.chunk.js.map": "./static/js/6145.82597755.chunk.js.map",
|
||||
"3816.dd80c1b6.chunk.css.map": "./static/css/3816.dd80c1b6.chunk.css.map",
|
||||
"3816.c0b2fb6b.chunk.js.map": "./static/js/3816.c0b2fb6b.chunk.js.map",
|
||||
"2966.0b278e3b.chunk.js.map": "./static/js/2966.0b278e3b.chunk.js.map",
|
||||
"4177.381caad6.chunk.js.map": "./static/js/4177.381caad6.chunk.js.map",
|
||||
"9679.c1fd0ae5.chunk.js.map": "./static/js/9679.c1fd0ae5.chunk.js.map",
|
||||
"3816.ebc07860.chunk.js.map": "./static/js/3816.ebc07860.chunk.js.map",
|
||||
"2966.ced4dcf6.chunk.js.map": "./static/js/2966.ced4dcf6.chunk.js.map",
|
||||
"4177.6d04f760.chunk.js.map": "./static/js/4177.6d04f760.chunk.js.map",
|
||||
"9679.d9cbab57.chunk.js.map": "./static/js/9679.d9cbab57.chunk.js.map",
|
||||
"8333.d2ede110.chunk.js.map": "./static/js/8333.d2ede110.chunk.js.map",
|
||||
"1711.dfdfce0a.chunk.js.map": "./static/js/1711.dfdfce0a.chunk.js.map",
|
||||
"9.caa73b0e.chunk.js.map": "./static/js/9.caa73b0e.chunk.js.map",
|
||||
"4487.8cae9359.chunk.js.map": "./static/js/4487.8cae9359.chunk.js.map",
|
||||
"6866.a519feef.chunk.js.map": "./static/js/6866.a519feef.chunk.js.map",
|
||||
"8564.16b674dd.chunk.js.map": "./static/js/8564.16b674dd.chunk.js.map",
|
||||
"1666.9098f0d4.chunk.js.map": "./static/js/1666.9098f0d4.chunk.js.map",
|
||||
"7007.d9ef3b97.chunk.js.map": "./static/js/7007.d9ef3b97.chunk.js.map",
|
||||
"1711.2657a246.chunk.js.map": "./static/js/1711.2657a246.chunk.js.map",
|
||||
"9.a243680e.chunk.js.map": "./static/js/9.a243680e.chunk.js.map",
|
||||
"4487.8631b03a.chunk.js.map": "./static/js/4487.8631b03a.chunk.js.map",
|
||||
"6866.08dfeb70.chunk.js.map": "./static/js/6866.08dfeb70.chunk.js.map",
|
||||
"8564.efb201a4.chunk.js.map": "./static/js/8564.efb201a4.chunk.js.map",
|
||||
"1666.d207aa88.chunk.js.map": "./static/js/1666.d207aa88.chunk.js.map",
|
||||
"7007.14937910.chunk.js.map": "./static/js/7007.14937910.chunk.js.map",
|
||||
"14.25ecb28d.chunk.js.map": "./static/js/14.25ecb28d.chunk.js.map",
|
||||
"3152.d03e4df4.chunk.js.map": "./static/js/3152.d03e4df4.chunk.js.map",
|
||||
"2066.16320a68.chunk.js.map": "./static/js/2066.16320a68.chunk.js.map",
|
||||
@@ -302,16 +304,16 @@
|
||||
"6554.53f930ae.chunk.js.map": "./static/js/6554.53f930ae.chunk.js.map",
|
||||
"9831.1b5a6bb6.chunk.js.map": "./static/js/9831.1b5a6bb6.chunk.js.map",
|
||||
"9382.581734f3.chunk.js.map": "./static/js/9382.581734f3.chunk.js.map",
|
||||
"8174.6e95ea0c.chunk.js.map": "./static/js/8174.6e95ea0c.chunk.js.map",
|
||||
"1116.824f2d28.chunk.js.map": "./static/js/1116.824f2d28.chunk.js.map",
|
||||
"6430.e747de7c.chunk.js.map": "./static/js/6430.e747de7c.chunk.js.map",
|
||||
"4966.c825dc1c.chunk.js.map": "./static/js/4966.c825dc1c.chunk.js.map",
|
||||
"2363.5fc6aebe.chunk.js.map": "./static/js/2363.5fc6aebe.chunk.js.map",
|
||||
"2464.ea29031c.chunk.js.map": "./static/js/2464.ea29031c.chunk.js.map",
|
||||
"7520.609b689b.chunk.js.map": "./static/js/7520.609b689b.chunk.js.map"
|
||||
"8174.c861b202.chunk.js.map": "./static/js/8174.c861b202.chunk.js.map",
|
||||
"1116.3ac451e2.chunk.js.map": "./static/js/1116.3ac451e2.chunk.js.map",
|
||||
"1296.566439b0.chunk.js.map": "./static/js/1296.566439b0.chunk.js.map",
|
||||
"6430.2fc358b0.chunk.js.map": "./static/js/6430.2fc358b0.chunk.js.map",
|
||||
"2363.eb05fc0a.chunk.js.map": "./static/js/2363.eb05fc0a.chunk.js.map",
|
||||
"2464.7d37692f.chunk.js.map": "./static/js/2464.7d37692f.chunk.js.map",
|
||||
"7520.a0deee21.chunk.js.map": "./static/js/7520.a0deee21.chunk.js.map"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/css/main.90d417ae.css",
|
||||
"static/js/main.fd4d26b1.js"
|
||||
"static/js/main.1bb3fb60.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.fd4d26b1.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.1bb3fb60.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/1069.deaa3eb0.chunk.js
Normal file
2
portal-ui/build/static/js/1069.deaa3eb0.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1069.deaa3eb0.chunk.js.map
Normal file
1
portal-ui/build/static/js/1069.deaa3eb0.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
@@ -1,2 +0,0 @@
|
||||
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1140],{39080:function(e,n,t){t.r(n),t.d(n,{default:function(){return w}});var i=t(18489),r=t(50390),a=t(38342),s=t.n(a),l=t(86509),o=t(4285),c=t(66946),d=t(51002),u=t(25594),m=t(58217),h=t(65771),p=t(70758),x=t(33034),y=t.n(x),g=t(86362),f=t(72462),v=t(62559),j=(0,o.Z)((function(e){return(0,l.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},f.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var n=e.label,t=void 0===n?"":n,i=e.value,r=void 0===i?"":i,a=e.classes,s=void 0===a?{}:a;return(0,v.jsxs)("div",{className:s.container,children:[(0,v.jsxs)("div",{className:s.inputLabel,children:[t,":"]}),(0,v.jsx)("div",{className:s.inputWithCopy,children:(0,v.jsx)(m.Z,{value:r,readOnly:!0,endAdornment:(0,v.jsx)(h.Z,{position:"end",children:(0,v.jsx)(y(),{text:r,children:(0,v.jsx)(p.Z,{"aria-label":"copy",tooltip:"Copy",onClick:function(){},onMouseDown:function(){},edge:"end",children:(0,v.jsx)(g.TI,{})})})})})})]})})),b=t(47424),w=(0,o.Z)((function(e){return(0,l.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{textAlign:"right",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"},promptIcon:{marginRight:".1rem",display:"flex",alignItems:"center",height:"2rem",width:"2rem"}})}))((function(e){var n=e.classes,t=e.newServiceAccount,a=e.open,l=e.closeModal,o=e.entity;if(!t)return null;var m=s()(t,"console",null),h=s()(t,"idp",!1);return(0,v.jsx)(d.Z,{modalOpen:a,onClose:function(){l()},title:(0,v.jsx)("div",{className:n.promptTitle,children:(0,v.jsxs)("div",{children:["New ",o," Created"]})}),titleIcon:(0,v.jsx)(g.tV,{}),children:(0,v.jsxs)(u.ZP,{container:!0,children:[(0,v.jsxs)(u.ZP,{item:!0,xs:12,className:n.formScrollable,children:["A new ",o," has been created with the following details:",!h&&m&&(0,v.jsx)(r.Fragment,{children:(0,v.jsxs)(u.ZP,{item:!0,xs:12,className:n.credentialsPanel,children:[(0,v.jsx)("div",{className:n.credentialTitle,children:"Console Credentials"}),Array.isArray(m)&&m.map((function(e,n){return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(j,{label:"Access Key",value:e.accessKey}),(0,v.jsx)(j,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(m)&&(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(j,{label:"Access Key",value:m.accessKey}),(0,v.jsx)(j,{label:"Secret Key",value:m.secretKey})]})]})}),h?(0,v.jsx)("div",{className:n.warningBlock,children:"Please Login via the configured external identity provider."}):(0,v.jsxs)("div",{className:n.warningBlock,children:[(0,v.jsx)(b.Z,{}),(0,v.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,v.jsxs)(u.ZP,{item:!0,xs:12,className:n.buttonContainer,children:[(0,v.jsx)(c.Z,{id:"done-button",variant:"outlined",className:n.buttonSpacer,onClick:function(){l()},color:"primary",children:"Done"}),!h&&(0,v.jsx)(c.Z,{id:"download-button",onClick:function(){var e={};m&&(e=Array.isArray(m)?m.map((function(e){return{url:e.url,accessKey:e.accessKey,secretKey:e.secretKey,api:"s3v4",path:"auto"}}))[0]:{url:m.url,accessKey:m.accessKey,secretKey:m.secretKey,api:"s3v4",path:"auto"});!function(e,n){var t=document.createElement("a");t.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(n)),t.setAttribute("download",e),t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t)}("credentials.json",JSON.stringify((0,i.Z)({},e)))},endIcon:(0,v.jsx)(g._8,{}),variant:"contained",color:"primary",children:"Download"})]})]})})}))}}]);
|
||||
//# sourceMappingURL=1140.ab5579e6.chunk.js.map
|
||||
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/1140.f3c8431a.chunk.js
Normal file
2
portal-ui/build/static/js/1140.f3c8431a.chunk.js
Normal file
@@ -0,0 +1,2 @@
|
||||
"use strict";(self.webpackChunkportal_ui=self.webpackChunkportal_ui||[]).push([[1140],{39080:function(e,t,n){n.r(t),n.d(t,{default:function(){return K}});var i=n(18489),r=n(50390),a=n(38342),s=n.n(a),l=n(86509),o=n(4285),c=n(51002),d=n(25594),u=n(58217),m=n(65771),p=n(70758),h=n(33034),y=n.n(h),x=n(14549),f=n(72462),g=n(62559),j=(0,o.Z)((function(e){return(0,l.Z)({container:{display:"flex",flexFlow:"column",padding:"20px 0 8px 0"},inputWithCopy:{"& .MuiInputBase-root ":{width:"100%",background:"#FBFAFA","& .MuiInputBase-input":{height:".8rem"},"& .MuiInputAdornment-positionEnd":{marginRight:".5rem","& .MuiButtonBase-root":{height:"2rem"}}},"& .MuiButtonBase-root .min-icon":{width:".8rem",height:".8rem"}},inputLabel:(0,i.Z)((0,i.Z)({},f.YI.inputLabel),{},{fontSize:".8rem"})})}))((function(e){var t=e.label,n=void 0===t?"":t,i=e.value,r=void 0===i?"":i,a=e.classes,s=void 0===a?{}:a;return(0,g.jsxs)("div",{className:s.container,children:[(0,g.jsxs)("div",{className:s.inputLabel,children:[n,":"]}),(0,g.jsx)("div",{className:s.inputWithCopy,children:(0,g.jsx)(u.Z,{value:r,readOnly:!0,endAdornment:(0,g.jsx)(m.Z,{position:"end",children:(0,g.jsx)(y(),{text:r,children:(0,g.jsx)(p.Z,{"aria-label":"copy",tooltip:"Copy",onClick:function(){},onMouseDown:function(){},edge:"end",children:(0,g.jsx)(x.TI,{})})})})})})]})})),v=n(47424),w=n(53224),b=function(e,t){var n=document.createElement("a");n.setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)},K=(0,o.Z)((function(e){return(0,l.Z)({warningBlock:{color:"red",fontSize:".85rem",margin:".5rem 0 .5rem 0",display:"flex",alignItems:"center","& svg ":{marginRight:".3rem",height:16,width:16}},credentialTitle:{padding:".8rem 0 0 0",fontWeight:600,fontSize:".9rem"},buttonContainer:{textAlign:"right",marginTop:"1rem"},credentialsPanel:{overflowY:"auto",maxHeight:350},promptTitle:{display:"flex",alignItems:"center"},buttonSpacer:{marginRight:".9rem"},promptIcon:{marginRight:".1rem",display:"flex",alignItems:"center",height:"2rem",width:"2rem"}})}))((function(e){var t=e.classes,n=e.newServiceAccount,a=e.open,l=e.closeModal,o=e.entity;if(!n)return null;var u=s()(n,"console",null),m=s()(n,"idp",!1);return(0,g.jsx)(c.Z,{modalOpen:a,onClose:function(){l()},title:(0,g.jsx)("div",{className:t.promptTitle,children:(0,g.jsxs)("div",{children:["New ",o," Created"]})}),titleIcon:(0,g.jsx)(x.tV,{}),children:(0,g.jsxs)(d.ZP,{container:!0,children:[(0,g.jsxs)(d.ZP,{item:!0,xs:12,className:t.formScrollable,children:["A new ",o," has been created with the following details:",!m&&u&&(0,g.jsx)(r.Fragment,{children:(0,g.jsxs)(d.ZP,{item:!0,xs:12,className:t.credentialsPanel,children:[(0,g.jsx)("div",{className:t.credentialTitle,children:"Console Credentials"}),Array.isArray(u)&&u.map((function(e,t){return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(j,{label:"Access Key",value:e.accessKey}),(0,g.jsx)(j,{label:"Secret Key",value:e.secretKey})]})})),!Array.isArray(u)&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(j,{label:"Access Key",value:u.accessKey}),(0,g.jsx)(j,{label:"Secret Key",value:u.secretKey})]})]})}),m?(0,g.jsx)("div",{className:t.warningBlock,children:"Please Login via the configured external identity provider."}):(0,g.jsxs)("div",{className:t.warningBlock,children:[(0,g.jsx)(v.Z,{}),(0,g.jsx)("span",{children:"Write these down, as this is the only time the secret will be displayed."})]})]}),(0,g.jsx)(d.ZP,{item:!0,xs:12,className:t.buttonContainer,children:!m&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(w.Z,{id:"download-button",tooltip:"Download credentials in a JSON file formatted for import using mc alias import. This will only include the default login credentials.",text:"Download for import",className:t.buttonSpacer,onClick:function(){var e={};u&&(e=Array.isArray(u)?u.map((function(e){return{url:e.url,accessKey:e.accessKey,secretKey:e.secretKey,api:"s3v4",path:"auto"}}))[0]:{url:u.url,accessKey:u.accessKey,secretKey:u.secretKey,api:"s3v4",path:"auto"});b("credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(x._8,{}),variant:"contained",color:"primary"}),Array.isArray(u)&&u.length>1&&(0,g.jsx)(w.Z,{id:"download-all-button",tooltip:"Download all access credentials to a JSON file. NOTE: This file is not formatted for import using mc alias import. If you plan to import this alias from the file, please use the Download for Import button. ",text:"Download all access credentials",className:t.buttonSpacer,onClick:function(){var e={};u&&(e=u.map((function(e){return{accessKey:e.accessKey,secretKey:e.secretKey}})));b("all_credentials.json",JSON.stringify((0,i.Z)({},e)))},icon:(0,g.jsx)(x._8,{}),variant:"contained",color:"primary"})]})})]})})}))}}]);
|
||||
//# sourceMappingURL=1140.f3c8431a.chunk.js.map
|
||||
1
portal-ui/build/static/js/1140.f3c8431a.chunk.js.map
Normal file
1
portal-ui/build/static/js/1140.f3c8431a.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/1296.566439b0.chunk.js
Normal file
2
portal-ui/build/static/js/1296.566439b0.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1296.566439b0.chunk.js.map
Normal file
1
portal-ui/build/static/js/1296.566439b0.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
1
portal-ui/build/static/js/1666.d207aa88.chunk.js.map
Normal file
1
portal-ui/build/static/js/1666.d207aa88.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
1
portal-ui/build/static/js/1711.2657a246.chunk.js.map
Normal file
1
portal-ui/build/static/js/1711.2657a246.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
2
portal-ui/build/static/js/1796.78eb9602.chunk.js
Normal file
2
portal-ui/build/static/js/1796.78eb9602.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/1796.78eb9602.chunk.js.map
Normal file
1
portal-ui/build/static/js/1796.78eb9602.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
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/2182.ac6bf5cd.chunk.js
Normal file
2
portal-ui/build/static/js/2182.ac6bf5cd.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/2182.ac6bf5cd.chunk.js.map
Normal file
1
portal-ui/build/static/js/2182.ac6bf5cd.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
1
portal-ui/build/static/js/2363.eb05fc0a.chunk.js.map
Normal file
1
portal-ui/build/static/js/2363.eb05fc0a.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
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/2841.b0b47c73.chunk.js
Normal file
2
portal-ui/build/static/js/2841.b0b47c73.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/2841.b0b47c73.chunk.js.map
Normal file
1
portal-ui/build/static/js/2841.b0b47c73.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/2886.7fb64ae7.chunk.js
Normal file
2
portal-ui/build/static/js/2886.7fb64ae7.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/2886.7fb64ae7.chunk.js.map
Normal file
1
portal-ui/build/static/js/2886.7fb64ae7.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/2892.076d9a7f.chunk.js
Normal file
2
portal-ui/build/static/js/2892.076d9a7f.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/2892.076d9a7f.chunk.js.map
Normal file
1
portal-ui/build/static/js/2892.076d9a7f.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
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/2966.ced4dcf6.chunk.js.map
Normal file
1
portal-ui/build/static/js/2966.ced4dcf6.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/3276.ef1e5b52.chunk.js
Normal file
2
portal-ui/build/static/js/3276.ef1e5b52.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/3276.ef1e5b52.chunk.js.map
Normal file
1
portal-ui/build/static/js/3276.ef1e5b52.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
portal-ui/build/static/js/3320.8bb47140.chunk.js
Normal file
2
portal-ui/build/static/js/3320.8bb47140.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/3320.8bb47140.chunk.js.map
Normal file
1
portal-ui/build/static/js/3320.8bb47140.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/3575.b8f7afc0.chunk.js
Normal file
2
portal-ui/build/static/js/3575.b8f7afc0.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/3575.b8f7afc0.chunk.js.map
Normal file
1
portal-ui/build/static/js/3575.b8f7afc0.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/3617.f650b975.chunk.js
Normal file
2
portal-ui/build/static/js/3617.f650b975.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
portal-ui/build/static/js/3617.f650b975.chunk.js.map
Normal file
1
portal-ui/build/static/js/3617.f650b975.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
1
portal-ui/build/static/js/3806.3f0f185b.chunk.js.map
Normal file
1
portal-ui/build/static/js/3806.3f0f185b.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
2
portal-ui/build/static/js/3816.ebc07860.chunk.js
Normal file
2
portal-ui/build/static/js/3816.ebc07860.chunk.js
Normal file
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