From 90b8fc2f33a2f0337a17028a3bb8d640f28026a2 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 17 Sep 2021 15:21:52 -0700 Subject: [PATCH] use cluster endpoint API to detect erasure coded setup --- restapi/config.go | 25 +++++++++---------------- restapi/configure_console.go | 1 - restapi/user_buckets.go | 6 +++--- restapi/user_session.go | 35 ++++++++++++++++++----------------- 4 files changed, 30 insertions(+), 37 deletions(-) diff --git a/restapi/config.go b/restapi/config.go index dee713f88c..151c6a19e3 100644 --- a/restapi/config.go +++ b/restapi/config.go @@ -20,6 +20,7 @@ import ( "crypto/x509" "io/ioutil" "net" + "net/url" "strconv" "strings" "time" @@ -59,27 +60,19 @@ func GetMinIORegion() string { } func getMinIOEndpoint() string { - server := getMinIOServer() - if strings.Contains(server, "://") { - parts := strings.Split(server, "://") - if len(parts) > 1 { - server = parts[1] - } + u, err := url.Parse(getMinIOServer()) + if err != nil { + panic(err) } - return server + return u.Host } func getMinIOEndpointIsSecure() bool { - server := getMinIOServer() - if strings.Contains(server, "://") { - parts := strings.Split(server, "://") - if len(parts) > 1 { - if parts[0] == "https" { - return true - } - } + u, err := url.Parse(getMinIOServer()) + if err != nil { + panic(err) } - return false + return u.Scheme == "https" } // GetHostname gets console hostname set on env variable, diff --git a/restapi/configure_console.go b/restapi/configure_console.go index ff2db3c5dd..5b8defe775 100644 --- a/restapi/configure_console.go +++ b/restapi/configure_console.go @@ -58,7 +58,6 @@ func configureFlags(api *operations.ConsoleAPI) { } func configureAPI(api *operations.ConsoleAPI) http.Handler { - // Applies when the "x-token" header is set api.KeyAuth = func(token string, scopes []string) (*models.Principal, error) { // we are validating the session token by decrypting the claims inside, if the operation succeed that means the jwt diff --git a/restapi/user_buckets.go b/restapi/user_buckets.go index c94a36a482..02bfa56bb7 100644 --- a/restapi/user_buckets.go +++ b/restapi/user_buckets.go @@ -287,11 +287,11 @@ func getBucketVersionedResponse(session *models.Principal, bucketName string) (* return bucketVResponse, nil } -var serverBackend madmin.BackendInfo +var serverBackendType madmin.BackendType var serverBackendOnce sync.Once func isErasureBackend() bool { - return serverBackend.Type == madmin.Erasure + return serverBackendType == madmin.Erasure } // getAccountInfo fetches a list of all buckets allowed to that particular client from MinIO Servers @@ -302,7 +302,7 @@ func getAccountInfo(ctx context.Context, client MinioAdmin) ([]*models.Bucket, e } serverBackendOnce.Do(func() { - serverBackend = info.Server + serverBackendType = info.Server.Type }) var bucketInfos []*models.Bucket diff --git a/restapi/user_session.go b/restapi/user_session.go index e981ef0439..9926506259 100644 --- a/restapi/user_session.go +++ b/restapi/user_session.go @@ -17,38 +17,39 @@ package restapi import ( - "context" + "net/http" + "net/url" "github.com/go-openapi/runtime/middleware" "github.com/minio/console/models" "github.com/minio/console/pkg/acl" "github.com/minio/console/restapi/operations" "github.com/minio/console/restapi/operations/user_api" - "github.com/minio/madmin-go" ) -func validateDistributedMode(session *models.Principal) bool { - ctx := context.Background() - mAdmin, err := NewMinioAdminClient(session) - - // We couldn't create the client, return false +func isErasureMode() bool { + u, err := url.Parse(getMinIOServer()) if err != nil { - return false + panic(err) } - // create a minioClient interface implementation - client := AdminClient{Client: mAdmin} + u.Path = "/minio/health/cluster" - info, err := client.AccountInfo(ctx) + req, err := http.NewRequest(http.MethodGet, u.String(), nil) + if err != nil { + panic(err) + } - // We couldn't retrieve admin information, default to true for legacy reasons - // TODO: Revert to false after August 15th 2021 + clnt := GetConsoleHTTPClient() + resp, err := clnt.Do(req) if err != nil { - return true + panic(err) } - backendInfo := info.Server + if resp.StatusCode != http.StatusOK { + return false + } - return backendInfo.Type == madmin.Erasure + return resp.Header.Get("x-minio-write-quorum") != "" } func registerSessionHandlers(api *operations.ConsoleAPI) { @@ -74,7 +75,7 @@ func getSessionResponse(session *models.Principal) (*models.SessionResponse, *mo Features: getListOfEnabledFeatures(), Status: models.SessionResponseStatusOk, Operator: false, - DistributedMode: validateDistributedMode(session), + DistributedMode: isErasureMode(), } return sessionResp, nil }