1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-25 14:50:29 +00:00

rm joined groups from middleware (#1287)

* rm joined groups from middleware

* rm "base_template" code from context_processors.py

* clean unused group add code
This commit is contained in:
lian
2016-07-18 18:30:50 +08:00
committed by Daniel Pan
parent 59ac32c652
commit efdc55ffd3
11 changed files with 50 additions and 203 deletions

View File

@@ -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,

View File

@@ -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):

View File

@@ -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<group_id>\d+)/wiki/$', group_wiki, name='group_wiki'),
@@ -15,5 +14,4 @@ urlpatterns = patterns('',
url(r'^(?P<group_id>\d+)/wiki_page_edit/(?P<page_name>[^/]+)$', group_wiki_page_edit, name='group_wiki_page_edit'),
url(r'^(?P<group_id>\d+)/wiki_page_delete/(?P<page_name>[^/]+)$', group_wiki_page_delete, name='group_wiki_page_delete'),
url(r'^(?P<group_id>\d+)/remove/$', group_remove, name='group_remove'),
url(r'^add/$', group_add, name='group_add'),
)

View File

@@ -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.<a href="http://seafile.com/">Upgrade account.</a>') % 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

View File

@@ -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;

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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):

View File

@@ -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