def enforce(self, request):
        user_email = request.get('email', None)
        user_name = request.get('name', None)

        use_logged_in_user = request.get('use_logged_in_user', None)

        if use_logged_in_user:
            return MEMBERSHIP_ALLOWED

        if user_email is None:
            return MEMBERSHIP_ERROR

        # handle unsubscription requests/confirmation
        if self._is_unsubscribe(request):
            if self._is_confirm(request):

                if self.unsubscribe_pending_list.is_pending(user_email):

                    if not self._check_pin(request, self.unsubscribe_pending_list):
                        return MEMBERSHIP_PIN_MISMATCH

                    self.unsubscribe_pending_list.remove(user_email)
                    return MEMBERSHIP_ALLOWED
                else:
                    return MEMBERSHIP_DENIED

            else:
                pin = generate_pin()
                self.mail_sender.user_unsubscribe_request(user_email, user_name, pin)
                self.unsubscribe_pending_list.add(user_email, subscriber=True, pin=pin)
                return MEMBERSHIP_DEFERRED

        # handle subscription requests/confirmation
        if self._is_confirm(request):

            # if there is an email on the subject, we should use that one
            # instead of the email address passed in
            # if the from address is different but they still have the correct
            # pin number in the subject for the other email address, we should
            # confirm the subscription
            user_email = self._get_email_for_pin(request, self.subscribe_pending_list)

            if self.subscribe_pending_list.is_pending(user_email):

                if not self._check_pin(request, self.subscribe_pending_list):
                    return MEMBERSHIP_PIN_MISMATCH

                self.subscribe_pending_list.remove(user_email)
                return MEMBERSHIP_ALLOWED
            else:
                return MEMBERSHIP_DENIED

        else:
            if self.mem_list.is_allowed_sender(user_email):
                return MEMBERSHIP_ALLOWED
            pin = generate_pin()
            self.mail_sender.user_subscribe_request(user_email, user_name, pin)
            self.subscribe_pending_list.add(user_email, subscriber=True, pin=pin)
            return MEMBERSHIP_DEFERRED
    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. 3
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 enforce(self, request):
        user_email = request.get('email')
        user_name = request.get('name')
        action = request.get('action','').lower()
        if user_email is None:
            return MEMBERSHIP_ERROR

        if action:
            self.sub_mod_pending_list.remove(user_email)
            if action == 'approve':
                self.mem_list.subscribe(user_email)
                self.mail_sender.user_welcome(user_email, user_name)
            elif action == 'discard':
                pass
            elif action == 'reject':
                self.mail_sender.user_sub_rejected(user_email, user_name, request.get('reject_reason'))
            return MODERATION_SUCCESSFUL



        # handle unsubscription requests/confirmation
        if self._is_unsubscribe(request):
            if self._is_confirm(request):

                if self.unsubscribe_pending_list.is_pending(user_email):

                    if not self._check_pin(request, self.unsubscribe_pending_list):
                        return MEMBERSHIP_PIN_MISMATCH

                    self.unsubscribe_pending_list.remove(user_email)
                    return MEMBERSHIP_ALLOWED
                else:
                    return MEMBERSHIP_DENIED

            else:
                pin = generate_pin()
                self.mail_sender.user_unsubscribe_request(user_email, user_name, pin)
                self.unsubscribe_pending_list.add(user_email, subscriber=True, pin=pin)
                return MEMBERSHIP_DEFERRED

        # handle subscription requests/confirmation
        if self._is_confirm(request):

            if self.subscribe_pending_list.is_pending(user_email):
                if not self._check_pin(request, self.subscribe_pending_list):
                    return MEMBERSHIP_PIN_MISMATCH

                self.subscribe_pending_list.remove(user_email)

                if self.mem_list.is_allowed_sender(user_email):
                    return MEMBERSHIP_ALLOWED
                else:
                    self.sub_mod_pending_list.add(user_email, user_name=user_name)
                    self.mail_sender.user_sub_mod(user_email, user_name)
                    self.mail_sender.manager_mod(user_email, user_name)
                    return MEMBERSHIP_DEFERRED
            else:
                return MEMBERSHIP_DENIED

        else:
            if self.mem_list.is_allowed_sender(user_email):
                return MEMBERSHIP_ALLOWED
            pin = generate_pin()
            self.mail_sender.user_subscribe_request(user_email, user_name, pin)
            self.subscribe_pending_list.add(user_email, subscriber=True, pin=pin)
            return MEMBERSHIP_DEFERRED
Esempio n. 5
0
    def enforce(self, request):
        user_email = request.get('email')
        user_name = request.get('name')
        action = request.get('action', '').lower()
        if user_email is None:
            return MEMBERSHIP_ERROR

        if action:
            self.sub_mod_pending_list.remove(user_email)
            if action == 'approve':
                self.mem_list.subscribe(user_email)
                self.mail_sender.user_welcome(user_email, user_name)
            elif action == 'discard':
                pass
            elif action == 'reject':
                self.mail_sender.user_sub_rejected(
                    user_email, user_name, request.get('reject_reason'))
            return MODERATION_SUCCESSFUL

        # handle unsubscription requests/confirmation
        if self._is_unsubscribe(request):
            if self._is_confirm(request):

                if self.unsubscribe_pending_list.is_pending(user_email):

                    if not self._check_pin(request,
                                           self.unsubscribe_pending_list):
                        return MEMBERSHIP_PIN_MISMATCH

                    self.unsubscribe_pending_list.remove(user_email)
                    return MEMBERSHIP_ALLOWED
                else:
                    return MEMBERSHIP_DENIED

            else:
                pin = generate_pin()
                self.mail_sender.user_unsubscribe_request(
                    user_email, user_name, pin)
                self.unsubscribe_pending_list.add(user_email,
                                                  subscriber=True,
                                                  pin=pin)
                return MEMBERSHIP_DEFERRED

        # handle subscription requests/confirmation
        if self._is_confirm(request):

            if self.subscribe_pending_list.is_pending(user_email):
                if not self._check_pin(request, self.subscribe_pending_list):
                    return MEMBERSHIP_PIN_MISMATCH

                self.subscribe_pending_list.remove(user_email)

                if self.mem_list.is_allowed_sender(user_email):
                    return MEMBERSHIP_ALLOWED
                else:
                    self.sub_mod_pending_list.add(user_email,
                                                  user_name=user_name)
                    self.mail_sender.user_sub_mod(user_email, user_name)
                    self.mail_sender.manager_mod(user_email, user_name)
                    return MEMBERSHIP_DEFERRED
            else:
                return MEMBERSHIP_DENIED

        else:
            if self.mem_list.is_allowed_sender(user_email):
                return MEMBERSHIP_ALLOWED
            pin = generate_pin()
            self.mail_sender.user_subscribe_request(user_email, user_name, pin)
            self.subscribe_pending_list.add(user_email,
                                            subscriber=True,
                                            pin=pin)
            return MEMBERSHIP_DEFERRED
Esempio n. 6
0
    def enforce(self, request):
        user_email = request.get('email', None)
        user_name = request.get('name', None)

        use_logged_in_user = request.get('use_logged_in_user', None)

        if use_logged_in_user:
            return MEMBERSHIP_ALLOWED

        if user_email is None:
            return MEMBERSHIP_ERROR

        # handle unsubscription requests/confirmation
        if self._is_unsubscribe(request):
            if self._is_confirm(request):

                if self.unsubscribe_pending_list.is_pending(user_email):

                    if not self._check_pin(request,
                                           self.unsubscribe_pending_list):
                        return MEMBERSHIP_PIN_MISMATCH

                    self.unsubscribe_pending_list.remove(user_email)
                    return MEMBERSHIP_ALLOWED
                else:
                    return MEMBERSHIP_DENIED

            else:
                pin = generate_pin()
                self.mail_sender.user_unsubscribe_request(
                    user_email, user_name, pin)
                self.unsubscribe_pending_list.add(user_email,
                                                  subscriber=True,
                                                  pin=pin)
                return MEMBERSHIP_DEFERRED

        # handle subscription requests/confirmation
        if self._is_confirm(request):

            # if there is an email on the subject, we should use that one
            # instead of the email address passed in
            # if the from address is different but they still have the correct
            # pin number in the subject for the other email address, we should
            # confirm the subscription
            user_email = self._get_email_for_pin(request,
                                                 self.subscribe_pending_list)

            if self.subscribe_pending_list.is_pending(user_email):

                if not self._check_pin(request, self.subscribe_pending_list):
                    return MEMBERSHIP_PIN_MISMATCH

                self.subscribe_pending_list.remove(user_email)
                return MEMBERSHIP_ALLOWED
            else:
                return MEMBERSHIP_DENIED

        else:
            if self.mem_list.is_allowed_sender(user_email):
                return MEMBERSHIP_ALLOWED
            pin = generate_pin()
            self.mail_sender.user_subscribe_request(user_email, user_name, pin)
            self.subscribe_pending_list.add(user_email,
                                            subscriber=True,
                                            pin=pin)
            return MEMBERSHIP_DEFERRED