mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 02:48:51 +00:00
[system repo admin] fix, improvement, supplement, clean
This commit is contained in:
@@ -169,49 +169,6 @@ def sys_info(request):
|
||||
'license_dict': license_dict,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_repo_admin(request):
|
||||
# Make sure page request is an int. If not, deliver first page.
|
||||
try:
|
||||
current_page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '25'))
|
||||
except ValueError:
|
||||
current_page = 1
|
||||
per_page = 25
|
||||
|
||||
repos_all = seafile_api.get_repo_list(per_page * (current_page -1),
|
||||
per_page + 1)
|
||||
repos = repos_all[:per_page]
|
||||
if len(repos_all) == per_page + 1:
|
||||
page_next = True
|
||||
else:
|
||||
page_next = False
|
||||
|
||||
repos = filter(lambda r: not r.is_virtual, repos)
|
||||
|
||||
default_repo_id = get_system_default_repo_id()
|
||||
repos = filter(lambda r: not r.repo_id == default_repo_id, repos)
|
||||
|
||||
for repo in repos:
|
||||
try:
|
||||
repo.owner = seafile_api.get_repo_owner(repo.id)
|
||||
except:
|
||||
repo.owner = "failed to get"
|
||||
|
||||
return render_to_response(
|
||||
'sysadmin/sys_repo_admin.html', {
|
||||
'enable_sys_admin_view_repo': ENABLE_SYS_ADMIN_VIEW_REPO,
|
||||
'is_pro_version': is_pro_version(),
|
||||
'repos': repos,
|
||||
'current_page': current_page,
|
||||
'prev_page': current_page-1,
|
||||
'next_page': current_page+1,
|
||||
'per_page': per_page,
|
||||
'page_next': page_next,
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
def can_view_sys_admin_repo(repo):
|
||||
default_repo_id = get_system_default_repo_id()
|
||||
is_default_repo = True if repo.id == default_repo_id else False
|
||||
@@ -225,278 +182,6 @@ def can_view_sys_admin_repo(repo):
|
||||
else:
|
||||
return False
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_admin_repo_download_file(request, repo_id):
|
||||
|
||||
next = request.META.get('HTTP_REFERER', None)
|
||||
if not next:
|
||||
next = reverse('sys_admin_repo')
|
||||
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
messages.error(request, _(u'Library does not exist'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
path = request.GET.get('p', '')
|
||||
obj_id = seafile_api.get_file_id_by_path(repo_id, path)
|
||||
if not obj_id:
|
||||
messages.error(request, _(u'Unable to download file, invalid file path'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
if not can_view_sys_admin_repo(repo):
|
||||
messages.error(request, _(u'Unable to view library'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
try:
|
||||
token = seafile_api.get_fileserver_access_token(repo_id, obj_id,
|
||||
'download', request.user.username)
|
||||
except SearpcError as e:
|
||||
logger.error(e)
|
||||
messages.error(request, _(u'Unable to view library'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
file_name = os.path.basename(path.rstrip('/'))
|
||||
redirect_url = gen_file_get_url(token, file_name)
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_admin_repo(request, repo_id):
|
||||
next = reverse('sys_repo_admin')
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
messages.error(request, _(u'Library does not exist'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
if not can_view_sys_admin_repo(repo):
|
||||
messages.error(request, _(u'Unable to view library'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
path = request.GET.get('p', '/')
|
||||
if path[-1] != '/':
|
||||
path = path + '/'
|
||||
|
||||
dir_id = seafile_api.get_dir_id_by_path(repo_id, path)
|
||||
if not dir_id:
|
||||
messages.error(request, _(u'Unable to view library, wrong folder path.'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
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)
|
||||
|
||||
try:
|
||||
dirs = seafserv_threaded_rpc.list_dir_with_perm(repo_id, path,
|
||||
dir_id, repo_owner,
|
||||
-1, -1)
|
||||
except SearpcError as e:
|
||||
logger.error(e)
|
||||
messages.error(request, _(u'Unable to view library'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
file_list, dir_list = [], []
|
||||
for dirent in dirs:
|
||||
dirent.last_modified = dirent.mtime
|
||||
if stat.S_ISDIR(dirent.props.mode):
|
||||
dir_list.append(dirent)
|
||||
else:
|
||||
if repo.version == 0:
|
||||
dirent.file_size = seafile_api.get_file_size(repo.store_id,
|
||||
repo.version,
|
||||
dirent.obj_id)
|
||||
else:
|
||||
dirent.file_size = dirent.size
|
||||
file_list.append(dirent)
|
||||
|
||||
zipped = gen_path_link(path, repo.name)
|
||||
default_repo_id = get_system_default_repo_id()
|
||||
is_default_repo = True if repo_id == default_repo_id else False
|
||||
|
||||
return render_to_response('sysadmin/admin_repo_view.html', {
|
||||
'repo': repo,
|
||||
'repo_owner': repo_owner,
|
||||
'dir_list': dir_list,
|
||||
'file_list': file_list,
|
||||
'path': path,
|
||||
'zipped': zipped,
|
||||
'is_default_repo': is_default_repo,
|
||||
'max_upload_file_size': seaserv.MAX_UPLOAD_FILE_SIZE,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_list_system(request):
|
||||
"""List system repos.
|
||||
"""
|
||||
repos = []
|
||||
sys_repo = seafile_api.get_repo(get_system_default_repo_id())
|
||||
repos.append(sys_repo)
|
||||
|
||||
return render_to_response('sysadmin/sys_list_system.html', {
|
||||
'repos': repos,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_repo_trash(request):
|
||||
""" List deleted repos (by owner) """
|
||||
|
||||
search_owner = request.GET.get('name', '')
|
||||
if search_owner:
|
||||
if is_valid_username(search_owner):
|
||||
repos = seafserv_threaded_rpc.get_trash_repos_by_owner(search_owner)
|
||||
return render_to_response(
|
||||
'sysadmin/sys_repo_trash.html', {
|
||||
'repos': repos,
|
||||
'search_owner': search_owner,
|
||||
}, context_instance=RequestContext(request))
|
||||
else:
|
||||
messages.error(request, _(u'Invalid username'))
|
||||
return HttpResponseRedirect(reverse('sys_repo_trash'))
|
||||
|
||||
try:
|
||||
current_page = int(request.GET.get('page', '1'))
|
||||
per_page = int(request.GET.get('per_page', '25'))
|
||||
except ValueError:
|
||||
current_page = 1
|
||||
per_page = 25
|
||||
|
||||
repos_all = seafserv_threaded_rpc.get_trash_repo_list(per_page * (current_page -1),
|
||||
per_page + 1)
|
||||
repos = repos_all[:per_page]
|
||||
if len(repos_all) == per_page + 1:
|
||||
page_next = True
|
||||
else:
|
||||
page_next = False
|
||||
|
||||
return render_to_response(
|
||||
'sysadmin/sys_repo_trash.html', {
|
||||
'repos': repos,
|
||||
'current_page': current_page,
|
||||
'prev_page': current_page-1,
|
||||
'next_page': current_page+1,
|
||||
'per_page': per_page,
|
||||
'page_next': page_next,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@require_POST
|
||||
def sys_repo_trash_restore(request, repo_id):
|
||||
"""Restore deleted repo by id"""
|
||||
|
||||
referer = request.META.get('HTTP_REFERER', None)
|
||||
next = reverse('sys_repo_trash') if referer is None else referer
|
||||
|
||||
try:
|
||||
seafserv_threaded_rpc.restore_repo_from_trash(repo_id)
|
||||
messages.success(request, _(u'Success'))
|
||||
except SearpcError, e:
|
||||
logger.error(e)
|
||||
messages.error(request, _(u'Failed'))
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@require_POST
|
||||
def sys_repo_trash_remove(request, repo_id):
|
||||
"""Remove deleted repo by id"""
|
||||
|
||||
referer = request.META.get('HTTP_REFERER', None)
|
||||
next = reverse('sys_repo_trash') if referer is None else referer
|
||||
|
||||
try:
|
||||
seafserv_threaded_rpc.del_repo_from_trash(repo_id)
|
||||
messages.success(request, _(u'Success'))
|
||||
except SearpcError, e:
|
||||
logger.error(e)
|
||||
messages.error(request, _(u'Failed'))
|
||||
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@require_POST
|
||||
def sys_repo_trash_clear(request):
|
||||
"""Clear repo trash (by owner)"""
|
||||
|
||||
next = reverse('sys_repo_trash')
|
||||
owner = request.POST.get('owner', '')
|
||||
try:
|
||||
if owner:
|
||||
if is_valid_username(owner):
|
||||
seafserv_threaded_rpc.empty_repo_trash_by_owner(owner)
|
||||
else:
|
||||
messages.error(request, _(u'Invalid username'))
|
||||
return HttpResponseRedirect(next)
|
||||
else:
|
||||
seafserv_threaded_rpc.empty_repo_trash()
|
||||
except SearpcError, e:
|
||||
logger.error(e)
|
||||
messages.error(request, _(u'Failed'))
|
||||
|
||||
messages.success(request, _(u'Success'))
|
||||
return HttpResponseRedirect(next)
|
||||
|
||||
def list_repos_by_name_and_owner(repo_name, owner):
|
||||
repos = []
|
||||
owned_repos = seafile_api.get_owned_repo_list(owner)
|
||||
for repo in owned_repos:
|
||||
if not repo.name:
|
||||
continue
|
||||
|
||||
if repo_name in repo.name:
|
||||
repo.owner = owner
|
||||
repos.append(repo)
|
||||
return repos
|
||||
|
||||
def list_repos_by_name(repo_name):
|
||||
repos = []
|
||||
repos_all = seafile_api.get_repo_list(-1, -1)
|
||||
for repo in repos_all:
|
||||
if not repo.name:
|
||||
continue
|
||||
|
||||
if repo_name in repo.name:
|
||||
try:
|
||||
repo.owner = seafile_api.get_repo_owner(repo.id)
|
||||
except SearpcError:
|
||||
repo.owner = "failed to get"
|
||||
repos.append(repo)
|
||||
return repos
|
||||
|
||||
def list_repos_by_owner(owner):
|
||||
repos = seafile_api.get_owned_repo_list(owner)
|
||||
for e in repos:
|
||||
e.owner = owner
|
||||
return repos
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
def sys_repo_search(request):
|
||||
"""Search a repo.
|
||||
"""
|
||||
repo_name = request.GET.get('name', '')
|
||||
owner = request.GET.get('owner', '')
|
||||
repos = []
|
||||
|
||||
if repo_name and owner : # search by name and owner
|
||||
repos = list_repos_by_name_and_owner(repo_name, owner)
|
||||
elif repo_name: # search by name
|
||||
repos = list_repos_by_name(repo_name)
|
||||
elif owner: # search by owner
|
||||
repos = list_repos_by_owner(owner)
|
||||
|
||||
return render_to_response('sysadmin/sys_repo_search.html', {
|
||||
'repos': repos,
|
||||
'name': repo_name,
|
||||
'owner': owner,
|
||||
'enable_sys_admin_view_repo': ENABLE_SYS_ADMIN_VIEW_REPO,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
def _populate_user_quota_usage(user):
|
||||
"""Populate space/share quota to user.
|
||||
|
||||
|
Reference in New Issue
Block a user