def unmake_digest_subscriber(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             # submitted email, but has user; check and clear both
             # digest_members and digest_emails to be safe
             if (user_id not in self.digest_members and
                 subscriber not in self.digest_emails):
                 raise ValueError('%s (username: %s) is not a digest'
                                  ' subscriber' % (subscriber, user_id))
             if user_id in self.digest_members:
                 del(self.digest_members[user_id])
             if subscriber in self.digest_emails:
                 del(self.digest_emails[subscriber])
         else:
             # submitted email, no user
             if subscriber not in self.digest_emails:
                 raise ValueError('%s is not a digest subscriber'
                                  % subscriber)
             del(self.digest_emails[subscriber])
     else:
         # submitted user id; check and clear both digest_members
         # and digest_emails to be safe
         email = lookup_email(subscriber, self.context)
         if (subscriber not in self.digest_members and
             email not in self.digest_emails):
             raise ValueError('%s is not a digest subscriber'
                              % subscriber)
         if subscriber in self.digest_members:
             del(self.digest_members[subscriber])
         if email in self.digest_emails:
             del(self.digest_emails[email])
 def make_digest_subscriber(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             # submitted email address, is connected to a user
             if user_id not in self.members:
                 raise ValueError('%s (username: %s) is not a subscriber'
                                  % (subscriber, user_id))
             if subscriber in self.digest_emails:
                 # clean up lingering email digest sub
                 del(self.digest_emails[subscriber])
             if user_id not in self.digest_members:
                 self.digest_members[user_id] = None
         else:
             # submitted email address, no connected user
             if subscriber not in self.emails:
                 raise ValueError('%s is not a subscriber' % subscriber)
             if subscriber not in self.digest_emails:
                 self.digest_emails[subscriber] = None
     else:
         # submitted user id
         email = lookup_email(subscriber, self.context)
         if subscriber not in self.members:
             raise ValueError('%s is not a subscriber' % subscriber)
         if email in self.digest_emails:
             # clean up lingering email digest sub
             del(self.digest_emails[email])
         if subscriber not in self.digest_members:
             self.digest_members[subscriber] = None
    def enforce(self, request):
        action = request.get('action')
        user = request.get('email')
        removals = ['remove_allowed_sender', 'unsubscribe']
        if action is None or user is None: 
            return MEMBERSHIP_ERROR

        email = self._get_email_from(user)
        if email is None or email == '' or not is_email(email) and action not in removals:
            return MEMBERSHIP_DENIED

        if action == 'add_allowed_sender':
            return MEMBERSHIP_ALLOWED
        elif action == 'subscribe':
            pin = generate_pin()

            self.mail_sender.user_subscribe_request(email, user, pin)                
            self.subscribe_pending_list.add(email, subscriber=True, pin=pin)
            return MEMBERSHIP_DEFERRED
        elif action == 'remove_allowed_sender':
            return MEMBERSHIP_ALLOWED
        elif action == 'unsubscribe':
            if email: # we might be unsubbing a bogus member
                self.mail_sender.user_unsubscribe_confirm(email, user)
            return MEMBERSHIP_ALLOWED
Esempio n. 4
0
    def send_to_managers(self, subject, message, extra_headers={}):
        # create a list of valid manager emails
        manager_emails = []
        for manager in self.context.managers:
            if not is_email(manager):
                manager = lookup_email(manager.encode('ascii'), self.context)
            if manager not in manager_emails and manager:
                manager_emails.append(manager)

        if not len(manager_emails):
            return False

        list_manager_emails = ', '.join(manager_emails)
        sender = '"%s" <%s>' % ('[' + self.context.title + '] List Manager',
                                self.context.manager_email)
        try:
            message = translate(message)
        except UnicodeDecodeError:
            # Argh, a raw byte string.
            encoding = getSiteEncoding(self)
            message = translate(message.decode(encoding))

        self.context.sendCommandRequestMail(list_manager_emails,
                                            subject,
                                            translate(message),
                                            sender,
                                            extra_headers=extra_headers)
Esempio n. 5
0
    def enforce(self, request):
        action = request.get('action')
        user = request.get('email')
        removals = ['remove_allowed_sender', 'unsubscribe']
        if action is None or user is None:
            return MEMBERSHIP_ERROR

        email = self._get_email_from(user)
        if email is None or email == '' or not is_email(
                email) and action not in removals:
            return MEMBERSHIP_DENIED

        if action == 'add_allowed_sender':
            return MEMBERSHIP_ALLOWED
        elif action == 'subscribe':
            pin = generate_pin()

            self.mail_sender.user_subscribe_request(email, user, pin)
            self.subscribe_pending_list.add(email, subscriber=True, pin=pin)
            return MEMBERSHIP_DEFERRED
        elif action == 'remove_allowed_sender':
            return MEMBERSHIP_ALLOWED
        elif action == 'unsubscribe':
            if email:  # we might be unsubbing a bogus member
                self.mail_sender.user_unsubscribe_confirm(email, user)
            return MEMBERSHIP_ALLOWED
 def remove_allowed_sender(self, allowed_sender, send_notify=True):
     was_subscribed = False
     if is_email(allowed_sender):
         user_id = lookup_member_id(allowed_sender, self.context)
         if user_id:
             if user_id in self.members:
                 record = self.members.pop(user_id)
                 if record.get("subscriber") == True:
                     was_subscribed = True
         if allowed_sender in self.emails:
             record = self.emails.pop(allowed_sender)
             if record.get("subscriber") == True:
                 was_subscribed = True
     else:
         email = lookup_email(allowed_sender, self.context)
         if email in self.emails:
             record = self.email.pop(email)
             if record.get("subscriber") == True:
                 was_subscribed = True
         if allowed_sender in self.members:
             record = self.members.pop(allowed_sender)
             if record.get("subscriber") == True:
                 was_subscribed = True
     if send_notify:
         if was_subscribed:
             self._notify_removed_subscriber(allowed_sender)
         self._notify_removed_allowed_sender(allowed_sender)
Esempio n. 7
0
    def pending_status(self, user):
        annot = IAnnotations(self.context)
        listen_annot = annot.setdefault(PROJECTNAME, OOBTree())

        subscribe_pending_list = getAdapter(self.context,
                                            IMembershipPendingList,
                                            'pending_sub_email')
        unsubscribe_pending_list = getAdapter(self.context,
                                              IMembershipPendingList,
                                              'pending_unsub_email')
        sub_mod_pending_list = getAdapter(self.context, IMembershipPendingList,
                                          'pending_sub_mod_email')

        email_address = is_email(user) and user or lookup_email(
            user, self.context)

        inlist = lambda lst: lst.is_pending(email_address)
        status = lambda msg, lst: msg + lst.get_pending_time(email_address)

        status_msg = ''
        if inlist(subscribe_pending_list):
            status_msg += status(
                _(u'subscription pending user confirmation: '),
                subscribe_pending_list)
        if inlist(unsubscribe_pending_list):
            status_msg += status(
                _(u'unsubscription pending user confirmation: '),
                unsubscribe_pending_list)
        if inlist(sub_mod_pending_list):
            status_msg += status(
                _(u'subscription pending manager moderation: '),
                sub_mod_pending_list)

        return status_msg
 def is_digest_subscriber(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             return (user_id in self.digest_members or
                     subscriber in self.digest_emails)
         return subscriber in self.digest_emails
     email = lookup_email(subscriber, self.context)
     return (subscriber in self.digest_members or
             email in self.digest_emails)
 def is_allowed_sender(self, allowed_sender):
     if is_email(allowed_sender):
         user_id = lookup_member_id(allowed_sender, self.context)
         if user_id:
             return user_id in self.members or allowed_sender in self.emails
         else:
             return allowed_sender in self.emails
     else:
         email = lookup_email(allowed_sender, self.context)
         return allowed_sender in self.members or email in self.emails
 def is_subscribed(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             return self.members.get(user_id, {}).get('subscriber', False) or self.emails.get(subscriber, {}).get('subscriber', False)
         else:
             return self.emails.get(subscriber, {}).get('subscriber', False)
     else:
         email = lookup_email(subscriber, self.context)
         return self.members.get(subscriber, {}).get('subscriber', False) or self.emails.get(email, {}).get('subscriber', False)
 def subscribe(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             self._add_member(user_id)
         else:
             if subscriber not in self.emails:
                 self.emails[subscriber] = OOBTree()
     else:
         self._add_member(subscriber)
 def is_subscribed(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             return user_id in self.members or subscriber in self.emails
         else:
             return subscriber in self.emails
     else:
         email = lookup_email(subscriber, self.context)
         return subscriber in self.members or email in self.emails
    def enforce(self, request):
        action = request.get('action')
        user = request.get('email')
        if action is None or user is None: 
            return MEMBERSHIP_ERROR

        user_email = is_email(user) and user or lookup_email(user, self.context)
        user_name = is_email(user) and lookup_member_id(user, self.context) or user

        if action == 'add_allowed_sender':
            self.a_s_mod_pending_list.add(user)
        elif action == 'subscribe':
            if self.mem_list.is_allowed_sender(user):
                return MEMBERSHIP_ALLOWED
            self.sub_mod_pending_list.add(user, user_name=user_name)
        else:
            return MEMBERSHIP_DENIED           

        self.mail_sender.manager_mod(user_email, user_name)
        return MEMBERSHIP_DEFERRED
 def add_allowed_sender(self, allowed_sender, send_notify=True):
     if is_email(allowed_sender):
         user_id = lookup_member_id(allowed_sender, self.context)
         if user_id:
             self._add_member(user_id, send_notify)
         else:
             if allowed_sender not in self.emails:
                 self.emails[allowed_sender] = {'subscriber':False}
                 if send_notify:
                     self._notify_added_a_s(allowed_sender)
     else:
         self._add_member(allowed_sender, send_notify)
Esempio n. 15
0
    def enforce(self, request):
        action = request.get('action')
        user = request.get('email')
        if action is None or user is None:
            return MEMBERSHIP_ERROR

        user_email = is_email(user) and user or lookup_email(
            user, self.context)
        user_name = is_email(user) and lookup_member_id(user,
                                                        self.context) or user

        if action == 'add_allowed_sender':
            self.a_s_mod_pending_list.add(user)
        elif action == 'subscribe':
            if self.mem_list.is_allowed_sender(user):
                return MEMBERSHIP_ALLOWED
            self.sub_mod_pending_list.add(user, user_name=user_name)
        else:
            return MEMBERSHIP_DENIED

        self.mail_sender.manager_mod(user_email, user_name)
        return MEMBERSHIP_DEFERRED
 def unsubscribe(self, subscriber, send_notify=True):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             if user_id in self.members:
                 self.members[user_id] = {'subscriber':False}
         if subscriber in self.emails:
             self.emails[subscriber] = {'subscriber':False}
     else:
         if subscriber in self.members:
             self.members[subscriber] = {'subscriber':False}
     if send_notify:
         self._notify_removed_subscriber(subscriber)
 def unsubscribe(self, subscriber):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             if user_id in self.members:
                 self.members.pop(user_id)
         if subscriber in self.emails:
             self.emails.pop(subscriber)
     else:
         email = lookup_email(subscriber, self.context)
         if email in self.emails:
             self.email.pop(email)
         if subscriber in self.members:
             self.members.pop(subscriber)
 def subscribe(self, subscriber, send_notify=True):
     if is_email(subscriber):
         user_id = lookup_member_id(subscriber, self.context)
         if user_id:
             if user_id not in self.members and send_notify:
                 self._notify_added_a_s(user_id)
             self.members[user_id] = {'subscriber':True}
             if subscriber in self.emails:
                 self.emails.pop(subscriber)
         else:
             if subscriber not in self.emails and send_notify:
                 self._notify_added_a_s(subscriber)
             self.emails[subscriber] = {'subscriber':True}
     else:
         if subscriber not in self.members and send_notify:
             self._notify_added_a_s(subscriber)
         self.members[subscriber] = {'subscriber':True}
         email = lookup_email(subscriber, self.context)
         if email in self.emails:
             self.emails.pop(email)
     if send_notify:
         self._notify_added_subscriber(subscriber)
    def pending_status(self, user):
        annot = IAnnotations(self.context)
        listen_annot = annot.setdefault(PROJECTNAME, OOBTree())

        subscribe_pending_list = getAdapter(self.context, IMembershipPendingList, 'pending_sub_email')
        unsubscribe_pending_list = getAdapter(self.context, IMembershipPendingList, 'pending_unsub_email')
        sub_mod_pending_list = getAdapter(self.context, IMembershipPendingList, 'pending_sub_mod_email')

        email_address = is_email(user) and user or lookup_email(user, self.context)

        inlist = lambda lst: lst.is_pending(email_address)
        status = lambda msg, lst: msg + lst.get_pending_time(email_address)

        status_msg = ''
        if inlist(subscribe_pending_list):
            status_msg += status('subscription pending user confirmation: ', subscribe_pending_list)
        if inlist(unsubscribe_pending_list):
            status_msg += status('unsubscription pending user confirmation: ', unsubscribe_pending_list)
        if inlist(sub_mod_pending_list):
            status_msg += status('subscription pending manager moderation: ', sub_mod_pending_list)

        return status_msg
Esempio n. 20
0
    def send_to_managers(self, subject, message, extra_headers={}):
        # create a list of valid manager emails 
        manager_emails = []
        for manager in self.context.managers:
            if not is_email(manager):
                manager = lookup_email(manager.encode('ascii'), self.context)
            if manager not in manager_emails and manager:
                manager_emails.append(manager)

        if not len(manager_emails):
            return False

        list_manager_emails = ', '.join(manager_emails)
        sender = '"%s" <%s>' % ('[' + self.context.title + '] List Manager', self.context.manager_email)
        try:
            message = translate(message)
        except UnicodeDecodeError:
            # Argh, a raw byte string.
            encoding = getSiteEncoding(self)
            message = translate(message.decode(encoding))
            
        self.context.sendCommandRequestMail(list_manager_emails, subject, translate(message), sender, extra_headers=extra_headers)
 def _get_email_from(self, member_or_email):
     return is_email(member_or_email) and member_or_email \
                                       or lookup_email(member_or_email, self.context)
 def _notify_added_a_s(self, user):
     email = is_email(user) and user or lookup_email(user, self.context)
     if email:
         notify(AllowedSenderPromotion(self.context, email))
 def _notify_added_subscriber(self, user):
     email = is_email(user) and user or lookup_email(user, self.context)
     if email:
         notify(SubscriberPromotion(self.context, email))
 def _notify_removed_subscriber(self, user):
     email = is_email(user) and user or lookup_email(user, self.context)
     if email:
         notify(SubscriberRemoved(self.context, email))
 def _notify_removed_allowed_sender(self, user):
     email = is_email(user) and user or lookup_email(user, self.context)
     if email:
         notify(AllowedSenderRemoved(self.context, email))
Esempio n. 26
0
 def _get_email_from(self, member_or_email):
     return is_email(member_or_email) and member_or_email \
                                       or lookup_email(member_or_email, self.context)