コード例 #1
0
ファイル: user.py プロジェクト: simonsmiley/postorius
def user_list_options(request, list_id):
    utils.set_other_emails(request.user)
    mlist = List.objects.get_or_404(fqdn_listname=list_id)
    mm_user = MailmanUser.objects.get(address=request.user.email)
    subscription = None
    for s in mm_user.subscriptions:
        if s.role == 'member' and s.list_id == list_id:
            subscription = s
            break
    if not subscription:
        raise Http404(_('Subscription does not exist'))
    preferences = subscription.preferences
    if request.method == 'POST':
        form = UserPreferences(request.POST)
        if form.is_valid():
            for key in form.cleaned_data.keys():
                if form.cleaned_data[key] is not None:
                    # None: nothing set yet. Remember to remove this test
                    # when Mailman accepts None as a "reset to default"
                    # value.
                    preferences[key] = form.cleaned_data[key]
            preferences.save()
            messages.success(request, _('Your preferences have been updated.'))
            return redirect('user_list_options', list_id)
        else:
            messages.error(request, _('Something went wrong.'))
    else:
        form = UserPreferences(initial=subscription.preferences)
    user_emails = [request.user.email] + request.user.other_emails
    subscription_form = ChangeSubscriptionForm(
        user_emails, initial={'email': subscription.email})
    return render(request, 'postorius/user/list_options.html',
                  {'form': form, 'list': mlist,
                   'change_subscription_form': subscription_form})
コード例 #2
0
ファイル: user.py プロジェクト: mayank-agarwal-96/postorius
def user_profile(request):
    utils.set_other_emails(request.user)
    try:
        mm_user = MailmanUser.objects.get_or_create_from_django(request.user)
    except MailmanApiError:
        return utils.render_api_error(request)
    if request.method == 'POST':
        if request.POST.get('formname') == 'displayname':
            display_name_form = ChangeDisplayNameForm(request.POST)
            form = AddressActivationForm(
                initial={'user_email': request.user.email})
            if display_name_form.is_valid():
                name = display_name_form.cleaned_data['display_name']
                try:
                    mm_user.display_name = name
                    mm_user.save()
                except MailmanApiError:
                    return utils.render_api_error(request)
                except HTTPError as e:
                    messages.error(request, e)
                else:
                    messages.success(request, _('Display name changed'))
                return redirect('user_profile')
        else:
            display_name_form = ChangeDisplayNameForm(
                initial={'display_name': mm_user.display_name})
            form = AddressActivationForm(request.POST)
            if form.is_valid():
                profile, c = (
                    AddressConfirmationProfile.objects.update_or_create(
                        email=form.cleaned_data['email'],
                        user=request.user,
                        defaults={'activation_key': uuid.uuid4().hex}))
                try:
                    profile.send_confirmation_link(request)
                    messages.success(
                        request,
                        _('Please follow the instructions sent via'
                          ' email to confirm the address'))
                    return redirect('user_profile')
                except (SMTPException, socket_error) as e:
                    if (not isinstance(e, SMTPException)
                            and e.errno != errno.ECONNREFUSED):
                        raise e
                    profile.delete()
                    messages.error(
                        request,
                        _('Currently emails can not be added,'
                          ' please try again later'))
    else:
        form = AddressActivationForm(
            initial={'user_email': request.user.email})
        display_name_form = ChangeDisplayNameForm(
            initial={'display_name': mm_user.display_name})
    return render(request, 'postorius/user/profile.html', {
        'mm_user': mm_user,
        'form': form,
        'name_form': display_name_form
    })
コード例 #3
0
def user_is_in_list_roster(user, mailing_list, roster):
    if not user.is_authenticated():
        return False
    if not hasattr(user, 'other_emails'):
        set_other_emails(user)
    addresses = set([user.email]) | set(user.other_emails)
    if addresses & set(getattr(mailing_list, roster)):
        return True  # At least one address is in the roster
    return False
コード例 #4
0
ファイル: user.py プロジェクト: mayank-agarwal-96/postorius
def user_subscriptions(request):
    """Shows the subscriptions of a user."""
    utils.set_other_emails(request.user)
    try:
        mm_user = MailmanUser.objects.get_or_create_from_django(request.user)
    except MailmanApiError:
        return utils.render_api_error(request)
    memberships = [m for m in mm_user.subscriptions if m.role == 'member']
    return render(request, 'postorius/user/subscriptions.html',
                  {'memberships': memberships})
コード例 #5
0
ファイル: user.py プロジェクト: simonsmiley/postorius
def user_subscriptions(request):
    """Shows the subscriptions of a user."""
    utils.set_other_emails(request.user)
    try:
        mm_user = MailmanUser.objects.get_or_create_from_django(request.user)
    except MailmanApiError:
        return utils.render_api_error(request)
    memberships = [m for m in mm_user.subscriptions if m.role == 'member']
    return render(request, 'postorius/user/subscriptions.html',
                  {'memberships': memberships})
コード例 #6
0
ファイル: user.py プロジェクト: simonsmiley/postorius
def user_profile(request):
    utils.set_other_emails(request.user)
    try:
        mm_user = MailmanUser.objects.get_or_create_from_django(request.user)
    except MailmanApiError:
        return utils.render_api_error(request)
    if request.method == 'POST':
        if request.POST.get('formname') == 'displayname':
            display_name_form = ChangeDisplayNameForm(request.POST)
            form = AddressActivationForm(
                initial={'user_email': request.user.email})
            if display_name_form.is_valid():
                name = display_name_form.cleaned_data['display_name']
                try:
                    mm_user.display_name = name
                    mm_user.save()
                except MailmanApiError:
                    return utils.render_api_error(request)
                except HTTPError as e:
                    messages.error(request, e)
                else:
                    messages.success(request, _('Display name changed'))
                return redirect('user_profile')
        else:
            display_name_form = ChangeDisplayNameForm(
                initial={'display_name': mm_user.display_name})
            form = AddressActivationForm(request.POST)
            if form.is_valid():
                profile, c = (
                    AddressConfirmationProfile.objects.update_or_create(
                        email=form.cleaned_data['email'], user=request.user,
                        defaults={'activation_key': uuid.uuid4().hex}))
                try:
                    profile.send_confirmation_link(request)
                    messages.success(request, _(
                                     'Please follow the instructions sent via'
                                     ' email to confirm the address'))
                    return redirect('user_profile')
                except (SMTPException, socket_error) as e:
                    if (not isinstance(e, SMTPException) and
                            e.errno != errno.ECONNREFUSED):
                        raise e
                    profile.delete()
                    messages.error(request,
                                   _('Currently emails can not be added,'
                                     ' please try again later'))
    else:
        form = AddressActivationForm(
            initial={'user_email': request.user.email})
        display_name_form = ChangeDisplayNameForm(
            initial={'display_name': mm_user.display_name})
    return render(request, 'postorius/user/profile.html',
                  {'mm_user': mm_user, 'form': form,
                   'name_form': display_name_form})
コード例 #7
0
 def dispatch(self, request, *args, **kwargs):
     # get the list object.
     if 'list_id' in kwargs:
         self.mailing_list = self._get_list(kwargs['list_id'],
                                            int(kwargs.get('page', 1)))
         utils.set_other_emails(request.user)
         set_user_access_props(request.user, self.mailing_list)
     # set the template
     if 'template' in kwargs:
         self.template = kwargs['template']
     return super(MailingListView, self).dispatch(request, *args, **kwargs)
コード例 #8
0
ファイル: user.py プロジェクト: mayank-agarwal-96/postorius
def address_activation_link(request, activation_key):
    """
    Checks the given activation_key. If it is valid, the saved address will be
    added to mailman. Also, the corresponding profile record will be removed.
    If the key is not valid, it will be ignored.
    """
    try:
        profile = AddressConfirmationProfile.objects.get(
            activation_key=activation_key)
        if request.user != profile.user:
            return redirect('{}?next={}'.format(reverse(settings.LOGIN_URL),
                                                request.path))
        if not profile.is_expired:
            # Add the address to the user record in Mailman.
            logger.info('Adding address %s to %s', profile.email,
                        request.user.email)
            try:
                try:
                    mailman_user = MailmanUser.objects.get(
                        address=request.user.email)
                except Mailman404Error:
                    mailman_user = MailmanUser.objects.create(
                        request.user.email, '')
                # If the adress already exists, it's an import artefact: it's
                # been validated by email, so it's safe to merge.
                mm_address = mailman_user.add_address(profile.email,
                                                      absorb_existing=True)
                # The address has just been verified.
                if not mm_address.verified_on:
                    mm_address.verify()
            except (MailmanApiError, MailmanConnectionError):
                messages.error(request, _('The address could not be added.'))
                return
            # Reset the other_emails cache
            if hasattr(request.user, 'other_emails'):
                del request.user.other_emails
            utils.set_other_emails(request.user)
            messages.success(request,
                             _('The email address has been activated!'))
        else:
            messages.error(
                request,
                _('The activation link has expired,'
                  ' please add the email again!'))
        profile.delete()
    except AddressConfirmationProfile.DoesNotExist:
        messages.error(request, _('The activation link is invalid'))
    return redirect('user_profile')
コード例 #9
0
ファイル: user.py プロジェクト: simonsmiley/postorius
def address_activation_link(request, activation_key):
    """
    Checks the given activation_key. If it is valid, the saved address will be
    added to mailman. Also, the corresponding profile record will be removed.
    If the key is not valid, it will be ignored.
    """
    try:
        profile = AddressConfirmationProfile.objects.get(
            activation_key=activation_key)
        if request.user != profile.user:
            return redirect('{}?next={}'.format(
                reverse(settings.LOGIN_URL), request.path))
        if not profile.is_expired:
            # Add the address to the user record in Mailman.
            logger.info('Adding address %s to %s', profile.email,
                        request.user.email)
            try:
                try:
                    mailman_user = MailmanUser.objects.get(
                        address=request.user.email)
                except Mailman404Error:
                    mailman_user = MailmanUser.objects.create(
                        request.user.email, '')
                # If the adress already exists, it's an import artefact: it's
                # been validated by email, so it's safe to merge.
                mm_address = mailman_user.add_address(
                    profile.email, absorb_existing=True)
                # The address has just been verified.
                if not mm_address.verified_on:
                    mm_address.verify()
            except (MailmanApiError, MailmanConnectionError):
                messages.error(request, _('The address could not be added.'))
                return
            # Reset the other_emails cache
            if hasattr(request.user, 'other_emails'):
                del request.user.other_emails
            utils.set_other_emails(request.user)
            messages.success(request,
                             _('The email address has been activated!'))
        else:
            messages.error(request, _('The activation link has expired,'
                                      ' please add the email again!'))
        profile.delete()
    except AddressConfirmationProfile.DoesNotExist:
        messages.error(request, _('The activation link is invalid'))
    return redirect('user_profile')
コード例 #10
0
ファイル: user.py プロジェクト: mayank-agarwal-96/postorius
def user_list_options(request, list_id):
    utils.set_other_emails(request.user)
    mlist = List.objects.get_or_404(fqdn_listname=list_id)
    mm_user = MailmanUser.objects.get(address=request.user.email)
    subscription = None
    for s in mm_user.subscriptions:
        if s.role == 'member' and s.list_id == list_id:
            subscription = s
            break
    if not subscription:
        raise Http404(_('Subscription does not exist'))
    preferences = subscription.preferences
    if request.method == 'POST':
        form = UserPreferences(request.POST)
        if form.is_valid():
            for key in form.cleaned_data.keys():
                if form.cleaned_data[key] is not None:
                    # None: nothing set yet. Remember to remove this test
                    # when Mailman accepts None as a "reset to default"
                    # value.
                    preferences[key] = form.cleaned_data[key]
            preferences.save()
            messages.success(request, _('Your preferences have been updated.'))
            return redirect('user_list_options', list_id)
        else:
            messages.error(request, _('Something went wrong.'))
    else:
        form = UserPreferences(initial=subscription.preferences)
    user_emails = [request.user.email] + request.user.other_emails
    subscription_form = ChangeSubscriptionForm(
        user_emails, initial={'email': subscription.email})
    return render(request, 'postorius/user/list_options.html', {
        'form': form,
        'list': mlist,
        'change_subscription_form': subscription_form
    })
コード例 #11
0
 def process_request(self, request):
     utils.set_other_emails(request.user)
コード例 #12
0
ファイル: middleware.py プロジェクト: simonsmiley/postorius
 def process_request(self, request):
     utils.set_other_emails(request.user)