mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 07:27:04 +00:00
share link duplicate generate, return error msg and 400 (#3789)
* share link duplicate generate, return error msg and 400 * add test case
This commit is contained in:
@@ -128,6 +128,8 @@ class GenerateShareLink extends React.Component {
|
||||
seafileAPI.createShareLink(repoID, itemPath, password, expireDays, permissions).then((res) => {
|
||||
let sharedLinkInfo = new SharedLinkInfo(res.data);
|
||||
this.setState({sharedLinkInfo: sharedLinkInfo});
|
||||
}).catch((error) => {
|
||||
toaster.danger(error.response.data.error_msg);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -296,14 +296,18 @@ class ShareLinks(APIView):
|
||||
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:
|
||||
if fs:
|
||||
error_msg = _(u'Share link %s already exists.' % fs.token)
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
fs = FileShare.objects.create_file_link(username, repo_id, path,
|
||||
password, expire_date,
|
||||
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:
|
||||
if fs:
|
||||
error_msg = _(u'Share link %s already exists.' % fs.token)
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
fs = FileShare.objects.create_dir_link(username, repo_id, path,
|
||||
password, expire_date,
|
||||
permission=perm, org_id=org_id)
|
||||
|
@@ -105,6 +105,23 @@ class ShareLinksTest(BaseTestCase):
|
||||
|
||||
self._remove_share_link(json_resp['token'])
|
||||
|
||||
def test_create_duplicate_file_share_link(self):
|
||||
self.login_as(self.user)
|
||||
|
||||
resp = self.client.post(self.url, {'path': self.file_path, 'repo_id': self.repo_id})
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['token'] is not None
|
||||
token = json_resp['token']
|
||||
|
||||
resp = self.client.post(self.url, {'path': self.file_path, 'repo_id': self.repo_id})
|
||||
self.assertEqual(400, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['error_msg'] is not None
|
||||
assert token in json_resp['error_msg']
|
||||
|
||||
self._remove_share_link(token)
|
||||
|
||||
def test_create_file_share_link_in_enc_repo(self):
|
||||
self.login_as(self.user)
|
||||
|
||||
@@ -208,6 +225,23 @@ class ShareLinksTest(BaseTestCase):
|
||||
|
||||
self._remove_share_link(json_resp['token'])
|
||||
|
||||
def test_create_duplicate_dir_share_link(self):
|
||||
self.login_as(self.user)
|
||||
|
||||
resp = self.client.post(self.url, {'path': self.folder_path, 'repo_id': self.repo_id})
|
||||
self.assertEqual(200, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['token'] is not None
|
||||
token = json_resp['token']
|
||||
|
||||
resp = self.client.post(self.url, {'path': self.folder_path, 'repo_id': self.repo_id})
|
||||
self.assertEqual(400, resp.status_code)
|
||||
json_resp = json.loads(resp.content)
|
||||
assert json_resp['error_msg'] is not None
|
||||
assert token in json_resp['error_msg']
|
||||
|
||||
self._remove_share_link(token)
|
||||
|
||||
def test_create_link_with_invalid_repo_permission(self):
|
||||
# login with admin to create share link in user repo
|
||||
self.login_as(self.admin)
|
||||
|
Reference in New Issue
Block a user