From a5f6120a5f368e5bd592c7596577b3fc096957aa Mon Sep 17 00:00:00 2001 From: gnehzuil Date: Sat, 22 Jun 2013 19:48:55 +0800 Subject: [PATCH 1/2] Add create/delete repo api for web api. --- seahub/api2/urls.py | 2 +- seahub/api2/views.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/seahub/api2/urls.py b/seahub/api2/urls.py index 991319d08a..04ad162904 100644 --- a/seahub/api2/urls.py +++ b/seahub/api2/urls.py @@ -10,7 +10,7 @@ urlpatterns = patterns('', # RESTful API url(r'^account/info/$', Account.as_view()), - url(r'^repos/$', Repos.as_view()), + url(r'^repos/$', Repos.as_view(), name="Repos"), url(r'^repos/(?P[-0-9a-f]{36})/$', Repo.as_view()), url(r'^repos/(?P[-0-9a-f]{36})/download-info/$', DownloadRepo.as_view()), url(r'^repos/(?P[-0-9a-f]{36})/upload-link/$', UploadLinkView.as_view()), diff --git a/seahub/api2/views.py b/seahub/api2/views.py index 60fa5f8076..0f4edac6bd 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -206,6 +206,32 @@ class Repos(APIView): return Response(repos_json) + def post(self, request, format=None): + username = request.user.username + repo_name = request.POST.get("name", None) + repo_desc= request.POST.get("desc", 'new repo') + passwd = request.POST.get("passwd") + if not repo_name: + return api_error(status.HTTP_400_BAD_REQUEST, \ + 'Please write repo name.') + + # create a repo + try: + repo_id = seafserv_threaded_rpc.create_repo(repo_name, repo_desc, + username, passwd) + except: + return api_error(status.HTTP_520_OPERATION_FAILED, \ + 'Failed to create library.') + if not repo_id: + return api_error(status.HTTP_520_BAD_REQUEST, \ + 'Failed to create library.') + else: + resp = Response('success', status=status.HTTP_201_CREATED) + uri = reverse('Repos') + resp['Location'] = uri + repo_id + '/' + return resp + + def can_access_repo(request, repo_id): if not check_permission(repo_id, request.user.username): return False @@ -302,6 +328,19 @@ class Repo(APIView): return Response("unsupported operation") + def delete(self, request, repo_id, format=None): + username = request.user.username + repo = get_repo(repo_id) + if not repo: + return api_error(status.HTTP_400_BAD_REQUEST, \ + 'Library does not exist.') + if not can_access_repo(request, repo_id): + return api_error(status.HTTP_400_BAD_REQUEST, \ + 'You can not access this repo.') + print username, repo_id + seafile_api.remove_repo(repo_id) + return Response('success', status=status.HTTP_200_OK) + class DownloadRepo(APIView): authentication_classes = (TokenAuthentication, ) permission_classes = (IsAuthenticated, IsRepoAccessible, ) From 85dcc522ce3a7fdd366861447e1316f449342aa8 Mon Sep 17 00:00:00 2001 From: zhengxie Date: Sat, 29 Jun 2013 11:01:28 +0800 Subject: [PATCH 2/2] [api2] Fixed add/delete repo bug --- seahub/api2/urls.py | 4 ++-- seahub/api2/views.py | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/seahub/api2/urls.py b/seahub/api2/urls.py index 04ad162904..c749e1d85d 100644 --- a/seahub/api2/urls.py +++ b/seahub/api2/urls.py @@ -10,8 +10,8 @@ urlpatterns = patterns('', # RESTful API url(r'^account/info/$', Account.as_view()), - url(r'^repos/$', Repos.as_view(), name="Repos"), - url(r'^repos/(?P[-0-9a-f]{36})/$', Repo.as_view()), + url(r'^repos/$', Repos.as_view(), name="api2-repos"), + url(r'^repos/(?P[-0-9a-f]{36})/$', Repo.as_view(), name="api2-repo"), url(r'^repos/(?P[-0-9a-f]{36})/download-info/$', DownloadRepo.as_view()), url(r'^repos/(?P[-0-9a-f]{36})/upload-link/$', UploadLinkView.as_view()), url(r'^repos/(?P[-0-9a-f]{36})/update-link/$', UpdateLinkView.as_view()), diff --git a/seahub/api2/views.py b/seahub/api2/views.py index 0f4edac6bd..99596c8d18 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -213,8 +213,8 @@ class Repos(APIView): passwd = request.POST.get("passwd") if not repo_name: return api_error(status.HTTP_400_BAD_REQUEST, \ - 'Please write repo name.') - + 'Library name is required.') + # create a repo try: repo_id = seafserv_threaded_rpc.create_repo(repo_name, repo_desc, @@ -223,12 +223,11 @@ class Repos(APIView): return api_error(status.HTTP_520_OPERATION_FAILED, \ 'Failed to create library.') if not repo_id: - return api_error(status.HTTP_520_BAD_REQUEST, \ + return api_error(status.HTTP_520_OPERATION_FAILED, \ 'Failed to create library.') else: resp = Response('success', status=status.HTTP_201_CREATED) - uri = reverse('Repos') - resp['Location'] = uri + repo_id + '/' + resp['Location'] = reverse('api2-repo', args=[repo_id]) return resp @@ -330,14 +329,15 @@ class Repo(APIView): def delete(self, request, repo_id, format=None): username = request.user.username - repo = get_repo(repo_id) + repo = seafile_api.get_repo(repo_id) if not repo: return api_error(status.HTTP_400_BAD_REQUEST, \ 'Library does not exist.') - if not can_access_repo(request, repo_id): - return api_error(status.HTTP_400_BAD_REQUEST, \ - 'You can not access this repo.') - print username, repo_id + + if not seafile_api.is_repo_owner(username, repo_id): + return api_error(status.HTTP_403_FORBIDDEN, \ + 'Only library owner can perform this operation.') + seafile_api.remove_repo(repo_id) return Response('success', status=status.HTTP_200_OK)