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])

Reply via email to