|
|
@@ -1193,37 +1193,86 @@ func TestManager_WithProvisionedUsers(t *testing.T) {
|
|
|
require.Equal(t, "*", users[1].Name)
|
|
|
}
|
|
|
|
|
|
-func TestManager_DoNotUpdateNonProvisionedUsers(t *testing.T) {
|
|
|
+func TestManager_UpdateNonProvisionedUsersToProvisionedUsers(t *testing.T) {
|
|
|
f := filepath.Join(t.TempDir(), "user.db")
|
|
|
conf := &Config{
|
|
|
Filename: f,
|
|
|
DefaultAccess: PermissionReadWrite,
|
|
|
ProvisionEnabled: true,
|
|
|
Users: []*User{},
|
|
|
- Access: map[string][]*Grant{},
|
|
|
+ Access: map[string][]*Grant{
|
|
|
+ Everyone: {
|
|
|
+ {TopicPattern: "food", Permission: PermissionRead},
|
|
|
+ },
|
|
|
+ },
|
|
|
}
|
|
|
a, err := NewManager(conf)
|
|
|
require.Nil(t, err)
|
|
|
|
|
|
// Manually add user
|
|
|
require.Nil(t, a.AddUser("philuser", "manual", RoleUser, false))
|
|
|
+ require.Nil(t, a.AllowAccess("philuser", "stats", PermissionReadWrite))
|
|
|
+ require.Nil(t, a.AllowAccess("philuser", "food", PermissionReadWrite))
|
|
|
+
|
|
|
+ users, err := a.Users()
|
|
|
+ require.Nil(t, err)
|
|
|
+ require.Len(t, users, 2)
|
|
|
+ require.Equal(t, "philuser", users[0].Name)
|
|
|
+ require.Equal(t, RoleUser, users[0].Role)
|
|
|
+ require.False(t, users[0].Provisioned) // Manually added
|
|
|
+
|
|
|
+ grants, err := a.Grants("philuser")
|
|
|
+ require.Nil(t, err)
|
|
|
+ require.Equal(t, 2, len(grants))
|
|
|
+ require.Equal(t, "stats", grants[0].TopicPattern)
|
|
|
+ require.Equal(t, PermissionReadWrite, grants[0].Permission)
|
|
|
+ require.False(t, grants[0].Provisioned) // Manually added
|
|
|
+ require.Equal(t, "food", grants[1].TopicPattern)
|
|
|
+ require.Equal(t, PermissionReadWrite, grants[1].Permission)
|
|
|
+ require.False(t, grants[1].Provisioned) // Manually added
|
|
|
+
|
|
|
+ grants, err = a.Grants(Everyone)
|
|
|
+ require.Nil(t, err)
|
|
|
+ require.Equal(t, 1, len(grants))
|
|
|
+ require.Equal(t, "food", grants[0].TopicPattern)
|
|
|
+ require.Equal(t, PermissionRead, grants[0].Permission)
|
|
|
+ require.True(t, grants[0].Provisioned) // Provisioned entry
|
|
|
|
|
|
// Re-open the DB (second app start)
|
|
|
require.Nil(t, a.db.Close())
|
|
|
conf.Users = []*User{
|
|
|
- {Name: "philuser", Hash: "$2a$10$AAAU21sX1uhZamTLJXHuxgVC0Z/GKISibrKCLohPgtG7yIxSk4C", Role: RoleAdmin},
|
|
|
+ {Name: "philuser", Hash: "$2a$10$AAAU21sX1uhZamTLJXHuxgVC0Z/GKISibrKCLohPgtG7yIxSk4C", Role: RoleUser},
|
|
|
+ }
|
|
|
+ conf.Access = map[string][]*Grant{
|
|
|
+ "philuser": {
|
|
|
+ {TopicPattern: "stats", Permission: PermissionReadWrite},
|
|
|
+ },
|
|
|
}
|
|
|
- conf.Access = map[string][]*Grant{}
|
|
|
a, err = NewManager(conf)
|
|
|
require.Nil(t, err)
|
|
|
|
|
|
- // Check that the provisioned users are there
|
|
|
- users, err := a.Users()
|
|
|
+ // Check that the user was "upgraded" to a provisioned user
|
|
|
+ users, err = a.Users()
|
|
|
require.Nil(t, err)
|
|
|
require.Len(t, users, 2)
|
|
|
require.Equal(t, "philuser", users[0].Name)
|
|
|
- require.Equal(t, RoleUser, users[0].Role) // Should not have been updated
|
|
|
- require.NotEqual(t, "$2a$10$AAAU21sX1uhZamTLJXHuxgVC0Z/GKISibrKCLohPgtG7yIxSk4C", users[0].Hash)
|
|
|
+ require.Equal(t, RoleUser, users[0].Role)
|
|
|
+ require.Equal(t, "$2a$10$AAAU21sX1uhZamTLJXHuxgVC0Z/GKISibrKCLohPgtG7yIxSk4C", users[0].Hash)
|
|
|
+ require.True(t, users[0].Provisioned) // Updated to provisioned!
|
|
|
+
|
|
|
+ grants, err = a.Grants("philuser")
|
|
|
+ require.Nil(t, err)
|
|
|
+ require.Equal(t, 2, len(grants))
|
|
|
+ require.Equal(t, "stats", grants[0].TopicPattern)
|
|
|
+ require.Equal(t, PermissionReadWrite, grants[0].Permission)
|
|
|
+ require.True(t, grants[0].Provisioned) // Updated to provisioned!
|
|
|
+ require.Equal(t, "food", grants[1].TopicPattern)
|
|
|
+ require.Equal(t, PermissionReadWrite, grants[1].Permission)
|
|
|
+ require.False(t, grants[1].Provisioned) // Manually added grants stay!
|
|
|
+
|
|
|
+ grants, err = a.Grants(Everyone)
|
|
|
+ require.Nil(t, err)
|
|
|
+ require.Empty(t, grants)
|
|
|
}
|
|
|
|
|
|
func TestToFromSQLWildcard(t *testing.T) {
|