1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-28 08:06:56 +00:00

Code clean (#1217)

* Use API to create file/folder instead of Ajax
* Remove sub_repo AJAX api
* Remove repo delete AJAX function
* Remove get_group_basic_info
* Add comment for get_unenc_group_repos
* Remove ajax_repo_change_basic_info and ajax_repo_transfer_owner
* Remove ajax_unset_inner_pub_repe and RepoPublic
* Remove ajax star/unstar a file
* update be shared repo api
* update test public repo
* Remove ajax_repo_remove_share
This commit is contained in:
Daniel Pan
2016-06-20 18:34:30 +08:00
committed by GitHub
parent fd742d6b02
commit cf1017513a
16 changed files with 119 additions and 705 deletions

View File

@@ -172,6 +172,8 @@ def get_dirents(request, repo_id):
def get_unenc_group_repos(request, group_id):
'''
Get unenc repos in a group.
Used in selecting a library for a group wiki
'''
content_type = 'application/json; charset=utf-8'
@@ -377,90 +379,6 @@ def list_lib_dir(request, repo_id):
return HttpResponse(json.dumps(result), content_type=content_type)
def new_dirent_common(func):
"""Decorator for common logic in creating directory and file.
"""
def _decorated(request, repo_id, *args, **kwargs):
if request.method != 'POST':
raise Http404
result = {}
content_type = 'application/json; charset=utf-8'
repo = get_repo(repo_id)
if not repo:
result['error'] = _(u'Library does not exist.')
return HttpResponse(json.dumps(result), status=400,
content_type=content_type)
# arguments checking
parent_dir = request.GET.get('parent_dir', None)
if not parent_dir:
result['error'] = _('Argument missing')
return HttpResponse(json.dumps(result), status=400,
content_type=content_type)
# permission checking
username = request.user.username
if check_folder_permission(request, repo.id, parent_dir) != 'rw':
result['error'] = _('Permission denied')
return HttpResponse(json.dumps(result), status=403,
content_type=content_type)
# form validation
form = RepoNewDirentForm(request.POST)
if form.is_valid():
dirent_name = form.cleaned_data["dirent_name"]
else:
result['error'] = str(form.errors.values()[0])
return HttpResponse(json.dumps(result), status=400,
content_type=content_type)
# rename duplicate name
dirent_name = check_filename_with_rename(repo.id, parent_dir,
dirent_name)
return func(repo.id, parent_dir, dirent_name, username)
return _decorated
@login_required_ajax
@new_dirent_common
def new_dir(repo_id, parent_dir, dirent_name, username):
"""
Create a new dir with ajax.
"""
result = {}
content_type = 'application/json; charset=utf-8'
# create new dirent
try:
seafile_api.post_dir(repo_id, parent_dir, dirent_name, username)
except SearpcError, e:
result['error'] = str(e)
return HttpResponse(json.dumps(result), status=500,
content_type=content_type)
return HttpResponse(json.dumps({'success': True, 'name': dirent_name}),
content_type=content_type)
@login_required_ajax
@new_dirent_common
def new_file(repo_id, parent_dir, dirent_name, username):
"""
Create a new file with ajax.
"""
result = {}
content_type = 'application/json; charset=utf-8'
# create new dirent
try:
seafile_api.post_empty_file(repo_id, parent_dir, dirent_name, username)
except SearpcError, e:
result['error'] = str(e)
return HttpResponse(json.dumps(result), status=500,
content_type=content_type)
return HttpResponse(json.dumps({'success': True, 'name': dirent_name}),
content_type=content_type)
@login_required_ajax
def rename_dirent(request, repo_id):
@@ -1046,45 +964,6 @@ def cancel_cp(request):
return HttpResponse(json.dumps(result), status=400,
content_type=content_type)
@login_required_ajax
def repo_star_file(request, repo_id):
content_type = 'application/json; charset=utf-8'
user_perm = check_folder_permission(request, repo_id, '/')
if user_perm is None:
err_msg = _(u'Permission denied.')
return HttpResponse(json.dumps({'error': err_msg}),
status=403, content_type=content_type)
path = request.GET.get('file', '')
if not path:
return HttpResponse(json.dumps({'error': _(u'Invalid arguments')}),
status=400, content_type=content_type)
is_dir = False
star_file(request.user.username, repo_id, path, is_dir)
return HttpResponse(json.dumps({'success':True}), content_type=content_type)
@login_required_ajax
def repo_unstar_file(request, repo_id):
content_type = 'application/json; charset=utf-8'
user_perm = check_folder_permission(request, repo_id, '/')
if user_perm is None:
err_msg = _(u'Permission denied.')
return HttpResponse(json.dumps({'error': err_msg}),
status=403, content_type=content_type)
path = request.GET.get('file', '')
if not path:
return HttpResponse(json.dumps({'error': _(u'Invalid arguments')}),
status=400, content_type=content_type)
unstar_file(request.user.username, repo_id, path)
return HttpResponse(json.dumps({'success':True}), content_type=content_type)
########## contacts related
@login_required_ajax
def get_contacts(request):
@@ -1158,83 +1037,6 @@ def get_current_commit(request, repo_id):
return HttpResponse(json.dumps({'html': html}),
content_type=content_type)
@login_required_ajax
def sub_repo(request, repo_id):
'''
check if a dir has a corresponding sub_repo
if it does not have, create one
'''
username = request.user.username
content_type = 'application/json; charset=utf-8'
result = {}
if not request.user.permissions.can_add_repo():
result['error'] = _(u"You do not have permission to create library")
return HttpResponse(json.dumps(result), status=403,
content_type=content_type)
origin_repo = seafile_api.get_repo(repo_id)
if origin_repo is None:
result['error'] = _('Repo not found.')
return HttpResponse(json.dumps(result), status=400,
content_type=content_type)
# perm check, only repo owner can create sub repo
if is_org_context(request):
repo_owner = seafile_api.get_org_repo_owner(origin_repo.id)
else:
repo_owner = seafile_api.get_repo_owner(origin_repo.id)
is_repo_owner = True if username == repo_owner else False
if not is_repo_owner:
result['error'] = _(u"You do not have permission to create library")
return HttpResponse(json.dumps(result), status=403,
content_type=content_type)
path = request.GET.get('p')
if not path:
result['error'] = _('Argument missing')
return HttpResponse(json.dumps(result), status=400, content_type=content_type)
name = os.path.basename(path)
# check if the sub-lib exist
try:
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:
logger.error(e)
result['error'] = _('Failed to create sub library, please try again later.')
return HttpResponse(json.dumps(result), status=500, content_type=content_type)
if sub_repo:
result['sub_repo_id'] = sub_repo.id
else:
# create a sub-lib
try:
# use name as 'repo_name' & 'repo_desc' for sub_repo
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
result['name'] = name
result['abbrev_origin_path'] = get_sub_repo_abbrev_origin_path(
origin_repo.name, path)
except SearpcError as e:
logger.error(e)
result['error'] = _('Failed to create sub library, please try again later.')
return HttpResponse(json.dumps(result), status=500, content_type=content_type)
return HttpResponse(json.dumps(result), content_type=content_type)
@login_required_ajax
def download_enc_file(request, repo_id, file_id):
@@ -1423,54 +1225,6 @@ 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 = {}
repo = get_repo(repo_id)
username = request.user.username
if is_org_context(request):
# 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 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)
if repo: # send delete signal only repo is valid
repo_deleted.send(sender=None,
org_id=org_id,
usernames=usernames,
repo_owner=username,
repo_id=repo_id,
repo_name=repo.name)
result['success'] = True
return HttpResponse(json.dumps(result), content_type=ct)
else:
result['error'] = _(u'Permission denied.')
return HttpResponse(json.dumps(result), status=403, content_type=ct)
else:
# 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
repo_deleted.send(sender=None,
org_id=-1,
usernames=usernames,
repo_owner=username,
repo_id=repo_id,
repo_name=repo.name)
result['success'] = True
return HttpResponse(json.dumps(result), content_type=ct)
else:
result['error'] = _(u'Permission denied.')
return HttpResponse(json.dumps(result), status=403, content_type=ct)
@login_required_ajax
def space_and_traffic(request):
@@ -1806,119 +1560,6 @@ def _create_repo_common(request, repo_name, repo_desc, encryption,
return repo_id
@login_required_ajax
def ajax_repo_change_basic_info(request, repo_id):
"""Handle post request to change library basic info.
"""
if request.method != 'POST':
raise Http404
content_type = 'application/json; charset=utf-8'
username = request.user.username
repo = seafile_api.get_repo(repo_id)
if not repo:
raise Http404
# no settings for virtual repo
if ENABLE_SUB_LIBRARY and repo.is_virtual:
raise Http404
# check permission
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_owner = True if username == repo_owner else False
if not is_owner:
raise Http404
form = RepoSettingForm(request.POST)
if not form.is_valid():
return HttpResponse(json.dumps({
'error': str(form.errors.values()[0])
}), status=400, content_type=content_type)
repo_name = form.cleaned_data['repo_name']
days = form.cleaned_data['days']
# Edit library info (name, descryption).
if repo.name != repo_name:
if not edit_repo(repo_id, repo_name, '', username): # set desc as ''
err_msg = _(u'Failed to edit library information.')
return HttpResponse(json.dumps({'error': err_msg}),
status=500, content_type=content_type)
# set library history
if days is not None and config.ENABLE_REPO_HISTORY_SETTING:
res = seafile_api.set_repo_history_limit(repo_id, days)
if res != 0:
return HttpResponse(json.dumps({
'error': _(u'Failed to save settings on server')
}), status=400, content_type=content_type)
messages.success(request, _(u'Settings saved.'))
return HttpResponse(json.dumps({'success': True}),
content_type=content_type)
@login_required_ajax
def ajax_repo_transfer_owner(request, repo_id):
"""Handle post request to transfer library owner.
"""
if request.method != 'POST':
raise Http404
content_type = 'application/json; charset=utf-8'
username = request.user.username
repo = seafile_api.get_repo(repo_id)
if not repo:
raise Http404
# check permission
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_owner = True if username == repo_owner else False
if not is_owner:
raise Http404
# check POST arg
repo_owner = request.POST.get('repo_owner', '').lower()
if not is_valid_username(repo_owner):
return HttpResponse(json.dumps({
'error': _('Username %s is not valid.') % repo_owner,
}), status=400, content_type=content_type)
try:
User.objects.get(email=repo_owner)
except User.DoesNotExist:
return HttpResponse(json.dumps({
'error': _('User %s is not found.') % repo_owner,
}), status=400, content_type=content_type)
if is_org_context(request):
org_id = request.user.org.org_id
if not seaserv.ccnet_threaded_rpc.org_user_exists(org_id, repo_owner):
return HttpResponse(json.dumps({
'error': _('User %s is not in current organization.') %
repo_owner,}), status=400, content_type=content_type)
if repo_owner and repo_owner != username:
if is_org_context(request):
org_id = request.user.org.org_id
seafile_api.set_org_repo_owner(org_id, repo_id, repo_owner)
else:
if ccnet_threaded_rpc.get_orgs_by_user(repo_owner):
return HttpResponse(json.dumps({
'error': _('Can not transfer library to organization user %s.') % repo_owner,
}), status=400, content_type=content_type)
else:
seafile_api.set_repo_owner(repo_id, repo_owner)
return HttpResponse(json.dumps({'success': True}), content_type=content_type)
@login_required_ajax
def ajax_repo_change_passwd(request, repo_id):
"""Handle ajax post request to change library password.
@@ -2283,40 +1924,6 @@ def add_group_folder_perm(request, repo_id, group_ids, path, perm):
data = json.dumps({"error": _("Failed")})
return HttpResponse(data, status=400, content_type=content_type)
@login_required_ajax
def get_group_basic_info(request, group_id):
'''
Get group basic info for group side nav
'''
content_type = 'application/json; charset=utf-8'
result = {}
group_id_int = int(group_id) # Checked by URL Conf
group = get_group(group_id_int)
if not group:
result["error"] = _('Group does not exist.')
return HttpResponse(json.dumps(result),
status=400, content_type=content_type)
group.is_staff = is_group_staff(group, request.user)
if PublicGroup.objects.filter(group_id=group.id):
group.is_pub = True
else:
group.is_pub = False
mods_available = get_available_mods_by_group(group.id)
mods_enabled = get_enabled_mods_by_group(group.id)
return HttpResponse(json.dumps({
"id": group.id,
"name": group.group_name,
"avatar": grp_avatar(group.id, 32),
"is_staff": group.is_staff,
"is_pub": group.is_pub,
"mods_available": mods_available,
"mods_enabled": mods_enabled,
}), content_type=content_type)
@login_required_ajax
def toggle_group_modules(request, group_id):
@@ -2367,73 +1974,13 @@ def toggle_personal_modules(request):
return HttpResponse(json.dumps({ "success": True }),
content_type=content_type)
@login_required_ajax
@require_POST
def ajax_unset_inner_pub_repo(request, repo_id):
"""
Unshare repos in organization.
"""
content_type = 'application/json; charset=utf-8'
result = {}
repo = get_repo(repo_id)
if not repo:
result["error"] = _('Library does not exist.')
return HttpResponse(json.dumps(result),
status=400, content_type=content_type)
perm = request.POST.get('permission', None)
if perm is None:
result["error"] = _(u'Argument missing')
return HttpResponse(json.dumps(result),
status=400, content_type=content_type)
# 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):
result["error"] = _('Permission denied.')
return HttpResponse(json.dumps(result),
status=403, content_type=content_type)
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):
result["error"] = _('Permission denied.')
return HttpResponse(json.dumps(result),
status=403, content_type=content_type)
try:
if is_org_context(request):
org_id = request.user.org.org_id
seaserv.seafserv_threaded_rpc.unset_org_inner_pub_repo(org_id,
repo.id)
else:
seaserv.unset_inner_pub_repo(repo.id)
origin_repo_id, origin_path = get_origin_repo_info(repo.id)
if origin_repo_id is not None:
perm_repo_id = origin_repo_id
perm_path = origin_path
else:
perm_repo_id = repo.id
perm_path = '/'
send_perm_audit_msg('delete-repo-perm', username, 'all', \
perm_repo_id, perm_path, perm)
return HttpResponse(json.dumps({"success": True}), content_type=content_type)
except SearpcError:
return HttpResponse(json.dumps({"error": _('Internal server error')}),
status=500, content_type=content_type)
@login_required_ajax
def ajax_group_members_import(request, group_id):
"""Import users to group.
Permission checking:
1. Only group admin can add import group members
"""
result = {}