diff --git a/models/operator_session_response.go b/models/operator_session_response.go
index 0f84df3b4..552bb5511 100644
--- a/models/operator_session_response.go
+++ b/models/operator_session_response.go
@@ -37,15 +37,9 @@ import (
// swagger:model operatorSessionResponse
type OperatorSessionResponse struct {
- // features
- Features []string `json:"features"`
-
// operator
Operator bool `json:"operator,omitempty"`
- // pages
- Pages []string `json:"pages"`
-
// status
// Enum: [ok]
Status string `json:"status,omitempty"`
diff --git a/models/session_response.go b/models/session_response.go
index 70a892dfd..fbca9607b 100644
--- a/models/session_response.go
+++ b/models/session_response.go
@@ -46,9 +46,6 @@ type SessionResponse struct {
// operator
Operator bool `json:"operator,omitempty"`
- // pages
- Pages []string `json:"pages"`
-
// permissions
Permissions map[string][]string `json:"permissions,omitempty"`
diff --git a/operatorapi/embedded_spec.go b/operatorapi/embedded_spec.go
index e1919730d..d9bb9fe63 100644
--- a/operatorapi/embedded_spec.go
+++ b/operatorapi/embedded_spec.go
@@ -2296,21 +2296,9 @@ func init() {
"operatorSessionResponse": {
"type": "object",
"properties": {
- "features": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
"operator": {
"type": "boolean"
},
- "pages": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
"status": {
"type": "string",
"enum": [
@@ -6103,21 +6091,9 @@ func init() {
"operatorSessionResponse": {
"type": "object",
"properties": {
- "features": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
"operator": {
"type": "boolean"
},
- "pages": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
"status": {
"type": "string",
"enum": [
diff --git a/operatorapi/operator_session.go b/operatorapi/operator_session.go
index 35bddc896..0aaf6ffc3 100644
--- a/operatorapi/operator_session.go
+++ b/operatorapi/operator_session.go
@@ -21,7 +21,6 @@ import (
"github.com/minio/console/models"
"github.com/minio/console/operatorapi/operations"
"github.com/minio/console/operatorapi/operations/user_api"
- "github.com/minio/console/pkg/acl"
)
func registerSessionHandlers(api *operations.OperatorAPI) {
@@ -42,16 +41,8 @@ func getSessionResponse(session *models.Principal) (*models.OperatorSessionRespo
return nil, prepareError(errorGenericInvalidSession)
}
sessionResp := &models.OperatorSessionResponse{
- Pages: acl.GetAuthorizedEndpoints([]string{}),
- Features: getListOfEnabledFeatures(),
Status: models.OperatorSessionResponseStatusOk,
Operator: true,
}
return sessionResp, nil
}
-
-// getListOfEnabledFeatures returns a list of features
-func getListOfEnabledFeatures() []string {
- var features []string
- return features
-}
diff --git a/pkg/acl/config.go b/pkg/acl/config.go
deleted file mode 100644
index ce89c9171..000000000
--- a/pkg/acl/config.go
+++ /dev/null
@@ -1,32 +0,0 @@
-// This file is part of MinIO Console Server
-// Copyright (c) 2021 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 .
-
-package acl
-
-import (
- "strings"
-
- "github.com/minio/pkg/env"
-)
-
-// GetOperatorMode gets Console Operator mode status set on env variable or default one
-func GetOperatorMode() bool {
- return strings.ToLower(env.Get(consoleOperatorMode, "off")) == "on"
-}
-
-func GetLDAPEnabled() bool {
- return strings.ToLower(env.Get(ConsoleLDAPEnabled, "off")) == "on"
-}
diff --git a/pkg/acl/const.go b/pkg/acl/const.go
deleted file mode 100644
index 7d4815bd4..000000000
--- a/pkg/acl/const.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// This file is part of MinIO Console Server
-// Copyright (c) 2021 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 .
-
-package acl
-
-const (
- consoleOperatorMode = "CONSOLE_OPERATOR_MODE"
- // const for ldap configuration
- ConsoleLDAPEnabled = "CONSOLE_LDAP_ENABLED"
-)
diff --git a/pkg/acl/endpoints.go b/pkg/acl/endpoints.go
deleted file mode 100644
index 3c9501f51..000000000
--- a/pkg/acl/endpoints.go
+++ /dev/null
@@ -1,469 +0,0 @@
-// This file is part of MinIO Console Server
-// Copyright (c) 2021 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 .
-
-package acl
-
-import (
- iampolicy "github.com/minio/pkg/iam/policy"
-)
-
-// endpoints definition
-var (
- configuration = "/settings"
- configurationItem = "/settings/:option"
- notificationEndpoints = "/notification-endpoints"
- notificationEndpointsAddAny = "/notification-endpoints/add/:service"
- notificationEndpointsAdd = "/notification-endpoints/add"
- tiers = "/tiers"
- tiersAddAny = "/tiers/add/:service"
- tiersAdd = "/tiers/add"
- users = "/users"
- usersDetail = "/users/:userName+"
- groups = "/groups"
- groupsDetails = "/groups/:groupName+"
- iamPolicies = "/policies"
- policiesDetail = "/policies/*"
- dashboard = "/dashboard"
- metrics = "/metrics"
- profiling = "/profiling"
- addBucket = "/add-bucket"
- buckets = "/buckets"
- bucketsGeneral = "/buckets/*"
- bucketsAdmin = "/buckets/:bucketName/admin/*"
- bucketsAdminMain = "/buckets/:bucketName/admin"
- bucketsBrowserMenu = "/buckets"
- bucketsBrowserList = "/buckets/*"
- bucketsBrowser = "/buckets/:bucketName/browse/*"
- bucketsBrowserMain = "/buckets/:bucketName/browse"
- serviceAccounts = "/account"
- changePassword = "/account/change-password"
- tenants = "/tenants"
- tenantsAdd = "/tenants/add"
- tenantsAddSub = "/tenants/add/*"
- tenantsDetail = "/namespaces/:tenantNamespace/tenants/:tenantName"
- tenantHop = "/namespaces/:tenantNamespace/tenants/:tenantName/hop"
- podsDetail = "/namespaces/:tenantNamespace/tenants/:tenantName/pods/:podName"
- tenantsDetailSummary = "/namespaces/:tenantNamespace/tenants/:tenantName/summary"
- tenantsDetailMetrics = "/namespaces/:tenantNamespace/tenants/:tenantName/metrics"
- tenantsDetailPods = "/namespaces/:tenantNamespace/tenants/:tenantName/pods"
- tenantsDetailPools = "/namespaces/:tenantNamespace/tenants/:tenantName/pools"
- tenantsDetailVolumes = "/namespaces/:tenantNamespace/tenants/:tenantName/volumes"
- tenantsDetailLicense = "/namespaces/:tenantNamespace/tenants/:tenantName/license"
- tenantsDetailSecurity = "/namespaces/:tenantNamespace/tenants/:tenantName/security"
- storage = "/storage"
- storageVolumes = "/storage/volumes"
- storageDrives = "/storage/drives"
- remoteBuckets = "/remote-buckets"
- replication = "/replication"
- license = "/license"
- watch = "/tools/watch"
- heal = "/tools/heal"
- trace = "/tools/trace"
- tools = "/tools"
- logs = "/tools/logs"
- auditLogs = "/tools/audit-logs"
- speedtest = "/tools/speedtest"
- healthInfo = "/tools/diagnostics"
-)
-
-type ConfigurationActionSet struct {
- actionTypes iampolicy.ActionSet
- actions iampolicy.ActionSet
-}
-
-// configurationActionSet contains the list of admin actions required for this endpoint to work
-var configurationActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ConfigUpdateAdminAction,
- ),
-}
-
-// dashboardActionSet contains the list of admin actions required for this endpoint to work
-var dashboardActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ServerInfoAdminAction,
- ),
-}
-
-// groupsActionSet contains the list of admin actions required for this endpoint to work
-var groupsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ListGroupsAdminAction,
- iampolicy.AddUserToGroupAdminAction,
- //iampolicy.GetGroupAdminAction,
- iampolicy.EnableGroupAdminAction,
- iampolicy.DisableGroupAdminAction,
- ),
-}
-
-// iamPoliciesActionSet contains the list of admin actions required for this endpoint to work
-var iamPoliciesActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.GetPolicyAdminAction,
- iampolicy.DeletePolicyAdminAction,
- iampolicy.CreatePolicyAdminAction,
- iampolicy.AttachPolicyAdminAction,
- iampolicy.ListUserPoliciesAdminAction,
- ),
-}
-
-// profilingActionSet contains the list of admin actions required for this endpoint to work
-var profilingActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ProfilingAdminAction,
- ),
-}
-
-// usersActionSet contains the list of admin actions required for this endpoint to work
-var usersActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ListUsersAdminAction,
- iampolicy.CreateUserAdminAction,
- iampolicy.DeleteUserAdminAction,
- iampolicy.GetUserAdminAction,
- iampolicy.EnableUserAdminAction,
- iampolicy.DisableUserAdminAction,
- ),
-}
-
-// bucketsActionSet contains the list of admin actions required for this endpoint to work
-var bucketsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllActions,
- ),
- actions: iampolicy.NewActionSet(
- // Read access to buckets
- iampolicy.ListMultipartUploadPartsAction,
- iampolicy.ListBucketMultipartUploadsAction,
- iampolicy.ListBucketAction,
- iampolicy.HeadBucketAction,
- iampolicy.GetObjectAction,
- iampolicy.GetBucketLocationAction,
- // Write access to buckets
- iampolicy.AbortMultipartUploadAction,
- iampolicy.CreateBucketAction,
- iampolicy.PutObjectAction,
- iampolicy.DeleteObjectAction,
- iampolicy.DeleteBucketAction,
- // Assign bucket policies
- iampolicy.PutBucketPolicyAction,
- iampolicy.DeleteBucketPolicyAction,
- iampolicy.GetBucketPolicyAction,
- ),
-}
-
-// serviceAccountsActionSet no actions needed for this module to work
-var serviceAccountsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(),
- actions: iampolicy.NewActionSet(),
-}
-
-// changePasswordActionSet requires admin:CreateUser policy permission
-var changePasswordActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(),
- actions: iampolicy.NewActionSet(),
-}
-
-// tenantsActionSet temporally no actions needed for tenants sections to work
-var tenantsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(),
- actions: iampolicy.NewActionSet(),
-}
-
-var storageActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(),
- actions: iampolicy.NewActionSet(),
-}
-
-var remoteBucketsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ConfigUpdateAdminAction,
- ),
-}
-
-var replicationActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ConfigUpdateAdminAction,
- ),
-}
-
-// objectBrowserActionSet no actions needed for this module to work
-var objectBrowserActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(),
- actions: iampolicy.NewActionSet(),
-}
-
-// licenseActionSet no actions needed for this module to work
-var licenseActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(),
- actions: iampolicy.NewActionSet(),
-}
-
-// watchActionSet contains the list of admin actions required for this endpoint to work
-var watchActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ListenBucketNotificationAction,
- ),
-}
-
-// healActionSet contains the list of admin actions required for this endpoint to work
-var healActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.HealAdminAction,
- ),
-}
-
-// logsActionSet contains the list of admin actions required for this endpoint to work
-var logsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ConsoleLogAdminAction,
- ),
-}
-
-// toolsActionSet contains the list of admin actions required for this endpoint to work
-var toolsActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.ConsoleLogAdminAction,
- ),
-}
-
-// traceActionSet contains the list of admin actions required for this endpoint to work
-var traceActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.TraceAdminAction,
- ),
-}
-
-// healthInfoActionSet contains the list of admin actions required for this endpoint to work
-var healthInfoActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.HealthInfoAdminAction,
- ),
-}
-
-// logsActionSet contains the list of admin actions required for this endpoint to work
-var speedtestActionSet = ConfigurationActionSet{
- actionTypes: iampolicy.NewActionSet(
- iampolicy.AllAdminActions,
- ),
- actions: iampolicy.NewActionSet(
- iampolicy.HealthInfoAdminAction,
- ),
-}
-
-var displayRules = map[string]func() bool{
- // disable users page if LDAP is enabled
- users: func() bool {
- return !GetLDAPEnabled()
- },
- // disable groups page if LDAP is enabled
- groups: func() bool {
- return !GetLDAPEnabled()
- },
-}
-
-// endpointRules contains the mapping between endpoints and ActionSets, additional rules can be added here
-var endpointRules = map[string]ConfigurationActionSet{
- configuration: configurationActionSet,
- configurationItem: configurationActionSet,
- notificationEndpoints: configurationActionSet,
- notificationEndpointsAdd: configurationActionSet,
- notificationEndpointsAddAny: configurationActionSet,
- tiers: configurationActionSet,
- tiersAdd: configurationActionSet,
- tiersAddAny: configurationActionSet,
- users: usersActionSet,
- usersDetail: usersActionSet,
- groups: groupsActionSet,
- groupsDetails: groupsActionSet,
- iamPolicies: iamPoliciesActionSet,
- policiesDetail: iamPoliciesActionSet,
- dashboard: dashboardActionSet,
- metrics: dashboardActionSet,
- profiling: profilingActionSet,
- addBucket: bucketsActionSet,
- buckets: bucketsActionSet,
- bucketsGeneral: bucketsActionSet,
- bucketsAdmin: bucketsActionSet,
- bucketsAdminMain: bucketsActionSet,
- serviceAccounts: serviceAccountsActionSet,
- changePassword: changePasswordActionSet,
- remoteBuckets: remoteBucketsActionSet,
- replication: replicationActionSet,
- bucketsBrowser: objectBrowserActionSet,
- bucketsBrowserMenu: objectBrowserActionSet,
- bucketsBrowserList: objectBrowserActionSet,
- bucketsBrowserMain: objectBrowserActionSet,
- license: licenseActionSet,
- watch: watchActionSet,
- heal: healActionSet,
- trace: traceActionSet,
- logs: logsActionSet,
- auditLogs: logsActionSet,
- tools: toolsActionSet,
- healthInfo: healthInfoActionSet,
- speedtest: speedtestActionSet,
-}
-
-// operatorRules contains the mapping between endpoints and ActionSets for operator only mode
-var operatorRules = map[string]ConfigurationActionSet{
- tenants: tenantsActionSet,
- tenantsAdd: tenantsActionSet,
- tenantsAddSub: tenantsActionSet,
- tenantsDetail: tenantsActionSet,
- tenantHop: tenantsActionSet,
- tenantsDetailSummary: tenantsActionSet,
- tenantsDetailMetrics: tenantsActionSet,
- tenantsDetailPods: tenantsActionSet,
- tenantsDetailPools: tenantsActionSet,
- tenantsDetailVolumes: tenantsActionSet,
- tenantsDetailLicense: tenantsActionSet,
- tenantsDetailSecurity: tenantsActionSet,
- podsDetail: tenantsActionSet,
- storage: storageActionSet,
- storageDrives: storageActionSet,
- storageVolumes: storageActionSet,
- license: licenseActionSet,
-}
-
-// operatorOnly ENV variable
-var operatorOnly = GetOperatorMode()
-
-// GetActionsStringFromPolicy extract the admin/s3 actions from a given policy and return them in []string format
-//
-// ie:
-// {
-// "Version": "2012-10-17",
-// "Statement": [{
-// "Action": [
-// "admin:ServerInfo",
-// "admin:CreatePolicy",
-// "admin:GetUser"
-// ],
-// ...
-// },
-// {
-// "Action": [
-// "s3:ListenBucketNotification",
-// "s3:PutBucketNotification"
-// ],
-// ...
-// }
-// ]
-// }
-// Will produce an array like: ["admin:ServerInfo", "admin:CreatePolicy", "admin:GetUser", "s3:ListenBucketNotification", "s3:PutBucketNotification"]\
-func GetActionsStringFromPolicy(policy *iampolicy.Policy) []string {
- var actions []string
- for _, statement := range policy.Statements {
- // We only care about allowed actions
- if statement.Effect.IsAllowed(true) {
- for _, action := range statement.Actions.ToSlice() {
- actions = append(actions, string(action))
- }
- }
- }
- return actions
-}
-
-// actionsStringToActionSet convert a given string array to iampolicy.ActionSet structure
-// this avoids ending with duplicate actions
-func actionsStringToActionSet(actions []string) iampolicy.ActionSet {
- actionsSet := iampolicy.ActionSet{}
- for _, action := range actions {
- actionsSet.Add(iampolicy.Action(action))
- }
- return actionsSet
-}
-
-// GetAuthorizedEndpoints return a list of allowed endpoint based on a provided *iampolicy.Policy
-// ie: pages the user should have access based on his current privileges
-func GetAuthorizedEndpoints(actions []string) []string {
- rangeTake := endpointRules
-
- if operatorOnly {
- rangeTake = operatorRules
- }
- // Prepare new ActionSet structure that will hold all the user actions
- userAllowedAction := actionsStringToActionSet(actions)
- var allowedEndpoints []string
- for endpoint, rules := range rangeTake {
-
- // check if display rule exists for this endpoint, this will control
- // what user sees on the console UI
- if rule, ok := displayRules[endpoint]; ok {
- if rule != nil && !rule() {
- continue
- }
- }
-
- // check if user policy matches s3:* or admin:* typesIntersection
- endpointActionTypes := rules.actionTypes
- typesIntersection := endpointActionTypes.Intersection(userAllowedAction)
- if len(typesIntersection) == len(endpointActionTypes.ToSlice()) {
- allowedEndpoints = append(allowedEndpoints, endpoint)
- continue
- }
- // check if user policy matches explicitly defined endpoint required actions
- endpointRequiredActions := rules.actions
- actionsIntersection := endpointRequiredActions.Intersection(userAllowedAction)
- if len(actionsIntersection) == len(endpointRequiredActions.ToSlice()) {
- allowedEndpoints = append(allowedEndpoints, endpoint)
- }
- }
- return allowedEndpoints
-}
diff --git a/pkg/acl/endpoints_test.go b/pkg/acl/endpoints_test.go
deleted file mode 100644
index cab5b9c7f..000000000
--- a/pkg/acl/endpoints_test.go
+++ /dev/null
@@ -1,118 +0,0 @@
-// This file is part of MinIO Console Server
-// Copyright (c) 2021 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 .
-
-package acl
-
-import (
- "reflect"
- "testing"
-)
-
-type args struct {
- actions []string
-}
-
-type endpoint struct {
- name string
- args args
- want int
-}
-
-func validateEndpoints(t *testing.T, configs []endpoint) {
- for _, tt := range configs {
- t.Run(tt.name, func(t *testing.T) {
- if got := GetAuthorizedEndpoints(tt.args.actions); !reflect.DeepEqual(len(got), tt.want) {
- t.Errorf("GetAuthorizedEndpoints() = %v, want %v", len(got), tt.want)
- }
- })
- }
-}
-
-func TestGetAuthorizedEndpoints(t *testing.T) {
- tests := []endpoint{
- {
- name: "dashboard endpoint",
- args: args{
- []string{"admin:ServerInfo"},
- },
- want: 9,
- },
- {
- name: "policies endpoint",
- args: args{
- []string{
- "admin:CreatePolicy",
- "admin:DeletePolicy",
- "admin:GetPolicy",
- "admin:AttachUserOrGroupPolicy",
- "admin:ListUserPolicies",
- },
- },
- want: 9,
- },
- {
- name: "all admin endpoints",
- args: args{
- []string{
- "admin:*",
- },
- },
- want: 34,
- },
- {
- name: "all s3 endpoints",
- args: args{
- []string{
- "s3:*",
- },
- },
- want: 10,
- },
- {
- name: "all admin and s3 endpoints",
- args: args{
- []string{
- "admin:*",
- "s3:*",
- },
- },
- want: 37,
- },
- {
- name: "Console User - default endpoints",
- args: args{
- []string{},
- },
- want: 7,
- },
- }
-
- validateEndpoints(t, tests)
-}
-
-func TestOperatorOnlyEndpoints(t *testing.T) {
- operatorOnly = true
-
- tests := []endpoint{
- {
- name: "Operator Only - all admin endpoints",
- args: args{},
- want: 17,
- },
- }
-
- validateEndpoints(t, tests)
-}
diff --git a/pkg/apis/networking.gke.io/v1beta1/zz_generated.deepcopy.go b/pkg/apis/networking.gke.io/v1beta1/zz_generated.deepcopy.go
index 0f6544922..4c28cd7da 100644
--- a/pkg/apis/networking.gke.io/v1beta1/zz_generated.deepcopy.go
+++ b/pkg/apis/networking.gke.io/v1beta1/zz_generated.deepcopy.go
@@ -1,3 +1,4 @@
+//go:build !ignore_autogenerated
// +build !ignore_autogenerated
/*
diff --git a/pkg/apis/networking.gke.io/v1beta2/zz_generated.deepcopy.go b/pkg/apis/networking.gke.io/v1beta2/zz_generated.deepcopy.go
index 63a45b29c..ea5676623 100644
--- a/pkg/apis/networking.gke.io/v1beta2/zz_generated.deepcopy.go
+++ b/pkg/apis/networking.gke.io/v1beta2/zz_generated.deepcopy.go
@@ -1,3 +1,4 @@
+//go:build !ignore_autogenerated
// +build !ignore_autogenerated
/*
diff --git a/portal-ui/public/index.html b/portal-ui/public/index.html
index 564a2d7d5..05ca70533 100644
--- a/portal-ui/public/index.html
+++ b/portal-ui/public/index.html
@@ -66,10 +66,7 @@