1
0
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:
zhengxie
2014-05-28 16:05:15 +08:00
parent feb293ab36
commit 8b30eff69e
7 changed files with 246 additions and 256 deletions

View File

@@ -76,11 +76,8 @@ $('.share-permission-select').change(function() {
select_cont = $(this).parent(),
user = select_cont.prev(),
share_type = select_cont.parent().attr('data');
{% if org %}
var url = '{% url 'org_share_permission_admin' org.url_prefix %}?org_id={{ org.org_id }}&share_type=' + share_type;
{% else %}
var url = '{% url 'share_permission_admin' %}?share_type=' + share_type;
{% endif %}
var url = '{% url 'share_permission_admin' %}?share_type=' + share_type;
$.ajax({
url: url,
type: 'POST',

View File

@@ -50,7 +50,7 @@
<a href="{% url 'repo_remove_share' %}?repo_id={{ repo.props.repo_id }}&from={{ request.user.username|urlencode }}&to={{ repo.props.user|urlencode }}" class="cancel-share op vh">{% trans "Unshare"%}</a>
{% endif %}
{% if repo.props.share_type == 'public' %}
<a href="#" data="{% url 'unsetinnerpub' repo.repo_id %}" class="cancel-share op vh">{% trans "Unshare"%}</a>
<a href="{% url 'unsetinnerpub' repo.repo_id %}" class="cancel-share op vh">{% trans "Unshare"%}</a>
{% endif %}
</td>
</tr>

View File

@@ -16,8 +16,8 @@ from django.contrib import messages
import seaserv
from seaserv import seafile_api
from seaserv import ccnet_threaded_rpc, is_org_group, \
get_org_id_by_group, del_org_group_repo, get_group_repos_by_owner, \
remove_share
get_org_id_by_group, del_org_group_repo
from pysearpc import SearpcError
from seahub.share.forms import RepoShareForm, FileLinkShareForm, \
UploadLinkShareForm
@@ -56,6 +56,15 @@ def list_org_inner_pub_repos_by_owner(org_id, username):
return seaserv.seafserv_threaded_rpc.list_org_inner_pub_repos_by_owner(
org_id, username)
def org_share_repo(org_id, repo_id, from_user, to_user, permission):
return seaserv.seafserv_threaded_rpc.org_add_share(org_id, repo_id,
from_user, to_user,
permission)
def org_remove_share(org_id, repo_id, from_user, to_user):
return seaserv.seafserv_threaded_rpc.org_remove_share(org_id, repo_id,
from_user, to_user)
########## functions
def share_to_public(request, repo, permission):
@@ -127,24 +136,37 @@ def share_to_user(request, repo, to_user, permission):
messages.error(request, msg)
return
if is_registered_user(to_user):
try:
# permission check
if is_org_context(request):
org_id = request.user.org.org_id
if not seaserv.ccnet_threaded_rpc.org_user_exists(org_id, to_user):
msg = _(u'Failed to share to %s, user is not found.') % to_user
messages.error(request, msg)
return
else:
if not is_registered_user(to_user):
msg = _(u'Failed to share to %s, as the email is not registered.') % to_user
messages.error(request, msg)
return
try:
if is_org_context(request):
org_id = request.user.org.org_id
org_share_repo(org_id, repo_id, from_user, to_user, permission)
else:
seafile_api.share_repo(repo_id, from_user, to_user, permission)
except Exception, e:
except SearpcError as e:
logger.error(e)
msg = _(u'Failed to share to %s, please try again later.') % to_user
messages.error(request, msg)
else:
# send a signal when sharing repo successful
share_repo_to_user_successful.send(sender=None,
from_user=from_user,
to_user=to_user, repo=repo)
msg = _(u'Shared to %(email)s successfullygo check it at <a href="%(share)s">Shares</a>.') % \
{'email':to_user, 'share':reverse('share_admin')}
messages.success(request, msg)
else:
msg = _(u'Failed to share to %s, as the email is not registered.') % to_user
messages.error(request, msg)
# send a signal when sharing repo successful
share_repo_to_user_successful.send(sender=None,
from_user=from_user,
to_user=to_user, repo=repo)
msg = _(u'Shared to %(email)s successfully, go check it at <a href="%(share)s">Shares</a>.') % \
{'email': to_user, 'share': reverse('share_admin')}
messages.success(request, msg)
def check_user_share_quota(username, repo, users=[], groups=[]):
"""Check whether user has enough quota when share repo to users/groups.
@@ -266,7 +288,12 @@ def repo_remove_share(request):
if username != from_email and username != to_email:
return render_permission_error(request, _(u'Failed to remove share'))
remove_share(repo_id, from_email, to_email)
if is_org_context(request):
org_id = request.user.org.org_id
org_remove_share(org_id, repo_id, from_email, to_email)
else:
seaserv.remove_share(repo_id, from_email, to_email)
else:
try:
group_id = int(group_id)
@@ -292,65 +319,26 @@ def repo_remove_share(request):
next = request.META.get('HTTP_REFERER', SITE_ROOT)
return HttpResponseRedirect(next)
# @login_required
# def share_admin(request):
# """
# List share out libraries.
# """
# username = request.user.username
# shared_repos = []
# # personal repos shared by this user
# shared_repos += list_share_repos(username, 'from_email', -1, -1)
# # repos shared to groups
# group_repos = get_group_repos_by_owner(username)
# for repo in group_repos:
# group = ccnet_threaded_rpc.get_group(int(repo.group_id))
# if not group:
# repo.props.user = ''
# continue
# repo.props.user = group.props.group_name
# repo.props.user_info = repo.group_id
# shared_repos += group_repos
# if not CLOUD_MODE:
# # public repos shared by this user
# pub_repos = list_inner_pub_repos_by_owner(username)
# for repo in pub_repos:
# repo.props.user = _(u'all members')
# repo.props.user_info = 'all'
# shared_repos += pub_repos
# for repo in shared_repos:
# if repo.props.permission == 'rw':
# repo.share_permission = _(u'Read-Write')
# elif repo.props.permission == 'r':
# repo.share_permission = _(u'Read-Only')
# else:
# repo.share_permission = ''
# if repo.props.share_type == 'personal':
# repo.props.user_info = repo.props.user
# shared_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id))
# # Repo anonymous share links
# # out_links = AnonymousShare.objects.filter(repo_owner=request.user.username)
# # for link in out_links:
# # repo = get_repo(link.repo_id)
# # link.repo_name = repo.name
# # link.remain_time = anon_share_token_generator.get_remain_time(link.token)
# return render_to_response('repo/share_admin.html', {
# "org": None,
# "shared_repos": shared_repos,
# # "out_links": out_links,
# }, context_instance=RequestContext(request))
def get_share_out_repo_list(request):
"""List repos that @user share to other users.
Returns:
A list of repos.
"""
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
return seafile_api.get_org_share_out_repo_list(org_id, username,
-1, -1)
else:
return seafile_api.get_share_out_repo_list(username, -1, -1)
def get_group_repos_by_owner(request):
"""List repos that @user share to groups.
Returns:
A list of repos.
"""
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
@@ -358,22 +346,26 @@ def get_group_repos_by_owner(request):
else:
return seaserv.get_group_repos_by_owner(username)
def get_inner_pub_repo_list(request):
def list_inner_pub_repos_by_owner(request):
"""List repos that @user share to organizatoin.
Returns:
A list of repos, or empty list if in cloud_mode.
"""
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
return list_org_inner_pub_repos_by_owner(org_id, username)
elif request.cloud_mode:
return seaserv.list_inner_pub_repos_by_owner(username)
else:
return []
else:
return seaserv.list_inner_pub_repos_by_owner(username)
def list_share_out_repos(request):
shared_repos = []
username = request.user.username
# repos shared from this user
shared_repos += seafile_api.get_share_out_repo_list(username, -1, -1)
shared_repos += get_share_out_repo_list(request)
# repos shared to groups
group_repos = get_group_repos_by_owner(request)
@@ -386,8 +378,8 @@ def list_share_out_repos(request):
repo.props.user_info = repo.group_id
shared_repos += group_repos
# pub repos
pub_repos = get_inner_pub_repo_list(request)
# inner pub repos
pub_repos = list_inner_pub_repos_by_owner(request)
for repo in pub_repos:
repo.props.user = _(u'all members')
repo.props.user_info = 'all'
@@ -418,7 +410,7 @@ def list_shared_repos(request):
repo.props.user_info = repo.props.user
out_repos.append(repo)
out_repos.sort(lambda x, y: cmp(x.repo_id, y.repo_id))
out_repos.sort(lambda x, y: cmp(x.repo_name, y.repo_name))
return render_to_response('share/repos.html', {
"out_repos": out_repos,
@@ -570,8 +562,13 @@ def share_permission_admin(request):
content_type=content_type)
try:
seafile_api.set_share_permission(repo_id, from_email,
email_or_group, permission)
if is_org_context(request):
org_id = request.user.org.org_id
seaserv.seafserv_threaded_rpc.org_set_share_permission(
org_id, repo_id, from_email, email_or_group, permission)
else:
seafile_api.set_share_permission(repo_id, from_email,
email_or_group, permission)
except SearpcError:
return HttpResponse(json.dumps({'success': False}), status=500,
content_type=content_type)
@@ -580,8 +577,13 @@ def share_permission_admin(request):
elif share_type == 'group':
try:
seafile_api.set_group_repo_permission(int(email_or_group),
repo_id, permission)
if is_org_context(request):
org_id = request.user.org.org_id
seaserv.seafserv_threaded_rpc.set_org_group_repo_permission(
org_id, int(email_or_group), repo_id, permission)
else:
seafile_api.set_group_repo_permission(int(email_or_group),
repo_id, permission)
except SearpcError:
return HttpResponse(json.dumps({'success': False}), status=500,
content_type=content_type)

View File

@@ -891,79 +891,19 @@ def get_owned_repo_list(request):
else:
return seafile_api.get_owned_repo_list(username)
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
return seafile_api.get_org_share_in_repo_list(org_id, username, -1, -1)
else:
return seafile_api.get_share_in_repo_list(username, -1, -1)
def get_virtual_repos_by_owner(request):
"""List virtual repos.
def get_groups_by_user(request):
"""List user groups.
Arguments:
- `request`:
"""
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)
return seaserv.seafserv_threaded_rpc.get_org_virtual_repos_by_owner(
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 = check_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 = check_permission(r_id, username)
r.group = grp
group_repos.append(r)
return group_repos
return seafile_api.get_virtual_repos_by_owner(username)
@login_required
@user_mods_check
@@ -981,7 +921,7 @@ def myhome(request):
sub_repos = []
sub_lib_enabled = UserOptions.objects.is_sub_lib_enabled(username)
if ENABLE_SUB_LIBRARY and sub_lib_enabled:
sub_repos = seafile_api.get_virtual_repos_by_owner(username)
sub_repos = get_virtual_repos_by_owner(request)
for repo in sub_repos:
repo.abbrev_origin_path = get_abbrev_origin_path(repo.origin_repo_name,
repo.origin_path)
@@ -1127,55 +1067,30 @@ def client_unsync(request):
return HttpResponse(json.dumps({'error': _(u'Internal server error')}),
status=500, content_type=content_type)
# @login_required
# def innerpub_msg_reply(request, msg_id):
# """Show inner pub message replies, and process message reply in ajax"""
# content_type = 'application/json; charset=utf-8'
# if request.is_ajax():
# ctx = {}
# if request.method == 'POST':
# form = MessageReplyForm(request.POST)
# # TODO: invalid form
# if form.is_valid():
# msg = form.cleaned_data['message']
# try:
# innerpub_msg = InnerPubMsg.objects.get(id=msg_id)
# except InnerPubMsg.DoesNotExist:
# return HttpResponseBadRequest(content_type=content_type)
# msg_reply = InnerPubMsgReply()
# msg_reply.reply_to = innerpub_msg
# msg_reply.from_email = request.user.username
# msg_reply.message = msg
# msg_reply.save()
# ctx['reply'] = msg_reply
# html = render_to_string("group/group_reply_new.html", ctx)
# else:
# try:
# msg = InnerPubMsg.objects.get(id=msg_id)
# except InnerPubMsg.DoesNotExist:
# raise HttpResponse(status=400)
# replies = InnerPubMsgReply.objects.filter(reply_to=msg)
# ctx['replies'] = replies
# html = render_to_string("group/group_reply_list.html", ctx)
# serialized_data = json.dumps({"html": html})
# return HttpResponse(serialized_data, content_type=content_type)
# else:
# return HttpResponseBadRequest(content_type=content_type)
@login_required
def unsetinnerpub(request, repo_id):
"""Unshare repos in organization or in share admin page.
Only system admin, organization admin or repo owner can perform this op.
"""
repo = get_repo(repo_id)
if not repo:
messages.error(request, _('Failed to unshare the library, as it does not exist.'))
return HttpResponseRedirect(reverse('share_admin'))
# TODO: permission check
# permission check
username = request.user.username
if is_org_context(request):
org_id = request.user.org.org_id
repo_owner = seafile_api.get_org_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
if not (request.user.org.is_staff or is_repo_owner):
raise Http404
else:
repo_owner = seafile_api.get_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
if not (request.user.is_staff or is_repo_owner):
raise Http404
try:
if is_org_context(request):

View File

@@ -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,6 +1400,88 @@ 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.
@@ -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):

View File

@@ -44,7 +44,7 @@ from seahub.contacts.models import Contact
from seahub.share.models import FileShare, PrivateFileDirShare
from seahub.wiki.utils import get_wiki_dirent
from seahub.wiki.models import WikiDoesNotExist, WikiPageMissing
from seahub.utils import show_delete_days, render_error, \
from seahub.utils import show_delete_days, render_error, is_org_context, \
get_file_type_and_ext, gen_file_get_url, gen_file_share_link, \
render_permission_error, \
is_textual_file, show_delete_days, mkstemp, EMPTY_SHA1, HtmlDiff, \
@@ -320,7 +320,11 @@ def view_file(request, repo_id):
return render_permission_error(request, _(u'Unable to view file'))
# check if the user is the owner or not, for 'private share'
is_repo_owner = seafile_api.is_repo_owner(username, repo.id)
if is_org_context(request):
repo_owner = seafile_api.get_org_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
else:
is_repo_owner = seafile_api.is_repo_owner(username, repo.id)
# get file type and extension
filetype, fileext = get_file_type_and_ext(u_filename)

View File

@@ -21,7 +21,7 @@ from seahub.share.models import FileShare, UploadLinkShare
from seahub.views import gen_path_link, get_repo_dirents, \
check_repo_access_permission
from seahub.utils import gen_file_upload_url, \
from seahub.utils import gen_file_upload_url, is_org_context, \
get_httpserver_root, gen_dir_share_link, gen_shared_upload_link, \
get_max_upload_file_size, new_merge_with_no_conflict, \
get_commit_before_new_merge
@@ -204,7 +204,10 @@ def render_repo(request, repo):
repo_size = get_repo_size(repo.id)
no_quota = is_no_quota(repo.id)
search_repo_id = None if repo.encrypted else repo.id
repo_owner = seafile_api.get_repo_owner(repo.id)
if is_org_context(request):
repo_owner = seafile_api.get_org_repo_owner(repo.id)
else:
repo_owner = seafile_api.get_repo_owner(repo.id)
is_repo_owner = True if repo_owner == username else False
if is_repo_owner and not repo.is_virtual:
show_repo_settings = True
@@ -212,7 +215,9 @@ def render_repo(request, repo):
show_repo_settings = False
more_start = None
file_list, dir_list, dirent_more = get_repo_dirents(request, repo, head_commit, path, offset=0, limit=100)
file_list, dir_list, dirent_more = get_repo_dirents(request, repo,
head_commit, path,
offset=0, limit=100)
if dirent_more:
more_start = 100
zipped = get_nav_path(path, repo.name)