From efdc55ffd39ab330812cb6fed879af09b3f25d28 Mon Sep 17 00:00:00 2001 From: lian Date: Mon, 18 Jul 2016 18:30:50 +0800 Subject: [PATCH] rm joined groups from middleware (#1287) * rm joined groups from middleware * rm "base_template" code from context_processors.py * clean unused group add code --- seahub/base/context_processors.py | 12 --- seahub/base/middleware.py | 8 -- seahub/group/urls.py | 4 +- seahub/group/views.py | 104 ++-------------------- seahub/templates/libraries.html | 2 +- seahub/utils/__init__.py | 10 --- seahub/views/__init__.py | 44 ++++----- seahub/views/file.py | 5 -- seahub/views/wiki.py | 11 ++- tests/seahub/group/views/test_group.py | 42 --------- tests/seahub/views/init/test_libraries.py | 11 +++ 11 files changed, 50 insertions(+), 203 deletions(-) diff --git a/seahub/base/context_processors.py b/seahub/base/context_processors.py index f4650bc866..8a41e587ab 100644 --- a/seahub/base/context_processors.py +++ b/seahub/base/context_processors.py @@ -46,16 +46,6 @@ def base(request): org = request.user.org except AttributeError: org = None - try: - base_template = request.base_template - except AttributeError: - base_template = 'base.html' - - try: - grps = request.user.joined_groups - grps.sort(lambda x, y: cmp(x.group_name.lower(), y.group_name.lower())) - except AttributeError: # anonymous user - grps = None # extra repo id from request path, use in search repo_id_patt = r".*/([a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12})/.*" @@ -75,7 +65,6 @@ def base(request): 'seacloud_mode': SEACLOUD_MODE, 'cloud_mode': request.cloud_mode, 'org': org, - 'base_template': base_template, 'site_name': SITE_NAME, 'enable_signup': config.ENABLE_SIGNUP, 'max_file_name': MAX_FILE_NAME, @@ -87,7 +76,6 @@ def base(request): 'events_enabled': EVENTS_ENABLED, 'traffic_stats_enabled': TRAFFIC_STATS_ENABLED, 'sysadmin_extra_enabled': ENABLE_SYSADMIN_EXTRA, - 'grps': grps, 'multi_tenancy': MULTI_TENANCY, 'multi_institution': getattr(dj_settings, 'MULTI_INSTITUTION', False), 'search_repo_id': search_repo_id, diff --git a/seahub/base/middleware.py b/seahub/base/middleware.py index 61ff887d31..4ae43a154f 100644 --- a/seahub/base/middleware.py +++ b/seahub/base/middleware.py @@ -37,14 +37,6 @@ class BaseMiddleware(object): else: request.cloud_mode = False - if CLOUD_MODE and request.user.org is not None: - org_id = request.user.org.org_id - request.user.joined_groups = seaserv.get_org_groups_by_user( - org_id, username) - else: - request.user.joined_groups = seaserv.get_personal_groups_by_user( - username) - return None def process_response(self, request, response): diff --git a/seahub/group/urls.py b/seahub/group/urls.py index e8bd772da9..af1ba00089 100644 --- a/seahub/group/urls.py +++ b/seahub/group/urls.py @@ -2,8 +2,7 @@ from django.conf.urls import patterns, url from views import group_wiki, group_wiki_create, \ group_wiki_page_new, group_wiki_page_edit, group_wiki_pages, \ - group_wiki_page_delete, group_wiki_use_lib, group_remove, \ - group_add + group_wiki_page_delete, group_wiki_use_lib, group_remove urlpatterns = patterns('', url(r'^(?P\d+)/wiki/$', group_wiki, name='group_wiki'), @@ -15,5 +14,4 @@ urlpatterns = patterns('', url(r'^(?P\d+)/wiki_page_edit/(?P[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'), url(r'^(?P\d+)/wiki_page_delete/(?P[^/]+)$', group_wiki_page_delete, name='group_wiki_page_delete'), url(r'^(?P\d+)/remove/$', group_remove, name='group_remove'), - url(r'^add/$', group_add, name='group_add'), ) diff --git a/seahub/group/views.py b/seahub/group/views.py index dddf33acb3..4709bf3d0d 100644 --- a/seahub/group/views.py +++ b/seahub/group/views.py @@ -3,66 +3,42 @@ import logging import os import json import urllib2 -import csv -import chardet -import StringIO from django.conf import settings -from django.core.paginator import EmptyPage, InvalidPage from django.core.urlresolvers import reverse from django.contrib import messages from django.http import HttpResponse, HttpResponseRedirect, Http404, \ HttpResponseBadRequest from django.shortcuts import render_to_response from django.template import RequestContext -from django.template.loader import render_to_string from django.utils.http import urlquote from django.utils.translation import ugettext as _ -from django.utils.translation import ungettext from seahub.auth.decorators import login_required, login_required_ajax import seaserv -from seaserv import ccnet_threaded_rpc, seafserv_threaded_rpc, \ - seafile_api, get_repo, get_group_repos, get_commits, \ - is_group_user, get_group, get_group_members, create_repo, \ - get_org_group_repos, check_permission, is_passwd_set, remove_repo, \ - unshare_group_repo, get_file_id_by_path, post_empty_file, del_file +from seaserv import ccnet_threaded_rpc, seafile_api, \ + get_group_repos, is_group_user, get_group, create_repo, \ + remove_repo, get_file_id_by_path, post_empty_file, del_file from pysearpc import SearpcError -from decorators import group_staff_required -from models import GroupMessage, MessageReply, MessageAttachment, PublicGroup -from forms import MessageForm, MessageReplyForm, GroupRecommendForm, \ - GroupAddForm, GroupJoinMsgForm, WikiCreateForm, BatchAddMembersForm -from signals import group_join_request +from models import PublicGroup +from forms import MessageForm, GroupAddForm, WikiCreateForm from seahub.auth import REDIRECT_FIELD_NAME from seahub.base.decorators import sys_staff_required, require_POST -from seahub.base.models import FileDiscuss -from seahub.contacts.models import Contact -from seahub.contacts.signals import mail_sended -from seahub.group.signals import add_user_to_group from seahub.group.utils import validate_group_name, BadGroupNameError, \ ConflictGroupNameError -from seahub.notifications.models import UserNotification -from seahub.wiki import get_group_wiki_repo, get_group_wiki_page, convert_wiki_link,\ +from seahub.wiki import get_group_wiki_repo, get_group_wiki_page, \ get_wiki_pages from seahub.wiki.models import WikiDoesNotExist, WikiPageMissing, GroupWiki from seahub.wiki.utils import clean_page_name, page_name_to_file_name from seahub.settings import SITE_ROOT, SITE_NAME -from seahub.shortcuts import get_first_object_or_none -from seahub.utils import render_error, render_permission_error, string2list, \ - gen_file_get_url, get_file_type_and_ext, \ - calc_file_path_hash, is_valid_username, send_html_email, is_org_context -from seahub.utils.file_types import IMAGE -from seahub.utils.paginator import Paginator +from seahub.utils import render_error, send_html_email, is_org_context from seahub.views import is_registered_user, check_folder_permission -from seahub.views.modules import get_enabled_mods_by_group, MOD_GROUP_WIKI, \ - enable_mod_for_group, disable_mod_for_group, get_available_mods_by_group, \ - get_wiki_enabled_group_list +from seahub.views.modules import get_enabled_mods_by_group, \ + get_available_mods_by_group from seahub.forms import SharedRepoCreateForm -from constance import config - # Get an instance of a logger logger = logging.getLogger(__name__) @@ -151,68 +127,6 @@ def group_check(func): return _decorated ########## views -@login_required_ajax -def group_add(request): - """Add a new group""" - if request.method != 'POST': - raise Http404 - - username = request.user.username - result = {} - content_type = 'application/json; charset=utf-8' - - user_can_add_group = request.user.permissions.can_add_group() - if not user_can_add_group: - result['error'] = _(u'You do not have permission to create group.') - return HttpResponse(json.dumps(result), status=403, - content_type=content_type) - - # check plan - num_of_groups = getattr(request.user, 'num_of_groups', -1) - if num_of_groups > 0: - current_groups = len(request.user.joined_groups) - if current_groups > num_of_groups: - result['error'] = _(u'You can only create %d groups.Upgrade account.') % num_of_groups - return HttpResponse(json.dumps(result), status=403, - content_type=content_type) - - form = GroupAddForm(request.POST) - if form.is_valid(): - group_name = form.cleaned_data['group_name'] - - # Check whether group name is duplicated. - org_id = -1 - if is_org_context(request): - org_id = request.user.org.org_id - checked_groups = seaserv.get_org_groups_by_user(org_id, username) - else: - if request.cloud_mode: - checked_groups = seaserv.get_personal_groups_by_user(username) - else: - checked_groups = get_all_groups(-1, -1) - for g in checked_groups: - if g.group_name == group_name: - result['error'] = _(u'There is already a group with that name.') - return HttpResponse(json.dumps(result), status=400, - content_type=content_type) - - # Group name is valid, create that group. - try: - if org_id > 0: - create_org_group(org_id, group_name, username) - else: - create_group(group_name, username) - - return HttpResponse(json.dumps({'success': True}), - content_type=content_type) - except SearpcError, e: - result['error'] = _(e.msg) - return HttpResponse(json.dumps(result), status=500, - content_type=content_type) - else: - return HttpResponseBadRequest(json.dumps(form.errors), - content_type=content_type) - @login_required @sys_staff_required @require_POST diff --git a/seahub/templates/libraries.html b/seahub/templates/libraries.html index f2dc979ec9..a8a949ecb7 100644 --- a/seahub/templates/libraries.html +++ b/seahub/templates/libraries.html @@ -216,7 +216,7 @@ app["pageOptions"] = { csrfToken: "{{ csrf_token }}", groups: (function () { var groups = []; - {% for group in request.user.joined_groups %} + {% for group in joined_groups %} groups.push({'name': '{{group.group_name}}', 'id': '{{group.id}}'}); {% endfor %} return groups; diff --git a/seahub/utils/__init__.py b/seahub/utils/__init__.py index c39cad76a5..ba659ffac9 100644 --- a/seahub/utils/__init__.py +++ b/seahub/utils/__init__.py @@ -453,16 +453,6 @@ def string2list(string): s.add(e) return [ x for x in s ] -# def get_cur_ctx(request): -# ctx_dict = request.session.get('current_context', { -# 'base_template': 'myhome_base.html', -# 'org_dict': None}) -# return ctx_dict - -# def set_cur_ctx(request, ctx_dict): -# request.session['current_context'] = ctx_dict -# request.user.org = ctx_dict.get('org_dict', None) - def is_org_context(request): """An organization context is a virtual private Seafile instance on cloud service. diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py index 434ceeff3e..4fc4168254 100644 --- a/seahub/views/__init__.py +++ b/seahub/views/__init__.py @@ -4,19 +4,16 @@ import os import stat import json import mimetypes -import urllib2 import logging -from math import ceil import posixpath from django.core.cache import cache from django.core.urlresolvers import reverse from django.contrib import messages -from django.http import HttpResponse, HttpResponseBadRequest, Http404, \ +from django.http import HttpResponse, Http404, \ HttpResponseRedirect from django.shortcuts import render_to_response, redirect from django.template import RequestContext -from django.utils import timezone from django.utils.http import urlquote from django.utils.html import escape from django.utils.translation import ugettext as _ @@ -24,44 +21,34 @@ from django.views.decorators.http import condition import seaserv from seaserv import get_repo, get_commits, is_valid_filename, \ - seafserv_threaded_rpc, seafserv_rpc, is_repo_owner, check_permission, \ - is_passwd_set, get_file_size, get_group, get_session_info, get_commit, \ - MAX_DOWNLOAD_DIR_SIZE, send_message, ccnet_threaded_rpc, \ - get_personal_groups_by_user, seafile_api + seafserv_threaded_rpc, seafserv_rpc, is_repo_owner, \ + get_file_size, MAX_DOWNLOAD_DIR_SIZE, \ + seafile_api from pysearpc import SearpcError from seahub.avatar.util import get_avatar_file_storage -from seahub.auth.decorators import login_required, login_required_ajax +from seahub.auth.decorators import login_required from seahub.auth import login as auth_login from seahub.auth import get_backends from seahub.base.accounts import User from seahub.base.decorators import user_mods_check, require_POST -from seahub.base.models import UserStarredFiles, ClientLoginToken -from seahub.contacts.models import Contact +from seahub.base.models import ClientLoginToken from seahub.options.models import UserOptions, CryptoOptionNotSetError from seahub.profile.models import Profile from seahub.share.models import FileShare, UploadLinkShare -from seahub.utils import render_permission_error, render_error, list_to_string, \ +from seahub.utils import render_permission_error, render_error, \ get_fileserver_root, gen_shared_upload_link, is_org_context, \ - gen_dir_share_link, gen_file_share_link, get_repo_last_modify, \ - calculate_repos_last_modify, get_file_type_and_ext, get_user_repos, \ - EMPTY_SHA1, normalize_file_path, gen_file_upload_url, \ - get_file_revision_id_size, get_ccnet_server_addr_port, \ - gen_file_get_url, string2list, MAX_INT, IS_EMAIL_CONFIGURED, \ - EVENTS_ENABLED, get_user_events, get_org_user_events, show_delete_days, \ - TRAFFIC_STATS_ENABLED, get_user_traffic_stat, new_merge_with_no_conflict, \ - user_traffic_over_limit, send_perm_audit_msg, get_origin_repo_info, \ - get_max_upload_file_size, is_pro_version, FILE_AUDIT_ENABLED, \ + gen_dir_share_link, gen_file_share_link, get_file_type_and_ext, \ + get_user_repos, EMPTY_SHA1, gen_file_get_url, \ + new_merge_with_no_conflict, get_max_upload_file_size, \ + is_pro_version, FILE_AUDIT_ENABLED, \ is_org_repo_creation_allowed -from seahub.utils.paginator import get_page_range from seahub.utils.star import get_dir_starred_files from seahub.utils.timeutils import utc_to_local from seahub.views.modules import MOD_PERSONAL_WIKI, enable_mod_for_user, \ disable_mod_for_user import seahub.settings as settings -from seahub.settings import FILE_PREVIEW_MAX_SIZE, INIT_PASSWD, USE_PDFJS, \ - FILE_ENCODING_LIST, FILE_ENCODING_TRY_LIST, AVATAR_FILE_STORAGE, \ - SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER, SEND_EMAIL_ON_RESETTING_USER_PASSWD, \ +from seahub.settings import AVATAR_FILE_STORAGE, \ ENABLE_SUB_LIBRARY, ENABLE_FOLDER_PERM from constance import config @@ -807,6 +794,12 @@ def libraries(request): folder_perm_enabled = True if is_pro_version() and ENABLE_FOLDER_PERM else False can_add_pub_repo = True if is_org_repo_creation_allowed(request) else False + if request.cloud_mode and request.user.org is not None: + org_id = request.user.org.org_id + joined_groups = seaserv.get_org_groups_by_user(org_id, username) + else: + joined_groups = seaserv.get_personal_groups_by_user(username) + return render_to_response('libraries.html', { "allow_public_share": allow_public_share, "guide_enabled": guide_enabled, @@ -823,6 +816,7 @@ def libraries(request): 'is_pro': True if is_pro_version() else False, 'file_audit_enabled': FILE_AUDIT_ENABLED, 'can_add_pub_repo': can_add_pub_repo, + 'joined_groups': joined_groups, }, context_instance=RequestContext(request)) @login_required diff --git a/seahub/views/file.py b/seahub/views/file.py index 2349682a5d..cd7edac4f6 100644 --- a/seahub/views/file.py +++ b/seahub/views/file.py @@ -516,11 +516,6 @@ def _file_view(request, repo_id, path): else: file_shared_link = '' - for g in request.user.joined_groups: - g.avatar = grp_avatar(g.id, 20) - - file_path_hash = hashlib.md5(urllib2.quote(path.encode('utf-8'))).hexdigest()[:12] - # fetch file contributors and latest contributor try: # get real path for sub repo diff --git a/seahub/views/wiki.py b/seahub/views/wiki.py index 73af823240..ead80f3cdf 100644 --- a/seahub/views/wiki.py +++ b/seahub/views/wiki.py @@ -46,6 +46,13 @@ logger = logging.getLogger(__name__) @user_mods_check def personal_wiki(request, page_name="home"): username = request.user.username + + if request.cloud_mode and request.user.org is not None: + org_id = request.user.org.org_id + joined_groups = seaserv.get_org_groups_by_user(org_id, username) + else: + joined_groups = seaserv.get_personal_groups_by_user(username) + wiki_exists = True try: content, repo, dirent = get_personal_wiki_page(username, page_name) @@ -56,6 +63,7 @@ def personal_wiki(request, page_name="home"): return render_to_response("wiki/personal_wiki.html", { "wiki_exists": wiki_exists, "owned_repos": owned_repos, + "grps": joined_groups, }, context_instance=RequestContext(request)) except WikiPageMissing: repo = get_personal_wiki_repo(username) @@ -64,8 +72,6 @@ def personal_wiki(request, page_name="home"): return render_error(request, _("Failed to create wiki page. Please retry later.")) return HttpResponseRedirect(reverse('personal_wiki', args=[page_name])) else: - url_prefix = reverse('personal_wiki', args=[]) - # fetch file modified time and modifier path = '/' + dirent.obj_name try: @@ -98,6 +104,7 @@ def personal_wiki(request, page_name="home"): "search_wiki": True, "wiki_index_exists": wiki_index_exists, "index_content": index_content, + "grps": joined_groups, }, context_instance=RequestContext(request)) @login_required diff --git a/tests/seahub/group/views/test_group.py b/tests/seahub/group/views/test_group.py index 4492783919..91dfbf608b 100644 --- a/tests/seahub/group/views/test_group.py +++ b/tests/seahub/group/views/test_group.py @@ -1,49 +1,7 @@ -import json - from django.core.urlresolvers import reverse -import requests -from seahub.group.models import PublicGroup -from seahub.share.models import FileShare from seahub.test_utils import BaseTestCase -from tests.common.utils import randstring - -class GroupAddTest(BaseTestCase): - def setUp(self): - self.login_as(self.user) - - def test_can_add(self): - resp = self.client.post(reverse('group_add'), { - 'group_name': 'test_group_%s' % randstring(6) - }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') - - assert json.loads(resp.content)['success'] is True - - def test_can_add_with_blank(self): - resp = self.client.post(reverse('group_add'), { - 'group_name': 'test group %s' % randstring(6) - }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') - assert json.loads(resp.content)['success'] is True - - def test_can_add_with_hyphen(self): - resp = self.client.post(reverse('group_add'), { - 'group_name': 'test-group-%s' % randstring(6) - }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') - assert json.loads(resp.content)['success'] is True - - def test_can_add_with_blank_and_hyphen(self): - resp = self.client.post(reverse('group_add'), { - 'group_name': 'test-group %s' % randstring(6) - }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') - assert json.loads(resp.content)['success'] is True - - def test_can_not_add_with_invalid_name(self): - resp = self.client.post(reverse('group_add'), { - 'group_name': 'test*group(name)' - }, HTTP_X_REQUESTED_WITH='XMLHttpRequest') - self.assertEqual(400, resp.status_code) - class GroupDiscussTest(BaseTestCase): def setUp(self): diff --git a/tests/seahub/views/init/test_libraries.py b/tests/seahub/views/init/test_libraries.py index 9e4ed79b69..a90bb3fc1a 100644 --- a/tests/seahub/views/init/test_libraries.py +++ b/tests/seahub/views/init/test_libraries.py @@ -1,3 +1,5 @@ +import json + from django.core.urlresolvers import reverse from constance import config @@ -65,3 +67,12 @@ class LibrariesTest(BaseTestCase): resp = self.client.get(self.url) self.assertEqual(200, resp.status_code) assert resp.context['can_add_pub_repo'] is True + + def test_get_user_joined_groups(self): + self.login_as(self.user) + + resp = self.client.get(self.url) + + self.assertEqual(200, resp.status_code) + self.assertTemplateUsed(resp, 'libraries.html') + assert len(resp.context['joined_groups']) > 0