1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-07-04 10:46:58 +00:00
seahub/tests/api/endpoints/test_via_repo_token.py
2020-07-27 14:59:18 +08:00

133 lines
5.1 KiB
Python

from _sha1 import sha1
import hmac
import os
import json
import uuid
from django.urls import reverse
from seahub.repo_api_tokens.models import RepoAPITokens
from seahub.test_utils import BaseTestCase
class ViaRepoDirTest(BaseTestCase):
def _create_repo_api_token_obj(self, app_name, permission):
username = self.user.username
return RepoAPITokens.objects.create_token(app_name, self.repo_id, username, permission=permission)
def setUp(self):
self.login_as(self.user)
self.repo_id = self.repo.id
self.file_path = self.file
self.file_name = os.path.basename(self.file_path.rstrip('/'))
self.folder_path = self.folder
self.folder_name = os.path.basename(self.folder_path)
self.r_app_name, permission = 'app_name', 'r'
self.repo_r_api_token_obj = self._create_repo_api_token_obj(self.r_app_name, permission)
self.rw_app_name, permission = 'rw_app_name', 'rw'
self.repo_rw_api_token_obj = self._create_repo_api_token_obj(self.rw_app_name, permission)
self.url = reverse('via-repo-dir')
self.logout()
def tearDown(self):
RepoAPITokens.objects.filter(repo_id=self.repo_id).delete()
self.remove_repo(self.repo_id)
def test_read_repo_from_valid_token(self):
headers = {'HTTP_AUTHORIZATION': 'token ' + self.repo_r_api_token_obj.token}
resp = self.client.get(self.url, **headers)
json_resp = json.loads(resp.content)
self.assertEqual(200, resp.status_code)
assert len(json_resp['dirent_list']) == 2
assert self.folder_name == json_resp['dirent_list'][0]['name']
assert self.file_name == json_resp['dirent_list'][1]['name']
assert len(json_resp['dirent_list'][1]['modifier_name']) > 0
assert len(json_resp['dirent_list'][1]['modifier_contact_email']) > 0
def test_read_repo_from_invalid_token(self):
unique = str(uuid.uuid4())
token = hmac.new(unique.encode('utf-8'), digestmod=sha1).hexdigest()
headers = {'HTTP_AUTHORIZATION': 'token ' + token}
resp = self.client.get(self.url, **headers)
assert resp.status_code in (401, 403)
def test_mkdir_repo_from_valid_r_token(self):
data = {
'operation': 'mkdir',
}
headers = {'HTTP_AUTHORIZATION': 'token ' + self.repo_r_api_token_obj.token}
url = self.url + '?path=/new'
resp = self.client.post(url, data=data, **headers)
self.assertEqual(403, resp.status_code)
def test_mkdir_repo_from_valid_rw_token(self):
data = {
'operation': 'mkdir',
}
headers = {'HTTP_AUTHORIZATION': 'token ' + self.repo_rw_api_token_obj.token}
url = self.url + '?path=/new'
resp = self.client.post(url, data=data, **headers)
self.assertEqual(200, resp.status_code)
class ViaUploadLinkTest(BaseTestCase):
def _create_repo_api_token_obj(self, app_name, permission):
username = self.user.username
return RepoAPITokens.objects.create_token(app_name, self.repo_id, username, permission=permission)
def setUp(self):
self.login_as(self.user)
repo_id = self.create_repo(name='test-repo',
desc='',
username=self.user.username,
passwd=None)
self.repo_id = repo_id
self.folder_name = os.path.basename(self.create_folder(repo_id=self.repo_id,
parent_dir='/',
dirname='folder',
username='test@test.com'))
self.file_name = os.path.basename(self.create_file(repo_id=self.repo_id,
parent_dir='/',
filename='test.txt',
username='test@test.com'))
self.r_app_name, permission = 'app_name', 'r'
self.repo_r_api_token_obj = self._create_repo_api_token_obj(self.r_app_name, permission)
self.rw_app_name, permission = 'rw_app_name', 'rw'
self.repo_rw_api_token_obj = self._create_repo_api_token_obj(self.rw_app_name, permission)
self.url = reverse('via-upload-link')
self.logout()
def tearDown(self):
RepoAPITokens.objects.filter(repo_id=self.repo_id).delete()
self.remove_repo(self.repo_id)
def test_get_upload_link_from_r_token(self):
data = {
'path': '/',
}
headers = {'HTTP_AUTHORIZATION': 'token ' + self.repo_r_api_token_obj.token}
resp = self.client.get(self.url, data=data, **headers)
self.assertEqual(403, resp.status_code)
def test_get_upload_link_from_rw_token(self):
data = {
'path': '/',
}
headers = {'HTTP_AUTHORIZATION': 'token ' + self.repo_rw_api_token_obj.token}
resp = self.client.get(self.url, data=data, **headers)
self.assertEqual(200, resp.status_code)
assert resp.content