From 00752d2bb1232ec7a4f0efebf479ef540260da99 Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 17 Sep 2021 23:11:28 -0700 Subject: [PATCH] use cluster endpoint API to detect erasure coded setup (#1057) --- restapi/config.go | 25 ++++++++------------- restapi/configure_console.go | 1 - restapi/user_buckets.go | 6 ++--- restapi/user_session.go | 43 ++++++++++++++++++------------------ 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/restapi/config.go b/restapi/config.go index dee713f88..151c6a19e 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 ff2db3c5d..5b8defe77 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 c94a36a48..02bfa56bb 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 e981ef043..992650625 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 { + panic(err) + } + u.Path = "/minio/health/cluster" + + req, err := http.NewRequest(http.MethodGet, u.String(), nil) + if err != nil { + panic(err) + } + + clnt := GetConsoleHTTPClient() + resp, err := clnt.Do(req) + if err != nil { + panic(err) + } + + if resp.StatusCode != http.StatusOK { return false } - // create a minioClient interface implementation - client := AdminClient{Client: mAdmin} - info, err := client.AccountInfo(ctx) - - // We couldn't retrieve admin information, default to true for legacy reasons - // TODO: Revert to false after August 15th 2021 - if err != nil { - return true - } - - backendInfo := info.Server - - 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 }