Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 9 additions & 16 deletions restapi/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"crypto/x509"
"io/ioutil"
"net"
"net/url"
"strconv"
"strings"
"time"
Expand Down Expand Up @@ -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,
Expand Down
1 change: 0 additions & 1 deletion restapi/configure_console.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions restapi/user_buckets.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
35 changes: 18 additions & 17 deletions restapi/user_session.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
}
Expand Down