Skip to content

Commit

Permalink
Improved security.get_user_from_criteria to add email and descripti…
Browse files Browse the repository at this point in the history
…on in ldap results
  • Loading branch information
sgeulette committed Nov 7, 2023
1 parent c0aa9ed commit c576319
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
4 changes: 2 additions & 2 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ Changelog
0.79 (unreleased)
-----------------

- Nothing changed yet.

- Improved `security.get_user_from_criteria` to add email and description in ldap results.
[sgeulette]

0.78 (2023-10-27)
-----------------
Expand Down
13 changes: 12 additions & 1 deletion src/imio/helpers/security.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from collective.fingerpointing.logger import log_info
from collective.fingerpointing.utils import get_request_information
from itertools import chain
from plone import api
from plone.api.validation import at_least_one_of
from plone.api.validation import mutually_exclusive_parameters
from random import choice
Expand Down Expand Up @@ -107,14 +108,24 @@ def get_user_from_criteria(context, email=None, fullname=None):
:return: list of dict describing users
[{'description': u'Bob Smith', 'title': u'Bob Smith', 'principal_type': 'user', 'userid': 'bsm',
'email': 'bsm@mail.com', 'pluginid': 'mutable_properties', 'login': 'bsm', 'id': 'bsm'}]
[{'dn': 'CN=Luc.Oil,OU=Service_Social,OU=Utilisateurs,DC=cpas,DC=local', 'sAMAccountName':
'luc.oil', 'title': 'luc.oil', 'editurl': 'ldap-plugin/acl_users/manage_userrecords?user_dn=...'
'principal_type': 'user', 'userid': 'luc.oil', 'pluginid': 'ldap-plugin', 'sn': '', 'login': 'luc.oil',
'id': 'luc.oil', 'cn': ''}]
"""
hunter = getMultiAdapter((context, context.REQUEST), name='pas_search')
criteria = {}
if email:
criteria['email'] = email
if fullname:
criteria['fullname'] = fullname
return hunter.searchUsers(**criteria)
res = hunter.searchUsers(**criteria)
for dic in res:
if 'email' not in dic or 'description' not in dic: # ldap
member = api.user.get(userid=dic['userid'])
dic['email'] = member.getProperty('email', default='') # following plonepas.plugins.property.enumerateUsers
dic['description'] = member.getProperty('fullname', default=dic['userid'])
return res


def get_zope_root():
Expand Down
1 change: 1 addition & 0 deletions src/imio/helpers/tests/test_security.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ def test_get_user_from_criteria(self):
self.assertEqual(len(get_user_from_criteria(self.portal, fullname='Stéph')), 1)
self.assertEqual(len(get_user_from_criteria(self.portal, email='.be')), 2)
self.assertEqual(len(get_user_from_criteria(self.portal, fullname='Smith')), 2)
self.assertEqual(len(get_user_from_criteria(self.portal, fullname='')), 3)

def test_setup_logger(self):
# just call it to check that it is not broken
Expand Down

0 comments on commit c576319

Please sign in to comment.