1.1 --- a/imiptools/handlers/__init__.py Thu May 12 23:05:48 2016 +0200
1.2 +++ b/imiptools/handlers/__init__.py Thu May 12 23:15:18 2016 +0200
1.3 @@ -22,8 +22,8 @@
1.4 from email.mime.text import MIMEText
1.5 from imiptools.client import ClientForObject
1.6 from imiptools.config import MANAGER_PATH, MANAGER_URL, MANAGER_URL_SCHEME
1.7 -from imiptools.data import get_address, get_uri, get_sender_identities, \
1.8 - uri_dict, uri_item
1.9 +from imiptools.data import check_delegation, get_address, get_uri, \
1.10 + get_sender_identities, uri_dict, uri_item
1.11 from socket import gethostname
1.12
1.13 # References to the Web interface.
1.14 @@ -150,13 +150,25 @@
1.15 else:
1.16 return mapping
1.17
1.18 + def is_delegation(self):
1.19 +
1.20 + """
1.21 + Return whether delegation is occurring by returning any delegator.
1.22 + """
1.23 +
1.24 + attendee_map = uri_dict(self.obj.get_value_map("ATTENDEE"))
1.25 + attendee_attr = attendee_map.get(self.user)
1.26 + return check_delegation(attendee_map, self.user, attendee_attr)
1.27 +
1.28 def require_organiser(self, from_organiser=True):
1.29
1.30 """
1.31 - Return the organiser for the current object, filtered for the sender or
1.32 - recipient of interest. Return None if no identities are eligible.
1.33 + Return the normalised organiser for the current object, filtered for the
1.34 + sender or recipient of interest. Return None if no identities are
1.35 + eligible.
1.36
1.37 - The organiser identity is normalized.
1.38 + If the sender is not the organiser but is delegating to the recipient,
1.39 + the actual organiser is returned.
1.40 """
1.41
1.42 organiser, organiser_attr = organiser_item = uri_item(self.obj.get_item("ORGANIZER"))
1.43 @@ -164,11 +176,16 @@
1.44 if not organiser:
1.45 return None
1.46
1.47 - # Only provide details for an organiser who sent/receives the message.
1.48 + # Check the delegate status of the recipient.
1.49 +
1.50 + delegated = from_organiser and self.is_delegation()
1.51 +
1.52 + # Only provide details for an organiser who sent/receives the message or
1.53 + # is presiding over a delegation.
1.54
1.55 organiser_filter_fn = from_organiser and self.filter_by_senders or self.filter_by_recipient
1.56
1.57 - if not organiser_filter_fn(dict([organiser_item])):
1.58 + if not delegated and not organiser_filter_fn(dict([organiser_item])):
1.59 return None
1.60
1.61 # Test against any previously-received organiser details.