mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-22 11:57:34 +00:00
Merge branch '4.4'
Conflicts: seahub/auth/views.py seahub/templates/libraries.html seahub/templates/sysadmin/sys_admin_group_info.html seahub/templates/sysadmin/sys_publink_admin.html seahub/templates/sysadmin/userinfo.html seahub/urls.py
This commit is contained in:
@@ -24,6 +24,7 @@ from seaserv import seafile_api, seafserv_rpc, is_passwd_set, \
|
||||
from pysearpc import SearpcError
|
||||
|
||||
from seahub.auth.decorators import login_required_ajax
|
||||
from seahub.base.decorators import require_POST
|
||||
from seahub.contacts.models import Contact
|
||||
from seahub.forms import RepoNewDirentForm, RepoRenameDirentForm, \
|
||||
RepoCreateForm, SharedRepoCreateForm, RepoSettingForm
|
||||
@@ -657,6 +658,7 @@ def rename_dirent(request, repo_id):
|
||||
content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@require_POST
|
||||
def delete_dirent(request, repo_id):
|
||||
"""
|
||||
Delete a file/dir with ajax.
|
||||
@@ -706,6 +708,7 @@ def delete_dirent(request, repo_id):
|
||||
status=500, content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@require_POST
|
||||
def delete_dirents(request, repo_id):
|
||||
"""
|
||||
Delete multi files/dirs with ajax.
|
||||
@@ -791,9 +794,9 @@ def copy_move_common():
|
||||
content_type=content_type)
|
||||
|
||||
# Leave src folder/file permission checking to corresponding
|
||||
# views, only need to check folder permission when perform 'move'
|
||||
# operation, 1), if move file, check parent dir perm, 2), if move
|
||||
# folder, check that folder perm.
|
||||
# views.
|
||||
# For 'move', check has read-write perm to src folder;
|
||||
# For 'cp', check has read perm to src folder.
|
||||
|
||||
return view_method(request, repo_id, path, dst_repo_id, dst_path,
|
||||
obj_name)
|
||||
@@ -845,12 +848,18 @@ def cp_file(request, src_repo_id, src_path, dst_repo_id, dst_path, obj_name):
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
username = request.user.username
|
||||
|
||||
# check parent dir perm
|
||||
if not check_folder_permission(request, src_repo_id, src_path):
|
||||
result['error'] = _('Permission denied')
|
||||
return HttpResponse(json.dumps(result), status=403,
|
||||
content_type=content_type)
|
||||
|
||||
new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name)
|
||||
try:
|
||||
res = seafile_api.copy_file(src_repo_id, src_path, obj_name,
|
||||
dst_repo_id, dst_path, new_obj_name,
|
||||
username, need_progress=1)
|
||||
except SearpcError, e:
|
||||
except SearpcError as e:
|
||||
res = None
|
||||
|
||||
if not res:
|
||||
@@ -916,6 +925,12 @@ def cp_dir(request, src_repo_id, src_path, dst_repo_id, dst_path, obj_name):
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
username = request.user.username
|
||||
|
||||
# check src dir perm
|
||||
if not check_folder_permission(request, src_repo_id, src_path):
|
||||
result['error'] = _('Permission denied')
|
||||
return HttpResponse(json.dumps(result), status=403,
|
||||
content_type=content_type)
|
||||
|
||||
src_dir = posixpath.join(src_path, obj_name)
|
||||
if dst_path.startswith(src_dir):
|
||||
error_msg = _(u'Can not copy directory %(src)s to its subdirectory %(des)s') \
|
||||
@@ -1069,6 +1084,11 @@ def cp_dirents(request, src_repo_id, src_path, dst_repo_id, dst_path, obj_file_n
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
username = request.user.username
|
||||
|
||||
if check_folder_permission(request, src_repo_id, src_path) is None:
|
||||
error_msg = _(u'You do not have permission to copy files/dirs in this directory')
|
||||
result['error'] = error_msg
|
||||
return HttpResponse(json.dumps(result), status=403, content_type=content_type)
|
||||
|
||||
for obj_name in obj_dir_names:
|
||||
src_dir = posixpath.join(src_path, obj_name)
|
||||
if dst_path.startswith(src_dir):
|
||||
@@ -1480,6 +1500,7 @@ def get_popup_notices(request):
|
||||
}), content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@require_POST
|
||||
def set_notices_seen(request):
|
||||
"""Set user's notices seen:
|
||||
|
||||
@@ -1504,6 +1525,7 @@ def set_notices_seen(request):
|
||||
return HttpResponse(json.dumps({'success': True}), content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@require_POST
|
||||
def set_notice_seen_by_id(request):
|
||||
"""
|
||||
|
||||
@@ -1521,23 +1543,20 @@ def set_notice_seen_by_id(request):
|
||||
return HttpResponse(json.dumps({'success': True}), content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@require_POST
|
||||
def repo_remove(request, repo_id):
|
||||
ct = 'application/json; charset=utf-8'
|
||||
result = {}
|
||||
|
||||
if get_system_default_repo_id() == repo_id:
|
||||
result['error'] = _(u'System library can not be deleted.')
|
||||
return HttpResponse(json.dumps(result), status=403, content_type=ct)
|
||||
|
||||
repo = get_repo(repo_id)
|
||||
username = request.user.username
|
||||
if is_org_context(request):
|
||||
# Remove repo in org context, only (sys admin/repo owner/org staff) can
|
||||
# perform this operation.
|
||||
# Remove repo in org context, only (repo owner/org staff) can perform
|
||||
# this operation.
|
||||
org_id = request.user.org.org_id
|
||||
is_org_staff = request.user.org.is_staff
|
||||
org_repo_owner = seafile_api.get_org_repo_owner(repo_id)
|
||||
if request.user.is_staff or is_org_staff or org_repo_owner == username:
|
||||
if is_org_staff or org_repo_owner == username:
|
||||
# Must get related useres before remove the repo
|
||||
usernames = get_related_users_by_org_repo(org_id, repo_id)
|
||||
seafile_api.remove_repo(repo_id)
|
||||
@@ -1554,9 +1573,9 @@ def repo_remove(request, repo_id):
|
||||
result['error'] = _(u'Permission denied.')
|
||||
return HttpResponse(json.dumps(result), status=403, content_type=ct)
|
||||
else:
|
||||
# Remove repo in personal context, only (repo owner/sys admin) can
|
||||
# perform this operation.
|
||||
if validate_owner(request, repo_id) or request.user.is_staff:
|
||||
# Remove repo in personal context, only (repo owner) can perform this
|
||||
# operation.
|
||||
if validate_owner(request, repo_id):
|
||||
usernames = get_related_users_by_repo(repo_id)
|
||||
seafile_api.remove_repo(repo_id)
|
||||
if repo: # send delete signal only repo is valid
|
||||
@@ -2681,6 +2700,7 @@ def toggle_personal_modules(request):
|
||||
content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@require_POST
|
||||
def ajax_unset_inner_pub_repo(request, repo_id):
|
||||
"""
|
||||
Unshare repos in organization.
|
||||
@@ -2695,7 +2715,7 @@ def ajax_unset_inner_pub_repo(request, repo_id):
|
||||
return HttpResponse(json.dumps(result),
|
||||
status=400, content_type=content_type)
|
||||
|
||||
perm = request.GET.get('permission', None)
|
||||
perm = request.POST.get('permission', None)
|
||||
if perm is None:
|
||||
result["error"] = _(u'Argument missing')
|
||||
return HttpResponse(json.dumps(result),
|
||||
|
Reference in New Issue
Block a user