1
0
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:
lian
2023-04-11 20:39:27 +08:00
committed by GitHub
parent 7f76f8b871
commit fff98e4ba6
2 changed files with 66 additions and 27 deletions

View File

@@ -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)

View File

@@ -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: