Commit 06ba4bfa6d2d8505f0eadd919643bca515b2758e
Committed by
Sergio Oliveira
1 parent
256ed785
Exists in
master
and in
39 other branches
Only show mailinglists if public or user in it
Signed-off-by: Gustavo Jaruga <darksshades@gmail.com> Signed-off-by: Alexandre Barbosa <alexandreab@live.com>
Showing
2 changed files
with
28 additions
and
18 deletions
Show diff stats
colab/accounts/utils/mailman.py
... | ... | @@ -38,7 +38,7 @@ def unsubscribe(listname, address): |
38 | 38 | |
39 | 39 | |
40 | 40 | def update_subscription(address, lists): |
41 | - current_lists = address_lists(address) | |
41 | + current_lists = mailing_lists(address=address) | |
42 | 42 | |
43 | 43 | for maillist in current_lists: |
44 | 44 | if maillist not in lists: |
... | ... | @@ -48,31 +48,32 @@ def update_subscription(address, lists): |
48 | 48 | if maillist not in current_lists: |
49 | 49 | subscribe(maillist, address) |
50 | 50 | |
51 | +def address_lists(address): | |
52 | + return mailing_lists(address=address) | |
51 | 53 | |
52 | -def address_lists(address, description=''): | |
54 | +def mailing_lists(**kwargs): | |
53 | 55 | url = get_url() |
54 | 56 | |
55 | - params = {'address': address, | |
56 | - 'description': description} | |
57 | - | |
58 | 57 | try: |
59 | - lists = requests.get(url, timeout=TIMEOUT, params=params) | |
58 | + lists = requests.get(url, timeout=TIMEOUT, params=kwargs) | |
60 | 59 | except: |
61 | 60 | LOGGER.exception('Unable to list mailing lists') |
62 | 61 | return [] |
63 | 62 | |
64 | 63 | return lists.json() |
65 | 64 | |
65 | +def is_private_list(name): | |
66 | + return dict(all_lists(private=True))[name] | |
66 | 67 | |
67 | 68 | def all_lists(*args, **kwargs): |
68 | - return address_lists('', *args, **kwargs) | |
69 | + return mailing_lists(*args, **kwargs) | |
69 | 70 | |
70 | 71 | |
71 | 72 | def user_lists(user): |
72 | 73 | list_set = set() |
73 | 74 | |
74 | 75 | for email in user.emails.values_list('address', flat=True): |
75 | - list_set.update(address_lists(email)) | |
76 | + list_set.update(mailing_lists(address=email)) | |
76 | 77 | |
77 | 78 | return tuple(list_set) |
78 | 79 | ... | ... |
colab/super_archives/views.py
... | ... | @@ -123,20 +123,29 @@ class ThreadDashboardView(View): |
123 | 123 | MAX = 6 |
124 | 124 | context = {} |
125 | 125 | all_lists = mailman.all_lists(description=True) |
126 | + all_privates = dict(mailman.all_lists(private=True)) | |
127 | + | |
126 | 128 | |
127 | 129 | context['lists'] = [] |
128 | 130 | |
131 | + user = User.objects.get(username=request.user) | |
132 | + emails = user.emails.values_list('address', flat=True) | |
133 | + lists_for_user = [] | |
134 | + for email in emails: | |
135 | + lists_for_user.extend(mailman.address_lists(email)) | |
136 | + | |
129 | 137 | for list_ in MailingList.objects.order_by('name'): |
130 | - context['lists'].append(( | |
131 | - list_.name, | |
132 | - mailman.get_list_description(list_.name, all_lists), | |
133 | - list_.thread_set.filter(spam=False).order_by( | |
134 | - '-latest_message__received_time' | |
135 | - )[:MAX], | |
136 | - [t.latest_message for t in Thread.highest_score.filter( | |
137 | - mailinglist__name=list_.name)[:MAX]], | |
138 | - len(mailman.list_users(list_.name)), | |
139 | - )) | |
138 | + if not all_privates[list_.name] or list_.name in lists_for_user: | |
139 | + context['lists'].append(( | |
140 | + list_.name, | |
141 | + mailman.get_list_description(list_.name), | |
142 | + list_.thread_set.filter(spam=False).order_by( | |
143 | + '-latest_message__received_time' | |
144 | + )[:MAX], | |
145 | + [t.latest_message for t in Thread.highest_score.filter( | |
146 | + mailinglist__name=list_.name)[:MAX]], | |
147 | + len(mailman.list_users(list_.name)), | |
148 | + )) | |
140 | 149 | |
141 | 150 | return render(request, 'superarchives/thread-dashboard.html', context) |
142 | 151 | ... | ... |