mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-22 20:08:19 +00:00
Fix a few bugs for multi-tenancy
Squashed commit of the following: commit 2d7a7867df01abc2e347ee5b0af957275b367ac2 Author: zhengxie <xiez1989@gmail.com> Date: Wed May 28 15:48:30 2014 +0800 Fix org virtual repos commit 85c9981e7f1ac1f15dcc66eada0e482b05b91179 Author: zhengxie <xiez1989@gmail.com> Date: Tue May 27 16:45:32 2014 +0800 Fix share permission editing in share admin commit c35efec6f6db7157266537f6cf74b321fb386aab Author: zhengxie <xiez1989@gmail.com> Date: Tue May 27 16:35:53 2014 +0800 Fix listing Shared/Group repos commit 3400118e5778f8840575f02ead560c7f1cb61a00 Author: zhengxie <xiez1989@gmail.com> Date: Tue May 27 15:05:17 2014 +0800 Fix share/unshare repo to users commit 4c663ca8767fe34d903ca3828695253eb50f36eb Author: zhengxie <xiez1989@gmail.com> Date: Fri May 23 18:33:22 2014 +0800 Fix share/unshare inner pub repos
This commit is contained in:
@@ -1148,8 +1148,13 @@ def sub_repo(request, repo_id):
|
||||
|
||||
# check if the sub-lib exist
|
||||
try:
|
||||
sub_repo = seafile_api.get_virtual_repo(repo_id, path, username)
|
||||
except SearpcError, e:
|
||||
if is_org_context(request):
|
||||
org_id = request.user.org.org_id
|
||||
sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo(
|
||||
org_id, repo_id, path, username)
|
||||
else:
|
||||
sub_repo = seafile_api.get_virtual_repo(repo_id, path, username)
|
||||
except SearpcError as e:
|
||||
result['error'] = e.msg
|
||||
return HttpResponse(json.dumps(result), status=500, content_type=content_type)
|
||||
|
||||
@@ -1159,7 +1164,14 @@ def sub_repo(request, repo_id):
|
||||
# create a sub-lib
|
||||
try:
|
||||
# use name as 'repo_name' & 'repo_desc' for sub_repo
|
||||
sub_repo_id = seafile_api.create_virtual_repo(repo_id, path, name, name, username)
|
||||
if is_org_context(request):
|
||||
org_id = request.user.org.org_id
|
||||
sub_repo_id = seaserv.seafserv_threaded_rpc.create_org_virtual_repo(
|
||||
org_id, repo_id, path, name, name, username)
|
||||
else:
|
||||
sub_repo_id = seafile_api.create_virtual_repo(repo_id, path,
|
||||
name, name,
|
||||
username)
|
||||
result['sub_repo_id'] = sub_repo_id
|
||||
except SearpcError, e:
|
||||
result['error'] = e.msg
|
||||
@@ -1388,10 +1400,92 @@ def space_and_traffic(request):
|
||||
context_instance=RequestContext(request))
|
||||
return HttpResponse(json.dumps({"html": html}), content_type=content_type)
|
||||
|
||||
def get_share_in_repo_list(request, start, limit):
|
||||
"""List share in repos.
|
||||
"""
|
||||
username = request.user.username
|
||||
if is_org_context(request):
|
||||
org_id = request.user.org.org_id
|
||||
repo_list = seafile_api.get_org_share_in_repo_list(org_id, username,
|
||||
-1, -1)
|
||||
else:
|
||||
repo_list = seafile_api.get_share_in_repo_list(username, -1, -1)
|
||||
|
||||
for repo in repo_list:
|
||||
repo.user_perm = seafile_api.check_repo_access_permission(repo.repo_id,
|
||||
username)
|
||||
return repo_list
|
||||
|
||||
def get_groups_by_user(request):
|
||||
"""List user groups.
|
||||
"""
|
||||
username = request.user.username
|
||||
if is_org_context(request):
|
||||
org_id = request.user.org.org_id
|
||||
return seaserv.get_org_groups_by_user(org_id, username)
|
||||
else:
|
||||
return seaserv.get_personal_groups_by_user(username)
|
||||
|
||||
def get_group_repos(request, groups):
|
||||
"""Get repos shared to groups.
|
||||
"""
|
||||
username = request.user.username
|
||||
group_repos = []
|
||||
if is_org_context(request):
|
||||
org_id = request.user.org.org_id
|
||||
# For each group I joined...
|
||||
for grp in groups:
|
||||
# Get group repos, and for each group repos...
|
||||
for r_id in seafile_api.get_org_group_repoids(org_id, grp.id):
|
||||
# No need to list my own repo
|
||||
repo_owner = seafile_api.get_org_repo_owner(r_id)
|
||||
if repo_owner == username:
|
||||
continue
|
||||
# Convert repo properties due to the different collumns in Repo
|
||||
# and SharedRepo
|
||||
r = get_repo(r_id)
|
||||
if not r:
|
||||
continue
|
||||
r.repo_id = r.id
|
||||
r.repo_name = r.name
|
||||
r.repo_desc = r.desc
|
||||
r.last_modified = get_repo_last_modify(r)
|
||||
r.share_type = 'group'
|
||||
r.user = repo_owner
|
||||
r.user_perm = seafile_api.check_repo_access_permission(
|
||||
r_id, username)
|
||||
r.group = grp
|
||||
group_repos.append(r)
|
||||
else:
|
||||
# For each group I joined...
|
||||
for grp in groups:
|
||||
# Get group repos, and for each group repos...
|
||||
for r_id in seafile_api.get_group_repoids(grp.id):
|
||||
# No need to list my own repo
|
||||
repo_owner = seafile_api.get_repo_owner(r_id)
|
||||
if repo_owner == username:
|
||||
continue
|
||||
# Convert repo properties due to the different collumns in Repo
|
||||
# and SharedRepo
|
||||
r = get_repo(r_id)
|
||||
if not r:
|
||||
continue
|
||||
r.repo_id = r.id
|
||||
r.repo_name = r.name
|
||||
r.repo_desc = r.desc
|
||||
r.last_modified = get_repo_last_modify(r)
|
||||
r.share_type = 'group'
|
||||
r.user = repo_owner
|
||||
r.user_perm = seafile_api.check_repo_access_permission(
|
||||
r_id, username)
|
||||
r.group = grp
|
||||
group_repos.append(r)
|
||||
return group_repos
|
||||
|
||||
@login_required
|
||||
def my_shared_and_group_repos(request):
|
||||
"""Return html snippet of repos that shared to user and group repos.
|
||||
|
||||
|
||||
Arguments:
|
||||
- `request`:
|
||||
"""
|
||||
@@ -1400,39 +1494,13 @@ def my_shared_and_group_repos(request):
|
||||
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
username = request.user.username
|
||||
|
||||
shared_repos = seafile_api.get_share_in_repo_list(username, -1, -1)
|
||||
for repo in shared_repos:
|
||||
repo.user_perm = seafile_api.check_repo_access_permission(repo.repo_id, username)
|
||||
|
||||
# shared
|
||||
shared_repos = get_share_in_repo_list(request, -1, -1)
|
||||
shared_repos.sort(lambda x, y: cmp(y.last_modified, x.last_modified))
|
||||
|
||||
group_repos = []
|
||||
# Get all personal groups I joined.
|
||||
joined_groups = request.user.joined_groups
|
||||
# For each group I joined...
|
||||
for grp in joined_groups:
|
||||
# Get group repos, and for each group repos...
|
||||
for r_id in seaserv.get_group_repoids(grp.id):
|
||||
# No need to list my own repo
|
||||
repo_owner = seafile_api.get_repo_owner(r_id)
|
||||
if repo_owner == username:
|
||||
continue
|
||||
# Convert repo properties due to the different collumns in Repo
|
||||
# and SharedRepo
|
||||
r = seaserv.get_repo(r_id)
|
||||
if not r:
|
||||
continue
|
||||
r.repo_id = r.id
|
||||
r.repo_name = r.name
|
||||
r.repo_desc = r.desc
|
||||
r.last_modified = get_repo_last_modify(r)
|
||||
r.share_type = 'group'
|
||||
r.user = repo_owner
|
||||
r.user_perm = seaserv.check_permission(r_id, username)
|
||||
r.group = grp
|
||||
group_repos.append(r)
|
||||
# group repos
|
||||
joined_groups = get_groups_by_user(request)
|
||||
group_repos = get_group_repos(request, joined_groups)
|
||||
group_repos.sort(key=lambda x: x.group.group_name)
|
||||
for i, repo in enumerate(group_repos):
|
||||
if i == 0:
|
||||
@@ -1441,19 +1509,18 @@ def my_shared_and_group_repos(request):
|
||||
if repo.group.group_name != group_repos[i-1].group.group_name:
|
||||
repo.show_group_name = True
|
||||
|
||||
ctx_shared = {
|
||||
"shared_repos": shared_repos,
|
||||
}
|
||||
ctx_group = {
|
||||
"group_repos": group_repos,
|
||||
}
|
||||
shared_repos_html = render_to_string('snippets/my_shared_repos.html', ctx_shared,
|
||||
context_instance=RequestContext(request))
|
||||
group_repos_html = render_to_string('snippets/my_group_repos.html', ctx_group,
|
||||
context_instance=RequestContext(request))
|
||||
ctx_shared = {"shared_repos": shared_repos}
|
||||
ctx_group = {"group_repos": group_repos}
|
||||
shared_repos_html = render_to_string(
|
||||
'snippets/my_shared_repos.html', ctx_shared,
|
||||
context_instance=RequestContext(request))
|
||||
group_repos_html = render_to_string(
|
||||
'snippets/my_group_repos.html', ctx_group,
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
return HttpResponse(json.dumps({"shared": shared_repos_html, "group": group_repos_html}),
|
||||
content_type=content_type)
|
||||
return HttpResponse(json.dumps({"shared": shared_repos_html,
|
||||
"group": group_repos_html}),
|
||||
content_type=content_type)
|
||||
|
||||
@login_required
|
||||
def get_file_op_url(request, repo_id):
|
||||
|
Reference in New Issue
Block a user