@@ -10,8 +10,9 @@ import (
10
10
11
11
"github.com/coder/coder/v2/coderd/database"
12
12
"github.com/coder/coder/v2/coderd/database/dbfake"
13
+ "github.com/coder/coder/v2/coderd/database/dbgen"
13
14
"github.com/coder/coder/v2/coderd/database/dbtestutil"
14
- "github.com/coder/coder/v2/coderd/database/dbtime "
15
+ "github.com/coder/coder/v2/coderd/util/slice "
15
16
"github.com/coder/coder/v2/testutil"
16
17
)
17
18
@@ -35,29 +36,41 @@ func TestOIDCClaims(t *testing.T) {
35
36
alice := g .withLink (database .LoginTypeOIDC , toJSON (extraKeys {
36
37
UserLinkClaims : database.UserLinkClaims {
37
38
IDTokenClaims : map [string ]interface {}{
38
- "sub" : "alice" ,
39
- },
40
- UserInfoClaims : map [string ]interface {}{
41
- "sub" : "alice" ,
39
+ "sub" : "alice" ,
40
+ "alice-id" : "from-bob" ,
42
41
},
42
+ UserInfoClaims : nil ,
43
43
},
44
44
// Always should be a no-op
45
45
Foo : "bar" ,
46
46
}))
47
47
bob := g .withLink (database .LoginTypeOIDC , toJSON (database.UserLinkClaims {
48
48
IDTokenClaims : map [string ]interface {}{
49
- "sub" : "bob" ,
49
+ "sub" : "bob" ,
50
+ "bob-id" : "from-bob" ,
51
+ "array" : []string {
52
+ "a" , "b" , "c" ,
53
+ },
54
+ "map" : map [string ]interface {}{
55
+ "key" : "value" ,
56
+ "foo" : "bar" ,
57
+ },
58
+ "nil" : nil ,
50
59
},
51
60
UserInfoClaims : map [string ]interface {}{
52
- "sub" : "bob" ,
61
+ "sub" : "bob" ,
62
+ "bob-info" : []string {},
63
+ "number" : 42 ,
53
64
},
54
65
}))
55
66
charlie := g .withLink (database .LoginTypeOIDC , toJSON (database.UserLinkClaims {
56
67
IDTokenClaims : map [string ]interface {}{
57
- "sub" : "charlie" ,
68
+ "sub" : "charlie" ,
69
+ "charlie-id" : "charlie" ,
58
70
},
59
71
UserInfoClaims : map [string ]interface {}{
60
- "sub" : "charlie" ,
72
+ "sub" : "charlie" ,
73
+ "charlie-info" : "charlie" ,
61
74
},
62
75
}))
63
76
@@ -87,17 +100,23 @@ func TestOIDCClaims(t *testing.T) {
87
100
orgA := dbfake .Organization (t , db ).Members (
88
101
append (problematics ,
89
102
alice ,
90
- bob )... ,
103
+ bob ,
104
+ )... ,
91
105
).Do ()
92
106
orgB := dbfake .Organization (t , db ).Members (
93
107
append (problematics ,
108
+ bob ,
94
109
charlie ,
95
110
)... ,
96
111
).Do ()
97
112
98
113
// Verify the OIDC claim fields
99
- requireClaims (t , db , orgA .Org .ID , []string {"sub" })
100
- requireClaims (t , db , orgB .Org .ID , []string {"sub" })
114
+ always := []string {"array" , "map" , "nil" , "number" }
115
+ expectA := append ([]string {"sub" , "alice-id" , "bob-id" , "bob-info" }, always ... )
116
+ expectB := append ([]string {"sub" , "bob-id" , "bob-info" , "charlie-id" , "charlie-info" }, always ... )
117
+ requireClaims (t , db , orgA .Org .ID , expectA )
118
+ requireClaims (t , db , orgB .Org .ID , expectB )
119
+ requireClaims (t , db , uuid .Nil , slice .Unique (append (expectA , expectB ... )))
101
120
}
102
121
103
122
func requireClaims (t * testing.T , db database.Store , orgID uuid.UUID , want []string ) {
@@ -129,34 +148,23 @@ func (g userGenerator) user(lt database.LoginType, createLink bool, rawJSON json
129
148
130
149
t .Helper ()
131
150
132
- u , err := db .InsertUser (context .Background (), database.InsertUserParams {
133
- ID : uuid .New (),
134
- Email : testutil .GetRandomName (t ),
135
- Username : testutil .GetRandomName (t ),
136
- Name : testutil .GetRandomName (t ),
137
- CreatedAt : dbtime .Now (),
138
- UpdatedAt : dbtime .Now (),
139
- RBACRoles : []string {},
151
+ u := dbgen .User (t , db , database.User {
140
152
LoginType : lt ,
141
- Status : string (database .UserStatusActive ),
142
153
})
143
- require .NoError (t , err )
144
154
145
155
if ! createLink {
146
156
return u
147
157
}
148
158
149
- link , err := db . InsertUserLink ( context . Background (), database.InsertUserLinkParams {
159
+ link := dbgen . UserLink ( t , db , database.UserLink {
150
160
UserID : u .ID ,
151
161
LoginType : lt ,
152
- Claims : database.UserLinkClaims {},
153
162
})
154
- require .NoError (t , err )
155
163
156
164
if sql , ok := db .(rawUpdater ); ok {
157
165
// The only way to put arbitrary json into the db for testing edge cases.
158
166
// Making this a public API would be a mistake.
159
- err = sql .UpdateUserLinkRawJSON (context .Background (), u .ID , rawJSON )
167
+ err : = sql .UpdateUserLinkRawJSON (context .Background (), u .ID , rawJSON )
160
168
require .NoError (t , err )
161
169
} else {
162
170
// no need to test the json key logic in dbmem. Everything is type safe.
0 commit comments