diff --git a/api2/serializers.py b/api2/serializers.py index b73cfd5c28..7d9a8aa84c 100644 --- a/api2/serializers.py +++ b/api2/serializers.py @@ -9,7 +9,7 @@ class AuthTokenSerializer(serializers.Serializer): def validate(self, attrs): username = attrs.get('username') password = attrs.get('password') - print username, password + if username and password: user = authenticate(username=username, password=password) diff --git a/api2/views.py b/api2/views.py index c1420ab0a6..12627ae51c 100644 --- a/api2/views.py +++ b/api2/views.py @@ -22,11 +22,12 @@ from base.accounts import User from share.models import FileShare from seahub.views import access_to_repo, validate_owner from seahub.utils import gen_file_get_url, gen_token, gen_file_upload_url, \ - check_filename_with_rename, get_starred_files + check_filename_with_rename, get_starred_files, get_ccnetapplet_root, \ + get_ccnet_server_addr_port from pysearpc import SearpcError from seaserv import seafserv_rpc, seafserv_threaded_rpc, \ - get_personal_groups_by_user, \ + get_personal_groups_by_user, get_session_info, get_repo_token_nonnull, \ get_group_repos, get_repo, check_permission, get_commits json_content_type = 'application/json; charset=utf-8' @@ -40,6 +41,9 @@ class Ping(APIView): def get(self, request, format=None): return Response('pong') + def head(self, request, format=None): + return Response(headers={'foo': 'bar',}) + class AuthPing(APIView): """ Returns a simple `pong` message when client provided an auth token. @@ -229,6 +233,10 @@ class Repo(APIView): authentication_classes = (TokenAuthentication, ) permission_classes = (IsAuthenticated,) + def head(self, request, repo_id, format=None): + # TODO + assert False + def get(self, request, repo_id, format=None): # check whether user can view repo repo = get_repo(repo_id) @@ -252,6 +260,21 @@ class Repo(APIView): # query repo infomation repo.size = seafserv_threaded_rpc.server_repo_size(repo_id) current_commit = get_commits(repo_id, 0, 1)[0] + + # generate download url for client + ccnet_applet_root = get_ccnetapplet_root() + relay_id = get_session_info().id + addr, port = get_ccnet_server_addr_port () + email = quote(request.user.username) + token = get_repo_token_nonnull(repo_id, request.user.username) + quote_repo_name = quote(repo.name.encode('utf-8')) + enc = 1 if repo.encrypted else '' + + url = ccnet_applet_root + "/repo/download/" + url += "?relay_id=%s&relay_addr=%s&relay_port=%s" % (relay_id, addr, port) + url += "&email=%s&token=%s" % (email, token) + url += "&repo_id=%s&repo_name=%s&encrypted=%s" % (repo_id, quote_repo_name, enc) + repo_json = { "type":"repo", "id":repo.id, @@ -263,6 +286,7 @@ class Repo(APIView): "encrypted":repo.encrypted, "root":current_commit.root_id, "password_need":repo.password_need, + "download_url": url, } return Response(repo_json) @@ -604,7 +628,7 @@ class OpMoveView(APIView): dst_dir = unquote(request.POST.get('dst_dir')).decode('utf-8') op = request.POST.get('operation') obj_names = request.POST.get('obj_names') - print src_repo_id, dst_repo_id, src_dir, dst_dir, op, obj_names + if not (src_repo_id and src_dir and dst_repo_id \ and dst_dir and op and obj_names): return api_error('400') diff --git a/thirdpart/seaserv/__init__.py b/thirdpart/seaserv/__init__.py index 87b29500fe..b821b75186 100644 --- a/thirdpart/seaserv/__init__.py +++ b/thirdpart/seaserv/__init__.py @@ -3,7 +3,7 @@ import service from service import ccnet_rpc, monitor_rpc, seafserv_rpc, \ seafserv_threaded_rpc, ccnet_threaded_rpc from service import send_command, check_quota, web_get_access_token, unset_repo_passwd -from service import get_emailusers +from service import get_emailusers, get_session_info from service import get_org_groups, get_personal_groups_by_user, \ get_group_repoids, get_personal_groups, \ check_group_staff, remove_group_user, get_group, get_org_id_by_group, \ @@ -15,7 +15,7 @@ from service import get_repos, get_repo, get_commits, get_branches, remove_repo, list_org_inner_pub_repos, get_org_id_by_repo_id, list_org_shared_repos, \ list_personal_shared_repos, is_personal_repo, list_inner_pub_repos, \ is_org_repo_owner, get_org_repo_owner, is_org_repo, get_file_size,\ - list_personal_repos_by_owner + list_personal_repos_by_owner, get_repo_token_nonnull from service import get_binding_peerids, is_valid_filename, check_permission,\ is_passwd_set diff --git a/thirdpart/seaserv/service.py b/thirdpart/seaserv/service.py index 064ce226a1..9b307e5cb3 100644 --- a/thirdpart/seaserv/service.py +++ b/thirdpart/seaserv/service.py @@ -97,6 +97,9 @@ def get_emailusers(start, limit): users = [] return users +def get_session_info(): + return ccnet_rpc.get_session_info() + # group def get_group(group_id): group_id_int = int(group_id) @@ -308,6 +311,9 @@ def list_personal_repos_by_owner(owner): except SearpcError: repos = [] return repos + +def get_repo_token_nonnull(repo_id, username): + return seafserv_threaded_rpc.get_repo_token_nonnull (repo_id, username) def is_repo_owner(user, repo_id): """ diff --git a/views.py b/views.py index 1958d20850..4e134a6225 100644 --- a/views.py +++ b/views.py @@ -43,7 +43,8 @@ from seaserv import ccnet_rpc, ccnet_threaded_rpc, get_repos, get_emailusers, \ list_personal_shared_repos, is_org_group, get_org_id_by_group, is_org_repo,\ list_inner_pub_repos, get_org_groups_by_repo, is_org_repo_owner, \ get_org_repo_owner, is_passwd_set, get_file_size, check_quota, \ - get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff + get_related_users_by_repo, get_related_users_by_org_repo, HtmlDiff, \ + get_session_info from pysearpc import SearpcError from signals import repo_created, repo_deleted @@ -1608,7 +1609,7 @@ def repo_download(request): enc = '1' else: enc = '' - relay_id = ccnet_rpc.get_session_info().id + relay_id = get_session_info().id if not relay_id: return render_to_response('error.html', { "error_msg": _(u"Failed to download library, unable to find servre")