diff --git a/colab/accounts/utils/mailman.py b/colab/accounts/utils/mailman.py index a627d34..7e868df 100644 --- a/colab/accounts/utils/mailman.py +++ b/colab/accounts/utils/mailman.py @@ -91,7 +91,10 @@ def mailing_lists(**kwargs): def is_private_list(name): try: - return dict(all_lists(private=True))[name] + privacy = {} + privacy.update({mlist.get('listname'): mlist.get('archive_private') + for mlist in all_lists()}) + return privacy[name] except KeyError: return [] diff --git a/colab/super_archives/views.py b/colab/super_archives/views.py index fc8c706..23c7b44 100644 --- a/colab/super_archives/views.py +++ b/colab/super_archives/views.py @@ -33,17 +33,23 @@ class ThreadView(View): thread = get_object_or_404(Thread, subject_token=thread_token, mailinglist__name=mailinglist) - # TODO: Refactor this code - # Use local flag is_private instead of always check the API!! - all_privates = dict(mailman.all_lists(private=True)) - if all_privates[thread.mailinglist.name]: + all_privates = [] + all_privates.extend( + [mlist.get('listname') + for mlist in mailman.all_lists() + if mlist.get('archive_private')] + ) + + if all_privates.count(thread.mailinglist.name): if not request.user.is_authenticated(): raise PermissionDenied else: user = User.objects.get(username=request.user) emails = user.emails.values_list('address', flat=True) lists_for_user = mailman.get_user_mailinglists(user) - if thread.mailinglist.name not in lists_for_user: + listnames_for_user = [mlist.get("listname") + for mlist in lists_for_user] + if thread.mailinglist.name not in listnames_for_user: raise PermissionDenied thread.hit(request) -- libgit2 0.21.2