mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-18 00:00:00 +00:00
updat share links (#5432)
optimize batch create share links optimize get share links
This commit is contained in:
@@ -23,7 +23,9 @@ from seahub.api2.throttling import UserRateThrottle
|
||||
from seahub.api2.permissions import CanGenerateShareLink
|
||||
from seahub.constants import PERMISSION_READ_WRITE, PERMISSION_READ, PERMISSION_PREVIEW_EDIT, PERMISSION_PREVIEW
|
||||
from seahub.share.models import FileShare
|
||||
from seahub.utils import is_org_context, get_password_strength_level, is_valid_password
|
||||
from seahub.utils import is_org_context, get_password_strength_level, \
|
||||
is_valid_password, gen_shared_link
|
||||
from seahub.utils.timeutils import datetime_to_isoformat_timestr
|
||||
from seahub.utils.repo import parse_repo_perm
|
||||
from seahub.settings import SHARE_LINK_EXPIRE_DAYS_MAX, SHARE_LINK_EXPIRE_DAYS_MIN, SHARE_LINK_EXPIRE_DAYS_DEFAULT
|
||||
from seahub.views.file import can_edit_file
|
||||
@@ -405,10 +407,30 @@ class MultiShareLinksBatch(APIView):
|
||||
|
||||
created_share_links.append(fs)
|
||||
|
||||
result = []
|
||||
links_info = []
|
||||
for fs in created_share_links:
|
||||
link_info = get_share_link_info(fs)
|
||||
link_info['repo_folder_permission'] = repo_folder_permission
|
||||
result.append(link_info)
|
||||
|
||||
return Response(result)
|
||||
token = fs.token
|
||||
|
||||
link_info = {}
|
||||
link_info['username'] = username
|
||||
link_info['repo_id'] = repo_id
|
||||
link_info['repo_name'] = repo.repo_name
|
||||
|
||||
if path:
|
||||
obj_name = '/' if path == '/' else os.path.basename(path.rstrip('/'))
|
||||
else:
|
||||
obj_name = ''
|
||||
|
||||
link_info['path'] = path
|
||||
link_info['obj_name'] = obj_name
|
||||
link_info['is_dir'] = True if s_type == 'd' else False
|
||||
link_info['token'] = token
|
||||
link_info['link'] = gen_shared_link(token, s_type)
|
||||
link_info['ctime'] = datetime_to_isoformat_timestr(fs.ctime) if fs.ctime else ''
|
||||
link_info['expire_date'] = datetime_to_isoformat_timestr(fs.expire_date) if fs.expire_date else ''
|
||||
link_info['permissions'] = fs.get_permissions()
|
||||
link_info['password'] = fs.get_password()
|
||||
links_info.append(link_info)
|
||||
|
||||
return Response(links_info)
|
||||
|
@@ -219,32 +219,49 @@ class ShareLinks(APIView):
|
||||
.filter(repo_id=repo_id) \
|
||||
.filter(path=path)
|
||||
|
||||
repo_folder_permission_dict = {}
|
||||
repo_object_dict = {}
|
||||
for fileshare in fileshares:
|
||||
|
||||
if fileshare.s_type == 'd':
|
||||
folder_path = normalize_dir_path(fileshare.path)
|
||||
else:
|
||||
file_path = normalize_file_path(fileshare.path)
|
||||
folder_path = os.path.dirname(file_path)
|
||||
|
||||
repo_id = fileshare.repo_id
|
||||
if repo_id not in repo_folder_permission_dict:
|
||||
|
||||
try:
|
||||
permission = seafile_api.check_permission_by_path(repo_id,
|
||||
folder_path,
|
||||
fileshare.username)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
permission = ''
|
||||
|
||||
repo_folder_permission_dict[repo_id] = permission
|
||||
if repo_id not in repo_object_dict:
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
repo_object_dict[repo_id] = repo
|
||||
|
||||
links_info = []
|
||||
for fs in fileshares:
|
||||
link_info = get_share_link_info(fs)
|
||||
link_info['repo_folder_permission'] = repo_folder_permission_dict.get(link_info['repo_id'], '')
|
||||
|
||||
link_info = {}
|
||||
|
||||
token = fs.token
|
||||
repo_id = fs.repo_id
|
||||
path = fs.path
|
||||
s_type = fs.s_type
|
||||
|
||||
link_info['username'] = username
|
||||
link_info['repo_id'] = repo_id
|
||||
|
||||
repo_object = repo_object_dict.get(repo_id, '')
|
||||
if repo_object:
|
||||
repo_name = repo_object.repo_name
|
||||
else:
|
||||
repo_name = ''
|
||||
|
||||
if path:
|
||||
obj_name = '/' if path == '/' else os.path.basename(path.rstrip('/'))
|
||||
else:
|
||||
obj_name = ''
|
||||
|
||||
link_info['repo_name'] = repo_name
|
||||
link_info['path'] = path
|
||||
link_info['obj_name'] = obj_name
|
||||
link_info['is_dir'] = True if s_type == 'd' else False
|
||||
link_info['token'] = token
|
||||
link_info['link'] = gen_shared_link(token, s_type)
|
||||
link_info['view_cnt'] = fs.view_cnt
|
||||
link_info['ctime'] = datetime_to_isoformat_timestr(fs.ctime) if fs.ctime else ''
|
||||
link_info['expire_date'] = datetime_to_isoformat_timestr(fs.expire_date) if fs.expire_date else ''
|
||||
link_info['is_expired'] = fs.is_expired()
|
||||
link_info['permissions'] = fs.get_permissions()
|
||||
link_info['password'] = fs.get_password()
|
||||
links_info.append(link_info)
|
||||
|
||||
if len(links_info) == 1:
|
||||
|
Reference in New Issue
Block a user