Skip to content

Commit 4ba319a

Browse files
committed
ensure provider id is found out of order
Signed-off-by: Kristoffer Dalby <[email protected]>
1 parent b2ab5ac commit 4ba319a

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

hscontrol/policy/acls.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,10 @@ func filterNodesByUser(nodes types.Nodes, users []types.User, userToken string)
991991
var potentialUsers []types.User
992992
for _, user := range users {
993993
if user.ProviderIdentifier == userToken {
994-
potentialUsers = append(potentialUsers, user)
994+
// If a user is matching with a known unique field,
995+
// disgard all other users and only keep the current
996+
// user.
997+
potentialUsers = []types.User{user}
995998

996999
break
9971000
}

hscontrol/policy/acls_test.go

+26-2
Original file line numberDiff line numberDiff line change
@@ -869,13 +869,18 @@ func Test_expandPorts(t *testing.T) {
869869
}
870870
}
871871

872-
func Test_listNodesInUser(t *testing.T) {
872+
func Test_filterNodesByUser(t *testing.T) {
873873
users := []types.User{
874874
{Model: gorm.Model{ID: 1}, Name: "marc"},
875875
{Model: gorm.Model{ID: 2}, Name: "joe", Email: "[email protected]"},
876876
{Model: gorm.Model{ID: 3}, Name: "mikael", Email: "[email protected]", ProviderIdentifier: "http://oidc.org/1234"},
877877
{Model: gorm.Model{ID: 4}, Name: "mikael2", Email: "[email protected]"},
878878
{Model: gorm.Model{ID: 5}, Name: "mikael", Email: "[email protected]"},
879+
{Model: gorm.Model{ID: 6}, Name: "http://oidc.org/1234", Email: "[email protected]"},
880+
{Model: gorm.Model{ID: 7}, Name: "1"},
881+
{Model: gorm.Model{ID: 8}, Name: "alex", Email: "[email protected]"},
882+
{Model: gorm.Model{ID: 9}, Name: "[email protected]"},
883+
{Model: gorm.Model{ID: 10}, Email: "http://oidc.org/1234"},
879884
}
880885

881886
type args struct {
@@ -947,6 +952,7 @@ func Test_listNodesInUser(t *testing.T) {
947952
nodes: types.Nodes{
948953
&types.Node{ID: 1, User: users[1]},
949954
&types.Node{ID: 2, User: users[2]},
955+
&types.Node{ID: 8, User: users[7]},
950956
},
951957
952958
},
@@ -1057,13 +1063,25 @@ func Test_listNodesInUser(t *testing.T) {
10571063
&types.Node{ID: 3, User: users[2]},
10581064
&types.Node{ID: 4, User: users[3]},
10591065
&types.Node{ID: 5, User: users[4]},
1066+
&types.Node{ID: 8, User: users[7]},
10601067
},
10611068
10621069
},
10631070
want: types.Nodes{
10641071
&types.Node{ID: 2, User: users[1]},
10651072
},
10661073
},
1074+
{
1075+
name: "email-as-username-duplicate",
1076+
args: args{
1077+
nodes: types.Nodes{
1078+
&types.Node{ID: 1, User: users[7]},
1079+
&types.Node{ID: 2, User: users[8]},
1080+
},
1081+
1082+
},
1083+
want: nil,
1084+
},
10671085
{
10681086
name: "all-users-no-email-random-order",
10691087
args: args{
@@ -1087,6 +1105,7 @@ func Test_listNodesInUser(t *testing.T) {
10871105
&types.Node{ID: 3, User: users[2]},
10881106
&types.Node{ID: 4, User: users[3]},
10891107
&types.Node{ID: 5, User: users[4]},
1108+
&types.Node{ID: 6, User: users[5]},
10901109
},
10911110
user: "http://oidc.org/1234",
10921111
},
@@ -1103,6 +1122,7 @@ func Test_listNodesInUser(t *testing.T) {
11031122
&types.Node{ID: 3, User: users[2]},
11041123
&types.Node{ID: 4, User: users[3]},
11051124
&types.Node{ID: 5, User: users[4]},
1125+
&types.Node{ID: 6, User: users[5]},
11061126
},
11071127
user: "http://oidc.org/4321",
11081128
},
@@ -1116,7 +1136,11 @@ func Test_listNodesInUser(t *testing.T) {
11161136
rand.Shuffle(len(ns), func(i, j int) {
11171137
ns[i], ns[j] = ns[j], ns[i]
11181138
})
1119-
got := filterNodesByUser(ns, users, test.args.user)
1139+
us := users
1140+
rand.Shuffle(len(us), func(i, j int) {
1141+
us[i], us[j] = us[j], us[i]
1142+
})
1143+
got := filterNodesByUser(ns, us, test.args.user)
11201144
sort.Slice(got, func(i, j int) bool {
11211145
return got[i].ID < got[j].ID
11221146
})

0 commit comments

Comments
 (0)