Skip to content

Commit 2e5cd29

Browse files
authored
chore: load 'assign_default' value from legacy value (coder#17428)
If this value was set before v2.19.0, then assign_default was in a json field that would not match. And it would default to `false`. This corrects that.
1 parent c4d3dd2 commit 2e5cd29

File tree

2 files changed

+79
-0
lines changed

2 files changed

+79
-0
lines changed

coderd/idpsync/organization.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,17 @@ type OrganizationSyncSettings struct {
213213
}
214214

215215
func (s *OrganizationSyncSettings) Set(v string) error {
216+
legacyCheck := make(map[string]any)
217+
err := json.Unmarshal([]byte(v), &legacyCheck)
218+
if assign, ok := legacyCheck["AssignDefault"]; err == nil && ok {
219+
// The legacy JSON key was 'AssignDefault' instead of 'assign_default'
220+
// Set the default value from the legacy if it exists.
221+
isBool, ok := assign.(bool)
222+
if ok {
223+
s.AssignDefault = isBool
224+
}
225+
}
226+
216227
return json.Unmarshal([]byte(v), s)
217228
}
218229

coderd/idpsync/organizations_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package idpsync_test
22

33
import (
44
"database/sql"
5+
"fmt"
56
"testing"
67

78
"github.com/golang-jwt/jwt/v4"
@@ -19,6 +20,73 @@ import (
1920
"github.com/coder/coder/v2/testutil"
2021
)
2122

23+
func TestFromLegacySettings(t *testing.T) {
24+
t.Parallel()
25+
26+
legacy := func(assignDefault bool) string {
27+
return fmt.Sprintf(`{
28+
"Field":"groups",
29+
"Mapping":{
30+
"engineering":[
31+
"10b2bd19-f5ca-4905-919f-bf02e95e3b6a"
32+
]
33+
},
34+
"AssignDefault":%t
35+
}`, assignDefault)
36+
}
37+
38+
t.Run("AssignDefault,True", func(t *testing.T) {
39+
t.Parallel()
40+
41+
var settings idpsync.OrganizationSyncSettings
42+
settings.AssignDefault = true
43+
err := settings.Set(legacy(true))
44+
require.NoError(t, err)
45+
46+
require.Equal(t, settings.Field, "groups", "field")
47+
require.Equal(t, settings.Mapping, map[string][]uuid.UUID{
48+
"engineering": {
49+
uuid.MustParse("10b2bd19-f5ca-4905-919f-bf02e95e3b6a"),
50+
},
51+
}, "mapping")
52+
require.True(t, settings.AssignDefault, "assign default")
53+
})
54+
55+
t.Run("AssignDefault,False", func(t *testing.T) {
56+
t.Parallel()
57+
58+
var settings idpsync.OrganizationSyncSettings
59+
settings.AssignDefault = true
60+
err := settings.Set(legacy(false))
61+
require.NoError(t, err)
62+
63+
require.Equal(t, settings.Field, "groups", "field")
64+
require.Equal(t, settings.Mapping, map[string][]uuid.UUID{
65+
"engineering": {
66+
uuid.MustParse("10b2bd19-f5ca-4905-919f-bf02e95e3b6a"),
67+
},
68+
}, "mapping")
69+
require.False(t, settings.AssignDefault, "assign default")
70+
})
71+
72+
t.Run("CorrectAssign", func(t *testing.T) {
73+
t.Parallel()
74+
75+
var settings idpsync.OrganizationSyncSettings
76+
settings.AssignDefault = true
77+
err := settings.Set(legacy(false))
78+
require.NoError(t, err)
79+
80+
require.Equal(t, settings.Field, "groups", "field")
81+
require.Equal(t, settings.Mapping, map[string][]uuid.UUID{
82+
"engineering": {
83+
uuid.MustParse("10b2bd19-f5ca-4905-919f-bf02e95e3b6a"),
84+
},
85+
}, "mapping")
86+
require.False(t, settings.AssignDefault, "assign default")
87+
})
88+
}
89+
2290
func TestParseOrganizationClaims(t *testing.T) {
2391
t.Parallel()
2492

0 commit comments

Comments
 (0)