Skip to content

Commit e0667ef

Browse files
committed
local user/group
1 parent e1d7b89 commit e0667ef

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

src/redturtle/pasldap/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616

1717
# increase logging
1818
logging.getLogger("node.ext.ldap").setLevel(logging.DEBUG)
19+
# XXX: attenzione nei log di debug "node" potrebbe mette anche le credenziali
20+
# o il token dell'utente.
21+
# logging.getLogger("node").setLevel(logging.DEBUG)
22+
1923

2024
# TODO: implements readonly property in pas.plugins.ldap
2125
ldap_readonly = False

src/redturtle/pasldap/resilient.py

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
from persistent.mapping import PersistentMapping
2+
from plone import api
23
from plone.protect.utils import safeWrite
34
from Products.PluggableAuthService.UserPropertySheet import UserPropertySheet
4-
5-
# import logging
65
from redturtle.pasldap import ldap_readonly
76
from 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:

src/redturtle/pasldap/subscribers/startup.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,12 @@ def site_load(event):
4949

5050
def check_pas(plugin):
5151
# import pdb; pdb.set_trace()
52+
5253
# TODO: enumerateUsers deve essere dopo, rispetto a source_users e mutable_properties
5354
# in modo che le risoluzioni locali avvengano subito
55+
56+
# TODO: anche in authenticate probabilmente sarebbe meglio avere pasldap dopo quelli delle sessioni/jwt/source ?
57+
5458
logger.info(" Check plugin: %s", plugin.getId())
5559
if plugin.is_plugin_active(pas_interfaces.IGroupEnumerationPlugin):
5660
logger.warning(

0 commit comments

Comments
 (0)