This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git
The following commit(s) were added to refs/heads/master by this push:
new daceb4ccf [#8604] Add the display_name_encrypted field to the User
class
daceb4ccf is described below
commit daceb4ccf8a75c2acbe6dfa94b8deeda87776865
Author: Carlos Cruz <[email protected]>
AuthorDate: Fri Apr 24 11:21:54 2026 -0600
[#8604] Add the display_name_encrypted field to the User class
---
Allura/allura/model/auth.py | 6 ++++++
Allura/allura/tests/model/test_auth.py | 31 +++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 89df3aa9a..05322ca82 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -258,6 +258,11 @@ def __get__(self, instance, cls=None):
display_name = instance._cache_display_name =
instance.get_pref('display_name')
return display_name
+ def __set__(self, instance, value):
+ instance.__dict__.pop('_cache_display_name', None)
+ super().__set__(instance, value)
+ instance.display_name_encrypted =
type(instance).encr(state(instance).document[self.name])
+
class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
SALT_LEN = 8
@@ -303,6 +308,7 @@ class __mongometa__:
# Additional top-level fields can/should be accessed with get/set_pref also
# Not sure why we didn't put them within the 'preferences' dictionary :(
display_name: str = FieldPropertyDisplayName(str)
+ display_name_encrypted = FieldProperty(S.Binary, if_missing=None)
# Personal data
sex = FieldProperty(
S.OneOf('Male', 'Female', 'Other', 'Unknown',
diff --git a/Allura/allura/tests/model/test_auth.py
b/Allura/allura/tests/model/test_auth.py
index 54d25b828..a035f4466 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -415,6 +415,37 @@ def test_user_index(self):
# provided bby auth provider
assert 'user_registration_date_dt' in idx
+ def test_display_name_encrypted_is_populated_on_creation(self):
+ user = M.User(
+ username='encrypted-display-name-test',
+ display_name='Encrypted Display Name')
+ ThreadLocalODMSession.flush_all()
+
+ assert user.display_name == 'Encrypted Display Name'
+ assert user.get_pref('display_name') == 'Encrypted Display Name'
+ assert user.display_name_encrypted
+ assert user.display_name_encrypted == M.User.encr('Encrypted Display
Name')
+ assert M.User.decr(user.display_name_encrypted) == 'Encrypted Display
Name'
+ assert user.__dict__['__ming__'].state.document.display_name ==
'Encrypted Display Name'
+
+ def test_set_display_name_pref_updates_encrypted_field_and_cache(self):
+ user = M.User(
+ username='display-name-cache-test',
+ display_name='Original Display Name')
+ ThreadLocalODMSession.flush_all()
+ original_encrypted_display_name = user.display_name_encrypted
+
+ assert user.display_name == 'Original Display Name'
+ assert user._cache_display_name == 'Original Display Name'
+
+ user.set_pref('display_name', 'Updated Display Name')
+
+ assert not hasattr(user, '_cache_display_name')
+ assert user.display_name_encrypted != original_encrypted_display_name
+ assert user.display_name_encrypted == M.User.encr('Updated Display
Name')
+ assert user.display_name == 'Updated Display Name'
+ assert user.get_pref('display_name') == 'Updated Display Name'
+
def test_user_index_none_values(self):
c.user.email_addresses = [None]
c.user.set_pref('telnumbers', [None])