mirror of
https://github.com/juanfont/headscale.git
synced 2026-11-04 04:34:07 +09:00
state: write every user column in UpdateUser
This commit is contained in:
1 parent
e31a37a265
commit
2ae1260f39
2 files changed
+42
-2
No files matched your search
@@ -2311,3 +2311,42 @@ func TestReauthKeepsAnnouncedRoutes(t *testing.T) {
|
||||
assert.Equal(t, []netip.Prefix{route}, relogged.AnnouncedRoutes())
|
||||
assert.Equal(t, []netip.Prefix{route}, s.GetNodePrimaryRoutes(nodeID))
|
||||
}
|
||||
|
||||
func TestUpdateUserClearsColumns(t *testing.T) {
|
||||
_, s, nodeID := persistTestSetup(t)
|
||||
t.Cleanup(func() { _ = s.Close() })
|
||||
|
||||
node, ok := s.GetNodeByID(nodeID)
|
||||
require.True(t, ok)
|
||||
|
||||
userID := types.UserID(node.UserID().Get())
|
||||
_, _, err := s.UpdateUser(userID, func(user *types.User) error {
|
||||
user.DisplayName = "Display"
|
||||
user.Email = "persist@example.com"
|
||||
user.ProfilePicURL = "https://example.com/picture"
|
||||
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
_, _, err = s.RenameUser(userID, "renamed")
|
||||
require.NoError(t, err)
|
||||
user, err := s.GetUserByID(userID)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "Display", user.DisplayName)
|
||||
assert.Equal(t, "persist@example.com", user.Email)
|
||||
assert.Equal(t, "https://example.com/picture", user.ProfilePicURL)
|
||||
_, _, err = s.UpdateUser(userID, func(user *types.User) error {
|
||||
user.DisplayName = ""
|
||||
user.Email = ""
|
||||
user.ProfilePicURL = ""
|
||||
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, err)
|
||||
user, err = s.GetUserByID(userID)
|
||||
require.NoError(t, err)
|
||||
assert.Empty(t, user.DisplayName)
|
||||
assert.Empty(t, user.Email)
|
||||
assert.Empty(t, user.ProfilePicURL)
|
||||
assert.Equal(t, "renamed", user.Name)
|
||||
}
|
||||
@@ -538,8 +538,9 @@ func (s *State) UpdateUser(userID types.UserID, updateFn func(*types.User) error
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Use Updates() to only update modified fields, preserving unchanged values.
|
||||
err = tx.Updates(user).Error
|
||||
// Select every column so cleared fields are written. Save would also
|
||||
// insert the row again if a delete removed it meanwhile.
|
||||
err = tx.Select("*").Updates(user).Error //nolint:unqueryvet // UPDATE, not a read
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("updating user: %w", err)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user