11from persistent .mapping import PersistentMapping
2+ from plone import api
23from plone .protect .utils import safeWrite
34from Products .PluggableAuthService .UserPropertySheet import UserPropertySheet
4-
5- # import logging
65from redturtle .pasldap import ldap_readonly
76from redturtle .pasldap import logger
87
98
10- # logger = logging.getLogger(__name__)
11-
129# potential users in the Zope acl_users
13- RESERVED_LOGINS = ["root" , "admin" , "adminrt" ]
14- RESERVED_IDS = ["root" , "admin" , "adminrt" ]
10+ RESERVED_IDS = [
11+ "root" ,
12+ "admin" ,
13+ "adminrt" ,
14+ "operatori_pratiche" ,
15+ "Administrators" ,
16+ "Site Administrators" ,
17+ "AuthenticatedUsers" ,
18+ ]
19+ RESERVED_LOGINS = RESERVED_IDS
1520
1621# [node.ext.ldap:511][MainThread] LDAP search with filter: (&(objectClass=person)(sAMAccountName=root))
1722
@@ -75,13 +80,20 @@ def _wrapper(
7580 if cache_key :
7681 logger .info ("MISS: enumerateUsers %s" , cache_key )
7782 if not users :
78- # TODO: verificare se il risultato vuoto è un errore (da non mettere in cache) o veramente
79- # un risultato vuoto (da mettere in cache? solo temporaneamente?)
80- logger .warning (
81- "enumerateUsers %s not found (possible error? not caching?)" ,
82- cache_key ,
83- )
84- return users
83+ local_users = api .portal .get_tool ("acl_users" ).source_users
84+ local_groups = api .portal .get_tool ("acl_users" ).source_groups
85+ if not local_users .enumerateUsers (
86+ id = id , login = login , exact_match = True
87+ ) and not local_groups .enumerateGroups (
88+ id = id , login = login , exact_match = True
89+ ):
90+ # TODO: verificare se il risultato vuoto è un errore (da non mettere in cache) o veramente
91+ # un risultato vuoto (da mettere in cache? solo temporaneamente?)
92+ logger .warning (
93+ "enumerateUsers %s not found (possible error? not caching?)" ,
94+ cache_key ,
95+ )
96+ return users
8597 if not hasattr (self , "_cache_users" ):
8698 self ._cache_users = PersistentMapping ()
8799 safeWrite (self )
@@ -99,6 +111,10 @@ def _wrapper(self, user_or_group, request=None):
99111 if ldap_readonly :
100112 # TODO: analyze when invalidate, maybe after the user logged in
101113 cache_key = user_or_group .getId ()
114+ # TODO: user_or_group.isGroup() and group plugin not active ....
115+ if user_or_group .getId () in RESERVED_IDS :
116+ return {}
117+
102118 if hasattr (self , "_cache_properties" ) and isinstance (
103119 self ._cache_properties .get (cache_key ), dict
104120 ):
@@ -111,13 +127,18 @@ def _wrapper(self, user_or_group, request=None):
111127 else :
112128 logger .info ("MISS: getPropertiesForUser %s" , cache_key )
113129 sheet = orig (self , user_or_group , request )
114- if not hasattr (sheet , "_properties" ):
130+ if sheet == {}:
131+ # XXX: no result, caching no result
132+ properties = {}
133+ elif not hasattr (sheet , "_properties" ):
115134 logger .warning ("missing _properies for %s" , cache_key )
116135 return sheet
136+ else :
137+ properties = sheet ._properties
117138 if not hasattr (self , "_cache_properties" ):
118139 self ._cache_properties = PersistentMapping ()
119140 safeWrite (self )
120- self ._cache_properties [cache_key ] = sheet . _properties
141+ self ._cache_properties [cache_key ] = properties
121142 safeWrite (self ._cache_properties )
122143 return sheet
123144 else :
0 commit comments