This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch cc/11102-part1a
in repository https://gitbox.apache.org/repos/asf/allura.git

commit bb2c5e5febcde2ef22a8258366a12e18f46061aa
Author: Carlos Cruz <[email protected]>
AuthorDate: Mon May 11 14:02:30 2026 -0600

    [#8604] Add the display_name_encrypted field to the User class
---
 Allura/allura/model/auth.py            |  5 +++++
 Allura/allura/tests/model/test_auth.py | 31 +++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index b1bfda837..af93abc59 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -248,6 +248,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
diff --git a/Allura/allura/tests/model/test_auth.py 
b/Allura/allura/tests/model/test_auth.py
index 2496c8ab1..fee927131 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -404,6 +404,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])

Reply via email to