From bbd10c13da6d87db086d8f11c0e93a2512fb94d5 Mon Sep 17 00:00:00 2001 From: zhengxie Date: Mon, 10 Sep 2018 14:32:04 +0800 Subject: [PATCH] Fix duplicated file_share_id error when create file share link in org mode --- seahub/api2/endpoints/share_links.py | 9 +++------ seahub/share/models.py | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/seahub/api2/endpoints/share_links.py b/seahub/api2/endpoints/share_links.py index 9fe0cadc56..7502d1daa3 100644 --- a/seahub/api2/endpoints/share_links.py +++ b/seahub/api2/endpoints/share_links.py @@ -277,23 +277,20 @@ class ShareLinks(APIView): return api_error(status.HTTP_403_FORBIDDEN, error_msg) username = request.user.username + org_id = request.user.org.org_id if is_org_context(request) else None if s_type == 'f': fs = FileShare.objects.get_file_link_by_path(username, repo_id, path) if not fs: fs = FileShare.objects.create_file_link(username, repo_id, path, password, expire_date, - permission=perm) + permission=perm, org_id=org_id) elif s_type == 'd': fs = FileShare.objects.get_dir_link_by_path(username, repo_id, path) if not fs: fs = FileShare.objects.create_dir_link(username, repo_id, path, password, expire_date, - permission=perm) - - if is_org_context(request): - org_id = request.user.org.org_id - OrgFileShare.objects.set_org_file_share(org_id, fs) + permission=perm, org_id=org_id) link_info = get_share_link_info(fs) return Response(link_info) diff --git a/seahub/share/models.py b/seahub/share/models.py index ea9a406713..408ab90772 100644 --- a/seahub/share/models.py +++ b/seahub/share/models.py @@ -14,6 +14,7 @@ from seahub.base.fields import LowerCaseCharField from seahub.utils import normalize_file_path, normalize_dir_path, gen_token,\ get_service_url from seahub.constants import PERMISSION_READ, PERMISSION_ADMIN +from seahub.utils import is_valid_org_id # Get an instance of a logger logger = logging.getLogger(__name__) @@ -84,7 +85,8 @@ def check_share_link_common(request, sharelink, is_upload_link=False): class FileShareManager(models.Manager): def _add_file_share(self, username, repo_id, path, s_type, - password=None, expire_date=None, permission='view_download'): + password=None, expire_date=None, + permission='view_download', org_id=None): if password is not None: password_enc = make_password(password) else: @@ -96,6 +98,10 @@ class FileShareManager(models.Manager): s_type=s_type, password=password_enc, expire_date=expire_date, permission=permission) fs.save() + + if is_valid_org_id(org_id): + OrgFileShare.objects.set_org_file_share(org_id, fs) + return fs def _get_file_share_by_path(self, username, repo_id, path): @@ -124,12 +130,13 @@ class FileShareManager(models.Manager): ########## public methods ########## def create_file_link(self, username, repo_id, path, password=None, - expire_date=None, permission='view_download'): + expire_date=None, permission='view_download', + org_id=None): """Create download link for file. """ path = normalize_file_path(path) return self._add_file_share(username, repo_id, path, 'f', password, - expire_date, permission) + expire_date, permission, org_id) def get_file_link_by_path(self, username, repo_id, path): path = normalize_file_path(path) @@ -139,12 +146,13 @@ class FileShareManager(models.Manager): return self._get_valid_file_share_by_token(token) def create_dir_link(self, username, repo_id, path, password=None, - expire_date=None, permission='view_download'): + expire_date=None, permission='view_download', + org_id=None): """Create download link for directory. """ path = normalize_dir_path(path) return self._add_file_share(username, repo_id, path, 'd', password, - expire_date, permission) + expire_date, permission, org_id) def get_dir_link_by_path(self, username, repo_id, path): path = normalize_dir_path(path)