mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-13 13:50:07 +00:00
Merge pull request #1985 from haiwen/fs-encrepo
Fix shared link in enc repo and update tests
This commit is contained in:
@@ -226,6 +226,10 @@ class ShareLinks(APIView):
|
|||||||
error_msg = 'Library %s not found.' % repo_id
|
error_msg = 'Library %s not found.' % repo_id
|
||||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||||
|
|
||||||
|
if repo.encrypted:
|
||||||
|
error_msg = 'Permission denied.'
|
||||||
|
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
obj_id, s_type = self._generate_obj_id_and_type_by_path(repo_id, path)
|
obj_id, s_type = self._generate_obj_id_and_type_by_path(repo_id, path)
|
||||||
except SearpcError as e:
|
except SearpcError as e:
|
||||||
|
@@ -61,6 +61,18 @@ class Fixtures(Exam):
|
|||||||
passwd=None))
|
passwd=None))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
@fixture
|
||||||
|
def enc_repo(self):
|
||||||
|
r = seafile_api.get_repo(self.create_repo(name='test-enc-repo', desc='',
|
||||||
|
username=self.user.username,
|
||||||
|
passwd='123'))
|
||||||
|
|
||||||
|
self.create_file(repo_id=r.id, parent_dir='/',
|
||||||
|
filename='test.txt', username='test@test.com')
|
||||||
|
|
||||||
|
assert r is not None
|
||||||
|
return r
|
||||||
|
|
||||||
@fixture
|
@fixture
|
||||||
def file(self):
|
def file(self):
|
||||||
return self.create_file(repo_id=self.repo.id,
|
return self.create_file(repo_id=self.repo.id,
|
||||||
@@ -328,6 +340,7 @@ class Fixtures(Exam):
|
|||||||
class BaseTestCase(TestCase, Fixtures):
|
class BaseTestCase(TestCase, Fixtures):
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.remove_repo(self.repo.id)
|
self.remove_repo(self.repo.id)
|
||||||
|
self.remove_repo(self.enc_repo.id)
|
||||||
|
|
||||||
def login_as(self, user, password=None):
|
def login_as(self, user, password=None):
|
||||||
if isinstance(user, basestring):
|
if isinstance(user, basestring):
|
||||||
|
@@ -195,6 +195,9 @@ def view_shared_dir(request, fileshare):
|
|||||||
if not repo:
|
if not repo:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
|
if repo.encrypted:
|
||||||
|
return render_error(request, _(u'Permission denied'))
|
||||||
|
|
||||||
# Check path still exist, otherwise show error
|
# Check path still exist, otherwise show error
|
||||||
if not seafile_api.get_dir_id_by_path(repo.id, fileshare.path):
|
if not seafile_api.get_dir_id_by_path(repo.id, fileshare.path):
|
||||||
return render_error(request, _('"%s" does not exist.') % fileshare.path)
|
return render_error(request, _('"%s" does not exist.') % fileshare.path)
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import json
|
import json
|
||||||
from mock import patch
|
|
||||||
|
|
||||||
|
from mock import patch
|
||||||
|
from seaserv import seafile_api
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
from seahub.test_utils import BaseTestCase
|
from seahub.test_utils import BaseTestCase
|
||||||
from seahub.share.models import FileShare
|
from seahub.share.models import FileShare
|
||||||
from seahub.api2.permissions import CanGenerateShareLink
|
from seahub.api2.permissions import CanGenerateShareLink
|
||||||
@@ -103,6 +105,18 @@ class ShareLinksTest(BaseTestCase):
|
|||||||
|
|
||||||
self._remove_share_link(json_resp['token'])
|
self._remove_share_link(json_resp['token'])
|
||||||
|
|
||||||
|
def test_create_file_share_link_in_enc_repo(self):
|
||||||
|
self.login_as(self.user)
|
||||||
|
|
||||||
|
resp = self.client.post(self.url, {'path': '/', 'repo_id': self.enc_repo.id})
|
||||||
|
self.assertEqual(403, resp.status_code)
|
||||||
|
|
||||||
|
def test_create_file_share_link_in_other_repo(self):
|
||||||
|
self.login_as(self.admin)
|
||||||
|
|
||||||
|
resp = self.client.post(self.url, {'path': self.file_path, 'repo_id': self.repo_id})
|
||||||
|
self.assertEqual(403, resp.status_code)
|
||||||
|
|
||||||
def test_create_file_share_link_with_permissions(self):
|
def test_create_file_share_link_with_permissions(self):
|
||||||
self.login_as(self.user)
|
self.login_as(self.user)
|
||||||
|
|
||||||
|
@@ -1,17 +1,31 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
|
from seaserv import seafile_api
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
from seahub.test_utils import BaseTestCase
|
from seahub.test_utils import BaseTestCase
|
||||||
|
|
||||||
class GetDirentsTest(BaseTestCase):
|
class GetDirentsTest(BaseTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.login_as(self.user)
|
a = self.file # create a file
|
||||||
file = self.file
|
|
||||||
self.url = reverse('get_dirents', args=[self.repo.id]) + "?path=/"
|
self.url = reverse('get_dirents', args=[self.repo.id]) + "?path=/"
|
||||||
|
|
||||||
def test_can_get(self):
|
def test_can_get(self):
|
||||||
|
self.login_as(self.user)
|
||||||
resp = self.client.get(self.url, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
resp = self.client.get(self.url, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
json_resp = json.loads(resp.content)
|
json_resp = json.loads(resp.content)
|
||||||
assert len(json_resp) == 1
|
assert len(json_resp) == 1
|
||||||
|
|
||||||
|
def test_cannot_get_others(self):
|
||||||
|
self.login_as(self.admin)
|
||||||
|
resp = self.client.get(self.url, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
|
self.assertEqual(403, resp.status_code)
|
||||||
|
|
||||||
|
def test_get_entries_in_enc_repo(self):
|
||||||
|
self.login_as(self.user)
|
||||||
|
|
||||||
|
url = reverse('get_dirents', args=[self.enc_repo.id]) + "?path=/"
|
||||||
|
resp = self.client.get(url, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
@@ -28,6 +28,21 @@ class SharedDirTest(TestCase, Fixtures):
|
|||||||
|
|
||||||
self.assertContains(resp, '<h2>%s</h2>' % self.repo.name)
|
self.assertContains(resp, '<h2>%s</h2>' % self.repo.name)
|
||||||
|
|
||||||
|
def test_cannot_render_enc_repo(self):
|
||||||
|
share_file_info = {
|
||||||
|
'username': 'test@test.com',
|
||||||
|
'repo_id': self.enc_repo.id,
|
||||||
|
'path': '/',
|
||||||
|
'password': None,
|
||||||
|
'expire_date': None,
|
||||||
|
}
|
||||||
|
fs = FileShare.objects.create_dir_link(**share_file_info)
|
||||||
|
resp = self.client.get(
|
||||||
|
reverse('view_shared_dir', args=[fs.token])
|
||||||
|
)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
self.assertTemplateUsed(resp, 'error.html')
|
||||||
|
|
||||||
def test_view_raw_file_via_shared_dir(self):
|
def test_view_raw_file_via_shared_dir(self):
|
||||||
resp = self.client.get(
|
resp = self.client.get(
|
||||||
reverse('view_file_via_shared_dir', args=[self.fs.token]) + '?p=' + self.file + '&raw=1'
|
reverse('view_file_via_shared_dir', args=[self.fs.token]) + '?p=' + self.file + '&raw=1'
|
Reference in New Issue
Block a user