equal
deleted
inserted
replaced
14 |
14 |
15 |
15 |
16 # import standard library |
16 # import standard library |
17 import logging |
17 import logging |
18 logger = logging.getLogger('PyAMS (security)') |
18 logger = logging.getLogger('PyAMS (security)') |
|
19 |
|
20 from functools import lru_cache |
19 |
21 |
20 # import interfaces |
22 # import interfaces |
21 from pyams_security.interfaces import ISecurityManager, ICredentialsPlugin, IAuthenticationPlugin, \ |
23 from pyams_security.interfaces import ISecurityManager, ICredentialsPlugin, IAuthenticationPlugin, \ |
22 IDirectoryPlugin, AuthenticatedPrincipalEvent, IProtectedObject, IGroupsAwareDirectoryPlugin |
24 IDirectoryPlugin, AuthenticatedPrincipalEvent, IProtectedObject, IGroupsAwareDirectoryPlugin |
23 from pyramid.interfaces import IAuthenticationPolicy |
25 from pyramid.interfaces import IAuthenticationPolicy |
160 if not protection.inherit_parent_roles: |
162 if not protection.inherit_parent_roles: |
161 break |
163 break |
162 return principals |
164 return principals |
163 |
165 |
164 # IDirectoryPlugin interface methods |
166 # IDirectoryPlugin interface methods |
165 def get_principal(self, principal_id): |
167 @lru_cache(maxsize=100) |
|
168 def get_principal(self, principal_id, info=True): |
166 if not principal_id: |
169 if not principal_id: |
167 return UnknownPrincipal |
170 return UnknownPrincipal |
168 for plugin in self.get_directory_plugins(): |
171 for plugin in self.get_directory_plugins(): |
169 try: |
172 try: |
170 principal = plugin.get_principal(principal_id) |
173 principal = plugin.get_principal(principal_id, info) |
171 except: |
174 except: |
172 logging.debug("Can't get principal {0}!".format(principal_id), exc_info=True) |
175 logging.debug("Can't get principal {0}!".format(principal_id), exc_info=True) |
173 continue |
176 continue |
174 else: |
177 else: |
175 if principal is not None: |
178 if principal is not None: |