Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117779567
D485.1775245963.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
D485.1775245963.diff
View Options
diff --git a/wallace/module_invitationpolicy.py b/wallace/module_invitationpolicy.py
--- a/wallace/module_invitationpolicy.py
+++ b/wallace/module_invitationpolicy.py
@@ -774,14 +774,14 @@
return True
-def list_user_folders(user_rec, type):
+def list_user_folders(user_rec, _type):
"""
Get a list of the given user's private calendar/tasks folders
"""
global imap
# return cached list
- if user_rec.has_key('_imap_folders'):
+ if '_imap_folders' in user_rec:
return user_rec['_imap_folders']
result = []
@@ -789,39 +789,84 @@
if not imap_proxy_auth(user_rec):
return result
- folders = imap.list_folders('*')
- log.debug(_("List %r folders for user %r: %r") % (type, user_rec['mail'], folders), level=8)
+ folders = imap.get_metadata('*')
+
+ log.debug(
+ _("List %r folders for user %r: %r") % (
+ _type,
+ user_rec['mail'],
+ folders
+ ),
+ level=8
+ )
(ns_personal, ns_other, ns_shared) = imap.namespaces()
- for folder in folders:
- # exclude shared and other user's namespace
- if ns_other is not None and folder.startswith(ns_other) and '_delegated_mailboxes' in user_rec:
- # allow shared folders from delegators
- if len([_mailbox for _mailbox in user_rec['_delegated_mailboxes'] if folder.startswith(ns_other + _mailbox + '/')]) == 0:
+ _folders = {}
+
+ # Filter the folders by type relevance
+ for folder, metadata in folders.items():
+ key = '/shared' + FOLDER_TYPE_ANNOTATION
+ if key in metadata:
+ if metadata[key].startswith(_type):
+ _folders[folder] = metadata
+
+ key = '/private' + FOLDER_TYPE_ANNOTATION
+ if key in metadata:
+ if metadata[key].startswith(_type):
+ _folders[folder] = metadata
+
+ for folder, metadata in _folders.items():
+ folder_delegated = False
+
+ # Exclude shared and other user's namespace
+ #
+ # First, test if this is another users folder
+ if ns_other is not None and folder.startswith(ns_other):
+ # If we have no delegated mailboxes, we can skip this entirely
+ if '_delegated_mailboxes' not in user_rec:
+ continue
+
+ for _m in user_rec['_delegated_mailboxes']:
+ if folder.startswith(ns_other + _m + '/'):
+ folder_delegated = True
+
+ if not folder_delegated:
continue
+
# TODO: list shared folders the user has write privileges ?
- if ns_shared is not None and len([_ns for _ns in ns_shared if folder.startswith(_ns)]) > 0:
- continue
-
- metadata = imap.get_metadata(folder)
- log.debug(_("IMAP metadata for %r: %r") % (folder, metadata), level=9)
- if metadata.has_key(folder) and ( \
- metadata[folder].has_key('/shared' + FOLDER_TYPE_ANNOTATION) and metadata[folder]['/shared' + FOLDER_TYPE_ANNOTATION].startswith(type) \
- or metadata[folder].has_key('/private' + FOLDER_TYPE_ANNOTATION) and metadata[folder]['/private' + FOLDER_TYPE_ANNOTATION].startswith(type)):
- result.append(folder)
-
- if metadata[folder].has_key('/private' + FOLDER_TYPE_ANNOTATION):
- # store default folder in user record
- if metadata[folder]['/private' + FOLDER_TYPE_ANNOTATION].endswith('.default'):
- user_rec['_default_folder'] = folder
-
- # store private and confidential folders in user record
- if metadata[folder]['/private' + FOLDER_TYPE_ANNOTATION].endswith('.confidential') and not user_rec.has_key('_confidential_folder'):
+ if ns_shared is not None:
+ if len([_ns for _ns in ns_shared if folder.startswith(_ns)]) > 0:
+ continue
+
+ key = '/shared' + FOLDER_TYPE_ANNOTATION
+ if key in metadata:
+ if metadata[key].startswith(_type):
+ result.append(folder)
+
+ key = '/private' + FOLDER_TYPE_ANNOTATION
+ if key in metadata:
+ if metadata[key].startswith(_type):
+ result.append(folder)
+
+ # store default folder in user record
+ if metadata[key].endswith('.default'):
+ user_rec['_default_folder'] = folder
+ continue
+
+ # store private and confidential folders in user record
+ if metadata[key].endswith('.confidential'):
+ if '_confidential_folder' not in user_rec:
user_rec['_confidential_folder'] = folder
- if metadata[folder]['/private' + FOLDER_TYPE_ANNOTATION].endswith('.private') and not user_rec.has_key('_private_folder'):
+
+ continue
+
+ if metadata[key].endswith('.private'):
+ if '_private_folder' not in user_rec:
user_rec['_private_folder'] = folder
+ continue
+
# cache with user record
user_rec['_imap_folders'] = result
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Apr 3, 7:52 PM (4 h, 56 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18823335
Default Alt Text
D485.1775245963.diff (5 KB)
Attached To
Mode
D485: Address inefficiencies and possible misfunction over delegated mailboxes in other user namespace
Attached
Detach File
Event Timeline