Skip to content

Commit 2e5cd29

Browse files
authored
chore: load 'assign_default' value from legacy value (#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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy