Compare commits

..

14 Commits

Author SHA1 Message Date
Alex
4143f50004 Release v0.20.4 (#2337)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
2022-09-27 21:10:42 -07:00
Alex
d1511c5eb0 Limit concurrent downloads & uploads (#2313) 2022-09-23 10:35:55 -07:00
jinapurapu
c4c6d48abf Tooltips for Bucket Lifecycle, Delete bucket, Manage bucket (#2334) 2022-09-23 12:30:37 -05:00
Alex
43c5f9094a Tenant details navigation issues fix (#2336)
Fixes issues with Tenant details page navigation

- Back issue between tenant summary & tenants list page
- Not show the selected tab correctly on tenant details after clicking
back on browser's back button

Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
2022-09-23 12:30:18 -05:00
Javier Adriel
51ab9c59ae Update minio/pkg v1.4.0 (#2335) 2022-09-23 12:08:24 -05:00
Aditya Manthramurthy
fc95ab8658 Fix oauth state generation for OIDC login (#2333)
This is a regression from 118cf97e1d when
env var support for passing console configuration from MinIO was
removed.

This change ensures that all MinIO nodes in a cluster are able to verify
state tokens generated by other nodes in the cluster. Without this, it
is necessary to use sticky sessions in a loadbalancer to ensure that
OIDC authorization code login flow steps for a client happens on the
same minio node.

Fixes https://github.com/minio/minio/issues/15527
2022-09-23 10:30:45 -05:00
Daryl White
bebe860903 Updating documentation links to new URLs (#2325)
The new doc site has launched, and all docs have new URLs.
This PR updates the documentation URLs in the Console to point to the
new locations.
2022-09-22 22:37:32 -07:00
Kaan Kabalak
df4679ea55 Fix styling for Create New Path button in Buckets page (#2330)
Fixes #2329
2022-09-21 19:11:58 -05:00
Alex
2263eada70 Release v0.20.3 (#2328)
Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
2022-09-20 23:54:10 -07:00
Lenin Alevski
368c9ee3d7 InputBoxWrapper automatically add hide/show behavior for password fields (#2327)
Signed-off-by: Lenin Alevski <alevsk.8772@gmail.com>
2022-09-20 23:13:34 -05:00
jinapurapu
3513a01711 Add Bucket tooltip improvements (#2326) 2022-09-20 19:12:18 -07:00
Lenin Alevski
0af36a5757 Add: Allow to configure env variables during tenant creation (#2322)
Signed-off-by: Lenin Alevski <alevsk.8772@gmail.com>
2022-09-20 18:58:31 -05:00
Daniel Valdivia
fdd5a94074 Fix NPE on Operator Login with SSO (#2324)
Signed-off-by: Daniel Valdivia
2022-09-20 18:57:48 -05:00
Javier Adriel
17ad2cfd14 Add dummy endpoints for kms integration (#2301)
Add dummy endpoints for kms integration

Implementation will come in another PR
2022-09-20 16:09:30 -07:00
281 changed files with 11855 additions and 295 deletions

9
go.mod
View File

@@ -27,7 +27,7 @@ require (
github.com/minio/mc v0.0.0-20220818165341-8c239d16aa37
github.com/minio/minio-go/v7 v7.0.35
github.com/minio/operator v0.0.0-20220902184351-21e4073132b0
github.com/minio/pkg v1.3.2
github.com/minio/pkg v1.4.0
github.com/minio/selfupdate v0.5.0
github.com/mitchellh/go-homedir v1.1.0
github.com/rs/xid v1.4.0
@@ -129,7 +129,7 @@ require (
github.com/navidys/tvxwidgets v0.1.0 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pelletier/go-toml v1.9.3 // indirect
github.com/pelletier/go-toml v1.9.4 // indirect
github.com/philhofer/fwd v1.1.2-0.20210722190033-5c56ac6d0bb9 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pkg/xattr v0.4.5 // indirect
@@ -147,10 +147,10 @@ require (
github.com/shirou/gopsutil/v3 v3.22.7 // indirect
github.com/sirupsen/logrus v1.9.0 // indirect
github.com/spf13/afero v1.6.0 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/cast v1.4.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.8.1 // indirect
github.com/spf13/viper v1.10.0 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
@@ -177,6 +177,7 @@ require (
google.golang.org/genproto v0.0.0-20220302033224-9aa15565e42a // indirect
google.golang.org/grpc v1.44.0 // indirect
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/h2non/filetype.v1 v1.0.5 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.66.6 // indirect

840
go.sum

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@@ -58,6 +58,9 @@ type CreateTenantRequest struct {
// encryption
Encryption *EncryptionConfiguration `json:"encryption,omitempty"`
// environment variables
EnvironmentVariables []*EnvironmentVariable `json:"environmentVariables"`
// erasure coding parity
ErasureCodingParity int64 `json:"erasureCodingParity,omitempty"`
@@ -123,6 +126,10 @@ func (m *CreateTenantRequest) Validate(formats strfmt.Registry) error {
res = append(res, err)
}
if err := m.validateEnvironmentVariables(formats); err != nil {
res = append(res, err)
}
if err := m.validateIdp(formats); err != nil {
res = append(res, err)
}
@@ -199,6 +206,32 @@ func (m *CreateTenantRequest) validateEncryption(formats strfmt.Registry) error
return nil
}
func (m *CreateTenantRequest) validateEnvironmentVariables(formats strfmt.Registry) error {
if swag.IsZero(m.EnvironmentVariables) { // not required
return nil
}
for i := 0; i < len(m.EnvironmentVariables); i++ {
if swag.IsZero(m.EnvironmentVariables[i]) { // not required
continue
}
if m.EnvironmentVariables[i] != nil {
if err := m.EnvironmentVariables[i].Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *CreateTenantRequest) validateIdp(formats strfmt.Registry) error {
if swag.IsZero(m.Idp) { // not required
return nil
@@ -355,6 +388,10 @@ func (m *CreateTenantRequest) ContextValidate(ctx context.Context, formats strfm
res = append(res, err)
}
if err := m.contextValidateEnvironmentVariables(ctx, formats); err != nil {
res = append(res, err)
}
if err := m.contextValidateIdp(ctx, formats); err != nil {
res = append(res, err)
}
@@ -417,6 +454,26 @@ func (m *CreateTenantRequest) contextValidateEncryption(ctx context.Context, for
return nil
}
func (m *CreateTenantRequest) contextValidateEnvironmentVariables(ctx context.Context, formats strfmt.Registry) error {
for i := 0; i < len(m.EnvironmentVariables); i++ {
if m.EnvironmentVariables[i] != nil {
if err := m.EnvironmentVariables[i].ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("environmentVariables" + "." + strconv.Itoa(i))
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("environmentVariables" + "." + strconv.Itoa(i))
}
return err
}
}
}
return nil
}
func (m *CreateTenantRequest) contextValidateIdp(ctx context.Context, formats strfmt.Registry) error {
if m.Idp != nil {

View File

@@ -0,0 +1,70 @@
// 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"
"github.com/go-openapi/strfmt"
"github.com/go-openapi/swag"
)
// EnvironmentConstants environment constants
//
// swagger:model environmentConstants
type EnvironmentConstants struct {
// max concurrent downloads
MaxConcurrentDownloads int64 `json:"maxConcurrentDownloads,omitempty"`
// max concurrent uploads
MaxConcurrentUploads int64 `json:"maxConcurrentUploads,omitempty"`
}
// Validate validates this environment constants
func (m *EnvironmentConstants) Validate(formats strfmt.Registry) error {
return nil
}
// ContextValidate validates this environment constants based on context it is used
func (m *EnvironmentConstants) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
return nil
}
// MarshalBinary interface implementation
func (m *EnvironmentConstants) MarshalBinary() ([]byte, error) {
if m == nil {
return nil, nil
}
return swag.WriteJSON(m)
}
// UnmarshalBinary interface implementation
func (m *EnvironmentConstants) UnmarshalBinary(b []byte) error {
var res EnvironmentConstants
if err := swag.ReadJSON(b, &res); err != nil {
return err
}
*m = res
return nil
}

View File

@@ -0,0 +1,28 @@
// 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
// KmDeleteKeyRequest km delete key request
//
// swagger:model kmDeleteKeyRequest
type KmDeleteKeyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmListKeysRequest km list keys request
//
// swagger:model kmListKeysRequest
type KmListKeysRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsAssignPolicyRequest kms assign policy request
//
// swagger:model kmsAssignPolicyRequest
type KmsAssignPolicyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsAssignPolicyResponse kms assign policy response
//
// swagger:model kmsAssignPolicyResponse
type KmsAssignPolicyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsCreateKeyRequest kms create key request
//
// swagger:model kmsCreateKeyRequest
type KmsCreateKeyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsCreateKeyResponse kms create key response
//
// swagger:model kmsCreateKeyResponse
type KmsCreateKeyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDeleteIdentityRequest kms delete identity request
//
// swagger:model kmsDeleteIdentityRequest
type KmsDeleteIdentityRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDeleteIdentityResponse kms delete identity response
//
// swagger:model kmsDeleteIdentityResponse
type KmsDeleteIdentityResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDeleteKeyResponse kms delete key response
//
// swagger:model kmsDeleteKeyResponse
type KmsDeleteKeyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDeletePolicyRequest kms delete policy request
//
// swagger:model kmsDeletePolicyRequest
type KmsDeletePolicyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDeletePolicyResponse kms delete policy response
//
// swagger:model kmsDeletePolicyResponse
type KmsDeletePolicyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDescribeIdentityRequest kms describe identity request
//
// swagger:model kmsDescribeIdentityRequest
type KmsDescribeIdentityRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDescribeIdentityResponse kms describe identity response
//
// swagger:model kmsDescribeIdentityResponse
type KmsDescribeIdentityResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDescribePolicyRequest kms describe policy request
//
// swagger:model kmsDescribePolicyRequest
type KmsDescribePolicyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDescribePolicyResponse kms describe policy response
//
// swagger:model kmsDescribePolicyResponse
type KmsDescribePolicyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDescribeSelfIdentityRequest kms describe self identity request
//
// swagger:model kmsDescribeSelfIdentityRequest
type KmsDescribeSelfIdentityRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsDescribeSelfIdentityResponse kms describe self identity response
//
// swagger:model kmsDescribeSelfIdentityResponse
type KmsDescribeSelfIdentityResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsGetPolicyRequest kms get policy request
//
// swagger:model kmsGetPolicyRequest
type KmsGetPolicyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsGetPolicyResponse kms get policy response
//
// swagger:model kmsGetPolicyResponse
type KmsGetPolicyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsImportKeyRequest kms import key request
//
// swagger:model kmsImportKeyRequest
type KmsImportKeyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsImportKeyResponse kms import key response
//
// swagger:model kmsImportKeyResponse
type KmsImportKeyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsKeyStatusRequest kms key status request
//
// swagger:model kmsKeyStatusRequest
type KmsKeyStatusRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsKeyStatusResponse kms key status response
//
// swagger:model kmsKeyStatusResponse
type KmsKeyStatusResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsListIdentitiesRequest kms list identities request
//
// swagger:model kmsListIdentitiesRequest
type KmsListIdentitiesRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsListIdentitiesResponse kms list identities response
//
// swagger:model kmsListIdentitiesResponse
type KmsListIdentitiesResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsListKeysResponse kms list keys response
//
// swagger:model kmsListKeysResponse
type KmsListKeysResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsListPoliciesRequest kms list policies request
//
// swagger:model kmsListPoliciesRequest
type KmsListPoliciesRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsListPoliciesResponse kms list policies response
//
// swagger:model kmsListPoliciesResponse
type KmsListPoliciesResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsSetPolicyRequest kms set policy request
//
// swagger:model kmsSetPolicyRequest
type KmsSetPolicyRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsSetPolicyResponse kms set policy response
//
// swagger:model kmsSetPolicyResponse
type KmsSetPolicyResponse interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsStatusRequest kms status request
//
// swagger:model kmsStatusRequest
type KmsStatusRequest interface{}

View File

@@ -0,0 +1,28 @@
// 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
// KmsStatusResponse kms status response
//
// swagger:model kmsStatusResponse
type KmsStatusResponse interface{}

View File

@@ -47,6 +47,9 @@ type SessionResponse struct {
// distributed mode
DistributedMode bool `json:"distributedMode,omitempty"`
// env constants
EnvConstants *EnvironmentConstants `json:"envConstants,omitempty"`
// features
Features []string `json:"features"`
@@ -69,6 +72,10 @@ func (m *SessionResponse) Validate(formats strfmt.Registry) error {
res = append(res, err)
}
if err := m.validateEnvConstants(formats); err != nil {
res = append(res, err)
}
if err := m.validateStatus(formats); err != nil {
res = append(res, err)
}
@@ -105,6 +112,25 @@ func (m *SessionResponse) validateAllowResources(formats strfmt.Registry) error
return nil
}
func (m *SessionResponse) validateEnvConstants(formats strfmt.Registry) error {
if swag.IsZero(m.EnvConstants) { // not required
return nil
}
if m.EnvConstants != nil {
if err := m.EnvConstants.Validate(formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("envConstants")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("envConstants")
}
return err
}
}
return nil
}
var sessionResponseTypeStatusPropEnum []interface{}
func init() {
@@ -152,6 +178,10 @@ func (m *SessionResponse) ContextValidate(ctx context.Context, formats strfmt.Re
res = append(res, err)
}
if err := m.contextValidateEnvConstants(ctx, formats); err != nil {
res = append(res, err)
}
if len(res) > 0 {
return errors.CompositeValidationError(res...)
}
@@ -178,6 +208,22 @@ func (m *SessionResponse) contextValidateAllowResources(ctx context.Context, for
return nil
}
func (m *SessionResponse) contextValidateEnvConstants(ctx context.Context, formats strfmt.Registry) error {
if m.EnvConstants != nil {
if err := m.EnvConstants.ContextValidate(ctx, formats); err != nil {
if ve, ok := err.(*errors.Validation); ok {
return ve.ValidateName("envConstants")
} else if ce, ok := err.(*errors.CompositeError); ok {
return ce.ValidateName("envConstants")
}
return err
}
}
return nil
}
// MarshalBinary interface implementation
func (m *SessionResponse) MarshalBinary() ([]byte, error) {
if m == nil {

View File

@@ -2620,6 +2620,12 @@ func init() {
"type": "object",
"$ref": "#/definitions/encryptionConfiguration"
},
"environmentVariables": {
"type": "array",
"items": {
"$ref": "#/definitions/environmentVariable"
}
},
"erasureCodingParity": {
"type": "integer"
},
@@ -8575,6 +8581,12 @@ func init() {
"type": "object",
"$ref": "#/definitions/encryptionConfiguration"
},
"environmentVariables": {
"type": "array",
"items": {
"$ref": "#/definitions/environmentVariable"
}
},
"erasureCodingParity": {
"type": "integer"
},

View File

@@ -111,7 +111,10 @@ func getLoginDetailsResponse(params authApi.LoginDetailParams) (*models.LoginDet
return nil, restapi.ErrorWithContext(ctx, err)
}
// Validate user against IDP
identityProvider := &auth.IdentityProvider{Client: oauth2Client}
identityProvider := &auth.IdentityProvider{
KeyFunc: oauth2.DefaultDerivedKey,
Client: oauth2Client,
}
redirectURL = append(redirectURL, identityProvider.GenerateLoginURL())
}
@@ -146,7 +149,10 @@ func getLoginOauth2AuthResponse(params authApi.LoginOauth2AuthParams) (*models.L
return nil, restapi.ErrorWithContext(ctx, err)
}
// initialize new identity provider
identityProvider := auth.IdentityProvider{Client: oauth2Client}
identityProvider := auth.IdentityProvider{
KeyFunc: oauth2.DefaultDerivedKey,
Client: oauth2Client,
}
// Validate user against IDP
_, err = verifyUserAgainstIDP(ctx, identityProvider, *lr.Code, *lr.State)
if err != nil {

View File

@@ -537,6 +537,11 @@ func getTenantCreatedResponse(session *models.Principal, params operator_api.Cre
Console: tenantReq.ExposeConsole,
}
// set custom environment variables in configuration file
for _, envVar := range tenantReq.EnvironmentVariables {
tenantConfigurationENV[envVar.Key] = envVar.Value
}
// write tenant configuration to secret that contains config.env
tenantConfigurationName := fmt.Sprintf("%s-env-configuration", tenantName)
_, err = createOrReplaceSecrets(ctx, &k8sClient, ns, []tenantSecret{

View File

@@ -38,20 +38,21 @@ type IdentityProviderI interface {
// Define the structure of a IdentityProvider with Client inside and define the functions that are used
// during the authentication flow.
type IdentityProvider struct {
Client *oauth2.Provider
KeyFunc oauth2.StateKeyFunc
Client *oauth2.Provider
}
// VerifyIdentity will verify the user identity against the idp using the authorization code flow
func (c IdentityProvider) VerifyIdentity(ctx context.Context, code, state string) (*credentials.Credentials, error) {
return c.Client.VerifyIdentity(ctx, code, state)
return c.Client.VerifyIdentity(ctx, code, state, c.KeyFunc)
}
// VerifyIdentityForOperator will verify the user identity against the idp using the authorization code flow
func (c IdentityProvider) VerifyIdentityForOperator(ctx context.Context, code, state string) (*xoauth2.Token, error) {
return c.Client.VerifyIdentityForOperator(ctx, code, state)
return c.Client.VerifyIdentityForOperator(ctx, code, state, c.KeyFunc)
}
// GenerateLoginURL returns a new URL used by the user to login against the idp
func (c IdentityProvider) GenerateLoginURL() string {
return c.Client.GenerateLoginURL()
return c.Client.GenerateLoginURL(c.KeyFunc)
}

View File

@@ -19,10 +19,12 @@
package oauth2
import (
"crypto/sha1"
"strings"
"github.com/minio/console/pkg/auth/utils"
"github.com/minio/pkg/env"
"golang.org/x/crypto/pbkdf2"
)
// ProviderConfig - OpenID IDP Configuration for console.
@@ -37,6 +39,14 @@ type ProviderConfig struct {
RedirectCallback string
}
// GetStateKeyFunc - return the key function used to generate the authorization
// code flow state parameter.
func (pc ProviderConfig) GetStateKeyFunc() StateKeyFunc {
return func() []byte {
return pbkdf2.Key([]byte(pc.HMACPassphrase), []byte(pc.HMACSalt), 4096, 32, sha1.New)
}
}
type OpenIDPCfg map[string]ProviderConfig
var DefaultIDPConfig = "_"

View File

@@ -114,9 +114,9 @@ type Provider struct {
provHTTPClient *http.Client
}
// derivedKey is the key used to compute the HMAC for signing the oauth state parameter
// DefaultDerivedKey is the key used to compute the HMAC for signing the oauth state parameter
// its derived using pbkdf on CONSOLE_IDP_HMAC_PASSPHRASE with CONSOLE_IDP_HMAC_SALT
var derivedKey = func() []byte {
var DefaultDerivedKey = func() []byte {
return pbkdf2.Key([]byte(getPassphraseForIDPHmac()), []byte(getSaltForIDPHmac()), 4096, 32, sha1.New)
}
@@ -304,11 +304,15 @@ type User struct {
Username string `json:"username"`
}
// StateKeyFunc - is a function that returns a key used in OAuth Authorization
// flow state generation and verification.
type StateKeyFunc func() []byte
// VerifyIdentity will contact the configured IDP to the user identity based on the authorization code and state
// if the user is valid, then it will contact MinIO to get valid sts credentials based on the identity provided by the IDP
func (client *Provider) VerifyIdentity(ctx context.Context, code, state string) (*credentials.Credentials, error) {
func (client *Provider) VerifyIdentity(ctx context.Context, code, state string, keyFunc StateKeyFunc) (*credentials.Credentials, error) {
// verify the provided state is valid (prevents CSRF attacks)
if err := validateOauth2State(state); err != nil {
if err := validateOauth2State(state, keyFunc); err != nil {
return nil, err
}
getWebTokenExpiry := func() (*credentials.WebIdentityToken, error) {
@@ -357,9 +361,9 @@ func (client *Provider) VerifyIdentity(ctx context.Context, code, state string)
}
// VerifyIdentityForOperator will contact the configured IDP and validate the user identity based on the authorization code and state
func (client *Provider) VerifyIdentityForOperator(ctx context.Context, code, state string) (*xoauth2.Token, error) {
func (client *Provider) VerifyIdentityForOperator(ctx context.Context, code, state string, keyFunc StateKeyFunc) (*xoauth2.Token, error) {
// verify the provided state is valid (prevents CSRF attacks)
if err := validateOauth2State(state); err != nil {
if err := validateOauth2State(state, keyFunc); err != nil {
return nil, err
}
customCtx := context.WithValue(ctx, oauth2.HTTPClient, client.provHTTPClient)
@@ -376,7 +380,7 @@ func (client *Provider) VerifyIdentityForOperator(ctx context.Context, code, sta
// validateOauth2State validates the provided state was originated using the same
// instance (or one configured using the same secrets) of Console, this is basically used to prevent CSRF attacks
// https://security.stackexchange.com/questions/20187/oauth2-cross-site-request-forgery-and-state-parameter
func validateOauth2State(state string) error {
func validateOauth2State(state string, keyFunc StateKeyFunc) error {
// state contains a base64 encoded string that may ends with "==", the browser encodes that to "%3D%3D"
// query unescape is need it before trying to decode the base64 string
encodedMessage, err := url.QueryUnescape(state)
@@ -396,7 +400,7 @@ func validateOauth2State(state string) error {
// extract the state and hmac
incomingState, incomingHmac := s[0], s[1]
// validate that hmac(incomingState + pbkdf2(secret, salt)) == incomingHmac
if calculatedHmac := utils.ComputeHmac256(incomingState, derivedKey()); calculatedHmac != incomingHmac {
if calculatedHmac := utils.ComputeHmac256(incomingState, keyFunc()); calculatedHmac != incomingHmac {
return fmt.Errorf("oauth2 state is invalid, expected %s, got %s", calculatedHmac, incomingHmac)
}
return nil
@@ -429,16 +433,16 @@ func parseDiscoveryDoc(ustr string, httpClient *http.Client) (DiscoveryDoc, erro
}
// GetRandomStateWithHMAC computes message + hmac(message, pbkdf2(key, salt)) to be used as state during the oauth authorization
func GetRandomStateWithHMAC(length int) string {
func GetRandomStateWithHMAC(length int, keyFunc StateKeyFunc) string {
state := utils.RandomCharString(length)
hmac := utils.ComputeHmac256(state, derivedKey())
hmac := utils.ComputeHmac256(state, keyFunc())
return base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", state, hmac)))
}
// GenerateLoginURL returns a new login URL based on the configured IDP
func (client *Provider) GenerateLoginURL() string {
func (client *Provider) GenerateLoginURL(keyFunc StateKeyFunc) string {
// generates random state and sign it using HMAC256
state := GetRandomStateWithHMAC(25)
state := GetRandomStateWithHMAC(25, keyFunc)
loginURL := client.oauth2Config.AuthCodeURL(state)
return strings.TrimSpace(loginURL)
}

View File

@@ -66,6 +66,6 @@ func TestGenerateLoginURL(t *testing.T) {
// a non-empty string
return state
}
url := oauth2Provider.GenerateLoginURL()
url := oauth2Provider.GenerateLoginURL(DefaultDerivedKey)
funcAssert.NotEqual("", url)
}

View File

@@ -1,72 +1,72 @@
{
"files": {
"main.css": "./static/css/main.b20a708b.css",
"main.js": "./static/js/main.87ca0bd7.js",
"main.js": "./static/js/main.28f60345.js",
"static/js/1260.5248e62a.chunk.js": "./static/js/1260.5248e62a.chunk.js",
"static/js/6914.57144791.chunk.js": "./static/js/6914.57144791.chunk.js",
"static/js/4209.dd491df8.chunk.js": "./static/js/4209.dd491df8.chunk.js",
"static/js/1829.15382b7f.chunk.js": "./static/js/1829.15382b7f.chunk.js",
"static/js/1829.4d8548a9.chunk.js": "./static/js/1829.4d8548a9.chunk.js",
"static/js/4455.34da4012.chunk.js": "./static/js/4455.34da4012.chunk.js",
"static/js/5088.2338ab8d.chunk.js": "./static/js/5088.2338ab8d.chunk.js",
"static/js/5140.29fde8ff.chunk.js": "./static/js/5140.29fde8ff.chunk.js",
"static/js/852.8313f23d.chunk.js": "./static/js/852.8313f23d.chunk.js",
"static/js/839.94b8b36e.chunk.js": "./static/js/839.94b8b36e.chunk.js",
"static/js/839.f4dd2641.chunk.js": "./static/js/839.f4dd2641.chunk.js",
"static/js/3176.59846ccd.chunk.js": "./static/js/3176.59846ccd.chunk.js",
"static/js/6137.4944b3c1.chunk.js": "./static/js/6137.4944b3c1.chunk.js",
"static/js/7045.7464040f.chunk.js": "./static/js/7045.7464040f.chunk.js",
"static/js/9251.811e61b8.chunk.js": "./static/js/9251.811e61b8.chunk.js",
"static/js/9251.c314c7b9.chunk.js": "./static/js/9251.c314c7b9.chunk.js",
"static/js/2338.4512b89d.chunk.js": "./static/js/2338.4512b89d.chunk.js",
"static/js/4335.d0260e05.chunk.js": "./static/js/4335.d0260e05.chunk.js",
"static/js/6604.cebdcf16.chunk.js": "./static/js/6604.cebdcf16.chunk.js",
"static/js/6604.56df4486.chunk.js": "./static/js/6604.56df4486.chunk.js",
"static/js/6763.d4ff8d6b.chunk.js": "./static/js/6763.d4ff8d6b.chunk.js",
"static/js/3543.fad941bc.chunk.js": "./static/js/3543.fad941bc.chunk.js",
"static/js/4061.e6bac39f.chunk.js": "./static/js/4061.e6bac39f.chunk.js",
"static/js/4061.ef33bbaa.chunk.js": "./static/js/4061.ef33bbaa.chunk.js",
"static/js/5112.626a10bf.chunk.js": "./static/js/5112.626a10bf.chunk.js",
"static/js/9611.c217768e.chunk.js": "./static/js/9611.c217768e.chunk.js",
"static/js/2637.583760ab.chunk.js": "./static/js/2637.583760ab.chunk.js",
"static/css/5503.90c9cdc7.chunk.css": "./static/css/5503.90c9cdc7.chunk.css",
"static/js/5503.758a94a5.chunk.js": "./static/js/5503.758a94a5.chunk.js",
"static/js/5926.67e41b5c.chunk.js": "./static/js/5926.67e41b5c.chunk.js",
"static/js/5503.e6dfff1f.chunk.js": "./static/js/5503.e6dfff1f.chunk.js",
"static/js/5926.6813a97f.chunk.js": "./static/js/5926.6813a97f.chunk.js",
"static/js/701.6d0fe16f.chunk.js": "./static/js/701.6d0fe16f.chunk.js",
"static/js/7821.461c5aa3.chunk.js": "./static/js/7821.461c5aa3.chunk.js",
"static/css/2850.90c9cdc7.chunk.css": "./static/css/2850.90c9cdc7.chunk.css",
"static/js/2850.8a62b572.chunk.js": "./static/js/2850.8a62b572.chunk.js",
"static/js/4131.e46b85d2.chunk.js": "./static/js/4131.e46b85d2.chunk.js",
"static/js/4131.864cf81f.chunk.js": "./static/js/4131.864cf81f.chunk.js",
"static/css/343.90c9cdc7.chunk.css": "./static/css/343.90c9cdc7.chunk.css",
"static/js/343.11e3916f.chunk.js": "./static/js/343.11e3916f.chunk.js",
"static/js/343.34f42ca3.chunk.js": "./static/js/343.34f42ca3.chunk.js",
"static/css/1199.90c9cdc7.chunk.css": "./static/css/1199.90c9cdc7.chunk.css",
"static/js/1199.39d0d82a.chunk.js": "./static/js/1199.39d0d82a.chunk.js",
"static/js/1199.503e1d6b.chunk.js": "./static/js/1199.503e1d6b.chunk.js",
"static/css/5517.90c9cdc7.chunk.css": "./static/css/5517.90c9cdc7.chunk.css",
"static/js/5517.62cf2fc9.chunk.js": "./static/js/5517.62cf2fc9.chunk.js",
"static/js/2555.58623b9e.chunk.js": "./static/js/2555.58623b9e.chunk.js",
"static/js/7585.2e74d4d9.chunk.js": "./static/js/7585.2e74d4d9.chunk.js",
"static/js/5517.cf7204c7.chunk.js": "./static/js/5517.cf7204c7.chunk.js",
"static/js/2555.0dbc9c69.chunk.js": "./static/js/2555.0dbc9c69.chunk.js",
"static/js/7585.862b6eb5.chunk.js": "./static/js/7585.862b6eb5.chunk.js",
"static/js/4902.395ae657.chunk.js": "./static/js/4902.395ae657.chunk.js",
"static/js/7847.4176f3e5.chunk.js": "./static/js/7847.4176f3e5.chunk.js",
"static/js/3097.b4e26492.chunk.js": "./static/js/3097.b4e26492.chunk.js",
"static/js/3097.c51c1e97.chunk.js": "./static/js/3097.c51c1e97.chunk.js",
"static/js/692.acf902c5.chunk.js": "./static/js/692.acf902c5.chunk.js",
"static/js/8626.617017df.chunk.js": "./static/js/8626.617017df.chunk.js",
"static/js/736.a4ec35c8.chunk.js": "./static/js/736.a4ec35c8.chunk.js",
"static/js/736.ae41c7ee.chunk.js": "./static/js/736.ae41c7ee.chunk.js",
"static/js/6577.c8329c4f.chunk.js": "./static/js/6577.c8329c4f.chunk.js",
"static/js/9561.3f9d7984.chunk.js": "./static/js/9561.3f9d7984.chunk.js",
"static/js/6401.5c896f2e.chunk.js": "./static/js/6401.5c896f2e.chunk.js",
"static/js/2949.c6b7f4b7.chunk.js": "./static/js/2949.c6b7f4b7.chunk.js",
"static/js/3119.828f52b0.chunk.js": "./static/js/3119.828f52b0.chunk.js",
"static/js/5643.5dd7a46a.chunk.js": "./static/js/5643.5dd7a46a.chunk.js",
"static/js/5643.a58157c7.chunk.js": "./static/js/5643.a58157c7.chunk.js",
"static/js/4781.f4794912.chunk.js": "./static/js/4781.f4794912.chunk.js",
"static/js/9478.a335fb0f.chunk.js": "./static/js/9478.a335fb0f.chunk.js",
"static/js/7164.3762a0c0.chunk.js": "./static/js/7164.3762a0c0.chunk.js",
"static/js/4414.c804fea8.chunk.js": "./static/js/4414.c804fea8.chunk.js",
"static/js/7798.5da0ca4b.chunk.js": "./static/js/7798.5da0ca4b.chunk.js",
"static/js/8833.034e16b9.chunk.js": "./static/js/8833.034e16b9.chunk.js",
"static/js/8833.9f18e03b.chunk.js": "./static/js/8833.9f18e03b.chunk.js",
"static/js/6526.904dad0c.chunk.js": "./static/js/6526.904dad0c.chunk.js",
"static/js/483.6a2efeb6.chunk.js": "./static/js/483.6a2efeb6.chunk.js",
"static/js/9467.421ee878.chunk.js": "./static/js/9467.421ee878.chunk.js",
"static/js/6895.3a30a2de.chunk.js": "./static/js/6895.3a30a2de.chunk.js",
"static/js/1379.7bddd455.chunk.js": "./static/js/1379.7bddd455.chunk.js",
"static/js/8277.5ccf5bdb.chunk.js": "./static/js/8277.5ccf5bdb.chunk.js",
"static/js/4133.65219d1a.chunk.js": "./static/js/4133.65219d1a.chunk.js",
"static/js/9467.361c4c5c.chunk.js": "./static/js/9467.361c4c5c.chunk.js",
"static/js/6895.c8233c8b.chunk.js": "./static/js/6895.c8233c8b.chunk.js",
"static/js/1379.c2ecb9aa.chunk.js": "./static/js/1379.c2ecb9aa.chunk.js",
"static/js/8277.ffa83ea5.chunk.js": "./static/js/8277.ffa83ea5.chunk.js",
"static/js/4133.9a0577c4.chunk.js": "./static/js/4133.9a0577c4.chunk.js",
"static/css/1367.90c9cdc7.chunk.css": "./static/css/1367.90c9cdc7.chunk.css",
"static/js/1367.63cecfcc.chunk.js": "./static/js/1367.63cecfcc.chunk.js",
"static/js/1367.0465294b.chunk.js": "./static/js/1367.0465294b.chunk.js",
"static/js/3956.5a9ef42b.chunk.js": "./static/js/3956.5a9ef42b.chunk.js",
"static/js/9221.06d80718.chunk.js": "./static/js/9221.06d80718.chunk.js",
"static/js/8896.042361de.chunk.js": "./static/js/8896.042361de.chunk.js",
@@ -84,9 +84,9 @@
"static/js/8495.b1689c2d.chunk.js": "./static/js/8495.b1689c2d.chunk.js",
"static/js/4934.72071d47.chunk.js": "./static/js/4934.72071d47.chunk.js",
"static/js/9942.78febb7d.chunk.js": "./static/js/9942.78febb7d.chunk.js",
"static/js/7021.6a554d0d.chunk.js": "./static/js/7021.6a554d0d.chunk.js",
"static/js/7021.9ea87695.chunk.js": "./static/js/7021.9ea87695.chunk.js",
"static/js/2684.cb179f6c.chunk.js": "./static/js/2684.cb179f6c.chunk.js",
"static/js/6683.aa56755a.chunk.js": "./static/js/6683.aa56755a.chunk.js",
"static/js/6683.ae70aa3c.chunk.js": "./static/js/6683.ae70aa3c.chunk.js",
"static/js/8350.d0f71354.chunk.js": "./static/js/8350.d0f71354.chunk.js",
"static/js/4873.9349e8b2.chunk.js": "./static/js/4873.9349e8b2.chunk.js",
"static/js/5367.81c2d437.chunk.js": "./static/js/5367.81c2d437.chunk.js",
@@ -97,9 +97,9 @@
"static/js/2180.14bc77fc.chunk.js": "./static/js/2180.14bc77fc.chunk.js",
"static/js/8253.fa95cf82.chunk.js": "./static/js/8253.fa95cf82.chunk.js",
"static/js/3328.f02a2e4c.chunk.js": "./static/js/3328.f02a2e4c.chunk.js",
"static/js/1440.1c1567d3.chunk.js": "./static/js/1440.1c1567d3.chunk.js",
"static/js/9179.3a252fd9.chunk.js": "./static/js/9179.3a252fd9.chunk.js",
"static/js/51.a6197961.chunk.js": "./static/js/51.a6197961.chunk.js",
"static/js/1440.2f369689.chunk.js": "./static/js/1440.2f369689.chunk.js",
"static/js/9179.f855888c.chunk.js": "./static/js/9179.f855888c.chunk.js",
"static/js/51.c461d317.chunk.js": "./static/js/51.c461d317.chunk.js",
"static/js/711.61c682cd.chunk.js": "./static/js/711.61c682cd.chunk.js",
"static/js/6901.1be7690b.chunk.js": "./static/js/6901.1be7690b.chunk.js",
"static/js/2185.0b324ec6.chunk.js": "./static/js/2185.0b324ec6.chunk.js",
@@ -137,7 +137,6 @@
"static/js/4827.a3ee5d0a.chunk.js": "./static/js/4827.a3ee5d0a.chunk.js",
"static/js/696.c93c6454.chunk.js": "./static/js/696.c93c6454.chunk.js",
"static/js/3388.6f330810.chunk.js": "./static/js/3388.6f330810.chunk.js",
"static/js/2567.43362044.chunk.js": "./static/js/2567.43362044.chunk.js",
"static/js/71.323f55a6.chunk.js": "./static/js/71.323f55a6.chunk.js",
"static/js/4709.8bd47e6f.chunk.js": "./static/js/4709.8bd47e6f.chunk.js",
"static/js/3870.a1265f93.chunk.js": "./static/js/3870.a1265f93.chunk.js",
@@ -148,76 +147,76 @@
"static/js/7472.85d323e5.chunk.js": "./static/js/7472.85d323e5.chunk.js",
"static/js/9515.a4e964be.chunk.js": "./static/js/9515.a4e964be.chunk.js",
"static/js/2983.15e04479.chunk.js": "./static/js/2983.15e04479.chunk.js",
"static/js/5289.bed1d51e.chunk.js": "./static/js/5289.bed1d51e.chunk.js",
"static/js/2763.02eb6b42.chunk.js": "./static/js/2763.02eb6b42.chunk.js",
"static/js/48.115b7eb1.chunk.js": "./static/js/48.115b7eb1.chunk.js",
"static/js/2763.d85f5750.chunk.js": "./static/js/2763.d85f5750.chunk.js",
"index.html": "./index.html",
"main.b20a708b.css.map": "./static/css/main.b20a708b.css.map",
"main.87ca0bd7.js.map": "./static/js/main.87ca0bd7.js.map",
"main.28f60345.js.map": "./static/js/main.28f60345.js.map",
"1260.5248e62a.chunk.js.map": "./static/js/1260.5248e62a.chunk.js.map",
"6914.57144791.chunk.js.map": "./static/js/6914.57144791.chunk.js.map",
"4209.dd491df8.chunk.js.map": "./static/js/4209.dd491df8.chunk.js.map",
"1829.15382b7f.chunk.js.map": "./static/js/1829.15382b7f.chunk.js.map",
"1829.4d8548a9.chunk.js.map": "./static/js/1829.4d8548a9.chunk.js.map",
"4455.34da4012.chunk.js.map": "./static/js/4455.34da4012.chunk.js.map",
"5088.2338ab8d.chunk.js.map": "./static/js/5088.2338ab8d.chunk.js.map",
"5140.29fde8ff.chunk.js.map": "./static/js/5140.29fde8ff.chunk.js.map",
"852.8313f23d.chunk.js.map": "./static/js/852.8313f23d.chunk.js.map",
"839.94b8b36e.chunk.js.map": "./static/js/839.94b8b36e.chunk.js.map",
"839.f4dd2641.chunk.js.map": "./static/js/839.f4dd2641.chunk.js.map",
"3176.59846ccd.chunk.js.map": "./static/js/3176.59846ccd.chunk.js.map",
"6137.4944b3c1.chunk.js.map": "./static/js/6137.4944b3c1.chunk.js.map",
"7045.7464040f.chunk.js.map": "./static/js/7045.7464040f.chunk.js.map",
"9251.811e61b8.chunk.js.map": "./static/js/9251.811e61b8.chunk.js.map",
"9251.c314c7b9.chunk.js.map": "./static/js/9251.c314c7b9.chunk.js.map",
"2338.4512b89d.chunk.js.map": "./static/js/2338.4512b89d.chunk.js.map",
"4335.d0260e05.chunk.js.map": "./static/js/4335.d0260e05.chunk.js.map",
"6604.cebdcf16.chunk.js.map": "./static/js/6604.cebdcf16.chunk.js.map",
"6604.56df4486.chunk.js.map": "./static/js/6604.56df4486.chunk.js.map",
"6763.d4ff8d6b.chunk.js.map": "./static/js/6763.d4ff8d6b.chunk.js.map",
"3543.fad941bc.chunk.js.map": "./static/js/3543.fad941bc.chunk.js.map",
"4061.e6bac39f.chunk.js.map": "./static/js/4061.e6bac39f.chunk.js.map",
"4061.ef33bbaa.chunk.js.map": "./static/js/4061.ef33bbaa.chunk.js.map",
"5112.626a10bf.chunk.js.map": "./static/js/5112.626a10bf.chunk.js.map",
"9611.c217768e.chunk.js.map": "./static/js/9611.c217768e.chunk.js.map",
"2637.583760ab.chunk.js.map": "./static/js/2637.583760ab.chunk.js.map",
"5503.90c9cdc7.chunk.css.map": "./static/css/5503.90c9cdc7.chunk.css.map",
"5503.758a94a5.chunk.js.map": "./static/js/5503.758a94a5.chunk.js.map",
"5926.67e41b5c.chunk.js.map": "./static/js/5926.67e41b5c.chunk.js.map",
"5503.e6dfff1f.chunk.js.map": "./static/js/5503.e6dfff1f.chunk.js.map",
"5926.6813a97f.chunk.js.map": "./static/js/5926.6813a97f.chunk.js.map",
"701.6d0fe16f.chunk.js.map": "./static/js/701.6d0fe16f.chunk.js.map",
"7821.461c5aa3.chunk.js.map": "./static/js/7821.461c5aa3.chunk.js.map",
"2850.90c9cdc7.chunk.css.map": "./static/css/2850.90c9cdc7.chunk.css.map",
"2850.8a62b572.chunk.js.map": "./static/js/2850.8a62b572.chunk.js.map",
"4131.e46b85d2.chunk.js.map": "./static/js/4131.e46b85d2.chunk.js.map",
"4131.864cf81f.chunk.js.map": "./static/js/4131.864cf81f.chunk.js.map",
"343.90c9cdc7.chunk.css.map": "./static/css/343.90c9cdc7.chunk.css.map",
"343.11e3916f.chunk.js.map": "./static/js/343.11e3916f.chunk.js.map",
"343.34f42ca3.chunk.js.map": "./static/js/343.34f42ca3.chunk.js.map",
"1199.90c9cdc7.chunk.css.map": "./static/css/1199.90c9cdc7.chunk.css.map",
"1199.39d0d82a.chunk.js.map": "./static/js/1199.39d0d82a.chunk.js.map",
"1199.503e1d6b.chunk.js.map": "./static/js/1199.503e1d6b.chunk.js.map",
"5517.90c9cdc7.chunk.css.map": "./static/css/5517.90c9cdc7.chunk.css.map",
"5517.62cf2fc9.chunk.js.map": "./static/js/5517.62cf2fc9.chunk.js.map",
"2555.58623b9e.chunk.js.map": "./static/js/2555.58623b9e.chunk.js.map",
"7585.2e74d4d9.chunk.js.map": "./static/js/7585.2e74d4d9.chunk.js.map",
"5517.cf7204c7.chunk.js.map": "./static/js/5517.cf7204c7.chunk.js.map",
"2555.0dbc9c69.chunk.js.map": "./static/js/2555.0dbc9c69.chunk.js.map",
"7585.862b6eb5.chunk.js.map": "./static/js/7585.862b6eb5.chunk.js.map",
"4902.395ae657.chunk.js.map": "./static/js/4902.395ae657.chunk.js.map",
"7847.4176f3e5.chunk.js.map": "./static/js/7847.4176f3e5.chunk.js.map",
"3097.b4e26492.chunk.js.map": "./static/js/3097.b4e26492.chunk.js.map",
"3097.c51c1e97.chunk.js.map": "./static/js/3097.c51c1e97.chunk.js.map",
"692.acf902c5.chunk.js.map": "./static/js/692.acf902c5.chunk.js.map",
"8626.617017df.chunk.js.map": "./static/js/8626.617017df.chunk.js.map",
"736.a4ec35c8.chunk.js.map": "./static/js/736.a4ec35c8.chunk.js.map",
"736.ae41c7ee.chunk.js.map": "./static/js/736.ae41c7ee.chunk.js.map",
"6577.c8329c4f.chunk.js.map": "./static/js/6577.c8329c4f.chunk.js.map",
"9561.3f9d7984.chunk.js.map": "./static/js/9561.3f9d7984.chunk.js.map",
"6401.5c896f2e.chunk.js.map": "./static/js/6401.5c896f2e.chunk.js.map",
"2949.c6b7f4b7.chunk.js.map": "./static/js/2949.c6b7f4b7.chunk.js.map",
"3119.828f52b0.chunk.js.map": "./static/js/3119.828f52b0.chunk.js.map",
"5643.5dd7a46a.chunk.js.map": "./static/js/5643.5dd7a46a.chunk.js.map",
"5643.a58157c7.chunk.js.map": "./static/js/5643.a58157c7.chunk.js.map",
"4781.f4794912.chunk.js.map": "./static/js/4781.f4794912.chunk.js.map",
"9478.a335fb0f.chunk.js.map": "./static/js/9478.a335fb0f.chunk.js.map",
"7164.3762a0c0.chunk.js.map": "./static/js/7164.3762a0c0.chunk.js.map",
"4414.c804fea8.chunk.js.map": "./static/js/4414.c804fea8.chunk.js.map",
"7798.5da0ca4b.chunk.js.map": "./static/js/7798.5da0ca4b.chunk.js.map",
"8833.034e16b9.chunk.js.map": "./static/js/8833.034e16b9.chunk.js.map",
"8833.9f18e03b.chunk.js.map": "./static/js/8833.9f18e03b.chunk.js.map",
"6526.904dad0c.chunk.js.map": "./static/js/6526.904dad0c.chunk.js.map",
"483.6a2efeb6.chunk.js.map": "./static/js/483.6a2efeb6.chunk.js.map",
"9467.421ee878.chunk.js.map": "./static/js/9467.421ee878.chunk.js.map",
"6895.3a30a2de.chunk.js.map": "./static/js/6895.3a30a2de.chunk.js.map",
"1379.7bddd455.chunk.js.map": "./static/js/1379.7bddd455.chunk.js.map",
"8277.5ccf5bdb.chunk.js.map": "./static/js/8277.5ccf5bdb.chunk.js.map",
"4133.65219d1a.chunk.js.map": "./static/js/4133.65219d1a.chunk.js.map",
"9467.361c4c5c.chunk.js.map": "./static/js/9467.361c4c5c.chunk.js.map",
"6895.c8233c8b.chunk.js.map": "./static/js/6895.c8233c8b.chunk.js.map",
"1379.c2ecb9aa.chunk.js.map": "./static/js/1379.c2ecb9aa.chunk.js.map",
"8277.ffa83ea5.chunk.js.map": "./static/js/8277.ffa83ea5.chunk.js.map",
"4133.9a0577c4.chunk.js.map": "./static/js/4133.9a0577c4.chunk.js.map",
"1367.90c9cdc7.chunk.css.map": "./static/css/1367.90c9cdc7.chunk.css.map",
"1367.63cecfcc.chunk.js.map": "./static/js/1367.63cecfcc.chunk.js.map",
"1367.0465294b.chunk.js.map": "./static/js/1367.0465294b.chunk.js.map",
"3956.5a9ef42b.chunk.js.map": "./static/js/3956.5a9ef42b.chunk.js.map",
"9221.06d80718.chunk.js.map": "./static/js/9221.06d80718.chunk.js.map",
"8896.042361de.chunk.js.map": "./static/js/8896.042361de.chunk.js.map",
@@ -235,9 +234,9 @@
"8495.b1689c2d.chunk.js.map": "./static/js/8495.b1689c2d.chunk.js.map",
"4934.72071d47.chunk.js.map": "./static/js/4934.72071d47.chunk.js.map",
"9942.78febb7d.chunk.js.map": "./static/js/9942.78febb7d.chunk.js.map",
"7021.6a554d0d.chunk.js.map": "./static/js/7021.6a554d0d.chunk.js.map",
"7021.9ea87695.chunk.js.map": "./static/js/7021.9ea87695.chunk.js.map",
"2684.cb179f6c.chunk.js.map": "./static/js/2684.cb179f6c.chunk.js.map",
"6683.aa56755a.chunk.js.map": "./static/js/6683.aa56755a.chunk.js.map",
"6683.ae70aa3c.chunk.js.map": "./static/js/6683.ae70aa3c.chunk.js.map",
"8350.d0f71354.chunk.js.map": "./static/js/8350.d0f71354.chunk.js.map",
"4873.9349e8b2.chunk.js.map": "./static/js/4873.9349e8b2.chunk.js.map",
"5367.81c2d437.chunk.js.map": "./static/js/5367.81c2d437.chunk.js.map",
@@ -248,9 +247,9 @@
"2180.14bc77fc.chunk.js.map": "./static/js/2180.14bc77fc.chunk.js.map",
"8253.fa95cf82.chunk.js.map": "./static/js/8253.fa95cf82.chunk.js.map",
"3328.f02a2e4c.chunk.js.map": "./static/js/3328.f02a2e4c.chunk.js.map",
"1440.1c1567d3.chunk.js.map": "./static/js/1440.1c1567d3.chunk.js.map",
"9179.3a252fd9.chunk.js.map": "./static/js/9179.3a252fd9.chunk.js.map",
"51.a6197961.chunk.js.map": "./static/js/51.a6197961.chunk.js.map",
"1440.2f369689.chunk.js.map": "./static/js/1440.2f369689.chunk.js.map",
"9179.f855888c.chunk.js.map": "./static/js/9179.f855888c.chunk.js.map",
"51.c461d317.chunk.js.map": "./static/js/51.c461d317.chunk.js.map",
"711.61c682cd.chunk.js.map": "./static/js/711.61c682cd.chunk.js.map",
"6901.1be7690b.chunk.js.map": "./static/js/6901.1be7690b.chunk.js.map",
"2185.0b324ec6.chunk.js.map": "./static/js/2185.0b324ec6.chunk.js.map",
@@ -288,7 +287,6 @@
"4827.a3ee5d0a.chunk.js.map": "./static/js/4827.a3ee5d0a.chunk.js.map",
"696.c93c6454.chunk.js.map": "./static/js/696.c93c6454.chunk.js.map",
"3388.6f330810.chunk.js.map": "./static/js/3388.6f330810.chunk.js.map",
"2567.43362044.chunk.js.map": "./static/js/2567.43362044.chunk.js.map",
"71.323f55a6.chunk.js.map": "./static/js/71.323f55a6.chunk.js.map",
"4709.8bd47e6f.chunk.js.map": "./static/js/4709.8bd47e6f.chunk.js.map",
"3870.a1265f93.chunk.js.map": "./static/js/3870.a1265f93.chunk.js.map",
@@ -299,11 +297,11 @@
"7472.85d323e5.chunk.js.map": "./static/js/7472.85d323e5.chunk.js.map",
"9515.a4e964be.chunk.js.map": "./static/js/9515.a4e964be.chunk.js.map",
"2983.15e04479.chunk.js.map": "./static/js/2983.15e04479.chunk.js.map",
"5289.bed1d51e.chunk.js.map": "./static/js/5289.bed1d51e.chunk.js.map",
"2763.02eb6b42.chunk.js.map": "./static/js/2763.02eb6b42.chunk.js.map"
"48.115b7eb1.chunk.js.map": "./static/js/48.115b7eb1.chunk.js.map",
"2763.d85f5750.chunk.js.map": "./static/js/2763.d85f5750.chunk.js.map"
},
"entrypoints": [
"static/css/main.b20a708b.css",
"static/js/main.87ca0bd7.js"
"static/js/main.28f60345.js"
]
}

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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

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