diff --git a/frontend/src/components/share-link-panel/link-details.js b/frontend/src/components/share-link-panel/link-details.js index 2b0ef681a2..a416e73c23 100644 --- a/frontend/src/components/share-link-panel/link-details.js +++ b/frontend/src/components/share-link-panel/link-details.js @@ -53,7 +53,7 @@ class LinkDetails extends React.Component { onCopyDownloadLink = () => { const { sharedLinkInfo } = this.props; - copy(`${sharedLinkInfo.link}?dl=1`); + copy(`${sharedLinkInfo.download_link}`); toaster.success(gettext('Direct download link is copied to the clipboard.')); }; @@ -177,12 +177,12 @@ class LinkDetails extends React.Component { copyLink={this.onCopySharedLink} /> - {!sharedLinkInfo.is_dir && sharedLinkInfo.permissions.can_download && ( // just for file + {!sharedLinkInfo.is_dir && sharedLinkInfo.permissions.can_download && sharedLinkInfo.show_download_link && ( // just for file <>
{gettext('Direct download link')}
diff --git a/frontend/src/models/share-link.js b/frontend/src/models/share-link.js index d322275aa5..a29d5b23e0 100644 --- a/frontend/src/models/share-link.js +++ b/frontend/src/models/share-link.js @@ -19,6 +19,8 @@ class ShareLink { this.ctime = object.ctime; this.password = object.password; this.user_scope = object.user_scope; + this.download_link = object.download_link; + this.show_download_link = object.show_download_link; } } diff --git a/seahub/api2/endpoints/share_links.py b/seahub/api2/endpoints/share_links.py index 224643ca8e..0f554e2448 100644 --- a/seahub/api2/endpoints/share_links.py +++ b/seahub/api2/endpoints/share_links.py @@ -38,7 +38,7 @@ from seahub.share.utils import VALID_SHARE_LINK_SCOPE, SCOPE_SPECIFIC_USERS, SCO from seahub.utils import gen_shared_link, is_org_context, normalize_file_path, \ normalize_dir_path, is_pro_version, get_file_type_and_ext, \ check_filename_with_rename, gen_file_upload_url, \ - get_password_strength_level, is_valid_password, is_valid_email, string2list + get_password_strength_level, is_valid_password, is_valid_email, string2list, gen_file_get_url_by_sharelink from seahub.utils.file_op import if_locked_by_online_office from seahub.utils.file_types import IMAGE, VIDEO, XMIND from seahub.utils.file_tags import get_tagged_files, get_files_tags_in_dir @@ -108,6 +108,8 @@ def get_share_link_info(fileshare): data['token'] = token data['link'] = gen_shared_link(token, fileshare.s_type) + data['download_link'] = gen_file_get_url_by_sharelink(token) + data['show_download_link'] = fileshare.show_download_link data['view_cnt'] = fileshare.view_cnt data['ctime'] = ctime data['expire_date'] = expire_date @@ -284,6 +286,8 @@ class ShareLinks(APIView): 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['download_link'] = gen_file_get_url_by_sharelink(token) + link_info['show_download_link'] = fs.show_download_link 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 '' diff --git a/seahub/share/models.py b/seahub/share/models.py index 8ce6e5e258..89e4166b0d 100644 --- a/seahub/share/models.py +++ b/seahub/share/models.py @@ -409,6 +409,14 @@ class FileShare(models.Model): return '%s/f/%s/' % (service_url, self.token) else: return '%s/d/%s/' % (service_url, self.token) + + @property + def show_download_link(self): + if self.is_encrypted(): + return False + if self.user_scope != 'all_users': + return False + return True def get_permissions(self): perm_dict = {}