From 1dbd94e9ed2f96df832cb3fc84d53870240a8cea Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 12 Oct 2019 10:06:41 +0800 Subject: [PATCH 1/9] fix virtual repo url in email notices (#4142) --- seahub/notifications/management/commands/send_notices.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/seahub/notifications/management/commands/send_notices.py b/seahub/notifications/management/commands/send_notices.py index 577ad82713..ae9155dfbc 100644 --- a/seahub/notifications/management/commands/send_notices.py +++ b/seahub/notifications/management/commands/send_notices.py @@ -98,7 +98,7 @@ class Command(BaseCommand): owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) - repo_url = reverse('lib_view', args=[repo_id, repo.name, '']) + repo_url = reverse('lib_view', args=[repo.id, repo.name, '']) notice.repo_url = repo_url notice.notice_from = escape(email2nickname(d['share_from'])) notice.repo_name = repo.name @@ -129,7 +129,7 @@ class Command(BaseCommand): owner = seafile_api.get_repo_owner(repo_id) repo = seafile_api.get_virtual_repo(repo_id, path, owner) - repo_url = reverse('lib_view', args=[repo_id, repo.name, '']) + repo_url = reverse('lib_view', args=[repo.id, repo.name, '']) notice.repo_url = repo_url notice.notice_from = escape(email2nickname(d['share_from'])) notice.repo_name = repo.name From 821d6afbaae8ca74c3070bb6263132d71dbc1fcc Mon Sep 17 00:00:00 2001 From: lian Date: Sat, 12 Oct 2019 10:27:41 +0800 Subject: [PATCH 2/9] use fake relay_id (#4101) relay_id is used when desktop client syncing repo, but is removed after 7.0.0. In order to be compatible with the old client, a default value is required. Length must be 40 --- seahub/api2/views.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/seahub/api2/views.py b/seahub/api2/views.py index df1d0cc80b..2e4901a22d 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -129,7 +129,7 @@ except ImportError: from pysearpc import SearpcError, SearpcObjEncoder import seaserv from seaserv import seafserv_threaded_rpc, \ - get_personal_groups_by_user, get_session_info, is_personal_repo, \ + get_personal_groups_by_user, is_personal_repo, \ get_repo, check_permission, get_commits, is_passwd_set,\ check_quota, list_share_repos, get_group_repos_by_owner, get_group_repoids, \ remove_share, get_group, \ @@ -608,7 +608,6 @@ def repo_download_info(request, repo_id, gen_sync_token=True): return api_error(status.HTTP_404_NOT_FOUND, 'Library not found.') # generate download url for client - relay_id = get_session_info().id addr, port = get_ccnet_server_addr_port() email = request.user.username if gen_sync_token: @@ -628,7 +627,7 @@ def repo_download_info(request, repo_id, gen_sync_token=True): calculate_repos_last_modify([repo]) info_json = { - 'relay_id': relay_id, + 'relay_id': '44e8f253849ad910dc142247227c8ece8ec0f971', 'relay_addr': addr, 'relay_port': port, 'email': email, From 5b789c43002778c457732e94fe64abce2357de80 Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 12 Oct 2019 14:54:25 +0800 Subject: [PATCH 3/9] corrent logic for check generate share link, and share link permissions (#4121) --- .../components/dialog/generate-share-link.js | 44 +++++++----- .../src/components/dialog/share-dialog.js | 3 + .../dirent-list-view/dirent-list-item.js | 22 +++--- .../components/select-editor/select-editor.js | 4 ++ frontend/src/pages/share-admin/share-links.js | 72 ++++++++++--------- frontend/src/utils/utils.js | 45 ++++++++++++ seahub/api2/endpoints/dir.py | 4 +- seahub/api2/endpoints/share_links.py | 6 +- seahub/utils/repo.py | 5 ++ 9 files changed, 140 insertions(+), 65 deletions(-) diff --git a/frontend/src/components/dialog/generate-share-link.js b/frontend/src/components/dialog/generate-share-link.js index 741d75630b..7a8fd747fc 100644 --- a/frontend/src/components/dialog/generate-share-link.js +++ b/frontend/src/components/dialog/generate-share-link.js @@ -25,11 +25,6 @@ class GenerateShareLink extends React.Component { this.isExpireDaysNoLimit = (parseInt(shareLinkExpireDaysMin) === 0 && parseInt(shareLinkExpireDaysMax) === 0 && shareLinkExpireDaysDefault == 0); this.defaultExpireDays = this.isExpireDaysNoLimit ? '' : shareLinkExpireDaysDefault; - if (isPro) { - this.editOption = 'edit_download'; - this.permissionOptions = ['preview_download', 'preview_only']; - } - this.state = { isValidate: false, isShowPasswordInput: false, @@ -42,7 +37,8 @@ class GenerateShareLink extends React.Component { sharedLinkInfo: null, isNoticeMessageShow: false, isLoading: true, - currentPermission: isPro ? this.permissionOptions[0] : '', + permissionOptions: [], + currentPermission: '', isSendLinkShown: false }; } @@ -65,15 +61,32 @@ class GenerateShareLink extends React.Component { toaster.danger(errMessage); }); - if (isPro && Utils.isEditableOfficeFile(path)) { - seafileAPI.getFileInfo(repoID, path).then((res) => { - if (res.data.can_edit) { - this.permissionOptions.push(this.editOption); + if (isPro) { + if (this.props.itemType === 'library') { + let permissionOptions = Utils.getShareLinkPermissionList(this.props.itemType, '', path); + this.setState({ + permissionOptions: permissionOptions, + currentPermission: permissionOptions[0], + }); + } else { + let getDirentInfoAPI; + if (this.props.itemType === 'file') { + getDirentInfoAPI = seafileAPI.getFileInfo(repoID, path); + } else if (this.props.itemType === 'dir') { + getDirentInfoAPI = seafileAPI.getDirInfo(repoID, path); } - }).catch(error => { - let errMessage = Utils.getErrorMsg(error); - toaster.danger(errMessage); - }); + getDirentInfoAPI.then((res) => { + let permission = res.data.permission; + let permissionOptions = Utils.getShareLinkPermissionList(this.props.itemType, permission, path); + this.setState({ + permissionOptions: permissionOptions, + currentPermission: permissionOptions[0], + }); + }).catch(error => { + let errMessage = Utils.getErrorMsg(error); + toaster.danger(errMessage); + }); + } } } @@ -260,7 +273,6 @@ class GenerateShareLink extends React.Component { } render() { - if (this.state.isLoading) { return ; } @@ -394,7 +406,7 @@ class GenerateShareLink extends React.Component { {gettext('Set permission')} - {this.permissionOptions.map((item, index) => { + {this.state.permissionOptions.map((item, index) => { return (