mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-02 07:47:32 +00:00
rm update dtable api (#3992)
This commit is contained in:
parent
cb693a843d
commit
b8b0aa1451
@ -18,13 +18,11 @@ from seaserv import seafile_api, ccnet_api
|
||||
from seahub.api2.authentication import TokenAuthentication
|
||||
from seahub.api2.throttling import UserRateThrottle
|
||||
from seahub.api2.utils import api_error
|
||||
from seahub.api2.views import get_repo_file
|
||||
from seahub.dtable.models import Workspaces, DTables
|
||||
from seahub.base.templatetags.seahub_tags import email2nickname
|
||||
from seahub.group.utils import group_id_to_name
|
||||
from seahub.utils import is_valid_dirent_name, is_org_context, normalize_file_path, \
|
||||
check_filename_with_rename, gen_file_upload_url
|
||||
from seahub.views.file import send_file_access_msg
|
||||
from seahub.settings import MAX_UPLOAD_FILE_NAME_LEN, DTABLE_PRIVATE_KEY
|
||||
from seahub.dtable.utils import check_dtable_share_permission, check_dtable_permission
|
||||
from seahub.constants import PERMISSION_ADMIN, PERMISSION_READ_WRITE
|
||||
@ -237,64 +235,6 @@ class DTableView(APIView):
|
||||
permission_classes = (IsAuthenticated, )
|
||||
throttle_classes = (UserRateThrottle, )
|
||||
|
||||
def get(self, request, workspace_id):
|
||||
"""view table file, get table download link
|
||||
|
||||
Permission:
|
||||
1. owner
|
||||
2. group member
|
||||
3. shared user
|
||||
"""
|
||||
# argument check
|
||||
table_name = request.GET.get('name', None)
|
||||
if not table_name:
|
||||
error_msg = 'name invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
reuse = request.GET.get('reuse', '0')
|
||||
if reuse not in ('1', '0'):
|
||||
error_msg = 'reuse invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
# resource check
|
||||
workspace = Workspaces.objects.get_workspace_by_id(workspace_id)
|
||||
if not workspace:
|
||||
error_msg = 'Workspace %s not found.' % workspace_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
repo_id = workspace.repo_id
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
error_msg = 'Library %s not found.' % repo_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
dtable = DTables.objects.get_dtable(workspace, table_name)
|
||||
if not dtable:
|
||||
error_msg = 'dtable %s not found.' % table_name
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
table_file_name = table_name + FILE_TYPE
|
||||
table_path = normalize_file_path(table_file_name)
|
||||
table_file_id = seafile_api.get_file_id_by_path(repo_id, table_path)
|
||||
if not table_file_id:
|
||||
error_msg = 'file %s not found.' % table_file_name
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
# permission check
|
||||
username = request.user.username
|
||||
owner = workspace.owner
|
||||
if not check_dtable_permission(username, owner) and \
|
||||
not check_dtable_share_permission(dtable, username):
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
# send stats message
|
||||
send_file_access_msg(request, repo, table_path, 'api')
|
||||
|
||||
op = request.GET.get('op', 'download')
|
||||
use_onetime = False if reuse == '1' else True
|
||||
return get_repo_file(request, repo_id, table_file_id, table_file_name, op, use_onetime)
|
||||
|
||||
def put(self, request, workspace_id):
|
||||
"""rename a table
|
||||
|
||||
@ -460,66 +400,6 @@ class DTableView(APIView):
|
||||
return Response({'success': True}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class DTableUpdateLinkView(APIView):
|
||||
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
|
||||
def get(self, request, workspace_id):
|
||||
"""get table file update link
|
||||
|
||||
Permission:
|
||||
1. owner
|
||||
2. group member
|
||||
3. shared user with `rw` or `admin` permission
|
||||
"""
|
||||
# argument check
|
||||
table_name = request.GET.get('name', None)
|
||||
if not table_name:
|
||||
error_msg = 'name invalid.'
|
||||
return api_error(status.HTTP_400_BAD_REQUEST, error_msg)
|
||||
|
||||
# resource check
|
||||
workspace = Workspaces.objects.get_workspace_by_id(workspace_id)
|
||||
if not workspace:
|
||||
error_msg = 'Workspace %s not found.' % workspace_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
repo_id = workspace.repo_id
|
||||
repo = seafile_api.get_repo(repo_id)
|
||||
if not repo:
|
||||
error_msg = 'Library %s not found.' % repo_id
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
dtable = DTables.objects.get_dtable(workspace, table_name)
|
||||
if not dtable:
|
||||
error_msg = 'dtable %s not found.' % table_name
|
||||
return api_error(status.HTTP_404_NOT_FOUND, error_msg)
|
||||
|
||||
# permission check
|
||||
username = request.user.username
|
||||
owner = workspace.owner
|
||||
if not check_dtable_permission(username, owner) and \
|
||||
check_dtable_share_permission(dtable, username) not in WRITE_PERMISSION_TUPLE:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
try:
|
||||
token = seafile_api.get_fileserver_access_token(repo_id, 'dummy', 'update',
|
||||
username, use_onetime=False)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
dtable.modifier = username
|
||||
dtable.save()
|
||||
|
||||
url = gen_file_upload_url(token, 'update-api')
|
||||
return Response(url)
|
||||
|
||||
|
||||
class DTableAssetUploadLinkView(APIView):
|
||||
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
|
@ -8,7 +8,7 @@ from seaserv import seafile_api
|
||||
|
||||
from seahub.dtable.models import Workspaces, DTables
|
||||
from seahub.utils import normalize_file_path, render_error, render_permission_error, \
|
||||
gen_file_get_url, get_file_type_and_ext, IMAGE
|
||||
gen_file_get_url
|
||||
from seahub.auth.decorators import login_required
|
||||
from seahub.settings import SHARE_LINK_EXPIRE_DAYS_MIN, SHARE_LINK_EXPIRE_DAYS_MAX, \
|
||||
SHARE_LINK_EXPIRE_DAYS_DEFAULT, DTABLE_SERVER_URL, SEAFILE_COLLAB_SERVER, MEDIA_URL
|
||||
|
@ -91,7 +91,7 @@ from seahub.api2.endpoints.starred_items import StarredItems
|
||||
from seahub.api2.endpoints.markdown_lint import MarkdownLintView
|
||||
from seahub.api2.endpoints.public_repos_search import PublishedRepoSearchView
|
||||
from seahub.api2.endpoints.dtable import WorkspacesView, DTableView, DTablesView, \
|
||||
DTableUpdateLinkView, DTableAssetUploadLinkView, DTableAccessTokenView
|
||||
DTableAssetUploadLinkView, DTableAccessTokenView
|
||||
from seahub.api2.endpoints.dtable_share import SharedDTablesView, DTableShareView
|
||||
from seahub.api2.endpoints.dtable_related_users import DTableRelatedUsersView
|
||||
from seahub.api2.endpoints.recent_added_files import RecentAddedFilesView
|
||||
@ -379,7 +379,6 @@ urlpatterns = [
|
||||
url(r'^api/v2.1/workspaces/$', WorkspacesView.as_view(), name='api-v2.1-workspaces'),
|
||||
url(r'^api/v2.1/dtables/$', DTablesView.as_view(), name='api-v2.1-dtables'),
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable/$', DTableView.as_view(), name='api-v2.1-workspace-dtable'),
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable-update-link/$', DTableUpdateLinkView.as_view(), name='api-v2.1-workspace-dtable-update-link'),
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable-asset-upload-link/$', DTableAssetUploadLinkView.as_view(), name='api-v2.1-workspace-dtable-asset-upload-link'),
|
||||
url(r'^api/v2.1/dtables/shared/$', SharedDTablesView.as_view(), name='api-v2.1-dtables-share'),
|
||||
url(r'^api/v2.1/workspace/(?P<workspace_id>\d+)/dtable/(?P<name>.*)/share/$', DTableShareView.as_view(), name='api-v2.1-dtable-share'),
|
||||
|
Loading…
Reference in New Issue
Block a user