Skip to content

Commit b7dbff8

Browse files
fix: reduces information returned by settings api when accessed anonymously (argoproj#25346)
Signed-off-by: Patroklos Papapetrou <ppapapetrou76@gmail.com>
1 parent 8373059 commit b7dbff8

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# v3.2 to 3.3
2+
3+
## Breaking Changes
4+
5+
### Anonymous call to Settings API returns fewer fields
6+
7+
The Settings API now returns less information when accessed anonymously.
8+
It no longer returns the `resourceOverrides` field which is considered sensitive information.

server/settings/settings.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ func (s *Server) Get(ctx context.Context, _ *settingspkg.SettingsQuery) (*settin
9999
URL: argoCDSettings.URL,
100100
AdditionalURLs: argoCDSettings.AdditionalURLs,
101101
AppLabelKey: appInstanceLabelKey,
102-
ResourceOverrides: overrides,
103102
StatusBadgeEnabled: argoCDSettings.StatusBadgeEnabled,
104103
StatusBadgeRootUrl: argoCDSettings.StatusBadgeRootUrl,
105104
KustomizeOptions: &v1alpha1.KustomizeOptions{
@@ -132,6 +131,7 @@ func (s *Server) Get(ctx context.Context, _ *settingspkg.SettingsQuery) (*settin
132131
set.UiBannerPermanent = argoCDSettings.UiBannerPermanent
133132
set.UiBannerPosition = argoCDSettings.UiBannerPosition
134133
set.ControllerNamespace = s.mgr.GetNamespace()
134+
set.ResourceOverrides = overrides
135135
}
136136
if sessionmgr.LoggedIn(ctx) {
137137
set.PasswordPattern = argoCDSettings.PasswordPattern

server/settings/settings_test.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"testing"
66

7+
"github.com/golang-jwt/jwt/v5"
78
"github.com/stretchr/testify/assert"
89
"github.com/stretchr/testify/require"
910
corev1 "k8s.io/api/core/v1"
@@ -14,7 +15,20 @@ import (
1415
"github.com/argoproj/argo-cd/v3/util/settings"
1516
)
1617

17-
const testNamespace = "default"
18+
const (
19+
testNamespace = "default"
20+
resourceOverrides = `{
21+
"jsonPointers": [
22+
""
23+
],
24+
"jqPathExpressions": [
25+
""
26+
],
27+
"managedFieldsManagers": [
28+
""
29+
]
30+
}`
31+
)
1832

1933
func fixtures(ctx context.Context, data map[string]string) (*fake.Clientset, *settings.SettingsManager) {
2034
kubeClient := fake.NewClientset(&corev1.ConfigMap{
@@ -79,4 +93,25 @@ func TestSettingsServer(t *testing.T) {
7993
require.NoError(t, err)
8094
assert.Equal(t, "instance", resp.AppLabelKey)
8195
})
96+
97+
t.Run("TestGetResourceOverridesNotLoggedIn", func(t *testing.T) {
98+
settingsServer := newServer(map[string]string{
99+
"resource.customizations.ignoreResourceUpdates.all": resourceOverrides,
100+
})
101+
resp, err := settingsServer.Get(t.Context(), nil)
102+
require.NoError(t, err)
103+
assert.Nil(t, resp.ResourceOverrides)
104+
})
105+
106+
t.Run("TestGetResourceOverridesLoggedIn", func(t *testing.T) {
107+
//nolint:staticcheck // it's ok to use built-in type string as key for value for testing purposes
108+
loggedInContext := context.WithValue(t.Context(), "claims", &jwt.MapClaims{"iss": "qux", "sub": "foo", "email": "bar", "groups": []string{"baz"}})
109+
settingsServer := newServer(map[string]string{
110+
"resource.customizations.ignoreResourceUpdates.all": resourceOverrides,
111+
})
112+
resp, err := settingsServer.Get(loggedInContext, nil)
113+
require.NoError(t, err)
114+
assert.NotNil(t, resp.ResourceOverrides)
115+
assert.NotEmpty(t, resp.ResourceOverrides["*/*"])
116+
})
82117
}

0 commit comments

Comments
 (0)