1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-12 13:24:52 +00:00

Merge pull request #1985 from haiwen/fs-encrepo

Fix shared link in enc repo and update tests
This commit is contained in:
xiez
2018-01-29 10:43:26 +08:00
committed by GitHub
6 changed files with 66 additions and 3 deletions

View File

@@ -226,6 +226,10 @@ class ShareLinks(APIView):
error_msg = 'Library %s not found.' % repo_id
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:
obj_id, s_type = self._generate_obj_id_and_type_by_path(repo_id, path)
except SearpcError as e:

View File

@@ -61,6 +61,18 @@ class Fixtures(Exam):
passwd=None))
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
def file(self):
return self.create_file(repo_id=self.repo.id,
@@ -328,6 +340,7 @@ class Fixtures(Exam):
class BaseTestCase(TestCase, Fixtures):
def tearDown(self):
self.remove_repo(self.repo.id)
self.remove_repo(self.enc_repo.id)
def login_as(self, user, password=None):
if isinstance(user, basestring):

View File

@@ -195,6 +195,9 @@ def view_shared_dir(request, fileshare):
if not repo:
raise Http404
if repo.encrypted:
return render_error(request, _(u'Permission denied'))
# Check path still exist, otherwise show error
if not seafile_api.get_dir_id_by_path(repo.id, fileshare.path):
return render_error(request, _('"%s" does not exist.') % fileshare.path)

View File

@@ -1,8 +1,10 @@
# -*- coding: utf-8 -*-
import json
from mock import patch
from mock import patch
from seaserv import seafile_api
from django.core.urlresolvers import reverse
from seahub.test_utils import BaseTestCase
from seahub.share.models import FileShare
from seahub.api2.permissions import CanGenerateShareLink
@@ -103,6 +105,18 @@ class ShareLinksTest(BaseTestCase):
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):
self.login_as(self.user)

View File

@@ -1,17 +1,31 @@
import json
from seaserv import seafile_api
from django.core.urlresolvers import reverse
from seahub.test_utils import BaseTestCase
class GetDirentsTest(BaseTestCase):
def setUp(self):
self.login_as(self.user)
file = self.file
a = self.file # create a file
self.url = reverse('get_dirents', args=[self.repo.id]) + "?path=/"
def test_can_get(self):
self.login_as(self.user)
resp = self.client.get(self.url, HTTP_X_REQUESTED_WITH='XMLHttpRequest')
self.assertEqual(200, resp.status_code)
json_resp = json.loads(resp.content)
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)

View File

@@ -28,6 +28,21 @@ class SharedDirTest(TestCase, Fixtures):
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):
resp = self.client.get(
reverse('view_file_via_shared_dir', args=[self.fs.token]) + '?p=' + self.file + '&raw=1'